mirror of https://github.com/buggins/dlangui.git
toggle comment support
This commit is contained in:
parent
f99985623c
commit
44728bdb61
|
|
@ -23,6 +23,7 @@ import dlangui.core.collections;
|
||||||
import dlangui.core.linestream;
|
import dlangui.core.linestream;
|
||||||
import std.algorithm;
|
import std.algorithm;
|
||||||
import std.stream;
|
import std.stream;
|
||||||
|
import std.conv : to;
|
||||||
|
|
||||||
// uncomment FileFormats debug symbol to dump file formats for loaded/saved files.
|
// uncomment FileFormats debug symbol to dump file formats for loaded/saved files.
|
||||||
//debug = FileFormats;
|
//debug = FileFormats;
|
||||||
|
|
@ -172,6 +173,12 @@ struct TextPosition {
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
inout bool opEquals(ref inout TextPosition v) {
|
||||||
|
return line == v.line && pos == v.pos;
|
||||||
|
}
|
||||||
|
@property string toString() {
|
||||||
|
return to!string(line) ~ ":" ~ to!string(pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// text content range
|
/// text content range
|
||||||
|
|
@ -190,6 +197,9 @@ struct TextRange {
|
||||||
@property int lines() const {
|
@property int lines() const {
|
||||||
return end.line - start.line + 1;
|
return end.line - start.line + 1;
|
||||||
}
|
}
|
||||||
|
@property string toString() {
|
||||||
|
return "[" ~ start.toString ~ ":" ~ end.toString ~ "]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// action performed with editable contents
|
/// action performed with editable contents
|
||||||
|
|
@ -398,7 +408,10 @@ interface EditableContentListener {
|
||||||
void onContentChange(EditableContent content, EditOperation operation, ref TextRange rangeBefore, ref TextRange rangeAfter, Object source);
|
void onContentChange(EditableContent content, EditOperation operation, ref TextRange rangeBefore, ref TextRange rangeAfter, Object source);
|
||||||
}
|
}
|
||||||
|
|
||||||
alias TokenPropString = ubyte[];
|
/// TokenCategory holder
|
||||||
|
alias TokenProp = ubyte;
|
||||||
|
/// TokenCategory string
|
||||||
|
alias TokenPropString = TokenProp[];
|
||||||
|
|
||||||
/// interface for custom syntax highlight
|
/// interface for custom syntax highlight
|
||||||
interface SyntaxHighlighter {
|
interface SyntaxHighlighter {
|
||||||
|
|
@ -469,6 +482,10 @@ class EditableContent {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property const(dstring[]) lines() {
|
||||||
|
return _lines;
|
||||||
|
}
|
||||||
|
|
||||||
/// returns true if content has syntax highlight handler set
|
/// returns true if content has syntax highlight handler set
|
||||||
@property bool hasSyntaxHighlight() {
|
@property bool hasSyntaxHighlight() {
|
||||||
return _syntaxHighlighter !is null;
|
return _syntaxHighlighter !is null;
|
||||||
|
|
@ -647,6 +664,16 @@ class EditableContent {
|
||||||
return index >= 0 && index < _tokenProps.length ? _tokenProps[index] : null;
|
return index >= 0 && index < _tokenProps.length ? _tokenProps[index] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// returns token properties character position
|
||||||
|
TokenProp tokenProp(TextPosition p) {
|
||||||
|
return p.line >= 0 && p.line < _tokenProps.length && p.pos >= 0 && p.pos < _tokenProps[p.line].length ? _tokenProps[p.line][p.pos] : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// returns position for end of last line
|
||||||
|
TextPosition endOfFile() {
|
||||||
|
return TextPosition(cast(int)_lines.length - 1, cast(int)_lines[$-1].length);
|
||||||
|
}
|
||||||
|
|
||||||
/// returns access to line edit mark by line index (0 based)
|
/// returns access to line edit mark by line index (0 based)
|
||||||
ref EditStateMark editMark(int index) {
|
ref EditStateMark editMark(int index) {
|
||||||
assert (index >= 0 && index < _editMarks.length);
|
assert (index >= 0 && index < _editMarks.length);
|
||||||
|
|
@ -665,6 +692,19 @@ class EditableContent {
|
||||||
return TextPosition(lineIndex, 0);
|
return TextPosition(lineIndex, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// returns previous character position
|
||||||
|
TextPosition prevCharPos(TextPosition p) {
|
||||||
|
for (;;) {
|
||||||
|
if (p.line <= 0)
|
||||||
|
return TextPosition(0, 0);
|
||||||
|
if (p.pos > 0) {
|
||||||
|
p.pos--;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
p = lineEnd(p.line - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// returns text range for whole line lineIndex
|
/// returns text range for whole line lineIndex
|
||||||
TextRange lineRange(int lineIndex) {
|
TextRange lineRange(int lineIndex) {
|
||||||
return TextRange(TextPosition(lineIndex, 0), lineIndex < _lines.length - 1 ? lineBegin(lineIndex + 1) : lineEnd(lineIndex));
|
return TextRange(TextPosition(lineIndex, 0), lineIndex < _lines.length - 1 ? lineBegin(lineIndex + 1) : lineEnd(lineIndex));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue