mirror of https://github.com/buggins/dlangide.git
refactoring
This commit is contained in:
parent
a788369925
commit
84f7fdc0f9
|
@ -201,8 +201,9 @@
|
||||||
<Folder name="dlangide">
|
<Folder name="dlangide">
|
||||||
<Folder name="ui">
|
<Folder name="ui">
|
||||||
<File path="src\dlangide\ui\commands.d" />
|
<File path="src\dlangide\ui\commands.d" />
|
||||||
|
<File path="src\dlangide\ui\dsourceedit.d" />
|
||||||
<File path="src\dlangide\ui\frame.d" />
|
<File path="src\dlangide\ui\frame.d" />
|
||||||
<File path="outputpanel.d" />
|
<File path="src\dlangide\ui\outputpanel.d" />
|
||||||
<File path="src\dlangide\ui\wspanel.d" />
|
<File path="src\dlangide\ui\wspanel.d" />
|
||||||
</Folder>
|
</Folder>
|
||||||
<Folder name="workspace">
|
<Folder name="workspace">
|
||||||
|
|
|
@ -0,0 +1,161 @@
|
||||||
|
module dlangide.ui.dsourceedit;
|
||||||
|
|
||||||
|
/// DIDE source file editor
|
||||||
|
class DSourceEdit : SourceEdit {
|
||||||
|
this(string ID) {
|
||||||
|
super(ID);
|
||||||
|
styleId = null;
|
||||||
|
backgroundColor = 0xFFFFFF;
|
||||||
|
setTokenHightlightColor(TokenCategory.Comment, 0x008000); // green
|
||||||
|
setTokenHightlightColor(TokenCategory.Keyword, 0x0000FF); // blue
|
||||||
|
setTokenHightlightColor(TokenCategory.String, 0xA31515); // brown
|
||||||
|
setTokenHightlightColor(TokenCategory.Character, 0xA31515); // brown
|
||||||
|
setTokenHightlightColor(TokenCategory.Error, 0xFF0000); // red
|
||||||
|
setTokenHightlightColor(TokenCategory.Comment_Documentation, 0x206000);
|
||||||
|
//setTokenHightlightColor(TokenCategory.Identifier, 0x206000); // no colors
|
||||||
|
}
|
||||||
|
this() {
|
||||||
|
this("SRCEDIT");
|
||||||
|
}
|
||||||
|
protected ProjectSourceFile _projectSourceFile;
|
||||||
|
@property ProjectSourceFile projectSourceFile() { return _projectSourceFile; }
|
||||||
|
/// load by filename
|
||||||
|
override bool load(string fn) {
|
||||||
|
_projectSourceFile = null;
|
||||||
|
bool res = super.load(fn);
|
||||||
|
setHighlighter();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setHighlighter() {
|
||||||
|
if (filename.endsWith(".d") || filename.endsWith(".dd") || filename.endsWith(".dh") || filename.endsWith(".ddoc")) {
|
||||||
|
content.syntaxHighlighter = new SimpleDSyntaxHighlighter(filename);
|
||||||
|
} else {
|
||||||
|
content.syntaxHighlighter = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// load by project item
|
||||||
|
bool load(ProjectSourceFile f) {
|
||||||
|
if (!load(f.filename)) {
|
||||||
|
_projectSourceFile = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_projectSourceFile = f;
|
||||||
|
setHighlighter();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class SimpleDSyntaxHighlighter : SyntaxHighlighter {
|
||||||
|
|
||||||
|
SourceFile _file;
|
||||||
|
ArraySourceLines _lines;
|
||||||
|
Tokenizer _tokenizer;
|
||||||
|
this (string filename) {
|
||||||
|
_file = new SourceFile(filename);
|
||||||
|
_lines = new ArraySourceLines();
|
||||||
|
_tokenizer = new Tokenizer(_lines);
|
||||||
|
_tokenizer.errorTolerant = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TokenPropString[] _props;
|
||||||
|
|
||||||
|
/// categorize characters in content by token types
|
||||||
|
void updateHighlight(dstring[] lines, TokenPropString[] props, int changeStartLine, int changeEndLine) {
|
||||||
|
Log.d("updateHighlight");
|
||||||
|
long ms0 = currentTimeMillis();
|
||||||
|
_props = props;
|
||||||
|
changeStartLine = 0;
|
||||||
|
changeEndLine = lines.length;
|
||||||
|
_lines.init(lines[changeStartLine..$], _file, changeStartLine);
|
||||||
|
_tokenizer.init(_lines);
|
||||||
|
int tokenPos = 0;
|
||||||
|
int tokenLine = 0;
|
||||||
|
ubyte category = 0;
|
||||||
|
try {
|
||||||
|
for (;;) {
|
||||||
|
Token token = _tokenizer.nextToken();
|
||||||
|
if (token is null) {
|
||||||
|
//Log.d("Null token returned");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (token.type == TokenType.EOF) {
|
||||||
|
//Log.d("EOF token");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
uint newPos = token.pos - 1;
|
||||||
|
uint newLine = token.line - 1;
|
||||||
|
|
||||||
|
//Log.d("", token.line, ":", token.pos, "\t", tokenLine + 1, ":", tokenPos + 1, "\t", token.toString);
|
||||||
|
|
||||||
|
// fill with category
|
||||||
|
for (int i = tokenLine; i <= newLine; i++) {
|
||||||
|
int start = i > tokenLine ? 0 : tokenPos;
|
||||||
|
int end = i < newLine ? lines[i].length : newPos;
|
||||||
|
for (int j = start; j < end; j++)
|
||||||
|
_props[i][j] = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle token - convert to category
|
||||||
|
switch(token.type) {
|
||||||
|
case TokenType.COMMENT:
|
||||||
|
category = token.isDocumentationComment ? TokenCategory.Comment_Documentation : TokenCategory.Comment;
|
||||||
|
break;
|
||||||
|
case TokenType.KEYWORD:
|
||||||
|
category = TokenCategory.Keyword;
|
||||||
|
break;
|
||||||
|
case TokenType.IDENTIFIER:
|
||||||
|
category = TokenCategory.Identifier;
|
||||||
|
break;
|
||||||
|
case TokenType.STRING:
|
||||||
|
category = TokenCategory.String;
|
||||||
|
break;
|
||||||
|
case TokenType.CHARACTER:
|
||||||
|
category = TokenCategory.Character;
|
||||||
|
break;
|
||||||
|
case TokenType.INTEGER:
|
||||||
|
category = TokenCategory.Integer;
|
||||||
|
break;
|
||||||
|
case TokenType.FLOAT:
|
||||||
|
category = TokenCategory.Float;
|
||||||
|
break;
|
||||||
|
case TokenType.INVALID:
|
||||||
|
switch (token.invalidTokenType) {
|
||||||
|
case TokenType.IDENTIFIER:
|
||||||
|
category = TokenCategory.Error_InvalidIdentifier;
|
||||||
|
break;
|
||||||
|
case TokenType.STRING:
|
||||||
|
category = TokenCategory.Error_InvalidString;
|
||||||
|
break;
|
||||||
|
case TokenType.COMMENT:
|
||||||
|
category = TokenCategory.Error_InvalidComment;
|
||||||
|
break;
|
||||||
|
case TokenType.FLOAT:
|
||||||
|
case TokenType.INTEGER:
|
||||||
|
category = TokenCategory.Error_InvalidNumber;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
category = TokenCategory.Error;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
category = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tokenPos = newPos;
|
||||||
|
tokenLine= newLine;
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("exception while trying to parse D source", e);
|
||||||
|
}
|
||||||
|
_lines.close();
|
||||||
|
_props = null;
|
||||||
|
Log.d("updateHighlight took ", currentTimeMillis() - ms0, "ms");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -26,163 +26,6 @@ import std.conv;
|
||||||
import std.utf;
|
import std.utf;
|
||||||
import std.algorithm;
|
import std.algorithm;
|
||||||
|
|
||||||
class SimpleDSyntaxHighlighter : SyntaxHighlighter {
|
|
||||||
|
|
||||||
SourceFile _file;
|
|
||||||
ArraySourceLines _lines;
|
|
||||||
Tokenizer _tokenizer;
|
|
||||||
this (string filename) {
|
|
||||||
_file = new SourceFile(filename);
|
|
||||||
_lines = new ArraySourceLines();
|
|
||||||
_tokenizer = new Tokenizer(_lines);
|
|
||||||
_tokenizer.errorTolerant = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
TokenPropString[] _props;
|
|
||||||
|
|
||||||
/// categorize characters in content by token types
|
|
||||||
void updateHighlight(dstring[] lines, TokenPropString[] props, int changeStartLine, int changeEndLine) {
|
|
||||||
Log.d("updateHighlight");
|
|
||||||
long ms0 = currentTimeMillis();
|
|
||||||
_props = props;
|
|
||||||
changeStartLine = 0;
|
|
||||||
changeEndLine = lines.length;
|
|
||||||
_lines.init(lines[changeStartLine..$], _file, changeStartLine);
|
|
||||||
_tokenizer.init(_lines);
|
|
||||||
int tokenPos = 0;
|
|
||||||
int tokenLine = 0;
|
|
||||||
ubyte category = 0;
|
|
||||||
try {
|
|
||||||
for (;;) {
|
|
||||||
Token token = _tokenizer.nextToken();
|
|
||||||
if (token is null) {
|
|
||||||
//Log.d("Null token returned");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (token.type == TokenType.EOF) {
|
|
||||||
//Log.d("EOF token");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
uint newPos = token.pos - 1;
|
|
||||||
uint newLine = token.line - 1;
|
|
||||||
|
|
||||||
//Log.d("", token.line, ":", token.pos, "\t", tokenLine + 1, ":", tokenPos + 1, "\t", token.toString);
|
|
||||||
|
|
||||||
// fill with category
|
|
||||||
for (int i = tokenLine; i <= newLine; i++) {
|
|
||||||
int start = i > tokenLine ? 0 : tokenPos;
|
|
||||||
int end = i < newLine ? lines[i].length : newPos;
|
|
||||||
for (int j = start; j < end; j++)
|
|
||||||
_props[i][j] = category;
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle token - convert to category
|
|
||||||
switch(token.type) {
|
|
||||||
case TokenType.COMMENT:
|
|
||||||
category = token.isDocumentationComment ? TokenCategory.Comment_Documentation : TokenCategory.Comment;
|
|
||||||
break;
|
|
||||||
case TokenType.KEYWORD:
|
|
||||||
category = TokenCategory.Keyword;
|
|
||||||
break;
|
|
||||||
case TokenType.IDENTIFIER:
|
|
||||||
category = TokenCategory.Identifier;
|
|
||||||
break;
|
|
||||||
case TokenType.STRING:
|
|
||||||
category = TokenCategory.String;
|
|
||||||
break;
|
|
||||||
case TokenType.CHARACTER:
|
|
||||||
category = TokenCategory.Character;
|
|
||||||
break;
|
|
||||||
case TokenType.INTEGER:
|
|
||||||
category = TokenCategory.Integer;
|
|
||||||
break;
|
|
||||||
case TokenType.FLOAT:
|
|
||||||
category = TokenCategory.Float;
|
|
||||||
break;
|
|
||||||
case TokenType.INVALID:
|
|
||||||
switch (token.invalidTokenType) {
|
|
||||||
case TokenType.IDENTIFIER:
|
|
||||||
category = TokenCategory.Error_InvalidIdentifier;
|
|
||||||
break;
|
|
||||||
case TokenType.STRING:
|
|
||||||
category = TokenCategory.Error_InvalidString;
|
|
||||||
break;
|
|
||||||
case TokenType.COMMENT:
|
|
||||||
category = TokenCategory.Error_InvalidComment;
|
|
||||||
break;
|
|
||||||
case TokenType.FLOAT:
|
|
||||||
case TokenType.INTEGER:
|
|
||||||
category = TokenCategory.Error_InvalidNumber;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
category = TokenCategory.Error;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
category = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
tokenPos = newPos;
|
|
||||||
tokenLine= newLine;
|
|
||||||
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e("exception while trying to parse D source", e);
|
|
||||||
}
|
|
||||||
_lines.close();
|
|
||||||
_props = null;
|
|
||||||
Log.d("updateHighlight took ", currentTimeMillis() - ms0, "ms");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// DIDE source file editor
|
|
||||||
class DSourceEdit : SourceEdit {
|
|
||||||
this(string ID) {
|
|
||||||
super(ID);
|
|
||||||
styleId = null;
|
|
||||||
backgroundColor = 0xFFFFFF;
|
|
||||||
setTokenHightlightColor(TokenCategory.Comment, 0x008000); // green
|
|
||||||
setTokenHightlightColor(TokenCategory.Keyword, 0x0000FF); // blue
|
|
||||||
setTokenHightlightColor(TokenCategory.String, 0xA31515); // brown
|
|
||||||
setTokenHightlightColor(TokenCategory.Character, 0xA31515); // brown
|
|
||||||
setTokenHightlightColor(TokenCategory.Error, 0xFF0000); // red
|
|
||||||
setTokenHightlightColor(TokenCategory.Comment_Documentation, 0x206000);
|
|
||||||
//setTokenHightlightColor(TokenCategory.Identifier, 0x206000); // no colors
|
|
||||||
}
|
|
||||||
this() {
|
|
||||||
this("SRCEDIT");
|
|
||||||
}
|
|
||||||
protected ProjectSourceFile _projectSourceFile;
|
|
||||||
@property ProjectSourceFile projectSourceFile() { return _projectSourceFile; }
|
|
||||||
/// load by filename
|
|
||||||
override bool load(string fn) {
|
|
||||||
_projectSourceFile = null;
|
|
||||||
bool res = super.load(fn);
|
|
||||||
setHighlighter();
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setHighlighter() {
|
|
||||||
if (filename.endsWith(".d") || filename.endsWith(".dd") || filename.endsWith(".dh") || filename.endsWith(".ddoc")) {
|
|
||||||
content.syntaxHighlighter = new SimpleDSyntaxHighlighter(filename);
|
|
||||||
} else {
|
|
||||||
content.syntaxHighlighter = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// load by project item
|
|
||||||
bool load(ProjectSourceFile f) {
|
|
||||||
if (!load(f.filename)) {
|
|
||||||
_projectSourceFile = null;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_projectSourceFile = f;
|
|
||||||
setHighlighter();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// DIDE app frame
|
/// DIDE app frame
|
||||||
class IDEFrame : AppFrame {
|
class IDEFrame : AppFrame {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue