📄 languagereader.cs
字号:
Pattern StartP = new Pattern(Start, blnStartIsComplex, false, bool.Parse(StartIsKeyword));
Pattern EndP = null;
if (EscapeChar != "")
{
EndP = new Pattern(End, blnEndIsComplex, false, bool.Parse(EndIsKeyword), EscapeChar);
}
else
{
EndP = new Pattern(End, blnEndIsComplex, false, bool.Parse(EndIsKeyword));
}
if (EndIsSeparator != "")
EndP.IsSeparator = bool.Parse(EndIsSeparator);
scop.Start = StartP;
scop.EndPatterns.Add(EndP);
bl.ScopePatterns.Add(scop);
if (spawnstart != "")
{
scop.SpawnBlockOnStart = GetBlock(spawnstart);
}
if (spawnend != "")
{
scop.SpawnBlockOnEnd = GetBlock(spawnend);
}
}
}
if (n.Name.ToLower() == "bracket")
{
//bool IsComplex=false;
//bool IsSeparator=false;
string Start = "";
string End = "";
string style = "";
string EndIsSeparator = "";
string StartIsSeparator = "";
string StartIsComplex = "false";
string EndIsComplex = "false";
string StartIsKeyword = "false";
string EndIsKeyword = "false";
string IsMultiLineB = "true";
foreach (XmlAttribute att in n.Attributes)
{
if (att.Name.ToLower() == "start")
Start = att.Value;
if (att.Name.ToLower() == "end")
End = att.Value;
if (att.Name.ToLower() == "style")
style = att.Value;
if (att.Name.ToLower() == "endisseparator")
EndIsSeparator = att.Value;
if (att.Name.ToLower() == "startisseparator")
StartIsSeparator = att.Value;
if (att.Name.ToLower() == "startiskeyword")
StartIsKeyword = att.Value;
if (att.Name.ToLower() == "startiscomplex")
StartIsComplex = att.Value;
if (att.Name.ToLower() == "endiscomplex")
EndIsComplex = att.Value;
if (att.Name.ToLower() == "endiskeyword")
EndIsKeyword = att.Value;
if (att.Name.ToLower() == "ismultiline")
IsMultiLineB = att.Value;
}
if (Start != "")
{
PatternList pl = new PatternList();
pl.Style = GetStyle(style);
bool blnStartIsComplex = bool.Parse(StartIsComplex);
bool blnEndIsComplex = bool.Parse(EndIsComplex);
bool blnIsMultiLineB = bool.Parse(IsMultiLineB);
Pattern StartP = new Pattern(Start, blnStartIsComplex, false, bool.Parse(StartIsKeyword));
Pattern EndP = new Pattern(End, blnEndIsComplex, false, bool.Parse(EndIsKeyword));
StartP.MatchingBracket = EndP;
EndP.MatchingBracket = StartP;
StartP.BracketType = BracketType.StartBracket;
EndP.BracketType = BracketType.EndBracket;
StartP.IsMultiLineBracket = EndP.IsMultiLineBracket = blnIsMultiLineB;
pl.Add(StartP);
pl.Add(EndP);
bl.OperatorsList.Add(pl);
}
}
}
if (n.Name.ToLower() == "keywords")
foreach (XmlNode cn in n.ChildNodes)
{
if (cn.Name.ToLower() == "patterngroup")
{
PatternList pl = new PatternList();
bl.KeywordsList.Add(pl);
foreach (XmlAttribute att in cn.Attributes)
{
if (att.Name.ToLower() == "style")
pl.Style = GetStyle(att.Value);
if (att.Name.ToLower() == "name")
pl.Name = att.Value;
if (att.Name.ToLower() == "normalizecase")
pl.NormalizeCase = bool.Parse(att.Value);
if (att.Name.ToLower() == "casesensitive")
pl.CaseSensitive = bool.Parse(att.Value);
}
foreach (XmlNode pt in cn.ChildNodes)
{
if (pt.Name.ToLower() == "pattern")
{
bool IsComplex = false;
bool IsSeparator = false;
string Category = null;
string Pattern = "";
if (pt.Attributes != null)
{
foreach (XmlAttribute att in pt.Attributes)
{
if (att.Name.ToLower() == "text")
Pattern = att.Value;
if (att.Name.ToLower() == "iscomplex")
IsComplex = bool.Parse(att.Value);
if (att.Name.ToLower() == "isseparator")
IsSeparator = bool.Parse(att.Value);
if (att.Name.ToLower() == "category")
Category = (att.Value);
}
}
if (Pattern != "")
{
Pattern pat = new Pattern(Pattern, IsComplex, IsSeparator, true);
pat.Category = Category;
pl.Add(pat);
}
}
else if (pt.Name.ToLower() == "patterns")
{
string Patterns = pt.ChildNodes[0].Value;
Patterns = Patterns.Replace("\t", " ");
while (Patterns.IndexOf(" ") >= 0)
Patterns = Patterns.Replace(" ", " ");
foreach (string Pattern in Patterns.Split())
{
if (Pattern != "")
pl.Add(new Pattern(Pattern, false, false, true));
}
}
}
}
}
//if (n.Name == "Operators")
// ParseStyle(n);
if (n.Name.ToLower() == "operators")
foreach (XmlNode cn in n.ChildNodes)
{
if (cn.Name.ToLower() == "patterngroup")
{
PatternList pl = new PatternList();
bl.OperatorsList.Add(pl);
foreach (XmlAttribute att in cn.Attributes)
{
if (att.Name.ToLower() == "style")
pl.Style = GetStyle(att.Value);
if (att.Name.ToLower() == "name")
pl.Name = att.Value;
if (att.Name.ToLower() == "normalizecase")
pl.NormalizeCase = bool.Parse(att.Value);
if (att.Name.ToLower() == "casesensitive")
pl.CaseSensitive = bool.Parse(att.Value);
}
foreach (XmlNode pt in cn.ChildNodes)
{
if (pt.Name.ToLower() == "pattern")
{
bool IsComplex = false;
bool IsSeparator = false;
string Pattern = "";
string Category = null;
if (pt.Attributes != null)
{
foreach (XmlAttribute att in pt.Attributes)
{
if (att.Name.ToLower() == "text")
Pattern = att.Value;
if (att.Name.ToLower() == "iscomplex")
IsComplex = bool.Parse(att.Value);
if (att.Name.ToLower() == "isseparator")
IsSeparator = bool.Parse(att.Value);
if (att.Name.ToLower() == "category")
Category = (att.Value);
}
}
if (Pattern != "")
{
Pattern pat = new Pattern(Pattern, IsComplex, IsSeparator, false);
pat.Category = Category;
pl.Add(pat);
}
}
else if (pt.Name.ToLower() == "patterns")
{
string Patterns = pt.ChildNodes[0].Value;
Patterns = Patterns.Replace("\t", " ");
while (Patterns.IndexOf(" ") >= 0)
Patterns = Patterns.Replace(" ", " ");
string[] pattSplit = Patterns.Split();
foreach (string Pattern in pattSplit)
{
if (Pattern != "")
pl.Add(new Pattern(Pattern, false, false, false));
}
}
}
}
}
if (n.Name.ToLower() == "childblocks")
{
foreach (XmlNode cn in n.ChildNodes)
{
if (cn.Name.ToLower() == "child")
{
foreach (XmlAttribute att in cn.Attributes)
if (att.Name.ToLower() == "name")
bl.ChildBlocks.Add(GetBlock(att.Value));
}
}
}
}
}
//done
private TextStyle GetStyle(string Name)
{
if (_Styles[Name] == null)
{
TextStyle s = new TextStyle();
_Styles.Add(Name, s);
}
return (TextStyle)_Styles[Name];
}
//done
private BlockType GetBlock(string Name)
{
if (_Blocks[Name] == null)
{
Fireball.Syntax.BlockType b = new Fireball.Syntax.BlockType(_Language);
_Blocks.Add(Name, b);
}
return (BlockType)_Blocks[Name];
}
//done
private void ParseStyle(XmlNode node)
{
string Name = "";
string ForeColor = "", BackColor = "";
bool Bold = false, Italic = false, Underline = false;
foreach (XmlAttribute att in node.Attributes)
{
if (att.Name.ToLower() == "name")
Name = att.Value;
if (att.Name.ToLower() == "forecolor")
ForeColor = att.Value;
if (att.Name.ToLower() == "backcolor")
BackColor = att.Value;
if (att.Name.ToLower() == "bold")
Bold = bool.Parse(att.Value);
if (att.Name.ToLower() == "italic")
Italic = bool.Parse(att.Value);
if (att.Name.ToLower() == "underline")
Underline = bool.Parse(att.Value);
}
TextStyle st = GetStyle(Name);
if (BackColor != "")
{
st.BackColor = Color.FromName(BackColor);
}
else
{
}
st.ForeColor = Color.FromName(ForeColor);
st.Bold = Bold;
st.Italic = Italic;
st.Underline = Underline;
st.Name = Name;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -