private void CollectHighlight(ABnfGuess target_guess, ABnfElement element, List <ALanguageHighlightWordInfo> list) { if (element is ALittleScriptPropertyValueCustomTypeElement || element is ALittleScriptVarAssignNameDecElement) { if (element.GetElementText() != m_key) { return; } var error = element.GuessType(out ABnfGuess guess); if (error != null) { return; } if (guess.GetValue() == target_guess.GetValue()) { var info = new ALanguageHighlightWordInfo(); info.start = element.GetStart(); info.end = element.GetEnd(); list.Add(info); } return; } if (element is ABnfNodeElement) { var childs = (element as ABnfNodeElement).GetChilds(); foreach (var child in childs) { CollectHighlight(target_guess, child, list); } } }
private void AnalysisClassificationTag(ABnfElement element, List <ALanguageClassifierInfo> list, bool blur) { if (element is ABnfErrorElement) { return; } var type = element.GetReference().QueryClassificationTag(out bool blur_temp); if (type != null) { for (int line = element.GetStartLine(); line <= element.GetEndLine(); ++line) { var info = new ALanguageClassifierInfo(); info.line = line; info.start = element.GetStart(); info.end = element.GetEnd(); info.blur = blur || blur_temp; info.type = type; list.Add(info); } return; } var node = element as ABnfNodeElement; if (node != null) { foreach (var child in node.GetChilds()) { AnalysisClassificationTag(child, list, blur || blur_temp); } } }
// 高亮标签 public void QueryHighlightWordTag(ABnfElement element, List <ALanguageHighlightWordInfo> info_list) { // 找到对应的配对 string value = element.GetElementText(); if (m_left_pairs.TryGetValue(value, out string right_pair)) { var parent = element.GetParent(); if (parent == null) { return; } // 找到所在的位置 var childs = parent.GetChilds(); int index = childs.IndexOf(element); if (index < 0) { return; } // 往后找到对应的匹配 for (int i = index + 1; i < childs.Count; ++i) { if (childs[i].GetElementText() == right_pair) { var info = new ALanguageHighlightWordInfo(); info.start = element.GetStart(); info.end = element.GetEnd(); info_list.Add(info); info = new ALanguageHighlightWordInfo(); info.start = childs[i].GetStart(); info.end = childs[i].GetEnd(); info_list.Add(info); break; } } return; } // 找到对应的配对 if (m_right_pairs.TryGetValue(value, out string left_pair)) { var parent = element.GetParent(); if (parent == null) { return; } // 找到所在的位置 var childs = parent.GetChilds(); int index = childs.IndexOf(element); if (index < 0) { return; } // 往前找到对应的匹配 for (int i = index - 1; i >= 0; --i) { if (childs[i].GetElementText() == left_pair) { var info = new ALanguageHighlightWordInfo(); info.start = element.GetStart(); info.end = element.GetEnd(); info_list.Add(info); info = new ALanguageHighlightWordInfo(); info.start = childs[i].GetStart(); info.end = childs[i].GetEnd(); info_list.Add(info); break; } } return; } ABnfNodeElement node = element as ABnfNodeElement; if (node == null) { node = element.GetParent(); } if (node == null) { return; } // 找到高亮配对 node.GetReference().QueryHighlightWordTag(info_list); }