Guest User

Untitled

a guest
Jul 3rd, 2025
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using ActiproSoftware.Text;
  4. using ActiproSoftware.Text.Parsing;
  5. using ActiproSoftware.Text.Parsing.LLParser;
  6. using ActiproSoftware.Text.Utility;
  7. using ActiproSoftware.Windows.Controls.SyntaxEditor;
  8. using ActiproSoftware.Windows.Controls.SyntaxEditor.IntelliPrompt;
  9. using ActiproSoftware.Windows.Controls.SyntaxEditor.IntelliPrompt.Implementation;
  10. using ActiproSoftware.ProductSamples.SyntaxEditorSamples.QuickStart.GettingStarted04d; // For AST nodes
  11. using ActiproSoftware.ProductSamples.SyntaxEditorSamples.QuickStart.GettingStarted08; // For context-related types
  12. using ActiproSoftware.ProductSamples.SyntaxEditorSamples.QuickStart.GettingStarted09; // For FunctionContentProvider
  13.  
  14. namespace ActiproSoftware.ProductSamples.SyntaxEditorSamples.QuickStart.GettingStarted10 {
  15.  
  16. /// <summary>
  17. /// Provides IntelliPrompt completion data for the <c>Simple</c> language.
  18. /// </summary>
  19. public class SimpleCompletionProvider : CompletionProviderBase {
  20.  
  21. /////////////////////////////////////////////////////////////////////////////////////////////////////
  22. // OBJECT
  23. /////////////////////////////////////////////////////////////////////////////////////////////////////
  24.  
  25. /// <summary>
  26. /// Initializes a new instance of the <c>SimpleCompletionProvider</c> class.
  27. /// </summary>
  28. public SimpleCompletionProvider() : base("Simple") {}
  29.  
  30. /////////////////////////////////////////////////////////////////////////////////////////////////////
  31. // PUBLIC PROCEDURES
  32. /////////////////////////////////////////////////////////////////////////////////////////////////////
  33.  
  34. /// <summary>
  35. /// Requests that an <see cref="ICompletionSession"/> be opened for the specified <see cref="IEditorView"/>.
  36. /// </summary>
  37. /// <param name="view">The <see cref="IEditorView"/> that will host the session.</param>
  38. /// <param name="canCommitWithoutPopup">Whether the session can immediately commit if a single match is made when the session is opened, commonly known as "complete word" functionality.</param>
  39. /// <returns>
  40. /// <c>true</c> if a session was opened; otherwise, <c>false</c>.
  41. /// </returns>
  42. public override bool RequestSession(IEditorView view, bool canCommitWithoutPopup) {
  43. // Get the context factory service
  44. SimpleContextFactory contextFactory = view.SyntaxEditor.Document.Language.GetService<SimpleContextFactory>();
  45. if (contextFactory != null) {
  46. // Get a context
  47. SimpleContext context = contextFactory.CreateContext(view.Selection.EndSnapshotOffset, false);
  48.  
  49. // Create a session
  50. CompletionSession session = new()
  51. {
  52. CanCommitWithoutPopup = canCommitWithoutPopup,
  53. CanFilterUnmatchedItems = true,
  54. MatchOptions =
  55. CompletionMatchOptions.IsCaseInsensitive |
  56. CompletionMatchOptions.TargetsDisplayText |
  57. CompletionMatchOptions.UseAcronyms |
  58. CompletionMatchOptions.UseShorthand
  59. };
  60.  
  61.  
  62. switch (context.Type) {
  63. case SimpleContextType.Default:
  64. // Add items for keywords
  65. session.Items.Add(new CompletionItem("function", new CommonImageSourceProvider(CommonImageKind.Keyword),
  66. new PlainTextContentProvider("Declares a function.")));
  67. break;
  68. case SimpleContextType.FunctionDeclarationBlock:
  69. case SimpleContextType.FunctionReference: {
  70. // Add items for keywords
  71. session.Items.Add(new CompletionItem("var", new CommonImageSourceProvider(CommonImageKind.Keyword),
  72. new PlainTextContentProvider("Declares a variable.")));
  73. session.Items.Add(new CompletionItem("return", new CommonImageSourceProvider(CommonImageKind.Keyword),
  74. new PlainTextContentProvider("Returns a value.")));
  75.  
  76. // Add items (one for each function name)
  77. ILLParseData parseData = view.SyntaxEditor.Document.ParseData as ILLParseData;
  78. if (parseData != null) {
  79. CompilationUnit compilationUnit = parseData.Ast as CompilationUnit;
  80. if ((compilationUnit != null) && (compilationUnit.HasMembers)) {
  81. // Loop through the AST nodes
  82. foreach (FunctionDeclaration functionAstNode in compilationUnit.Members) {
  83. session.Items.Add(new CompletionItem(functionAstNode.Name, new CommonImageSourceProvider(CommonImageKind.MethodPublic),
  84. new FunctionContentProvider(view.HighlightingStyleRegistry, functionAstNode, false, view.DefaultBackgroundColor)));
  85. }
  86. }
  87. }
  88. break;
  89. }
  90. }
  91.  
  92.  
  93. for (int i = 0; i < 2486; i++)
  94. {
  95. var imageKinds = (CommonImageKind[])Enum.GetValues(typeof(CommonImageKind));
  96. var random = new Random();
  97. var randomImageKind = imageKinds[random.Next(imageKinds.Length)];
  98.  
  99. session.Items.Add(new CompletionItem("XXXXXX"+ GenerateRandomWord((int)randomImageKind) + i, new CommonImageSourceProvider(randomImageKind),
  100. new PlainTextContentProvider("This is item " + i + ".")));
  101. }
  102.  
  103.  
  104. if (session.Items.Count > 0) {
  105. // Ensure the caret is visible
  106. view.Scroller.ScrollToCaret();
  107.  
  108. // Ensure the items are sorted and open the session
  109. session.SortItems();
  110. session.Open(view);
  111. return true;
  112. }
  113. }
  114. return false;
  115. }
  116.  
  117. private static string GenerateRandomWord(int length = 24)
  118. {
  119. var chars = "abcdefghijklmnopqrstuvwxyz";
  120. var random = new Random();
  121. var word = new char[length];
  122. for (int i = 0; i < length; i++)
  123. {
  124. word[i] = chars[random.Next(chars.Length)];
  125. }
  126. return new string(word);
  127. }
  128. }
  129.  
  130. }
  131.  
  132.  
Advertisement
Add Comment
Please, Sign In to add comment