private SortedSet <Completion> Selected_Completions(bool useCapitals, ISet <AsmTokenType> selectedTypes) { SortedSet <Completion> completions = new SortedSet <Completion>(new CompletionComparer()); //Add the completions of AsmDude directives (such as code folding directives) #region if (Settings.Default.CodeFolding_On) { { string insertionText = Settings.Default.CodeFolding_BeginTag; //the characters that start the outlining region string description = insertionText + " - keyword to start code folding"; completions.Add(new Completion(description, insertionText, null, this._icons[AsmTokenType.Directive], "")); } { string insertionText = Settings.Default.CodeFolding_EndTag; //the characters that end the outlining region string description = insertionText + " - keyword to end code folding"; completions.Add(new Completion(description, insertionText, null, this._icons[AsmTokenType.Directive], "")); } } #endregion AssemblerEnum usedAssember = AsmDudeToolsStatic.Used_Assembler; #region if (selectedTypes.Contains(AsmTokenType.Mnemonic)) { ISet <Arch> selectedArchs = AsmDudeToolsStatic.Get_Arch_Swithed_On(); IList <Mnemonic> allowedMnemonics = Get_Allowed_Mnemonics(selectedArchs); //AsmDudeToolsStatic.Output("INFO: CodeCompletionSource:selectedCompletions; allowedMnemonics.Count=" + allowedMnemonics.Count + "; selectedArchs="+ArchTools.ToString(selectedArchs)); foreach (Mnemonic mnemonic in allowedMnemonics) { string keyword = mnemonic.ToString(); string insertionText = (useCapitals) ? keyword : keyword.ToLower(); string archStr = ArchTools.ToString(this._asmDudeTools.Mnemonic_Store.GetArch(mnemonic)); string descriptionStr = this._asmDudeTools.Mnemonic_Store.GetDescription(mnemonic); descriptionStr = (descriptionStr.Length == 0) ? "" : " - " + descriptionStr; String displayText = keyword + archStr + descriptionStr; //String description = keyword.PadRight(15) + archStr.PadLeft(8) + descriptionStr; this._icons.TryGetValue(AsmTokenType.Mnemonic, out var imageSource); completions.Add(new Completion(displayText, insertionText, null, imageSource, "")); } } //Add the completions that are defined in the xml file foreach (string keyword in this._asmDudeTools.Get_Keywords()) { AsmTokenType type = this._asmDudeTools.Get_Token_Type(keyword); if (selectedTypes.Contains(type)) { Arch arch = Arch.NONE; bool selected = true; if (type == AsmTokenType.Directive) { AssemblerEnum assembler = this._asmDudeTools.Get_Assembler(keyword); if (assembler.HasFlag(AssemblerEnum.MASM)) { if (!usedAssember.HasFlag(AssemblerEnum.MASM)) { selected = false; } } else if (assembler.HasFlag(AssemblerEnum.NASM)) { if (!usedAssember.HasFlag(AssemblerEnum.NASM)) { selected = false; } } } else { arch = this._asmDudeTools.Get_Architecture(keyword); selected = AsmDudeToolsStatic.Is_Arch_Switched_On(arch); } AsmDudeToolsStatic.Output_INFO("CodeCompletionSource:Selected_Completions; keyword=" + keyword + "; arch=" + arch + "; selected=" + selected); if (selected) { //Debug.WriteLine("INFO: CompletionSource:AugmentCompletionSession: name keyword \"" + entry.Key + "\""); // by default, the entry.Key is with capitals string insertionText = (useCapitals) ? keyword : keyword.ToLower(); string archStr = (arch == Arch.NONE) ? "" : " [" + ArchTools.ToString(arch) + "]"; string descriptionStr = this._asmDudeTools.Get_Description(keyword); descriptionStr = (descriptionStr.Length == 0) ? "" : " - " + descriptionStr; String displayText = keyword + archStr + descriptionStr; //String description = keyword.PadRight(15) + archStr.PadLeft(8) + descriptionStr; this._icons.TryGetValue(type, out var imageSource); completions.Add(new Completion(displayText, insertionText, null, imageSource, "")); } } } #endregion return(completions); }
private IEnumerable <Completion> Selected_Completions(bool useCapitals, ISet <AsmTokenType> selectedTypes, bool addSpecialKeywords) { SortedSet <Completion> completions = new SortedSet <Completion>(new CompletionComparer()); //Add the completions of AsmDude directives (such as code folding directives) #region if (addSpecialKeywords && Settings.Default.CodeFolding_On) { this.icons_.TryGetValue(AsmTokenType.Directive, out ImageSource imageSource); { string insertionText = Settings.Default.CodeFolding_BeginTag; //the characters that start the outlining region string displayTextFull = insertionText + " - keyword to start code folding"; string displayText = Truncat(displayTextFull); completions.Add(new Completion(displayText, insertionText, displayTextFull, imageSource, string.Empty)); } { string insertionText = Settings.Default.CodeFolding_EndTag; //the characters that end the outlining region string displayTextFull = insertionText + " - keyword to end code folding"; string displayText = Truncat(displayTextFull); completions.Add(new Completion(displayText, insertionText, displayTextFull, imageSource, string.Empty)); } } #endregion AssemblerEnum usedAssember = AsmDudeToolsStatic.Used_Assembler; #region Add completions if (selectedTypes.Contains(AsmTokenType.Mnemonic)) { this.icons_.TryGetValue(AsmTokenType.Mnemonic, out ImageSource imageSource); foreach (Mnemonic mnemonic in this.asmDudeTools_.Get_Allowed_Mnemonics()) { string keyword_upcase = mnemonic.ToString(); string description = this.asmDudeTools_.Mnemonic_Store.GetSignatures(mnemonic).First().Documentation; string insertionText = useCapitals ? keyword_upcase : keyword_upcase.ToLowerInvariant(); string archStr = ArchTools.ToString(this.asmDudeTools_.Mnemonic_Store.GetArch(mnemonic)); string descriptionStr = this.asmDudeTools_.Mnemonic_Store.GetDescription(mnemonic); descriptionStr = (string.IsNullOrEmpty(descriptionStr)) ? string.Empty : " - " + descriptionStr; string displayText = Truncat(keyword_upcase + archStr + descriptionStr); //String description = keyword.PadRight(15) + archStr.PadLeft(8) + descriptionStr; completions.Add(new Completion(displayText, insertionText, description, imageSource, string.Empty)); } } //Add the completions that are defined in the xml file foreach (string keyword_upcase in this.asmDudeTools_.Get_Keywords()) { AsmTokenType type = this.asmDudeTools_.Get_Token_Type_Intel(keyword_upcase); if (selectedTypes.Contains(type)) { Arch arch = Arch.ARCH_NONE; bool selected = true; if (type == AsmTokenType.Directive) { AssemblerEnum assembler = this.asmDudeTools_.Get_Assembler(keyword_upcase); if (assembler.HasFlag(AssemblerEnum.MASM)) { if (!usedAssember.HasFlag(AssemblerEnum.MASM)) { selected = false; } } else if (assembler.HasFlag(AssemblerEnum.NASM_INTEL) || assembler.HasFlag(AssemblerEnum.NASM_ATT)) { if (!usedAssember.HasFlag(AssemblerEnum.NASM_INTEL)) { selected = false; } } } else { arch = this.asmDudeTools_.Get_Architecture(keyword_upcase); selected = AsmDudeToolsStatic.Is_Arch_Switched_On(arch); } //AsmDudeToolsStatic.Output_INFO("CodeCompletionSource:Selected_Completions; keyword=" + keyword + "; arch=" + arch + "; selected=" + selected); if (selected) { //Debug.WriteLine("INFO: CompletionSource:AugmentCompletionSession: name keyword \"" + entry.Key + "\""); // by default, the entry.Key is with capitals string insertionText = useCapitals ? keyword_upcase : keyword_upcase.ToLowerInvariant(); string archStr = (arch == Arch.ARCH_NONE) ? string.Empty : " [" + ArchTools.ToString(arch) + "]"; string descriptionStr = this.asmDudeTools_.Get_Description(keyword_upcase); descriptionStr = (string.IsNullOrEmpty(descriptionStr)) ? string.Empty : " - " + descriptionStr; string displayTextFull = keyword_upcase + archStr + descriptionStr; string displayText = Truncat(displayTextFull); //String description = keyword.PadRight(15) + archStr.PadLeft(8) + descriptionStr; this.icons_.TryGetValue(type, out ImageSource imageSource); completions.Add(new Completion(displayText, insertionText, displayTextFull, imageSource, string.Empty)); } } } #endregion return(completions); }
private SortedSet <Completion> Mnemonic_Operand_Completions(bool useCapitals, ISet <AsmSignatureEnum> allowedOperands) { SortedSet <Completion> completions = new SortedSet <Completion>(new CompletionComparer()); foreach (string keyword in this._asmDudeTools.Get_Keywords()) { Arch arch = this._asmDudeTools.Get_Architecture(keyword); AsmTokenType type = this._asmDudeTools.Get_Token_Type(keyword); bool selected = AsmDudeToolsStatic.Is_Arch_Switched_On(arch); //AsmDudeToolsStatic.Output("INFO: AsmCompletionSource:mnemonicOperandCompletions; keyword=" + keyword +"; selected="+selected +"; arch="+arch); if (selected) { switch (type) { case AsmTokenType.Register: { //AsmDudeToolsStatic.Output("INFO: AsmCompletionSource:mnemonicOperandCompletions; rn=" + keyword); Rn regName = RegisterTools.ParseRn(keyword); if (AsmSignatureTools.Is_Allowed_Reg(regName, allowedOperands)) { //AsmDudeToolsStatic.Output(string.Format("INFO: AsmCompletionSource:mnemonicOperandCompletions; rn="+ keyword + " is selected")); } else { selected = false; } break; } case AsmTokenType.Misc: { if (AsmSignatureTools.Is_Allowed_Misc(keyword, allowedOperands)) { //AsmDudeToolsStatic.Output(string.Format("INFO: AsmCompletionSource:mnemonicOperandCompletions; rn="+ keyword + " is selected")); } else { selected = false; } break; } default: { selected = false; break; } } } if (selected) { //AsmDudeToolsStatic.Output("INFO: AsmCompletionSource:AugmentCompletionSession: keyword \"" + keyword + "\" is added to the completions list"); // by default, the entry.Key is with capitals string insertionText = (useCapitals) ? keyword : keyword.ToLower(); string archStr = (arch == Arch.NONE) ? "" : " [" + ArchTools.ToString(arch) + "]"; string descriptionStr = this._asmDudeTools.Get_Description(keyword); descriptionStr = (descriptionStr.Length == 0) ? "" : " - " + descriptionStr; String displayText = keyword + archStr + descriptionStr; //String description = keyword.PadRight(15) + archStr.PadLeft(8) + descriptionStr; this._icons.TryGetValue(type, out var imageSource); completions.Add(new Completion(displayText, insertionText, null, imageSource, "")); } } return(completions); }