|
//
// ___ _____ ___ ___ __ __
// / __|_ _/ _ \| _ \ \/ |
// \__ \ | || (_) | / |\/| |
// |___/ |_| \___/|_|_\_| |_|
//
// Storm.TextEditor.dll
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// Storm.TabControl.dll was created under the LGPL
// license. Some of the code was created from scratch,
// some was not. Code not created from scratch was
// based on the DotNetFireball framework and evolved
// from that.
//
// What I mostly did in this library was that I
// cleaned up the code, structured it, documentated
// it and added new features.
//
// Although it might not sound like it, it was very
// hard and took a long (pretty much a shitload)
// time. Why? Well, this was* some of the crappiest,
// most unstructured, undocumentated, ugly code I've
// ever seen. It would actually have taken me less
// time to create it from scratch, but I figured that
// out too late. Figuring out what the code actually
// did and then documentating it was (mostly) a
// day-long process. Well, I hope you enjoy some of
// my hard work. /rant
//
// Of course some/most of it is made from scratch by me.
// *Yes, was. It isn't now. :) Some of the naming
// conventions might still seem a little bit off though.
//
// What is Storm?
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
// Storm is a set of dynamic link libraries used in
// Theodor "Vestras" Storm Kristensen's application
// "Moonlite".
//
//
// Thanks:
// ¯¯¯¯¯¯¯
// - The DotNetFireball team for creating and publishing
// DotNetFireball which I based some of my code on.
//
//
// Copyright (c) Theodor "Vestras" Storm Kristensen 2009
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
//
namespace Storm.TextEditor.Utilities
{
using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Drawing.Design;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Windows.Forms;
using Storm.TextEditor;
using Storm.TextEditor.Controls;
using Storm.TextEditor.Controls.Core;
using Storm.TextEditor.Controls.Core.Globalization;
using Storm.TextEditor.Controls.Core.Timers;
using Storm.TextEditor.Controls.IntelliMouse;
using Storm.TextEditor.Document;
using Storm.TextEditor.Document.Exporters;
using Storm.TextEditor.Forms;
using Storm.TextEditor.Interacting;
using Storm.TextEditor.Painting;
using Storm.TextEditor.Parsing;
using Storm.TextEditor.Parsing.Base;
using Storm.TextEditor.Parsing.Classes;
using Storm.TextEditor.Parsing.Language;
using Storm.TextEditor.Preset;
using Storm.TextEditor.Preset.Painting;
using Storm.TextEditor.Preset.TextDraw;
using Storm.TextEditor.Printing;
using Storm.TextEditor.Utilities;
using Storm.TextEditor.Win32;
/// <summary>
/// This class implements a keyword map. It implements a digital search trees (tries) to find a word.
/// </summary>
public class LookupTable
{
#region Members
// Basic members.
public Node _root = new Node(null, null);
public bool _caseSensitive;
public int _length;
#endregion
#region Properties
/// <value>
/// Gets the number of items in the LookupTable.
/// </value>
public int Count
{ get { return _length; } }
/// <summary>
/// Get the object which was inserted under the keyword. (Line, at offset, with length length)
/// Returns null if no such keyword was inserted.
/// </summary>
public object this[SyntaxDocument document, Word line, int offset, int length]
{
get
{
if(length == 0)
return null;
return null;
}
}
/// <summary>
/// Inserts an object in the tree, under keyword.
/// </summary>
public object this[string keyword]
{
set
{
Node node = _root;
Node next = _root;
if (!_caseSensitive)
keyword = keyword.ToUpper();
_length++;
for (int i = 0; i < keyword.Length; i++)
{
int index = ((int)keyword[i]) % 256;
bool d = keyword[i] == '\\';
next = next.leaf[index];
if (next == null)
{
node.leaf[index] = new Node(value, keyword);
break;
}
if (next.word != null && next.word.Length != i)
{
string tmpword = next.word;
object tmpcolor = next.color;
next.color = next.word = null;
this[tmpword] = tmpcolor;
}
if (i == keyword.Length - 1)
{
next.word = keyword;
next.color = value;
break;
}
node = next;
}
}
}
#endregion
/// <summary>
/// Initializes the LookupTable.
/// </summary>
public LookupTable(bool casesensitive)
{
_caseSensitive = casesensitive;
}
#region Node class
public class Node
{
public Node(object xcolor, string xword)
{
word = xword;
color = xcolor;
}
public string word;
public object color;
public Node[] leaf = new Node[256];
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.