FrozenAssassine / TextControlBox-UWP

A UWP based textbox with Syntaxhighlighting and support for very large amounts of text
MIT License
16 stars 2 forks source link
csharp linenumbers syntaxhighlighting textbox textcontrolbox uwp

TextControlBox-UWP

[![NuGet version (TextControlBox)](https://img.shields.io/nuget/v/TextControlBox.JuliusKirsch)](https://www.nuget.org/packages/TextControlBox.JuliusKirsch)

๐Ÿค” What is TextControlBox?

A UWP based textbox with syntaxhighlighting and support for very large amount of text which is still in development.

Reason why I built it

UWP has a default Textbox and a RichTextBox. Both of them are very slow in rendering multiple thousand lines. The selection works also very slow. So I decided to create my own version of a Textbox.

๐Ÿ“ฅ Download

๐Ÿ” Features:

โ— Problems:

๐Ÿšฉ Available languages:

๐Ÿš€ Usage:

Properties

``` - ScrollBarPosition (get/set) - CharacterCount (get) - NumberOfLines (get) - CurrentLineIndex (get) - SelectedText (get/set) - SelectionStart (get/set) - SelectionLength (get/set) - ContextFlyoutDisabled (get/set) - ContextFlyout (get/set) - CursorSize (get/set) - ShowLineNumbers (get/set) - ShowLineHighlighter (get/set) - ZoomFactor (get/set) - IsReadonly (get/set) - Text (get/set) - RenderedFontSize (get) - FontSize (get/set) - FontFamily (get/set) - Cursorposition (get/set) - SpaceBetweenLineNumberAndText (get/set) - LineEnding (get/set) - SyntaxHighlighting (get/set) - CodeLanguage (get/set) - RequestedTheme (get/set) - Design (get/set) - static CodeLanguages (get/set) - VerticalScrollSensitivity (get/set) - HorizontalScrollSensitivity (get/set) - VerticalScroll (get/set) - HorizontalScroll (get/set) - CornerRadius (get/set) - UseSpacesInsteadTabs (get/set) - NumberOfSpacesForTab (get/set) ```

Functions

``` - SelectLine(index) - GoToLine(index) - SetText(text) - LoadText(text) - Paste() - Copy() - Cut() - GetText() - SetSelection(start, length) - SelectAll() - ClearSelection() - Undo() - Redo() - ScrollLineToCenter(line) - ScrollOneLineUp() - ScrollOneLineDown() - ScrollLineIntoView(line) - ScrollTopIntoView() - ScrollBottomIntoView() - ScrollPageUp() - ScrollPageDown() - GetLineContent(line) - GetLinesContent(startline, count) - SetLineContent(line, text) - DeleteLine(line) - AddLine(position, text) - FindInText(pattern) - SurroundSelectionWith(value) - SurroundSelectionWith(value1, value2) - DuplicateLine(line) - FindInText(word, up, matchCase, wholeWord) - ReplaceInText(word, replaceword, up, matchCase, wholeword) - ReplaceAll(word, replaceword, up, matchCase, wholeword) - static GetCodeLanguageFromJson(jsondata) - static SelectCodeLanguageById(identifier) - Unload() - ClearUndoRedoHistory() ```

Create custom syntaxhighlighting languages with json:

{
  "Highlights": [
    {
      "CodeStyle": { //optional delete when not used
        "Bold": true, 
        "Underlined": true, 
        "Italic": true
      },
      "Pattern": "REGEX PATTERN",
      "ColorDark": "#ffffff", //color in dark theme
      "ColorLight": "#000000" //color in light theme
    },
  ],
  "Name": "NAME",
  "Filter": "EXTENSION1|EXTENSION2", //.cpp|.c
  "Description": "DESCRIPTION",
  "Author": "AUTHOR"
}  

To bind it to the textbox you can use one of these ways:


TextControlBox textbox = new TextControlBox();

//Use a builtin language -> see list a bit higher
//Language identifiers are case intensitive
textbox.CodeLanguage = TextControlBox.GetCodeLanguageFromId("CSharp");

//Use a custom language:
var result = TextControlBox.GetCodeLanguageFromJson("JSON DATA");
if(result.Succeed)
     textbox.CodeLanguage = result.CodeLanguage; 

Create custom designs in C#:

textbox.Design = new TextControlBoxDesign(
    new SolidColorBrush(Color.FromArgb(255, 30, 30, 30)), //Background brush
    Color.FromArgb(255, 255, 255, 255), //Text color
    Color.FromArgb(100, 0, 100, 255), //Selection color
    Color.FromArgb(255, 255, 255, 255), //Cursor color
    Color.FromArgb(50, 100, 100, 100), //Linehighlighter color
    Color.FromArgb(255, 100, 100, 100), //Linenumber color
    Color.FromArgb(0, 0, 0, 0), //Linenumber background
    Color.FromArgb(100,255,150,0) //Search highlight color
    );

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Contributors:

If you want to contribute for this project, feel free to open an issue or a pull request.

๐Ÿ“ธ Images