/// <summary> /// To call in order to read all the keywords to the private List CompletionItem /// </summary> public void Import() { _keywords = null; // reads keywords _keywordById.Clear(); Utils.ForEachLine(Config.FileKeywordsList, DataResources.KeywordsList, (i, line) => { var items = line.Split('\t'); if (items.Length == 7) { // 0 1 2 3 4 5 // keyword_id keyword minimal_abbreviation keyword_type 0/1_is_reserved integer_initial_ranking // find the KeywordType from items[1] KeywordType keywordType; if (!Enum.TryParse(items[3].Trim(), true, out keywordType)) { keywordType = KeywordType.Unknow; } SciStyleId styleId; if (!Enum.TryParse(items[6].Trim(), true, out styleId)) { styleId = SciStyleId.Default; } // set flags var flag = items[4].Trim() == "1" ? ParseFlag.Reserved : 0; var id = items[0].Trim(); var keyword = items[1].Trim(); var abbr = items[2].Trim(); if (!_keywordById.ContainsKey(id)) { KeywordCompletionItem curKeyword = CompletionItem.Factory.New((int)keywordType < 30 ? CompletionType.Keyword : CompletionType.KeywordObject) as KeywordCompletionItem; if (curKeyword != null) { curKeyword.DisplayText = keyword; curKeyword.Ranking = int.Parse(items[5].Trim()); curKeyword.Flags = flag; curKeyword.KeywordType = keywordType; curKeyword.KeywordSyntaxStyle = styleId; _keywordById.Add(id, curKeyword); } } // add abbreviation? if (!string.IsNullOrEmpty(abbr)) { if (!_keywordById.ContainsKey(abbr)) { KeywordCompletionItem curKeyword = CompletionItem.Factory.New((int)keywordType < 30 ? CompletionType.Keyword : CompletionType.KeywordObject) as KeywordCompletionItem; if (curKeyword != null) { curKeyword.DisplayText = abbr; curKeyword.FullWord = keyword; curKeyword.Ranking = int.Parse(items[5].Trim()); curKeyword.Flags = flag | ParseFlag.Abbreviation; curKeyword.KeywordType = keywordType; curKeyword.KeywordSyntaxStyle = SciStyleId.Abbreviation; _keywordById.Add(abbr, curKeyword); } } } } }, Encoding.Default); // reads keywords rank Utils.ForEachLine(Config.FileKeywordsRank, new byte[0], (i, line) => { var items = line.Split('\t'); if (items.Length == 2 && _keywordById.ContainsKey(items[0])) { int val; if (int.TryParse(items[1], out val)) { _keywordById[items[0]].Ranking = val; } } }, Encoding.Default); // reads keywords help _helpByKey.Clear(); Utils.ForEachLine(Config.FileKeywordsHelp, DataResources.KeywordsHelp, (lineNb, line) => { var items = line.Split('\t'); if (items.Length > 2) { var listSynthax = new List <string>(); for (int i = 2; i < items.Length; i++) { listSynthax.Add(items[i]); } _helpByKey.Add(items[0], new KeywordHelp { Description = items[1], Synthax = listSynthax }); } }, Encoding.Default); // add all the known keywords to a dictionary, adding also all intermediate abbreviations (vara vari varia variabl -> for var) _keywordByName.Clear(); foreach (var keyword in _keywordById.Values.OrderBy(item => item.KeywordType)) { if (!_keywordByName.ContainsKey(keyword.DisplayText)) { _keywordByName.Add(keyword.DisplayText, new List <KeywordCompletionItem> { keyword }); } else { _keywordByName[keyword.DisplayText].Add(keyword); } if (keyword.Flags.HasFlag(ParseFlag.Abbreviation)) { var offset = 1; while (keyword.FullWord.Length - offset > keyword.DisplayText.Length) { var intermediateAbbreviation = keyword.FullWord.Substring(0, keyword.FullWord.Length - offset); if (!_keywordByName.ContainsKey(intermediateAbbreviation)) { _keywordByName.Add(intermediateAbbreviation, new List <KeywordCompletionItem> { keyword }); } else { _keywordByName[intermediateAbbreviation].Add(keyword); } offset++; } } } if (OnImport != null) { OnImport(); } }
/// <summary> /// To call in order to read all the keywords to the private List CompletionItem /// </summary> public void Import() { _keywords = null; // reads keywords _keywordById.Clear(); Utils.ForEachLine(Config.FileKeywordsList, DataResources.KeywordsList, (i, line) => { var items = line.Split('\t'); if (items.Length == 5) { // find the KeywordType from items[1] KeywordType keywordType; if (!Enum.TryParse(items[2], true, out keywordType)) { keywordType = KeywordType.Unknow; } // set flags var flag = (items[3] == "1") ? ParseFlag.Reserved : 0; if (keywordType == KeywordType.Abbreviation) { flag = flag | ParseFlag.Abbreviation; } if (!_keywordById.ContainsKey(items[0])) { KeywordCompletionItem curKeyword = CompletionItem.Factory.New((int)keywordType < 30 ? CompletionType.Keyword : CompletionType.KeywordObject) as KeywordCompletionItem; if (curKeyword != null) { curKeyword.DisplayText = items[1]; curKeyword.Ranking = int.Parse(items[4]); curKeyword.Flags = flag; curKeyword.KeywordType = keywordType; _keywordById.Add(items[0], curKeyword); } } } }, Encoding.Default); // reads keywords rank Utils.ForEachLine(Config.FileKeywordsRank, new byte[0], (i, line) => { var items = line.Split('\t'); if (items.Length == 2 && _keywordById.ContainsKey(items[0])) { int val; if (int.TryParse(items[1], out val)) { _keywordById[items[0]].Ranking = val; } } }, Encoding.Default); // reads abbreviations _abbreviations.Clear(); Utils.ForEachLine(Config.FileAbbrev, DataResources.Abbreviations, (i, line) => { var items = line.Split('\t'); if (items.Length == 2) { _abbreviations.Add(new KeywordAbbreviation { CompleteText = items[1], ShortText = items[0] }); } }, Encoding.Default); // reads keywords help _help.Clear(); Utils.ForEachLine(Config.FileKeywordsHelp, DataResources.KeywordsHelp, (lineNb, line) => { var items = line.Split('\t'); if (items.Count() > 2) { var listSynthax = new List <string>(); for (int i = 2; i < items.Length; i++) { listSynthax.Add(items[i]); } _help.Add(items[0], new KeywordHelp { Description = items[1], Synthax = listSynthax }); } }, Encoding.Default); if (OnImport != null) { OnImport(); } }