summaryrefslogtreecommitdiff
path: root/tests/lexers/hx/example.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lexers/hx/example.txt')
-rw-r--r--tests/lexers/hx/example.txt4363
1 files changed, 4363 insertions, 0 deletions
diff --git a/tests/lexers/hx/example.txt b/tests/lexers/hx/example.txt
new file mode 100644
index 00000000..1a103725
--- /dev/null
+++ b/tests/lexers/hx/example.txt
@@ -0,0 +1,4363 @@
+---input---
+package util;
+
+import util.Map;
+import util.Collection;
+import util.Set;
+import util.Option;
+import util.Debug;
+import util.Throwable;
+
+using util.StringFormat;
+
+/**
+ * An ordered map of (key,value) pairs. The key ordering is defined by
+ * a comparison function specified at construction. Duplicate keys
+ * are not allowed.
+ *
+ * Worst Case Time and Space Complexities:
+ * [operation] [time] [space]
+ * insert O(lg(n)) O(lg(n))
+ * find O(lg(n)) O(1)
+ * delete O(lg(n)) O(lg(n))
+ * range-query O(lg(n))* O(lg(n))
+ * iteration O(n)** O(lg(n))
+ * *range-query returns an iterator over elements in the range
+ * **total cost of iterating over the entire map
+ *
+ * The map is backed by a Left-Leaning Red-Black 2-3 Tree
+ * adapted from Robert Sedgewick (2008) (http://www.cs.princeton.edu/~rs/)
+ *
+ * Implementation choices (let size of tree be n)
+ * - Parent Pointers
+ * - This implementation omits parent pointers.
+ * - Omitting parent pointers saves n words of persistent memory
+ * at the expense of lg(n) stack space per operation.
+ * - Without parent pointers, most operations in the tree must
+ * either use recursion, or simulate recursion by saving a history
+ * of nodes via a stack. For example, each iterator will require
+ * lg(n) extra space to track progress through the tree. Insertions
+ * and deletions into the tree will also invalidate any existing
+ * iterators.
+ * - Node Size Information
+ * - This implementation omits the size of each node.
+ * - Omitting size information saves n words of long-term memory at
+ * the expense of not providing a find-kth operation.
+ * - This seems like a reasonable trade-off as range queries are
+ * generally more common than find-kth operations. The implementation
+ * used below could easily be modified to provide a version with
+ * size information should find-kth be of specific interest.
+ * - Recursive vs. Iterative
+ * - This implementation uses recursive algorithms.
+ * - The recursive implementations allow the code to remain compact and
+ * understandable. Since the height of LLRB 2-3 Trees is gaurenteed
+ * to be at most 2lg(n), stack overflow is typically not a concern.
+ * Unlike the standard single-rotation red-black algorithm, LLRB
+ * operations are not tail-recursive, so even an iterative
+ * version will require lg(n) extra memory.
+ */
+class OrderedMap<K,V>
+{
+ private var root :Null<Node<K,V>>;
+ private var nodeCount :Int;
+ private var comp :K -> K -> Int;
+
+ public function new( keyComp :K -> K -> Int )
+ {
+ root = null;
+ comp = keyComp;
+ nodeCount = 0;
+ assertInvariants();
+ }
+
+ /**
+ * @returns Some(v) if (\key,v) is in the map, None otherwise.
+ */
+ public function get(key :K) :Option<V>
+ {
+ //normal BST search
+ var n = root;
+ while( n != null )
+ {
+ var cmp = comp(key,n.key);
+ if( cmp < 0 )
+ {
+ n = n.left;
+ }
+ else if ( cmp > 0 )
+ {
+ n = n.right;
+ }
+ else
+ {
+ return Some(n.val);
+ }
+ }
+ return None;
+ }
+
+ /**
+ * Puts (\key,\val) into the map or replaces the current value of \key
+ * with \val.
+ *
+ * @return None if \key currently is not in the map, or Some(v) if (\key,v)
+ * was in the map before the put operation.
+ */
+ public function set(key :K, val :V) :Option<V>
+ {
+ var ret = new Ref<V>(null);
+ root = insertNode(root,key,val,ret);
+ root.color = black;
+
+ assertInvariants();
+
+ if( ret.r == null )
+ {
+ return None;
+ }
+ return Some(ret.r);
+ }
+
+ private function insertNode(n :Node<K,V>, key :K, val :V, ret :Ref<V>)
+ {
+ //do the insertion at the leaf level
+ if( n == null )
+ {
+ ++nodeCount;
+ return new Node<K,V>(key,val);
+ }
+
+ //normal BST search
+ var cmp = comp(key,n.key);
+ if( cmp < 0 )
+ {
+ n.left = insertNode(n.left,key,val,ret);
+ }
+ else if( cmp > 0 )
+ {
+ n.right = insertNode(n.right,key,val,ret);
+ }
+ else
+ {
+ //the key is already in the map, update the value
+ ret.r = n.val;
+ n.val = val;
+ }
+
+ return fixInvariants(n);
+ }
+
+ /**
+ * Removes (\key,v) from the map if it exists.
+ *
+ * @return None if (\key,v) wasn't in the map, Some(v) otherwise.
+ */
+ public function remove(key :K) :Option<V>
+ {
+ var ret = new Ref<V>(null);
+ if( root != null )
+ {
+ root = deleteNode(root,key,ret);
+ if( root != null )
+ {
+ root.color = black;
+ }
+ }
+
+ assertInvariants();
+
+ if( ret.r == null )
+ {
+ return None;
+ }
+ return Some(ret.r);
+ }
+
+ private function deleteNode( n :Node<K,V>, key :K, ret :Ref<V> )
+ {
+ if( comp(key,n.key) < 0 )
+ {
+ if( isBlack(n.left) && isBlack(n.left.left) )
+ {
+ //ensure we move into a 3-node
+ n = moveRedLeft(n);
+ }
+ n.left = deleteNode(n.left,key,ret);
+ }
+ else
+ {
+ if( isRed(n.left) )
+ {
+ //ensure we move into a 3-node
+ n = rotateRight(n);
+ }
+ if( comp(key,n.key) == 0 && n.right == null )
+ {
+ //delete the node
+ ret.r = n.val;
+ --nodeCount;
+ return null;
+ }
+ if( isBlack(n.right) && isBlack(n.right.left) )
+ {
+ //ensure we move into a 3-node
+ n = moveRedRight(n);
+ }
+ if( comp(key,n.key) == 0 )
+ {
+ Debug.assert(n.right != null);
+
+ ret.r = n.val;
+
+ //ensure we are deleting a node with at most one child
+ var min = minNode(n.right);
+ n.val = min.val;
+ n.key = min.key;
+ n.right = deleteMinNode(n.right);
+ }
+ else
+ {
+ n.right = deleteNode(n.right,key,ret);
+ }
+ }
+
+ return fixInvariants(n);
+ }
+
+ /** returns a view of the set of keys in this TreeMap **/
+ public function keys() :SetView<K>
+ {
+ var _this = this;
+
+ return {
+ size: function() return _this.size(),
+ iterator: function() return IterTools.mapIter(new NodeIterator(_this.root),function(x) return x.key),
+ exists: function(x) {
+ return switch(_this.get(x))
+ {
+ case None: false;
+ case Some(_): true;
+ };
+ },
+ };
+ }
+
+ /** returns a view of the collection of values in this TreeMap **/
+ public function values() :CollectionView<V>
+ {
+ var _this = this;
+
+ return {
+ size: function() return _this.size(),
+ iterator: function() return IterTools.mapIter(new NodeIterator(_this.root),function(x) return x.val),
+ };
+ }
+
+ /** returns a view of the (key,value) pairs in this TreeMap **/
+ public function entries() :CollectionView<Entry<K,V>>
+ {
+ var _this = this;
+
+ return {
+ size: function() {
+ return _this.size();
+ },
+ iterator: function() {
+ return cast new NodeIterator(_this.root);
+ },
+ };
+ }
+
+ /** returns the number of (key,value) pairs in the map **/
+ public function size() :Int
+ {
+ return nodeCount;
+ }
+
+ public function toString() :String
+ {
+ var sb = new StringBuf();
+
+ sb.add("{");
+ for( entry in this.entries() )
+ {
+ sb.add("%y => %y, ".sprintf([entry.key,entry.val]));
+ }
+ sb.add("}");
+
+ return sb.toString();
+ }
+
+ private static function isRed<K,V>( n :Node<K,V> )
+ {
+ if( n == null ) return false;
+ return switch(n.color)
+ {
+ case red: true;
+ case black: false;
+ };
+ }
+
+ private static inline function isBlack<K,V>( n :Node<K,V> )
+ {
+ return !isRed(n);
+ }
+
+ private static function colorFlip<K,V>( n :Node<K,V> )
+ {
+ n.color = oppositeColor(n.color);
+ n.left.color = oppositeColor(n.left.color);
+ n.right.color = oppositeColor(n.right.color);
+ }
+
+ private static inline function oppositeColor( c :Color )
+ {
+ return switch(c)
+ {
+ case red: black;
+ case black: red;
+ };
+ }
+
+ private static function rotateLeft<K,V>( n :Node<K,V> )
+ {
+ Debug.assert(n != null);
+ Debug.assert(n.right != null);
+ /*
+ n x
+ / \ / \
+ a x => n c
+ / \ / \
+ b c a b
+ */
+ var x = n.right;
+ n.right = x.left;
+ x.left = n;
+ x.color = n.color;
+ n.color = red;
+ return x;
+ }
+
+ private static function rotateRight<K,V>( n :Node<K,V> )
+ {
+ Debug.assert( n != null );
+ Debug.assert( n.left != null );
+ /*
+ n x
+ / \ / \
+ x c => a n
+ / \ / \
+ a b b c
+ */
+ var x = n.left;
+ n.left = x.right;
+ x.right = n;
+ x.color = n.color;
+ n.color = red;
+ return x;
+ }
+
+ private static function moveRedLeft<K,V>( n :Node<K,V> )
+ {
+ //borrow extra node from right child (which is a 3-node)
+ colorFlip(n);
+ if( isRed(n.right.left) )
+ {
+ n.right = rotateRight(n.right);
+ n = rotateLeft(n);
+ colorFlip(n);
+ }
+ return n;
+ }
+
+ private static function moveRedRight<K,V>( n :Node<K,V> )
+ {
+ //borrow extra node from left child (which is a 3-node)
+ colorFlip(n);
+ if( isRed(n.left.left) )
+ {
+ n = rotateRight(n);
+ colorFlip(n);
+ }
+ return n;
+ }
+
+ private static function fixInvariants<K,V>( n :Node<K,V> )
+ {
+ if( isRed(n.right) && isBlack(n.left) )
+ {
+ //ensure left-leaning property
+ n = rotateLeft(n);
+ }
+ if( isRed(n.left) && isRed(n.left.left) )
+ {
+ //balance 4-node
+ n = rotateRight(n);
+ }
+ if( isRed(n.left) && isRed(n.right) )
+ {
+ //split 4-node
+ colorFlip(n);
+ }
+ return n;
+ }
+
+ private function deleteMinNode<K,V>( n :Node<K,V> )
+ {
+ if( n.left == null )
+ {
+ //delete
+ --nodeCount;
+ return null;
+ }
+
+ if( isBlack(n.left) && isBlack(n.left.left) )
+ {
+ n = moveRedLeft(n);
+ }
+
+ n.left = deleteMinNode(n.left);
+
+ return fixInvariants(n);
+ }
+
+ private static function minNode<K,V>( n :Node<K,V> )
+ {
+ Debug.assert(n != null);
+
+ while( n.left != null )
+ {
+ n = n.left;
+ }
+ return n;
+ }
+
+ private static function maxNode<K,V>( n :Node<K,V> )
+ {
+ Debug.assert(n != null);
+
+ while( n.right != null )
+ {
+ n = n.right;
+ }
+ return n;
+ }
+
+ /** Used to verify that the invariants of the tree hold **/
+ private inline function assertInvariants()
+ {
+ #if DEBUG
+ Debug.assert( isBlack(root), "root is black: " + root );
+
+ assertIsTree(root,new List<Node<K,V>>());
+ assertBlackNodeCount(root);
+ assertBSTOrdering(root,comp);
+ #end
+ }
+
+ private static function assertIsTree<K,V>( n: Node<K,V>, visited :List<Node<K,V>> )
+ {
+ if( n == null )
+ {
+ return;
+ }
+
+ for( r in visited )
+ {
+ Debug.assert( n != r );
+ }
+ visited.push(n);
+ assertIsTree(n.left,visited);
+ assertIsTree(n.right,visited);
+ }
+
+ private static function assertBlackNodeCount<K,V>( n: Node<K,V> ) :Int
+ {
+ if( n == null )
+ {
+ return 1;
+ }
+
+ var leftCount = assertBlackNodeCount(n.left);
+ var rightCount = assertBlackNodeCount(n.right);
+
+ Debug.assert(
+ leftCount == rightCount,
+ "num of black nodes in all paths for left and right child not equal" + n
+ );
+
+ return leftCount + switch(n.color) {
+ case red: 0;
+ case black: 1;
+ }
+ }
+
+ private static function assertBSTOrdering<K,V>( n: Node<K,V>, compK :K -> K -> Int ) :Void
+ {
+ if( n == null )
+ {
+ return;
+ }
+
+ if( n.left != null && n.left.val != null )
+ {
+ Debug.assert( compK(n.left.key,n.key) < 0, "left child not less than its parent" + n );
+ assertBSTOrdering(n.left,compK);
+ }
+
+ if( n.right != null && n.right.val != null )
+ {
+ Debug.assert( compK(n.key,n.right.key) < 0, "parent not less than its right child" + n );
+ assertBSTOrdering(n.right,compK);
+ }
+ }
+}
+
+private enum Color
+{
+ red;
+ black;
+}
+
+private class Node<K,V> /*implements Entry<K,V>*/
+{
+ public var left :Null<Node<K,V>>;
+ public var right :Null<Node<K,V>>;
+ public var color :Color;
+
+ public var key :K;
+ public var val :V;
+
+ public function new(k :K, v :V)
+ {
+ key = k;
+ val = v;
+ color = red;
+ }
+}
+
+private class NodeIterator<K,V>
+{
+ private var curr :Node<K,V>;
+ private var fringe :Array<Node<K,V>>;
+
+ public function new( root :Node<K,V> )
+ {
+ fringe = new Array<Node<K,V>>();
+ traverseToMin(root);
+ curr = fringe.pop();
+ }
+
+ public inline function hasNext() :Bool
+ {
+ return curr != null;
+ }
+
+ public function next() :Node<K,V>
+ {
+ if( !hasNext() )
+ {
+ throw new NoSuchElement();
+ }
+ var ret = curr;
+
+ if( fringe.length > 0 )
+ {
+ curr = fringe.pop();
+ traverseToMin(curr.right);
+ }
+ else
+ {
+ curr = null;
+ }
+
+ return ret;
+ }
+
+ private function traverseToMin( n :Node<K,V> )
+ {
+ while( n != null )
+ {
+ fringe.push(n);
+ n = n.left;
+ }
+ }
+}
+
+---tokens---
+'package' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+';' Punctuation
+'\n\n' Text
+
+'import' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+'.' Punctuation
+'Map' Name.Namespace
+';' Punctuation
+'\n' Text
+
+'import' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+'.' Punctuation
+'Collection' Name.Namespace
+';' Punctuation
+'\n' Text
+
+'import' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+'.' Punctuation
+'Set' Name.Namespace
+';' Punctuation
+'\n' Text
+
+'import' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+'.' Punctuation
+'Option' Name.Namespace
+';' Punctuation
+'\n' Text
+
+'import' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+'.' Punctuation
+'Debug' Name.Namespace
+';' Punctuation
+'\n' Text
+
+'import' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+'.' Punctuation
+'Throwable' Name.Namespace
+';' Punctuation
+'\n\n' Text
+
+'using' Keyword.Namespace
+' ' Text
+'util' Name.Namespace
+'.' Punctuation
+'StringFormat' Name.Namespace
+';' Punctuation
+'\n\n' Text
+
+'/**\n * An ordered map of (key,value) pairs. The key ordering is defined by\n * a comparison function specified at construction. Duplicate keys\n * are not allowed.\n *\n * Worst Case Time and Space Complexities:\n * [operation] [time] [space]\n * insert O(lg(n)) O(lg(n))\n * find O(lg(n)) O(1)\n * delete O(lg(n)) O(lg(n))\n * range-query O(lg(n))* O(lg(n))\n * iteration O(n)** O(lg(n))\n * *range-query returns an iterator over elements in the range\n * **total cost of iterating over the entire map\n *\n * The map is backed by a Left-Leaning Red-Black 2-3 Tree\n * adapted from Robert Sedgewick (2008) (http://www.cs.princeton.edu/~rs/)\n *\n * Implementation choices (let size of tree be n)\n * - Parent Pointers\n * - This implementation omits parent pointers.\n * - Omitting parent pointers saves n words of persistent memory\n * at the expense of lg(n) stack space per operation.\n * - Without parent pointers, most operations in the tree must\n * either use recursion, or simulate recursion by saving a history\n * of nodes via a stack. For example, each iterator will require\n * lg(n) extra space to track progress through the tree. Insertions\n * and deletions into the tree will also invalidate any existing\n * iterators.\n * - Node Size Information\n * - This implementation omits the size of each node.\n * - Omitting size information saves n words of long-term memory at\n * the expense of not providing a find-kth operation.\n * - This seems like a reasonable trade-off as range queries are\n * generally more common than find-kth operations. The implementation\n * used below could easily be modified to provide a version with\n * size information should find-kth be of specific interest.\n * - Recursive vs. Iterative\n * - This implementation uses recursive algorithms.\n * - The recursive implementations allow the code to remain compact and\n * understandable. Since the height of LLRB 2-3 Trees is gaurenteed\n * to be at most 2lg(n), stack overflow is typically not a concern.\n * Unlike the standard single-rotation red-black algorithm, LLRB\n * operations are not tail-recursive, so even an iterative\n * version will require lg(n) extra memory.\n */' Comment.Multiline
+'\n' Text
+
+'class' Keyword.Declaration
+' ' Text
+'OrderedMap' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'root' Text
+' ' Text
+':' Punctuation
+'Null' Name
+'<' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+';' Punctuation
+'\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'nodeCount' Text
+' ' Text
+':' Punctuation
+'Int' Name
+';' Punctuation
+'\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'comp' Text
+' ' Text
+':' Punctuation
+'K' Name
+' ' Text
+'->' Punctuation
+' ' Text
+'K' Name
+' ' Text
+'->' Punctuation
+' ' Text
+'Int' Name
+';' Punctuation
+'\n\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'new' Name.Function
+'(' Punctuation
+' ' Text
+'keyComp' Name
+' ' Text
+':' Punctuation
+'K' Name
+' ' Text
+'->' Punctuation
+' ' Text
+'K' Name
+' ' Text
+'->' Punctuation
+' ' Text
+'Int' Name
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'root' Name
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'comp' Name
+' ' Text
+'=' Operator
+' ' Text
+'keyComp' Name
+';' Punctuation
+'\n ' Text
+'nodeCount' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Punctuation
+'\n ' Text
+'assertInvariants' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'/**\n * @returns Some(v) if (\\key,v) is in the map, None otherwise.\n */' Comment.Multiline
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'get' Name.Function
+'(' Punctuation
+'key' Name
+' ' Text
+':' Punctuation
+'K' Name
+')' Punctuation
+' ' Text
+':' Punctuation
+'Option' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//normal BST search' Comment.Single
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'n' Text
+' ' Text
+'=' Operator
+' ' Text
+'root' Name
+';' Punctuation
+'\n ' Text
+'while' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'cmp' Text
+' ' Text
+'=' Operator
+' ' Text
+'comp' Name
+'(' Punctuation
+'key' Name
+',' Punctuation
+'n' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'cmp' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'else' Keyword
+' ' Text
+'if' Keyword
+' ' Text
+'(' Punctuation
+' ' Text
+'cmp' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'Some' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'val' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'None' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'/**\n * Puts (\\key,\\val) into the map or replaces the current value of \\key\n * with \\val.\n *\n * @return None if \\key currently is not in the map, or Some(v) if (\\key,v)\n * was in the map before the put operation.\n */' Comment.Multiline
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'set' Name.Function
+'(' Punctuation
+'key' Name
+' ' Text
+':' Punctuation
+'K' Name
+',' Punctuation
+' ' Text
+'val' Name
+' ' Text
+':' Punctuation
+'V' Name
+')' Punctuation
+' ' Text
+':' Punctuation
+'Option' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'ret' Text
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'Ref' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+'null' Keyword.Constant
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'root' Name
+' ' Text
+'=' Operator
+' ' Text
+'insertNode' Name
+'(' Punctuation
+'root' Name
+',' Punctuation
+'key' Name
+',' Punctuation
+'val' Name
+',' Punctuation
+'ret' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'root' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'black' Name
+';' Punctuation
+'\n\n ' Text
+'assertInvariants' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'ret' Name
+'.' Punctuation
+'r' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'None' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'Some' Name
+'(' Punctuation
+'ret' Name
+'.' Punctuation
+'r' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'insertNode' Name.Function
+'(' Punctuation
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+',' Punctuation
+' ' Text
+'key' Name
+' ' Text
+':' Punctuation
+'K' Name
+',' Punctuation
+' ' Text
+'val' Name
+' ' Text
+':' Punctuation
+'V' Name
+',' Punctuation
+' ' Text
+'ret' Name
+' ' Text
+':' Punctuation
+'Ref' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//do the insertion at the leaf level' Comment.Single
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'++' Operator
+'nodeCount' Name
+';' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'new' Keyword
+' ' Text
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+'key' Name
+',' Punctuation
+'val' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'//normal BST search' Comment.Single
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'cmp' Text
+' ' Text
+'=' Operator
+' ' Text
+'comp' Name
+'(' Punctuation
+'key' Name
+',' Punctuation
+'n' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'cmp' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'=' Operator
+' ' Text
+'insertNode' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+',' Punctuation
+'key' Name
+',' Punctuation
+'val' Name
+',' Punctuation
+'ret' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'else' Keyword
+' ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'cmp' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'=' Operator
+' ' Text
+'insertNode' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+',' Punctuation
+'key' Name
+',' Punctuation
+'val' Name
+',' Punctuation
+'ret' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//the key is already in the map, update the value' Comment.Single
+'\n ' Text
+'ret' Name
+'.' Punctuation
+'r' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'val' Name
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'val' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'fixInvariants' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+"/**\n * Removes (\\key,v) from the map if it exists.\n *\n * @return None if (\\key,v) wasn't in the map, Some(v) otherwise.\n */" Comment.Multiline
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'remove' Name.Function
+'(' Punctuation
+'key' Name
+' ' Text
+':' Punctuation
+'K' Name
+')' Punctuation
+' ' Text
+':' Punctuation
+'Option' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'ret' Text
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'Ref' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+'null' Keyword.Constant
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'root' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'root' Name
+' ' Text
+'=' Operator
+' ' Text
+'deleteNode' Name
+'(' Punctuation
+'root' Name
+',' Punctuation
+'key' Name
+',' Punctuation
+'ret' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'root' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'root' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'black' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'assertInvariants' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'ret' Name
+'.' Punctuation
+'r' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'None' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'Some' Name
+'(' Punctuation
+'ret' Name
+'.' Punctuation
+'r' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'deleteNode' Name.Function
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+',' Punctuation
+' ' Text
+'key' Name
+' ' Text
+':' Punctuation
+'K' Name
+',' Punctuation
+' ' Text
+'ret' Name
+' ' Text
+':' Punctuation
+'Ref' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'comp' Name
+'(' Punctuation
+'key' Name
+',' Punctuation
+'n' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+'&&' Operator
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//ensure we move into a 3-node' Comment.Single
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'moveRedLeft' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'=' Operator
+' ' Text
+'deleteNode' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+',' Punctuation
+'key' Name
+',' Punctuation
+'ret' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//ensure we move into a 3-node' Comment.Single
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'rotateRight' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'comp' Name
+'(' Punctuation
+'key' Name
+',' Punctuation
+'n' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+' ' Text
+'==' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'&&' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//delete the node' Comment.Single
+'\n ' Text
+'ret' Name
+'.' Punctuation
+'r' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'val' Name
+';' Punctuation
+'\n ' Text
+'--' Operator
+'nodeCount' Name
+';' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'null' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+' ' Text
+'&&' Operator
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//ensure we move into a 3-node' Comment.Single
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'moveRedRight' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'comp' Name
+'(' Punctuation
+'key' Name
+',' Punctuation
+'n' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+' ' Text
+'==' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'ret' Name
+'.' Punctuation
+'r' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'val' Name
+';' Punctuation
+'\n\n ' Text
+'//ensure we are deleting a node with at most one child' Comment.Single
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'min' Text
+' ' Text
+'=' Operator
+' ' Text
+'minNode' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'min' Name
+'.' Punctuation
+'val' Name
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'key' Name
+' ' Text
+'=' Operator
+' ' Text
+'min' Name
+'.' Punctuation
+'key' Name
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'=' Operator
+' ' Text
+'deleteMinNode' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'=' Operator
+' ' Text
+'deleteNode' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+',' Punctuation
+'key' Name
+',' Punctuation
+'ret' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'fixInvariants' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'/** returns a view of the set of keys in this TreeMap **/' Comment.Multiline
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'keys' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+':' Punctuation
+'SetView' Name
+'<' Punctuation
+'K' Name
+'>' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'_this' Text
+' ' Text
+'=' Operator
+' ' Text
+'this' Keyword
+';' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'{' Punctuation
+'\n ' Text
+'size' Name
+':' Punctuation
+' ' Text
+'function' Keyword.Declaration
+'(' Punctuation
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'_this' Name
+'.' Punctuation
+'size' Name
+'(' Punctuation
+')' Punctuation
+',' Punctuation
+'\n ' Text
+'iterator' Name
+':' Punctuation
+' ' Text
+'function' Keyword.Declaration
+'(' Punctuation
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'IterTools' Name
+'.' Punctuation
+'mapIter' Name
+'(' Punctuation
+'new' Keyword
+' ' Text
+'NodeIterator' Name
+'(' Punctuation
+'_this' Name
+'.' Punctuation
+'root' Name
+')' Punctuation
+',' Punctuation
+'function' Keyword.Declaration
+'(' Punctuation
+'x' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+',' Punctuation
+'\n ' Text
+'exists' Name
+':' Punctuation
+' ' Text
+'function' Keyword.Declaration
+'(' Punctuation
+'x' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'switch' Keyword
+'(' Punctuation
+'_this' Name
+'.' Punctuation
+'get' Name
+'(' Punctuation
+'x' Name
+')' Punctuation
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'None' Name
+':' Punctuation
+' ' Text
+'' Keyword
+'false' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'Some' Name
+'(' Punctuation
+'_' Name
+')' Punctuation
+':' Punctuation
+' ' Text
+'' Keyword
+'true' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+',' Punctuation
+'\n ' Text
+'}' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'/** returns a view of the collection of values in this TreeMap **/' Comment.Multiline
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'values' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+':' Punctuation
+'CollectionView' Name
+'<' Punctuation
+'V' Name
+'>' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'_this' Text
+' ' Text
+'=' Operator
+' ' Text
+'this' Keyword
+';' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'{' Punctuation
+'\n ' Text
+'size' Name
+':' Punctuation
+' ' Text
+'function' Keyword.Declaration
+'(' Punctuation
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'_this' Name
+'.' Punctuation
+'size' Name
+'(' Punctuation
+')' Punctuation
+',' Punctuation
+'\n ' Text
+'iterator' Name
+':' Punctuation
+' ' Text
+'function' Keyword.Declaration
+'(' Punctuation
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'IterTools' Name
+'.' Punctuation
+'mapIter' Name
+'(' Punctuation
+'new' Keyword
+' ' Text
+'NodeIterator' Name
+'(' Punctuation
+'_this' Name
+'.' Punctuation
+'root' Name
+')' Punctuation
+',' Punctuation
+'function' Keyword.Declaration
+'(' Punctuation
+'x' Name
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'val' Name
+')' Punctuation
+',' Punctuation
+'\n ' Text
+'}' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'/** returns a view of the (key,value) pairs in this TreeMap **/' Comment.Multiline
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'entries' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+':' Punctuation
+'CollectionView' Name
+'<' Punctuation
+'Entry' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'_this' Text
+' ' Text
+'=' Operator
+' ' Text
+'this' Keyword
+';' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'{' Punctuation
+'\n ' Text
+'size' Name
+':' Punctuation
+' ' Text
+'function' Keyword.Declaration
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'_this' Name
+'.' Punctuation
+'size' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+',' Punctuation
+'\n ' Text
+'iterator' Name
+':' Punctuation
+' ' Text
+'function' Keyword.Declaration
+'(' Punctuation
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'cast' Keyword
+' ' Text
+'new' Keyword
+' ' Text
+'NodeIterator' Name
+'(' Punctuation
+'_this' Name
+'.' Punctuation
+'root' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+',' Punctuation
+'\n ' Text
+'}' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'/** returns the number of (key,value) pairs in the map **/' Comment.Multiline
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'size' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+':' Punctuation
+'Int' Name
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'nodeCount' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'toString' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+':' Punctuation
+'String' Name
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'sb' Text
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'StringBuf' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'sb' Name
+'.' Punctuation
+'add' Name
+'(' Punctuation
+'"' Literal.String.Double
+'{' Literal.String.Double
+'"' Literal.String.Double
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'for' Keyword
+'(' Punctuation
+' ' Text
+'entry' Name
+' ' Text
+'in' Keyword
+' ' Text
+'this' Keyword
+'.' Punctuation
+'entries' Name
+'(' Punctuation
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'sb' Name
+'.' Punctuation
+'add' Name
+'(' Punctuation
+'"' Literal.String.Double
+'%' Literal.String.Double
+'y' Literal.String.Double
+' ' Literal.String.Double
+'=' Literal.String.Double
+'>' Literal.String.Double
+' ' Literal.String.Double
+'%' Literal.String.Double
+'y' Literal.String.Double
+',' Literal.String.Double
+' ' Literal.String.Double
+'"' Literal.String.Double
+'.' Punctuation
+'sprintf' Name
+'(' Punctuation
+'[' Punctuation
+'entry' Name
+'.' Punctuation
+'key' Name
+',' Punctuation
+'entry' Name
+'.' Punctuation
+'val' Name
+']' Punctuation
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'sb' Name
+'.' Punctuation
+'add' Name
+'(' Punctuation
+'"' Literal.String.Double
+'}' Literal.String.Double
+'"' Literal.String.Double
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'sb' Name
+'.' Punctuation
+'toString' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'isRed' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+' ' Text
+'return' Keyword
+' ' Text
+'false' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'switch' Keyword
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'color' Name
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'red' Name
+':' Punctuation
+' ' Text
+'' Keyword
+'true' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'black' Name
+':' Punctuation
+' ' Text
+'' Keyword
+'false' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'inline' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'isBlack' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'!' Operator
+'isRed' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'colorFlip' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'oppositeColor' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'color' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'oppositeColor' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'color' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'oppositeColor' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+'.' Punctuation
+'color' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'inline' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'oppositeColor' Name.Function
+'(' Punctuation
+' ' Text
+'c' Name
+' ' Text
+':' Punctuation
+'Color' Name
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'switch' Keyword
+'(' Punctuation
+'c' Name
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'red' Name
+':' Punctuation
+' ' Text
+'' Keyword
+'black' Name
+';' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'black' Name
+':' Punctuation
+' ' Text
+'' Keyword
+'red' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'rotateLeft' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+'n' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'/*\n n x\n / \\ / \\\n a x => n c\n / \\ / \\\n b c a b\n */' Comment.Multiline
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'x' Text
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'=' Operator
+' ' Text
+'x' Name
+'.' Punctuation
+'left' Name
+';' Punctuation
+'\n ' Text
+'x' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n ' Text
+'x' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'color' Name
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'red' Name
+';' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'x' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'rotateRight' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'/*\n n x\n / \\ / \\\n x c => a n\n / \\ / \\\n a b b c\n */' Comment.Multiline
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'x' Text
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'=' Operator
+' ' Text
+'x' Name
+'.' Punctuation
+'right' Name
+';' Punctuation
+'\n ' Text
+'x' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+';' Punctuation
+'\n ' Text
+'x' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'color' Name
+';' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'red' Name
+';' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'x' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'moveRedLeft' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//borrow extra node from right child (which is a 3-node)' Comment.Single
+'\n ' Text
+'colorFlip' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'=' Operator
+' ' Text
+'rotateRight' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'rotateLeft' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'colorFlip' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'n' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'moveRedRight' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//borrow extra node from left child (which is a 3-node)' Comment.Single
+'\n ' Text
+'colorFlip' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'rotateRight' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'colorFlip' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'n' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'fixInvariants' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+' ' Text
+'&&' Operator
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//ensure left-leaning property' Comment.Single
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'rotateLeft' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+'&&' Operator
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//balance 4-node' Comment.Single
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'rotateRight' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+'&&' Operator
+' ' Text
+'isRed' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//split 4-node' Comment.Single
+'\n ' Text
+'colorFlip' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'n' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'deleteMinNode' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'//delete' Comment.Single
+'\n ' Text
+'--' Operator
+'nodeCount' Name
+';' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'null' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+'&&' Operator
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'moveRedLeft' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'=' Operator
+' ' Text
+'deleteMinNode' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'fixInvariants' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'minNode' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+'n' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'while' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'n' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'maxNode' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+'n' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'while' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'n' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'/** Used to verify that the invariants of the tree hold **/' Comment.Multiline
+'\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'inline' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'assertInvariants' Name.Function
+'(' Punctuation
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'#if' Comment.Preproc
+' ' Comment.Preproc
+'DEBUG' Comment.Preproc
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+' ' Text
+'isBlack' Name
+'(' Punctuation
+'root' Name
+')' Punctuation
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'r' Literal.String.Double
+'o' Literal.String.Double
+'o' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'i' Literal.String.Double
+'s' Literal.String.Double
+' ' Literal.String.Double
+'b' Literal.String.Double
+'l' Literal.String.Double
+'a' Literal.String.Double
+'c' Literal.String.Double
+'k' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'"' Literal.String.Double
+' ' Text
+'+' Operator
+' ' Text
+'root' Name
+' ' Text
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'assertIsTree' Name
+'(' Punctuation
+'root' Name
+',' Punctuation
+'new' Keyword
+' ' Text
+'List' Name
+'<' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+'(' Punctuation
+')' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'assertBlackNodeCount' Name
+'(' Punctuation
+'root' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'assertBSTOrdering' Name
+'(' Punctuation
+'root' Name
+',' Punctuation
+'comp' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'#end' Comment.Preproc
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'assertIsTree' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+':' Punctuation
+' ' Text
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+',' Punctuation
+' ' Text
+'visited' Name
+' ' Text
+':' Punctuation
+'List' Name
+'<' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'for' Keyword
+'(' Punctuation
+' ' Text
+'r' Name
+' ' Text
+'in' Keyword
+' ' Text
+'visited' Name
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'!=' Operator
+' ' Text
+'r' Name
+' ' Text
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'visited' Name
+'.' Punctuation
+'push' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'assertIsTree' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+',' Punctuation
+'visited' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'assertIsTree' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+',' Punctuation
+'visited' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'assertBlackNodeCount' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+':' Punctuation
+' ' Text
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+' ' Text
+':' Punctuation
+'Int' Name
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'1' Literal.Number.Integer
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'leftCount' Text
+' ' Text
+'=' Operator
+' ' Text
+'assertBlackNodeCount' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'rightCount' Text
+' ' Text
+'=' Operator
+' ' Text
+'assertBlackNodeCount' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+'\n ' Text
+'leftCount' Name
+' ' Text
+'==' Operator
+' ' Text
+'rightCount' Name
+',' Punctuation
+'\n ' Text
+'"' Literal.String.Double
+'n' Literal.String.Double
+'u' Literal.String.Double
+'m' Literal.String.Double
+' ' Literal.String.Double
+'o' Literal.String.Double
+'f' Literal.String.Double
+' ' Literal.String.Double
+'b' Literal.String.Double
+'l' Literal.String.Double
+'a' Literal.String.Double
+'c' Literal.String.Double
+'k' Literal.String.Double
+' ' Literal.String.Double
+'n' Literal.String.Double
+'o' Literal.String.Double
+'d' Literal.String.Double
+'e' Literal.String.Double
+'s' Literal.String.Double
+' ' Literal.String.Double
+'i' Literal.String.Double
+'n' Literal.String.Double
+' ' Literal.String.Double
+'a' Literal.String.Double
+'l' Literal.String.Double
+'l' Literal.String.Double
+' ' Literal.String.Double
+'p' Literal.String.Double
+'a' Literal.String.Double
+'t' Literal.String.Double
+'h' Literal.String.Double
+'s' Literal.String.Double
+' ' Literal.String.Double
+'f' Literal.String.Double
+'o' Literal.String.Double
+'r' Literal.String.Double
+' ' Literal.String.Double
+'l' Literal.String.Double
+'e' Literal.String.Double
+'f' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'a' Literal.String.Double
+'n' Literal.String.Double
+'d' Literal.String.Double
+' ' Literal.String.Double
+'r' Literal.String.Double
+'i' Literal.String.Double
+'g' Literal.String.Double
+'h' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'c' Literal.String.Double
+'h' Literal.String.Double
+'i' Literal.String.Double
+'l' Literal.String.Double
+'d' Literal.String.Double
+' ' Literal.String.Double
+'n' Literal.String.Double
+'o' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'e' Literal.String.Double
+'q' Literal.String.Double
+'u' Literal.String.Double
+'a' Literal.String.Double
+'l' Literal.String.Double
+'"' Literal.String.Double
+' ' Text
+'+' Operator
+' ' Text
+'n' Name
+'\n ' Text
+')' Punctuation
+';' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'leftCount' Name
+' ' Text
+'+' Operator
+' ' Text
+'switch' Keyword
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'color' Name
+')' Punctuation
+' ' Text
+'{' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'red' Name
+':' Punctuation
+' ' Text
+'' Keyword
+'0' Literal.Number.Integer
+';' Punctuation
+'\n ' Text
+'case' Keyword
+' ' Text
+'black' Name
+':' Punctuation
+' ' Text
+'' Keyword
+'1' Literal.Number.Integer
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'static' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'assertBSTOrdering' Name.Function
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'(' Punctuation
+' ' Text
+'n' Name
+':' Punctuation
+' ' Text
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+',' Punctuation
+' ' Text
+'compK' Name
+' ' Text
+':' Punctuation
+'K' Name
+' ' Text
+'->' Punctuation
+' ' Text
+'K' Name
+' ' Text
+'->' Punctuation
+' ' Text
+'Int' Name
+' ' Text
+')' Punctuation
+' ' Text
+':' Punctuation
+'Void' Name
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'==' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+'&&' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'val' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+' ' Text
+'compK' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+'.' Punctuation
+'key' Name
+',' Punctuation
+'n' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'l' Literal.String.Double
+'e' Literal.String.Double
+'f' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'c' Literal.String.Double
+'h' Literal.String.Double
+'i' Literal.String.Double
+'l' Literal.String.Double
+'d' Literal.String.Double
+' ' Literal.String.Double
+'n' Literal.String.Double
+'o' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'l' Literal.String.Double
+'e' Literal.String.Double
+'s' Literal.String.Double
+'s' Literal.String.Double
+' ' Literal.String.Double
+'t' Literal.String.Double
+'h' Literal.String.Double
+'a' Literal.String.Double
+'n' Literal.String.Double
+' ' Literal.String.Double
+'i' Literal.String.Double
+'t' Literal.String.Double
+'s' Literal.String.Double
+' ' Literal.String.Double
+'p' Literal.String.Double
+'a' Literal.String.Double
+'r' Literal.String.Double
+'e' Literal.String.Double
+'n' Literal.String.Double
+'t' Literal.String.Double
+'"' Literal.String.Double
+' ' Text
+'+' Operator
+' ' Text
+'n' Name
+' ' Text
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'assertBSTOrdering' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'left' Name
+',' Punctuation
+'compK' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+'&&' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'right' Name
+'.' Punctuation
+'val' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'Debug' Name
+'.' Punctuation
+'assert' Name
+'(' Punctuation
+' ' Text
+'compK' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'key' Name
+',' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+'.' Punctuation
+'key' Name
+')' Punctuation
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'p' Literal.String.Double
+'a' Literal.String.Double
+'r' Literal.String.Double
+'e' Literal.String.Double
+'n' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'n' Literal.String.Double
+'o' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'l' Literal.String.Double
+'e' Literal.String.Double
+'s' Literal.String.Double
+'s' Literal.String.Double
+' ' Literal.String.Double
+'t' Literal.String.Double
+'h' Literal.String.Double
+'a' Literal.String.Double
+'n' Literal.String.Double
+' ' Literal.String.Double
+'i' Literal.String.Double
+'t' Literal.String.Double
+'s' Literal.String.Double
+' ' Literal.String.Double
+'r' Literal.String.Double
+'i' Literal.String.Double
+'g' Literal.String.Double
+'h' Literal.String.Double
+'t' Literal.String.Double
+' ' Literal.String.Double
+'c' Literal.String.Double
+'h' Literal.String.Double
+'i' Literal.String.Double
+'l' Literal.String.Double
+'d' Literal.String.Double
+'"' Literal.String.Double
+' ' Text
+'+' Operator
+' ' Text
+'n' Name
+' ' Text
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'assertBSTOrdering' Name
+'(' Punctuation
+'n' Name
+'.' Punctuation
+'right' Name
+',' Punctuation
+'compK' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n\n' Text
+
+'private' Keyword.Declaration
+' ' Text
+'enum' Keyword.Declaration
+' ' Text
+'Color' Name
+'\n' Text
+
+'{' Punctuation
+'\n ' Text
+'red' Name
+';' Punctuation
+'\n ' Text
+'black' Name
+';' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n\n' Text
+
+'private' Keyword.Declaration
+' ' Text
+'class' Keyword.Declaration
+' ' Text
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+'/*implements Entry<K,V>*/' Comment.Multiline
+'\n' Text
+
+'{' Punctuation
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'left' Text
+' ' Text
+':' Punctuation
+'Null' Name
+'<' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+';' Punctuation
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'right' Text
+' ' Text
+':' Punctuation
+'Null' Name
+'<' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+';' Punctuation
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'color' Text
+' ' Text
+':' Punctuation
+'Color' Name
+';' Punctuation
+'\n\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'key' Text
+' ' Text
+':' Punctuation
+'K' Name
+';' Punctuation
+'\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'val' Text
+' ' Text
+':' Punctuation
+'V' Name
+';' Punctuation
+'\n\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'new' Name.Function
+'(' Punctuation
+'k' Name
+' ' Text
+':' Punctuation
+'K' Name
+',' Punctuation
+' ' Text
+'v' Name
+' ' Text
+':' Punctuation
+'V' Name
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'key' Name
+' ' Text
+'=' Operator
+' ' Text
+'k' Name
+';' Punctuation
+'\n ' Text
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'v' Name
+';' Punctuation
+'\n ' Text
+'color' Name
+' ' Text
+'=' Operator
+' ' Text
+'red' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n\n' Text
+
+'private' Keyword.Declaration
+' ' Text
+'class' Keyword.Declaration
+' ' Text
+'NodeIterator' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'\n' Text
+
+'{' Punctuation
+'\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'curr' Text
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+';' Punctuation
+'\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'var' Keyword.Declaration
+' ' Text
+'fringe' Text
+' ' Text
+':' Punctuation
+'Array' Name
+'<' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+';' Punctuation
+'\n\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'new' Name.Function
+'(' Punctuation
+' ' Text
+'root' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'fringe' Name
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'Array' Name
+'<' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'>' Punctuation
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'traverseToMin' Name
+'(' Punctuation
+'root' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'curr' Name
+' ' Text
+'=' Operator
+' ' Text
+'fringe' Name
+'.' Punctuation
+'pop' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'inline' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'hasNext' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+':' Punctuation
+'Bool' Name
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'return' Keyword
+' ' Text
+'curr' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'public' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'next' Name.Function
+'(' Punctuation
+')' Punctuation
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'!' Operator
+'hasNext' Name
+'(' Punctuation
+')' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'throw' Keyword
+' ' Text
+'new' Keyword
+' ' Text
+'NoSuchElement' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'var' Keyword.Declaration
+' ' Text
+'ret' Text
+' ' Text
+'=' Operator
+' ' Text
+'curr' Name
+';' Punctuation
+'\n\n ' Text
+'if' Keyword
+'(' Punctuation
+' ' Text
+'fringe' Name
+'.' Punctuation
+'length' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'curr' Name
+' ' Text
+'=' Operator
+' ' Text
+'fringe' Name
+'.' Punctuation
+'pop' Name
+'(' Punctuation
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'traverseToMin' Name
+'(' Punctuation
+'curr' Name
+'.' Punctuation
+'right' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'curr' Name
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword.Constant
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'return' Keyword
+' ' Text
+'ret' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n\n ' Text
+'private' Keyword.Declaration
+' ' Text
+'function' Keyword.Declaration
+' ' Text
+'traverseToMin' Name.Function
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+':' Punctuation
+'Node' Name
+'<' Punctuation
+'K' Name
+',' Punctuation
+'V' Name
+'>' Punctuation
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'while' Keyword
+'(' Punctuation
+' ' Text
+'n' Name
+' ' Text
+'!=' Operator
+' ' Text
+'null' Keyword.Constant
+' ' Text
+')' Punctuation
+'\n ' Text
+'{' Punctuation
+'\n ' Text
+'fringe' Name
+'.' Punctuation
+'push' Name
+'(' Punctuation
+'n' Name
+')' Punctuation
+';' Punctuation
+'\n ' Text
+'n' Name
+' ' Text
+'=' Operator
+' ' Text
+'n' Name
+'.' Punctuation
+'left' Name
+';' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n ' Text
+'}' Punctuation
+'\n' Text
+
+'}' Punctuation
+'\n' Text