summaryrefslogtreecommitdiff
path: root/tests/lexers/fsharp/example.txt
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2021-01-18 21:24:00 +0100
committerGeorg Brandl <georg@python.org>2021-01-18 22:08:36 +0100
commit2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch)
tree809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/fsharp/example.txt
parentf0445be718da83541ea3401aad882f3937147263 (diff)
downloadpygments-git-examplefiles.tar.gz
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/fsharp/example.txt')
-rw-r--r--tests/lexers/fsharp/example.txt7325
1 files changed, 7325 insertions, 0 deletions
diff --git a/tests/lexers/fsharp/example.txt b/tests/lexers/fsharp/example.txt
new file mode 100644
index 00000000..be1e0050
--- /dev/null
+++ b/tests/lexers/fsharp/example.txt
@@ -0,0 +1,7325 @@
+---input---
+// public domain
+
+module Deflate
+
+open System
+open System.Collections.Generic
+open System.IO
+open System.Linq
+open Crc
+
+let maxbuf = 32768
+let maxlen = 258
+
+let getBit (b:byte) (bit:int) =
+ if b &&& (1uy <<< bit) = 0uy then 0 else 1
+
+type BitReader(sin:Stream) =
+ let mutable bit = 8
+ let mutable cur = 0uy
+
+ member x.Skip() =
+ bit <- 8
+
+ member x.ReadBit() =
+ if bit = 8 then
+ bit <- 0
+ let b = sin.ReadByte()
+ if b = -1 then
+ failwith "バッファを超過しました"
+ cur <- byte b
+ let ret = if cur &&& (1uy <<< bit) = 0uy then 0 else 1
+ bit <- bit + 1
+ ret
+
+ member x.ReadLE n =
+ let mutable ret = 0
+ for i = 0 to n - 1 do
+ if x.ReadBit() = 1 then ret <- ret ||| (1 <<< i)
+ ret
+
+ member x.ReadBE n =
+ let mutable ret = 0
+ for i = 0 to n - 1 do
+ ret <- (ret <<< 1) ||| x.ReadBit()
+ ret
+
+ member x.ReadBytes len =
+ if bit <> 8 then bit <- 8
+ let buf = Array.zeroCreate<byte> len
+ ignore <| sin.Read(buf, 0, len)
+ buf
+
+type WriteBuffer(sout:Stream) =
+ let mutable prev:byte[] = null
+ let mutable buf = Array.zeroCreate<byte> maxbuf
+ let mutable p = 0
+
+ let next newbuf =
+ prev <- buf
+ buf <- if newbuf then Array.zeroCreate<byte> maxbuf else null
+ p <- 0
+
+ member x.Close() =
+ next false
+ next false
+
+ interface IDisposable with
+ member x.Dispose() = x.Close()
+
+ member x.WriteByte (b:byte) =
+ buf.[p] <- b
+ sout.WriteByte b
+ p <- p + 1
+ if p = maxbuf then next true
+
+ member x.Write (src:byte[]) start len =
+ let maxlen = maxbuf - p
+ if len <= maxlen then
+ Array.Copy(src, start, buf, p, len)
+ sout.Write(src, start, len)
+ p <- p + len
+ if p = maxbuf then next true
+ else
+ x.Write src start maxlen
+ x.Write src (start + maxlen) (len - maxlen)
+
+ member x.Copy len dist =
+ if dist < 1 then
+ failwith <| sprintf "dist too small: %d < 1" dist
+ elif dist > maxbuf then
+ failwith <| sprintf "dist too big: %d > %d" dist maxbuf
+ let pp = p - dist
+ if pp < 0 then
+ if prev = null then
+ failwith <| sprintf "dist too big: %d > %d" dist p
+ let pp = pp + maxbuf
+ let maxlen = maxbuf - pp
+ if len <= maxlen then
+ x.Write prev pp len
+ else
+ x.Write prev pp maxlen
+ x.Copy (len - maxlen) dist
+ else
+ let maxlen = p - pp
+ if len <= maxlen then
+ x.Write buf pp len
+ else
+ if dist = 1 then
+ let b = buf.[pp]
+ for i = 1 to len do
+ x.WriteByte b
+ else
+ let buf' = buf
+ let mutable len' = len
+ while len' > 0 do
+ let len'' = Math.Min(len', maxlen)
+ x.Write buf' pp len''
+ len' <- len' - len''
+
+type Huffman(lens:int[]) =
+ let vals = Array.zeroCreate<int> lens.Length
+ let min = lens.Where(fun x -> x > 0).Min()
+ let max = lens.Max()
+ let counts = Array.zeroCreate<int> (max + 1)
+ let firsts = Array.zeroCreate<int> (max + 1)
+ let nexts = Array.zeroCreate<int> (max + 1)
+ let tables = Array.zeroCreate<int[]>(max + 1)
+
+ do
+ for len in lens do
+ if len > 0 then counts.[len] <- counts.[len] + 1
+ for i = 1 to max do
+ firsts.[i] <- (firsts.[i - 1] + counts.[i - 1]) <<< 1
+ Array.Copy(firsts, 0, nexts, 0, max + 1)
+ for i = 0 to vals.Length - 1 do
+ let len = lens.[i]
+ if len > 0 then
+ vals.[i] <- nexts.[len]
+ nexts.[len] <- nexts.[len] + 1
+
+ for i = 0 to vals.Length - 1 do
+ let len = lens.[i]
+ if len > 0 then
+ let start = firsts.[len]
+ if tables.[len] = null then
+ let count = nexts.[len] - start
+ tables.[len] <- Array.zeroCreate<int> count
+ tables.[len].[vals.[i] - start] <- i
+
+ member x.GetValue h =
+ let rec getv i =
+ if i > max then -1 else
+ if h < nexts.[i] then
+ tables.[i].[h - firsts.[i]]
+ else
+ getv (i + 1)
+ getv min
+
+ member x.Read(br:BitReader) =
+ let rec read h i =
+ if h < nexts.[i] then
+ tables.[i].[h - firsts.[i]]
+ else
+ read ((h <<< 1) ||| br.ReadBit()) (i + 1)
+ read (br.ReadBE min) min
+
+type [<AbstractClass>] HuffmanDecoder() =
+ abstract GetValue: unit->int
+ abstract GetDistance: unit->int
+
+type FixedHuffman(br:BitReader) =
+ inherit HuffmanDecoder()
+
+ override x.GetValue() =
+ let v = br.ReadBE 7
+ if v < 24 then v + 256 else
+ let v = (v <<< 1) ||| br.ReadBit()
+ if v < 192 then v - 48
+ elif v < 200 then v + 88
+ else ((v <<< 1) ||| br.ReadBit()) - 256
+
+ override x.GetDistance() = br.ReadBE 5
+
+type DynamicHuffman(br:BitReader) =
+ inherit HuffmanDecoder()
+
+ let lit, dist =
+ let hlit =
+ let hlit = (br.ReadLE 5) + 257
+ if hlit > 286 then failwith <| sprintf "hlit: %d > 286" hlit
+ hlit
+
+ let hdist =
+ let hdist = (br.ReadLE 5) + 1
+ if hdist > 32 then failwith <| sprintf "hdist: %d > 32" hdist
+ hdist
+
+ let hclen =
+ let hclen = (br.ReadLE 4) + 4
+ if hclen > 19 then failwith <| sprintf "hclen: %d > 19" hclen
+ hclen
+
+ let clen =
+ let hclens = Array.zeroCreate<int> 19
+ let order = [| 16; 17; 18; 0; 8; 7; 9; 6; 10; 5;
+ 11; 4; 12; 3; 13; 2; 14; 1; 15 |]
+ for i = 0 to hclen - 1 do
+ hclens.[order.[i]] <- br.ReadLE 3
+ new Huffman(hclens)
+
+ let ld = Array.zeroCreate<int>(hlit + hdist)
+ let mutable i = 0
+ while i < ld.Length do
+ let v = clen.Read(br)
+ if v < 16 then
+ ld.[i] <- v
+ i <- i + 1
+ else
+ let r, v =
+ match v with
+ | 16 -> (br.ReadLE 2) + 3, ld.[i - 1]
+ | 17 -> (br.ReadLE 3) + 3, 0
+ | 18 -> (br.ReadLE 7) + 11, 0
+ | _ -> failwith "不正な値です。"
+ for j = 0 to r - 1 do
+ ld.[i + j] <- v
+ i <- i + r
+
+ new Huffman(ld.[0 .. hlit - 1]),
+ new Huffman(ld.[hlit .. hlit + hdist - 1])
+
+ override x.GetValue() = lit.Read br
+ override x.GetDistance() = dist.Read br
+
+let getLitExLen v = if v < 265 || v = 285 then 0 else (v - 261) >>> 2
+let getDistExLen d = if d < 4 then 0 else (d - 2) >>> 1
+
+let litlens =
+ let litlens = Array.zeroCreate<int> 286
+ let mutable v = 3
+ for i = 257 to 284 do
+ litlens.[i] <- v
+ v <- v + (1 <<< (getLitExLen i))
+ litlens.[285] <- maxlen
+ litlens.[257..285]
+
+let distlens =
+ let distlens = Array.zeroCreate<int> 30
+ let mutable v = 1
+ for i = 0 to 29 do
+ distlens.[i] <- v
+ v <- v + (1 <<< (getDistExLen i))
+ distlens
+
+type Reader(sin:Stream) =
+ inherit Stream()
+
+ let br = new BitReader(sin)
+ let fh = new FixedHuffman(br)
+
+ let sout = new MemoryStream()
+ let dbuf = new WriteBuffer(sout)
+
+ let mutable cache:byte[] = null
+ let mutable canRead = true
+
+ let rec read (h:HuffmanDecoder) =
+ let v = h.GetValue()
+ if v > 285 then failwith <| sprintf "不正な値: %d" v
+ if v < 256 then
+ dbuf.WriteByte(byte v)
+ elif v > 256 then
+ let len =
+ if v < 265 then v - 254 else
+ litlens.[v - 257] + (br.ReadLE (getLitExLen v))
+ let dist =
+ let d = h.GetDistance()
+ if d > 29 then failwith <| sprintf "不正な距離: %d" d
+ if d < 4 then d + 1 else
+ distlens.[d] + (br.ReadLE (getDistExLen d))
+ dbuf.Copy len dist
+ if v <> 256 then read h
+
+ override x.CanRead = canRead
+ override x.CanWrite = false
+ override x.CanSeek = false
+ override x.Flush() = ()
+
+ override x.Close() =
+ dbuf.Close()
+ canRead <- false
+
+ override x.Read(buffer, offset, count) =
+ let offset =
+ if cache = null then 0 else
+ let clen = cache.Length
+ let len = Math.Min(clen, count)
+ Array.Copy(cache, 0, buffer, offset, len)
+ cache <- if len = clen then null
+ else cache.[len .. clen - 1]
+ len
+ let req = int64 <| count - offset
+ while canRead && sout.Length < req do
+ x.readBlock()
+ let len =
+ if sout.Length = 0L then 0 else
+ let data = sout.ToArray()
+ sout.SetLength(0L)
+ let dlen = data.Length
+ let len = Math.Min(int req, dlen)
+ Array.Copy(data, 0, buffer, offset, len)
+ if dlen > len then
+ cache <- data.[len..]
+ len
+ offset + len
+
+ override x.Position
+ with get() = raise <| new NotImplementedException()
+ and set(v) = raise <| new NotImplementedException()
+
+ override x.Length = raise <| new NotImplementedException()
+ override x.Seek(_, _) = raise <| new NotImplementedException()
+ override x.Write(_, _, _) = raise <| new NotImplementedException()
+ override x.SetLength(_) = raise <| new NotImplementedException()
+
+ member private x.readBlock() =
+ let bfinal = br.ReadBit()
+ match br.ReadLE 2 with
+ | 0 -> br.Skip()
+ let len = br.ReadLE 16
+ let nlen = br.ReadLE 16
+ if len + nlen <> 0x10000 then
+ failwith "不正な非圧縮長"
+ dbuf.Write (br.ReadBytes len) 0 len
+ | 1 -> read fh
+ | 2 -> read (new DynamicHuffman(br))
+ | _ -> failwith "不正なブロックタイプ"
+ if bfinal = 1 then
+ canRead <- false
+ x.Close()
+
+type BitWriter(sout:Stream) =
+ let mutable bit = 0
+ let mutable cur = 0uy
+
+ member x.Skip() =
+ if bit > 0 then
+ sout.WriteByte(cur)
+ bit <- 0
+ cur <- 0uy
+
+ interface IDisposable with
+ member x.Dispose() =
+ x.Skip()
+ sout.Flush()
+
+ member x.WriteBit(b:int) =
+ cur <- cur ||| ((byte b) <<< bit)
+ bit <- bit + 1
+ if bit = 8 then
+ sout.WriteByte(cur)
+ bit <- 0
+ cur <- 0uy
+
+ member x.WriteLE (len:int) (b:int) =
+ for i = 0 to len - 1 do
+ x.WriteBit <| if (b &&& (1 <<< i)) = 0 then 0 else 1
+
+ member x.WriteBE (len:int) (b:int) =
+ for i = len - 1 downto 0 do
+ x.WriteBit <| if (b &&& (1 <<< i)) = 0 then 0 else 1
+
+ member x.WriteBytes(data:byte[]) =
+ x.Skip()
+ sout.Write(data, 0, data.Length)
+
+type FixedHuffmanWriter(bw:BitWriter) =
+ member x.Write (b:int) =
+ if b < 144 then
+ bw.WriteBE 8 (b + 0b110000)
+ elif b < 256 then
+ bw.WriteBE 9 (b - 144 + 0b110010000)
+ elif b < 280 then
+ bw.WriteBE 7 (b - 256)
+ elif b < 288 then
+ bw.WriteBE 8 (b - 280 + 0b11000000)
+
+ member x.WriteLen (len:int) =
+ if len < 3 || len > maxlen then
+ failwith <| sprintf "不正な長さ: %d" len
+ let mutable ll = 285
+ while len < litlens.[ll - 257] do
+ ll <- ll - 1
+ x.Write ll
+ bw.WriteLE (getLitExLen ll) (len - litlens.[ll - 257])
+
+ member x.WriteDist (d:int) =
+ if d < 1 || d > maxbuf then
+ failwith <| sprintf "不正な距離: %d" d
+ let mutable dl = 29
+ while d < distlens.[dl] do
+ dl <- dl - 1
+ bw.WriteBE 5 dl
+ bw.WriteLE (getDistExLen dl) (d - distlens.[dl])
+
+let maxbuf2 = maxbuf * 2
+let buflen = maxbuf2 + maxlen
+
+let inline getHash (buf:byte[]) pos =
+ ((int buf.[pos]) <<< 4) ^^^ ((int buf.[pos + 1]) <<< 2) ^^^ (int buf.[pos + 2])
+
+let inline addHash (hash:List<int>[]) (buf:byte[]) pos =
+ if buf.[pos] <> buf.[pos + 1] then
+ hash.[getHash buf pos].Add pos
+
+let inline addHash2 (tables:int[,]) (counts:int[]) (buf:byte[]) pos =
+ if buf.[pos] <> buf.[pos + 1] then
+ let h = getHash buf pos
+ let c = counts.[h]
+ tables.[h, c &&& 15] <- pos
+ counts.[h] <- c + 1
+
+type Writer(t:int, sin:Stream) =
+ let mutable length = buflen
+ let buf = Array.zeroCreate<byte> buflen
+ let tables, counts =
+ if t = 2 then Array2D.zeroCreate<int> 4096 16, Array.create 4096 0 else null, null
+ let hash = if tables = null then [| for _ in 0..4095 -> new List<int>() |] else null
+ let mutable crc = ~~~0u
+
+ let read pos len =
+ let rlen = sin.Read(buf, pos, len)
+ if rlen < len then length <- pos + rlen
+ for i = pos to pos + rlen - 1 do
+ let b = int(crc ^^^ (uint32 buf.[i])) &&& 0xff
+ crc <- (crc >>> 8) ^^^ crc32_table.[b]
+ if hash <> null then
+ for list in hash do list.Clear()
+ else
+ Array.fill counts 0 counts.Length 0
+
+ do
+ read 0 buflen
+
+ let search (pos:int) =
+ let mutable maxp = -1
+ let mutable maxl = 2
+ let mlen = Math.Min(maxlen, length - pos)
+ let last = Math.Max(0, pos - maxbuf)
+ let h = getHash buf pos
+ if hash <> null then
+ let list = hash.[h]
+ let mutable i = list.Count - 1
+ while i >= 0 do
+ let p = list.[i]
+ if p < last then i <- 0 else
+ let mutable len = 0
+ while len < mlen && buf.[p + len] = buf.[pos + len] do
+ len <- len + 1
+ if len > maxl then
+ maxp <- p
+ maxl <- len
+ i <- i - 1
+ else
+ let c = counts.[h]
+ let p1, p2 = if c < 16 then 0, c - 1 else c + 1, c + 16
+ let mutable i = p2
+ while i >= p1 do
+ let p = tables.[h, i &&& 15]
+ if p < last then i <- 0 else
+ let mutable len = 0
+ while len < mlen && buf.[p + len] = buf.[pos + len] do
+ len <- len + 1
+ if len > maxl then
+ maxp <- p
+ maxl <- len
+ i <- i - 1
+ maxp, maxl
+
+ member x.Crc = ~~~crc
+
+ member x.Compress (sout:Stream) =
+ use bw = new BitWriter(sout)
+ bw.WriteBit 1
+ bw.WriteLE 2 1
+ let hw = new FixedHuffmanWriter(bw)
+ let mutable p = 0
+ match t with
+ | 2 ->
+ while p < length do
+ let b = buf.[p]
+ if p < length - 4 && b = buf.[p + 1] && b = buf.[p + 2] && b = buf.[p + 3] then
+ let mutable len = 4
+ let mlen = Math.Min(maxlen + 1, length - p)
+ while len < mlen && b = buf.[p + len] do
+ len <- len + 1
+ hw.Write(int b)
+ hw.WriteLen(len - 1)
+ hw.WriteDist 1
+ p <- p + len
+ else
+ let maxp, maxl = search p
+ if maxp < 0 then
+ hw.Write(int b)
+ addHash2 tables counts buf p
+ p <- p + 1
+ else
+ hw.WriteLen maxl
+ hw.WriteDist (p - maxp)
+ for i = p to p + maxl - 1 do
+ addHash2 tables counts buf i
+ p <- p + maxl
+ if p > maxbuf2 then
+ Array.Copy(buf, maxbuf, buf, 0, maxbuf + maxlen)
+ if length < buflen then length <- length - maxbuf else
+ read (maxbuf + maxlen) maxbuf
+ p <- p - maxbuf
+ for i = 0 to p - 1 do
+ addHash2 tables counts buf i
+ | 1 ->
+ while p < length do
+ let b = buf.[p]
+ if p < length - 4 && b = buf.[p + 1] && b = buf.[p + 2] && b = buf.[p + 3] then
+ let mutable len = 4
+ let mlen = Math.Min(maxlen + 1, length - p)
+ while len < mlen && b = buf.[p + len] do
+ len <- len + 1
+ hw.Write(int b)
+ hw.WriteLen(len - 1)
+ hw.WriteDist 1
+ p <- p + len
+ else
+ let maxp, maxl = search p
+ if maxp < 0 then
+ hw.Write(int b)
+ addHash hash buf p
+ p <- p + 1
+ else
+ hw.WriteLen maxl
+ hw.WriteDist (p - maxp)
+ for i = p to p + maxl - 1 do
+ addHash hash buf i
+ p <- p + maxl
+ if p > maxbuf2 then
+ Array.Copy(buf, maxbuf, buf, 0, maxbuf + maxlen)
+ if length < buflen then length <- length - maxbuf else
+ read (maxbuf + maxlen) maxbuf
+ p <- p - maxbuf
+ for i = 0 to p - 1 do
+ addHash hash buf i
+ | _ ->
+ while p < length do
+ let maxp, maxl = search p
+ if maxp < 0 then
+ hw.Write(int buf.[p])
+ hash.[getHash buf p].Add p
+ p <- p + 1
+ else
+ hw.WriteLen maxl
+ hw.WriteDist (p - maxp)
+ for i = p to p + maxl - 1 do
+ hash.[getHash buf i].Add i
+ p <- p + maxl
+ if p > maxbuf2 then
+ Array.Copy(buf, maxbuf, buf, 0, maxbuf + maxlen)
+ if length < buflen then length <- length - maxbuf else
+ read (maxbuf + maxlen) maxbuf
+ p <- p - maxbuf
+ for i = 0 to p - 1 do
+ hash.[getHash buf i].Add i
+ hw.Write 256
+
+let GetCompressBytes (sin:Stream) =
+ let now = DateTime.Now
+ let ms = new MemoryStream()
+ let w = new Writer(1, sin)
+ w.Compress ms
+ ms.ToArray(), w.Crc
+
+---tokens---
+'// public domain\n' Comment.Single
+
+'\n' Text
+
+'module' Keyword
+' ' Text
+'Deflate' Name.Namespace
+'\n\n' Text
+
+'open' Keyword
+' ' Text
+'System' Name.Namespace
+'\n' Text
+
+'open' Keyword
+' ' Text
+'System.Collections.Generic' Name.Namespace
+'\n' Text
+
+'open' Keyword
+' ' Text
+'System.IO' Name.Namespace
+'\n' Text
+
+'open' Keyword
+' ' Text
+'System.Linq' Name.Namespace
+'\n' Text
+
+'open' Keyword
+' ' Text
+'Crc' Name.Namespace
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'maxbuf' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'32768' Literal.Number.Integer
+'\n' Text
+
+'let' Keyword
+' ' Text
+'maxlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'258' Literal.Number.Integer
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'getBit' Name.Variable
+' ' Text
+'(' Operator
+'b' Name
+':' Operator
+'byte' Keyword.Type
+')' Operator
+' ' Text
+'(' Operator
+'bit' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'b' Name
+' ' Text
+'&&' Operator
+'&' Operator
+' ' Text
+'(' Operator
+'1uy' Literal.Number.Integer
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'bit' Name
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'0uy' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'1' Literal.Number.Integer
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'BitReader' Name.Class
+'(' Operator
+'sin' Name
+':' Operator
+'Stream' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'bit' Name
+' ' Text
+'=' Operator
+' ' Text
+'8' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'cur' Name
+' ' Text
+'=' Operator
+' ' Text
+'0uy' Literal.Number.Integer
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Skip' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'bit' Name
+' ' Text
+'<-' Operator
+' ' Text
+'8' Literal.Number.Integer
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'ReadBit' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'bit' Name
+' ' Text
+'=' Operator
+' ' Text
+'8' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'bit' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'b' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'sin' Name
+'.' Operator
+'ReadByte' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'if' Keyword
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'-' Operator
+'1' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'failwith' Name
+' ' Text
+'"' Literal.String
+'バッファを超過しました' Literal.String
+'"' Literal.String
+'\n ' Text
+'cur' Name
+' ' Text
+'<-' Operator
+' ' Text
+'byte' Keyword.Type
+' ' Text
+'b' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'ret' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'cur' Name
+' ' Text
+'&&' Operator
+'&' Operator
+' ' Text
+'(' Operator
+'1uy' Literal.Number.Integer
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'bit' Name
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'0uy' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'bit' Name
+' ' Text
+'<-' Operator
+' ' Text
+'bit' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'ret' Name
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'ReadLE' Name.Function
+' ' Text
+'n' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'ret' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'n' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'if' Keyword
+' ' Text
+'x' Name
+'.' Operator
+'ReadBit' Name
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'ret' Name
+' ' Text
+'<-' Operator
+' ' Text
+'ret' Name
+' ' Text
+'|' Operator
+'|' Operator
+'|' Operator
+' ' Text
+'(' Operator
+'1' Literal.Number.Integer
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'i' Name
+')' Operator
+'\n ' Text
+'ret' Name
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'ReadBE' Name.Function
+' ' Text
+'n' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'ret' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'n' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'ret' Name
+' ' Text
+'<-' Operator
+' ' Text
+'(' Operator
+'ret' Name
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+' ' Text
+'|' Operator
+'|' Operator
+'|' Operator
+' ' Text
+'x' Name
+'.' Operator
+'ReadBit' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'ret' Name
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'ReadBytes' Name.Function
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'bit' Name
+' ' Text
+'<' Operator
+'>' Operator
+' ' Text
+'8' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'bit' Name
+' ' Text
+'<-' Operator
+' ' Text
+'8' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'buf' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'byte' Keyword.Type
+'>' Operator
+' ' Text
+'len' Name
+'\n ' Text
+'ignore' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sin' Name
+'.' Operator
+'Read' Name
+'(' Operator
+'buf' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'len' Name
+')' Operator
+'\n ' Text
+'buf' Name
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'WriteBuffer' Name.Class
+'(' Operator
+'sout' Name
+':' Operator
+'Stream' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'prev' Name
+':' Operator
+'byte' Keyword.Type
+'[]' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'buf' Name
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'byte' Keyword.Type
+'>' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'p' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'next' Name.Variable
+' ' Text
+'newbuf' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'prev' Name
+' ' Text
+'<-' Operator
+' ' Text
+'buf' Name
+'\n ' Text
+'buf' Name
+' ' Text
+'<-' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'newbuf' Name
+' ' Text
+'then' Keyword
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'byte' Keyword.Type
+'>' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'else' Keyword
+' ' Text
+'null' Keyword
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Close' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'next' Name
+' ' Text
+'false' Keyword
+'\n ' Text
+'next' Name
+' ' Text
+'false' Keyword
+'\n \n ' Text
+'interface' Keyword
+' ' Text
+'IDisposable' Name
+' ' Text
+'with' Keyword
+'\n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Dispose' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'x' Name
+'.' Operator
+'Close' Name
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'WriteByte' Name.Function
+' ' Text
+'(' Operator
+'b' Name
+':' Operator
+'byte' Keyword.Type
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'b' Name
+'\n ' Text
+'sout' Name
+'.' Operator
+'WriteByte' Name
+' ' Text
+'b' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'=' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'then' Keyword
+' ' Text
+'next' Name
+' ' Text
+'true' Keyword
+'\n\n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Write' Name.Function
+' ' Text
+'(' Operator
+'src' Name
+':' Operator
+'byte' Keyword.Type
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'start' Name
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'maxlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'-' Operator
+' ' Text
+'p' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'maxlen' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'Copy' Name
+'(' Operator
+'src' Name
+',' Operator
+' ' Text
+'start' Name
+',' Operator
+' ' Text
+'buf' Name
+',' Operator
+' ' Text
+'p' Name
+',' Operator
+' ' Text
+'len' Name
+')' Operator
+'\n ' Text
+'sout' Name
+'.' Operator
+'Write' Name
+'(' Operator
+'src' Name
+',' Operator
+' ' Text
+'start' Name
+',' Operator
+' ' Text
+'len' Name
+')' Operator
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'=' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'then' Keyword
+' ' Text
+'next' Name
+' ' Text
+'true' Keyword
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'Write' Name
+' ' Text
+'src' Name
+' ' Text
+'start' Name
+' ' Text
+'maxlen' Name
+'\n ' Text
+'x' Name
+'.' Operator
+'Write' Name
+' ' Text
+'src' Name
+' ' Text
+'(' Operator
+'start' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+' ' Text
+'(' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Copy' Name.Function
+' ' Text
+'len' Name
+' ' Text
+'dist' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'dist' Name
+' ' Text
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'dist too small: %d < 1' Literal.String
+'"' Literal.String
+' ' Text
+'dist' Name
+'\n ' Text
+'elif' Keyword
+' ' Text
+'dist' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'dist too big: %d > %d' Literal.String
+'"' Literal.String
+' ' Text
+'dist' Name
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'pp' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'dist' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'pp' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'if' Keyword
+' ' Text
+'prev' Name
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword
+' ' Text
+'then' Keyword
+'\n ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'dist too big: %d > %d' Literal.String
+'"' Literal.String
+' ' Text
+'dist' Name
+' ' Text
+'p' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'pp' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'pp' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'maxlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'-' Operator
+' ' Text
+'pp' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'maxlen' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'Write' Name
+' ' Text
+'prev' Name
+' ' Text
+'pp' Name
+' ' Text
+'len' Name
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'Write' Name
+' ' Text
+'prev' Name
+' ' Text
+'pp' Name
+' ' Text
+'maxlen' Name
+'\n ' Text
+'x' Name
+'.' Operator
+'Copy' Name
+' ' Text
+'(' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+' ' Text
+'dist' Name
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'maxlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'pp' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+'=' Operator
+' ' Text
+'maxlen' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'Write' Name
+' ' Text
+'buf' Name
+' ' Text
+'pp' Name
+' ' Text
+'len' Name
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'if' Keyword
+' ' Text
+'dist' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'b' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pp' Name
+']' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'len' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'WriteByte' Name
+' ' Text
+'b' Name
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'buf' Name.Variable
+"'" Keyword
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+"len'" Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+'\n ' Text
+'while' Keyword
+' ' Text
+"len'" Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+"'" Keyword
+"'" Keyword
+' ' Text
+'=' Operator
+' ' Text
+'Math' Name.Namespace
+'.' Punctuation
+'Min' Name
+'(' Operator
+"len'" Name
+',' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+'\n ' Text
+'x' Name
+'.' Operator
+'Write' Name
+' ' Text
+"buf'" Name
+' ' Text
+'pp' Name
+' ' Text
+"len''" Name
+'\n ' Text
+"len'" Name
+' ' Text
+'<-' Operator
+' ' Text
+"len'" Name
+' ' Text
+'-' Operator
+' ' Text
+"len''" Name
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'Huffman' Name.Class
+'(' Operator
+'lens' Name
+':' Operator
+'int' Name
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'vals' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'lens' Name
+'.' Operator
+'Length' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'min' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'lens' Name
+'.' Operator
+'Where' Name
+'(' Operator
+'fun' Keyword
+' ' Text
+'x' Name
+' ' Text
+'->' Operator
+' ' Text
+'x' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+')' Operator
+'.' Operator
+'Min' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'let' Keyword
+' ' Text
+'max' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'lens' Name
+'.' Operator
+'Max' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'let' Keyword
+' ' Text
+'counts' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'(' Operator
+'max' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'firsts' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'(' Operator
+'max' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'nexts' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'(' Operator
+'max' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'tables' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'[]' Name.Builtin.Pseudo
+'>' Operator
+'(' Operator
+'max' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n \n ' Text
+'do' Keyword
+'\n ' Text
+'for' Keyword
+' ' Text
+'len' Name
+' ' Text
+'in' Keyword
+' ' Text
+'lens' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'counts' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'counts' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'max' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'firsts' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'(' Operator
+'firsts' Name
+'.' Operator
+'[' Operator
+'i' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+' ' Text
+'+' Operator
+' ' Text
+'counts' Name
+'.' Operator
+'[' Operator
+'i' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+')' Operator
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'Copy' Name
+'(' Operator
+'firsts' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'nexts' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'max' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'vals' Name
+'.' Operator
+'Length' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'lens' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'vals' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'nexts' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+'\n ' Text
+'nexts' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'nexts' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n \n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'vals' Name
+'.' Operator
+'Length' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'lens' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'start' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'firsts' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'tables' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'count' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'nexts' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+' ' Text
+'-' Operator
+' ' Text
+'start' Name
+'\n ' Text
+'tables' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'count' Name
+'\n ' Text
+'tables' Name
+'.' Operator
+'[' Operator
+'len' Name
+']' Operator
+'.' Operator
+'[' Operator
+'vals' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'-' Operator
+' ' Text
+'start' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'i' Name
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'GetValue' Name.Function
+' ' Text
+'h' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'rec' Name.Variable
+' ' Text
+'getv' Name
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'i' Name
+' ' Text
+'>' Operator
+' ' Text
+'max' Name
+' ' Text
+'then' Keyword
+' ' Text
+'-' Operator
+'1' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'if' Keyword
+' ' Text
+'h' Name
+' ' Text
+'<' Operator
+' ' Text
+'nexts' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'then' Keyword
+'\n ' Text
+'tables' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+'.' Operator
+'[' Operator
+'h' Name
+' ' Text
+'-' Operator
+' ' Text
+'firsts' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+']' Operator
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'getv' Name
+' ' Text
+'(' Operator
+'i' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'getv' Name
+' ' Text
+'min' Name
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Read' Name.Function
+'(' Operator
+'br' Name
+':' Operator
+'BitReader' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'rec' Name.Variable
+' ' Text
+'read' Name
+' ' Text
+'h' Name
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'h' Name
+' ' Text
+'<' Operator
+' ' Text
+'nexts' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'then' Keyword
+'\n ' Text
+'tables' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+'.' Operator
+'[' Operator
+'h' Name
+' ' Text
+'-' Operator
+' ' Text
+'firsts' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+']' Operator
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'read' Name
+' ' Text
+'(' Operator
+'(' Operator
+'h' Name
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+' ' Text
+'|' Operator
+'|' Operator
+'|' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadBit' Name
+'()' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'(' Operator
+'i' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'read' Name
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadBE' Name
+' ' Text
+'min' Name
+')' Operator
+' ' Text
+'min' Name
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'[<' Operator
+'AbstractClass' Name
+'>]' Operator
+' ' Text
+'HuffmanDecoder' Name
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'abstract' Keyword
+' ' Text
+'GetValue' Name
+':' Operator
+' ' Text
+'unit' Keyword.Type
+'->' Operator
+'int' Name
+'\n ' Text
+'abstract' Keyword
+' ' Text
+'GetDistance' Name
+':' Operator
+' ' Text
+'unit' Keyword.Type
+'->' Operator
+'int' Name
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'FixedHuffman' Name.Class
+'(' Operator
+'br' Name
+':' Operator
+'BitReader' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'inherit' Keyword
+' ' Text
+'HuffmanDecoder' Name
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'GetValue' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'v' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadBE' Name
+' ' Text
+'7' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+' ' Text
+'24' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'v' Name
+' ' Text
+'+' Operator
+' ' Text
+'256' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'v' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'(' Operator
+'v' Name
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+' ' Text
+'|' Operator
+'|' Operator
+'|' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadBit' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+' ' Text
+'192' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'v' Name
+' ' Text
+'-' Operator
+' ' Text
+'48' Literal.Number.Integer
+'\n ' Text
+'elif' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+' ' Text
+'200' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'v' Name
+' ' Text
+'+' Operator
+' ' Text
+'88' Literal.Number.Integer
+'\n ' Text
+'else' Keyword
+' ' Text
+'(' Operator
+'(' Operator
+'v' Name
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+' ' Text
+'|' Operator
+'|' Operator
+'|' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadBit' Name
+'()' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'-' Operator
+' ' Text
+'256' Literal.Number.Integer
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'GetDistance' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadBE' Name
+' ' Text
+'5' Literal.Number.Integer
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'DynamicHuffman' Name.Class
+'(' Operator
+'br' Name
+':' Operator
+'BitReader' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'inherit' Keyword
+' ' Text
+'HuffmanDecoder' Name
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'lit' Name.Variable
+',' Operator
+' ' Text
+'dist' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'hlit' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'hlit' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'5' Literal.Number.Integer
+')' Operator
+' ' Text
+'+' Operator
+' ' Text
+'257' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'hlit' Name
+' ' Text
+'>' Operator
+' ' Text
+'286' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'hlit: %d > 286' Literal.String
+'"' Literal.String
+' ' Text
+'hlit' Name
+'\n ' Text
+'hlit' Name
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'hdist' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'hdist' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'5' Literal.Number.Integer
+')' Operator
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'hdist' Name
+' ' Text
+'>' Operator
+' ' Text
+'32' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'hdist: %d > 32' Literal.String
+'"' Literal.String
+' ' Text
+'hdist' Name
+'\n ' Text
+'hdist' Name
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'hclen' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'hclen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'4' Literal.Number.Integer
+')' Operator
+' ' Text
+'+' Operator
+' ' Text
+'4' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'hclen' Name
+' ' Text
+'>' Operator
+' ' Text
+'19' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'hclen: %d > 19' Literal.String
+'"' Literal.String
+' ' Text
+'hclen' Name
+'\n ' Text
+'hclen' Name
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'clen' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'hclens' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'19' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'order' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'[|' Operator
+' ' Text
+'16' Literal.Number.Integer
+';' Operator
+' ' Text
+'17' Literal.Number.Integer
+';' Operator
+' ' Text
+'18' Literal.Number.Integer
+';' Operator
+' ' Text
+'0' Literal.Number.Integer
+';' Operator
+' ' Text
+'8' Literal.Number.Integer
+';' Operator
+' ' Text
+'7' Literal.Number.Integer
+';' Operator
+' ' Text
+'9' Literal.Number.Integer
+';' Operator
+' ' Text
+'6' Literal.Number.Integer
+';' Operator
+' ' Text
+'10' Literal.Number.Integer
+';' Operator
+' ' Text
+'5' Literal.Number.Integer
+';' Operator
+'\n ' Text
+'11' Literal.Number.Integer
+';' Operator
+' ' Text
+'4' Literal.Number.Integer
+';' Operator
+' ' Text
+'12' Literal.Number.Integer
+';' Operator
+' ' Text
+'3' Literal.Number.Integer
+';' Operator
+' ' Text
+'13' Literal.Number.Integer
+';' Operator
+' ' Text
+'2' Literal.Number.Integer
+';' Operator
+' ' Text
+'14' Literal.Number.Integer
+';' Operator
+' ' Text
+'1' Literal.Number.Integer
+';' Operator
+' ' Text
+'15' Literal.Number.Integer
+' ' Text
+'|]' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'hclen' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'hclens' Name
+'.' Operator
+'[' Operator
+'order' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'3' Literal.Number.Integer
+'\n ' Text
+'new' Keyword
+' ' Text
+'Huffman' Name
+'(' Operator
+'hclens' Name
+')' Operator
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'ld' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+'(' Operator
+'hlit' Name
+' ' Text
+'+' Operator
+' ' Text
+'hdist' Name
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'while' Keyword
+' ' Text
+'i' Name
+' ' Text
+'<' Operator
+' ' Text
+'ld' Name
+'.' Operator
+'Length' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'v' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'clen' Name
+'.' Operator
+'Read' Name
+'(' Operator
+'br' Name
+')' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+' ' Text
+'16' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'ld' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'v' Name
+'\n ' Text
+'i' Name
+' ' Text
+'<-' Operator
+' ' Text
+'i' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'r' Name.Variable
+',' Operator
+' ' Text
+'v' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'match' Keyword
+' ' Text
+'v' Name
+' ' Text
+'with' Keyword
+'\n ' Text
+'|' Operator
+' ' Text
+'16' Literal.Number.Integer
+' ' Text
+'->' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'2' Literal.Number.Integer
+')' Operator
+' ' Text
+'+' Operator
+' ' Text
+'3' Literal.Number.Integer
+',' Operator
+' ' Text
+'ld' Name
+'.' Operator
+'[' Operator
+'i' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+'\n ' Text
+'|' Operator
+' ' Text
+'17' Literal.Number.Integer
+' ' Text
+'->' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'3' Literal.Number.Integer
+')' Operator
+' ' Text
+'+' Operator
+' ' Text
+'3' Literal.Number.Integer
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'|' Operator
+' ' Text
+'18' Literal.Number.Integer
+' ' Text
+'->' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'7' Literal.Number.Integer
+')' Operator
+' ' Text
+'+' Operator
+' ' Text
+'11' Literal.Number.Integer
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'|' Operator
+' ' Text
+'_' Operator
+' ' Text
+'->' Operator
+' ' Text
+'failwith' Name
+' ' Text
+'"' Literal.String
+'不正な値です。' Literal.String
+'"' Literal.String
+'\n ' Text
+'for' Keyword
+' ' Text
+'j' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'r' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'ld' Name
+'.' Operator
+'[' Operator
+'i' Name
+' ' Text
+'+' Operator
+' ' Text
+'j' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'v' Name
+'\n ' Text
+'i' Name
+' ' Text
+'<-' Operator
+' ' Text
+'i' Name
+' ' Text
+'+' Operator
+' ' Text
+'r' Name
+'\n \n ' Text
+'new' Keyword
+' ' Text
+'Huffman' Name
+'(' Operator
+'ld' Name
+'.' Operator
+'[' Operator
+'0' Literal.Number.Integer
+' ' Text
+'..' Operator
+' ' Text
+'hlit' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+')' Operator
+',' Operator
+'\n ' Text
+'new' Keyword
+' ' Text
+'Huffman' Name
+'(' Operator
+'ld' Name
+'.' Operator
+'[' Operator
+'hlit' Name
+' ' Text
+'..' Operator
+' ' Text
+'hlit' Name
+' ' Text
+'+' Operator
+' ' Text
+'hdist' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+')' Operator
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'GetValue' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'lit' Name
+'.' Operator
+'Read' Name
+' ' Text
+'br' Name
+'\n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'GetDistance' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'dist' Name
+'.' Operator
+'Read' Name
+' ' Text
+'br' Name
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'getLitExLen' Name.Variable
+' ' Text
+'v' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+' ' Text
+'265' Literal.Number.Integer
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'v' Name
+' ' Text
+'=' Operator
+' ' Text
+'285' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'(' Operator
+'v' Name
+' ' Text
+'-' Operator
+' ' Text
+'261' Literal.Number.Integer
+')' Operator
+' ' Text
+'>' Operator
+'>' Operator
+'>' Operator
+' ' Text
+'2' Literal.Number.Integer
+'\n' Text
+
+'let' Keyword
+' ' Text
+'getDistExLen' Name.Variable
+' ' Text
+'d' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'d' Name
+' ' Text
+'<' Operator
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'(' Operator
+'d' Name
+' ' Text
+'-' Operator
+' ' Text
+'2' Literal.Number.Integer
+')' Operator
+' ' Text
+'>' Operator
+'>' Operator
+'>' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'litlens' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'litlens' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'286' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'v' Name
+' ' Text
+'=' Operator
+' ' Text
+'3' Literal.Number.Integer
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'257' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'284' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'litlens' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'v' Name
+'\n ' Text
+'v' Name
+' ' Text
+'<-' Operator
+' ' Text
+'v' Name
+' ' Text
+'+' Operator
+' ' Text
+'(' Operator
+'1' Literal.Number.Integer
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'(' Operator
+'getLitExLen' Name
+' ' Text
+'i' Name
+')' Operator
+')' Operator
+'\n ' Text
+'litlens' Name
+'.' Operator
+'[' Operator
+'285' Literal.Number.Integer
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'maxlen' Name
+'\n ' Text
+'litlens' Name
+'.' Operator
+'[' Operator
+'257' Literal.Number.Integer
+'..' Operator
+'285' Literal.Number.Integer
+']' Operator
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'distlens' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'distlens' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'30' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'v' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'29' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'distlens' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'v' Name
+'\n ' Text
+'v' Name
+' ' Text
+'<-' Operator
+' ' Text
+'v' Name
+' ' Text
+'+' Operator
+' ' Text
+'(' Operator
+'1' Literal.Number.Integer
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'(' Operator
+'getDistExLen' Name
+' ' Text
+'i' Name
+')' Operator
+')' Operator
+'\n ' Text
+'distlens' Name
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'Reader' Name.Class
+'(' Operator
+'sin' Name
+':' Operator
+'Stream' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'inherit' Keyword
+' ' Text
+'Stream' Name
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'br' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'BitReader' Name
+'(' Operator
+'sin' Name
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'fh' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'FixedHuffman' Name
+'(' Operator
+'br' Name
+')' Operator
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'sout' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'MemoryStream' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'let' Keyword
+' ' Text
+'dbuf' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'WriteBuffer' Name
+'(' Operator
+'sout' Name
+')' Operator
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'cache' Name
+':' Operator
+'byte' Keyword.Type
+'[]' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'canRead' Name
+' ' Text
+'=' Operator
+' ' Text
+'true' Keyword
+'\n\n ' Text
+'let' Keyword
+' ' Text
+'rec' Name.Variable
+' ' Text
+'read' Name
+' ' Text
+'(' Operator
+'h' Name
+':' Operator
+'HuffmanDecoder' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'v' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'h' Name
+'.' Operator
+'GetValue' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'>' Operator
+' ' Text
+'285' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'不正な値: %d' Literal.String
+'"' Literal.String
+' ' Text
+'v' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+' ' Text
+'256' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'dbuf' Name
+'.' Operator
+'WriteByte' Name
+'(' Operator
+'byte' Keyword.Type
+' ' Text
+'v' Name
+')' Operator
+'\n ' Text
+'elif' Keyword
+' ' Text
+'v' Name
+' ' Text
+'>' Operator
+' ' Text
+'256' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+' ' Text
+'265' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'v' Name
+' ' Text
+'-' Operator
+' ' Text
+'254' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'litlens' Name
+'.' Operator
+'[' Operator
+'v' Name
+' ' Text
+'-' Operator
+' ' Text
+'257' Literal.Number.Integer
+']' Operator
+' ' Text
+'+' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'(' Operator
+'getLitExLen' Name
+' ' Text
+'v' Name
+')' Operator
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'dist' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'d' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'h' Name
+'.' Operator
+'GetDistance' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'if' Keyword
+' ' Text
+'d' Name
+' ' Text
+'>' Operator
+' ' Text
+'29' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'不正な距離: %d' Literal.String
+'"' Literal.String
+' ' Text
+'d' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'d' Name
+' ' Text
+'<' Operator
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'d' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'distlens' Name
+'.' Operator
+'[' Operator
+'d' Name
+']' Operator
+' ' Text
+'+' Operator
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'(' Operator
+'getDistExLen' Name
+' ' Text
+'d' Name
+')' Operator
+')' Operator
+'\n ' Text
+'dbuf' Name
+'.' Operator
+'Copy' Name
+' ' Text
+'len' Name
+' ' Text
+'dist' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'v' Name
+' ' Text
+'<' Operator
+'>' Operator
+' ' Text
+'256' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'read' Name
+' ' Text
+'h' Name
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'CanRead' Name.Function
+' ' Text
+'=' Operator
+' ' Text
+'canRead' Name
+'\n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'CanWrite' Name.Function
+' ' Text
+'=' Operator
+' ' Text
+'false' Keyword
+'\n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'CanSeek' Name.Function
+' ' Text
+'=' Operator
+' ' Text
+'false' Keyword
+'\n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Flush' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Close' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'dbuf' Name
+'.' Operator
+'Close' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'canRead' Name
+' ' Text
+'<-' Operator
+' ' Text
+'false' Keyword
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Read' Name.Function
+'(' Operator
+'buffer' Name
+',' Operator
+' ' Text
+'offset' Name
+',' Operator
+' ' Text
+'count' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'offset' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'cache' Name
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'clen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'cache' Name
+'.' Operator
+'Length' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Math' Name.Namespace
+'.' Punctuation
+'Min' Name
+'(' Operator
+'clen' Name
+',' Operator
+' ' Text
+'count' Name
+')' Operator
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'Copy' Name
+'(' Operator
+'cache' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'buffer' Name
+',' Operator
+' ' Text
+'offset' Name
+',' Operator
+' ' Text
+'len' Name
+')' Operator
+'\n ' Text
+'cache' Name
+' ' Text
+'<-' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'clen' Name
+' ' Text
+'then' Keyword
+' ' Text
+'null' Keyword
+'\n ' Text
+'else' Keyword
+' ' Text
+'cache' Name
+'.' Operator
+'[' Operator
+'len' Name
+' ' Text
+'..' Operator
+' ' Text
+'clen' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+'\n ' Text
+'len' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'req' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'int64' Keyword.Type
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'count' Name
+' ' Text
+'-' Operator
+' ' Text
+'offset' Name
+'\n ' Text
+'while' Keyword
+' ' Text
+'canRead' Name
+' ' Text
+'&&' Operator
+' ' Text
+'sout' Name
+'.' Operator
+'Length' Name
+' ' Text
+'<' Operator
+' ' Text
+'req' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'readBlock' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'sout' Name
+'.' Operator
+'Length' Name
+' ' Text
+'=' Operator
+' ' Text
+'0L' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'data' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'sout' Name
+'.' Operator
+'ToArray' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'sout' Name
+'.' Operator
+'SetLength' Name
+'(' Operator
+'0L' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'dlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'data' Name
+'.' Operator
+'Length' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Math' Name.Namespace
+'.' Punctuation
+'Min' Name
+'(' Operator
+'int' Name
+' ' Text
+'req' Name
+',' Operator
+' ' Text
+'dlen' Name
+')' Operator
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'Copy' Name
+'(' Operator
+'data' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'buffer' Name
+',' Operator
+' ' Text
+'offset' Name
+',' Operator
+' ' Text
+'len' Name
+')' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'dlen' Name
+' ' Text
+'>' Operator
+' ' Text
+'len' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'cache' Name
+' ' Text
+'<-' Operator
+' ' Text
+'data' Name
+'.' Operator
+'[' Operator
+'len' Name
+'..' Operator
+']' Operator
+'\n ' Text
+'len' Name
+'\n ' Text
+'offset' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Position' Name.Function
+'\n ' Text
+'with' Keyword
+' ' Text
+'get' Name
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+' ' Text
+'raise' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'NotImplementedException' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'and' Operator.Word
+' ' Text
+'set' Name
+'(' Operator
+'v' Name
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'raise' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'NotImplementedException' Name
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Length' Name.Function
+' ' Text
+'=' Operator
+' ' Text
+'raise' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'NotImplementedException' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Seek' Name.Function
+'(' Operator
+'_' Operator
+',' Operator
+' ' Text
+'_' Operator
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'raise' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'NotImplementedException' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Write' Name.Function
+'(' Operator
+'_' Operator
+',' Operator
+' ' Text
+'_' Operator
+',' Operator
+' ' Text
+'_' Operator
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'raise' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'NotImplementedException' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'override' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'SetLength' Name.Function
+'(' Operator
+'_' Operator
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'raise' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'NotImplementedException' Name
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'private' Keyword
+' ' Text
+'x' Name
+'.' Operator
+'readBlock' Name
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'bfinal' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadBit' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'match' Keyword
+' ' Text
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'2' Literal.Number.Integer
+' ' Text
+'with' Keyword
+'\n ' Text
+'|' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'->' Operator
+' ' Text
+'br' Name
+'.' Operator
+'Skip' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'let' Keyword
+' ' Text
+'len' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'16' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'nlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'br' Name
+'.' Operator
+'ReadLE' Name
+' ' Text
+'16' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'nlen' Name
+' ' Text
+'<' Operator
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+'x10000' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'failwith' Name
+' ' Text
+'"' Literal.String
+'不正な非圧縮長' Literal.String
+'"' Literal.String
+'\n ' Text
+'dbuf' Name
+'.' Operator
+'Write' Name
+' ' Text
+'(' Operator
+'br' Name
+'.' Operator
+'ReadBytes' Name
+' ' Text
+'len' Name
+')' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'len' Name
+'\n ' Text
+'|' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'->' Operator
+' ' Text
+'read' Name
+' ' Text
+'fh' Name
+'\n ' Text
+'|' Operator
+' ' Text
+'2' Literal.Number.Integer
+' ' Text
+'->' Operator
+' ' Text
+'read' Name
+' ' Text
+'(' Operator
+'new' Keyword
+' ' Text
+'DynamicHuffman' Name
+'(' Operator
+'br' Name
+')' Operator
+')' Operator
+'\n ' Text
+'|' Operator
+' ' Text
+'_' Operator
+' ' Text
+'->' Operator
+' ' Text
+'failwith' Name
+' ' Text
+'"' Literal.String
+'不正なブロックタイプ' Literal.String
+'"' Literal.String
+'\n ' Text
+'if' Keyword
+' ' Text
+'bfinal' Name
+' ' Text
+'=' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'canRead' Name
+' ' Text
+'<-' Operator
+' ' Text
+'false' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'Close' Name
+'()' Name.Builtin.Pseudo
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'BitWriter' Name.Class
+'(' Operator
+'sout' Name
+':' Operator
+'Stream' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'bit' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'cur' Name
+' ' Text
+'=' Operator
+' ' Text
+'0uy' Literal.Number.Integer
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Skip' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'bit' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'sout' Name
+'.' Operator
+'WriteByte' Name
+'(' Operator
+'cur' Name
+')' Operator
+'\n ' Text
+'bit' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'cur' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0uy' Literal.Number.Integer
+'\n \n ' Text
+'interface' Keyword
+' ' Text
+'IDisposable' Name
+' ' Text
+'with' Keyword
+'\n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Dispose' Name.Function
+'()' Name.Builtin.Pseudo
+' ' Text
+'=' Operator
+'\n ' Text
+'x' Name
+'.' Operator
+'Skip' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'sout' Name
+'.' Operator
+'Flush' Name
+'()' Name.Builtin.Pseudo
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'WriteBit' Name.Function
+'(' Operator
+'b' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'cur' Name
+' ' Text
+'<-' Operator
+' ' Text
+'cur' Name
+' ' Text
+'|' Operator
+'|' Operator
+'|' Operator
+' ' Text
+'(' Operator
+'(' Operator
+'byte' Keyword.Type
+' ' Text
+'b' Name
+')' Operator
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'bit' Name
+')' Operator
+'\n ' Text
+'bit' Name
+' ' Text
+'<-' Operator
+' ' Text
+'bit' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'bit' Name
+' ' Text
+'=' Operator
+' ' Text
+'8' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'sout' Name
+'.' Operator
+'WriteByte' Name
+'(' Operator
+'cur' Name
+')' Operator
+'\n ' Text
+'bit' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'cur' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0uy' Literal.Number.Integer
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'WriteLE' Name.Function
+' ' Text
+'(' Operator
+'len' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'(' Operator
+'b' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'WriteBit' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'(' Operator
+'b' Name
+' ' Text
+'&&' Operator
+'&' Operator
+' ' Text
+'(' Operator
+'1' Literal.Number.Integer
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'i' Name
+')' Operator
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'1' Literal.Number.Integer
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'WriteBE' Name.Function
+' ' Text
+'(' Operator
+'len' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'(' Operator
+'b' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'downto' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'x' Name
+'.' Operator
+'WriteBit' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'(' Operator
+'b' Name
+' ' Text
+'&&' Operator
+'&' Operator
+' ' Text
+'(' Operator
+'1' Literal.Number.Integer
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'i' Name
+')' Operator
+')' Operator
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'1' Literal.Number.Integer
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'WriteBytes' Name.Function
+'(' Operator
+'data' Name
+':' Operator
+'byte' Keyword.Type
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'x' Name
+'.' Operator
+'Skip' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'sout' Name
+'.' Operator
+'Write' Name
+'(' Operator
+'data' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'data' Name
+'.' Operator
+'Length' Name
+')' Operator
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'FixedHuffmanWriter' Name.Class
+'(' Operator
+'bw' Name
+':' Operator
+'BitWriter' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Write' Name.Function
+' ' Text
+'(' Operator
+'b' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'b' Name
+' ' Text
+'<' Operator
+' ' Text
+'144' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteBE' Name
+' ' Text
+'8' Literal.Number.Integer
+' ' Text
+'(' Operator
+'b' Name
+' ' Text
+'+' Operator
+' ' Text
+'0' Literal.Number.Integer
+'b110000' Name
+')' Operator
+'\n ' Text
+'elif' Keyword
+' ' Text
+'b' Name
+' ' Text
+'<' Operator
+' ' Text
+'256' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteBE' Name
+' ' Text
+'9' Literal.Number.Integer
+' ' Text
+'(' Operator
+'b' Name
+' ' Text
+'-' Operator
+' ' Text
+'144' Literal.Number.Integer
+' ' Text
+'+' Operator
+' ' Text
+'0' Literal.Number.Integer
+'b110010000' Name
+')' Operator
+'\n ' Text
+'elif' Keyword
+' ' Text
+'b' Name
+' ' Text
+'<' Operator
+' ' Text
+'280' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteBE' Name
+' ' Text
+'7' Literal.Number.Integer
+' ' Text
+'(' Operator
+'b' Name
+' ' Text
+'-' Operator
+' ' Text
+'256' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'elif' Keyword
+' ' Text
+'b' Name
+' ' Text
+'<' Operator
+' ' Text
+'288' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteBE' Name
+' ' Text
+'8' Literal.Number.Integer
+' ' Text
+'(' Operator
+'b' Name
+' ' Text
+'-' Operator
+' ' Text
+'280' Literal.Number.Integer
+' ' Text
+'+' Operator
+' ' Text
+'0' Literal.Number.Integer
+'b11000000' Name
+')' Operator
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'WriteLen' Name.Function
+' ' Text
+'(' Operator
+'len' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'3' Literal.Number.Integer
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxlen' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'不正な長さ: %d' Literal.String
+'"' Literal.String
+' ' Text
+'len' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'ll' Name
+' ' Text
+'=' Operator
+' ' Text
+'285' Literal.Number.Integer
+'\n ' Text
+'while' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'litlens' Name
+'.' Operator
+'[' Operator
+'ll' Name
+' ' Text
+'-' Operator
+' ' Text
+'257' Literal.Number.Integer
+']' Operator
+' ' Text
+'do' Keyword
+'\n ' Text
+'ll' Name
+' ' Text
+'<-' Operator
+' ' Text
+'ll' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'x' Name
+'.' Operator
+'Write' Name
+' ' Text
+'ll' Name
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteLE' Name
+' ' Text
+'(' Operator
+'getLitExLen' Name
+' ' Text
+'ll' Name
+')' Operator
+' ' Text
+'(' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'litlens' Name
+'.' Operator
+'[' Operator
+'ll' Name
+' ' Text
+'-' Operator
+' ' Text
+'257' Literal.Number.Integer
+']' Operator
+')' Operator
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'WriteDist' Name.Function
+' ' Text
+'(' Operator
+'d' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'d' Name
+' ' Text
+'<' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'|' Operator
+'|' Operator
+' ' Text
+'d' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'failwith' Name
+' ' Text
+'<' Operator
+'|' Operator
+' ' Text
+'sprintf' Name
+' ' Text
+'"' Literal.String
+'不正な距離: %d' Literal.String
+'"' Literal.String
+' ' Text
+'d' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'dl' Name
+' ' Text
+'=' Operator
+' ' Text
+'29' Literal.Number.Integer
+'\n ' Text
+'while' Keyword
+' ' Text
+'d' Name
+' ' Text
+'<' Operator
+' ' Text
+'distlens' Name
+'.' Operator
+'[' Operator
+'dl' Name
+']' Operator
+' ' Text
+'do' Keyword
+'\n ' Text
+'dl' Name
+' ' Text
+'<-' Operator
+' ' Text
+'dl' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteBE' Name
+' ' Text
+'5' Literal.Number.Integer
+' ' Text
+'dl' Name
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteLE' Name
+' ' Text
+'(' Operator
+'getDistExLen' Name
+' ' Text
+'dl' Name
+')' Operator
+' ' Text
+'(' Operator
+'d' Name
+' ' Text
+'-' Operator
+' ' Text
+'distlens' Name
+'.' Operator
+'[' Operator
+'dl' Name
+']' Operator
+')' Operator
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'maxbuf2' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'*' Operator
+' ' Text
+'2' Literal.Number.Integer
+'\n' Text
+
+'let' Keyword
+' ' Text
+'buflen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'maxbuf2' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'inline' Name.Variable
+' ' Text
+'getHash' Name
+' ' Text
+'(' Operator
+'buf' Name
+':' Operator
+'byte' Keyword.Type
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'pos' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'(' Operator
+'(' Operator
+'int' Name
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+']' Operator
+')' Operator
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'4' Literal.Number.Integer
+')' Operator
+' ' Text
+'^^' Operator
+'^' Operator
+' ' Text
+'(' Operator
+'(' Operator
+'int' Name
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+')' Operator
+' ' Text
+'<' Operator
+'<' Operator
+'<' Operator
+' ' Text
+'2' Literal.Number.Integer
+')' Operator
+' ' Text
+'^^' Operator
+'^' Operator
+' ' Text
+'(' Operator
+'int' Name
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'2' Literal.Number.Integer
+']' Operator
+')' Operator
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'inline' Name.Variable
+' ' Text
+'addHash' Name
+' ' Text
+'(' Operator
+'hash' Name
+':' Operator
+'List' Name
+'<' Operator
+'int' Name
+'>' Operator
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'(' Operator
+'buf' Name
+':' Operator
+'byte' Keyword.Type
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'pos' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+']' Operator
+' ' Text
+'<' Operator
+'>' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+' ' Text
+'then' Keyword
+'\n ' Text
+'hash' Name
+'.' Operator
+'[' Operator
+'getHash' Name
+' ' Text
+'buf' Name
+' ' Text
+'pos' Name
+']' Operator
+'.' Operator
+'Add' Name
+' ' Text
+'pos' Name
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'inline' Name.Variable
+' ' Text
+'addHash2' Name
+' ' Text
+'(' Operator
+'tables' Name
+':' Operator
+'int' Name
+'[' Operator
+',' Operator
+']' Operator
+')' Operator
+' ' Text
+'(' Operator
+'counts' Name
+':' Operator
+'int' Name
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'(' Operator
+'buf' Name
+':' Operator
+'byte' Keyword.Type
+'[]' Name.Builtin.Pseudo
+')' Operator
+' ' Text
+'pos' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+']' Operator
+' ' Text
+'<' Operator
+'>' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'h' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'getHash' Name
+' ' Text
+'buf' Name
+' ' Text
+'pos' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'c' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'counts' Name
+'.' Operator
+'[' Operator
+'h' Name
+']' Operator
+'\n ' Text
+'tables' Name
+'.' Operator
+'[' Operator
+'h' Name
+',' Operator
+' ' Text
+'c' Name
+' ' Text
+'&&' Operator
+'&' Operator
+' ' Text
+'15' Literal.Number.Integer
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'pos' Name
+'\n ' Text
+'counts' Name
+'.' Operator
+'[' Operator
+'h' Name
+']' Operator
+' ' Text
+'<-' Operator
+' ' Text
+'c' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n\n' Text
+
+'type' Keyword
+' ' Text
+'Writer' Name.Class
+'(' Operator
+'t' Name
+':' Operator
+'int' Name
+',' Operator
+' ' Text
+'sin' Name
+':' Operator
+'Stream' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'length' Name
+' ' Text
+'=' Operator
+' ' Text
+'buflen' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'buf' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'byte' Keyword.Type
+'>' Operator
+' ' Text
+'buflen' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'tables' Name.Variable
+',' Operator
+' ' Text
+'counts' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'t' Name
+' ' Text
+'=' Operator
+' ' Text
+'2' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'Array2D' Name.Namespace
+'.' Punctuation
+'zeroCreate' Name
+'<' Operator
+'int' Name
+'>' Operator
+' ' Text
+'4096' Literal.Number.Integer
+' ' Text
+'16' Literal.Number.Integer
+',' Operator
+' ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'create' Name
+' ' Text
+'4096' Literal.Number.Integer
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'null' Keyword
+',' Operator
+' ' Text
+'null' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'hash' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'tables' Name
+' ' Text
+'=' Operator
+' ' Text
+'null' Keyword
+' ' Text
+'then' Keyword
+' ' Text
+'[|' Operator
+' ' Text
+'for' Keyword
+' ' Text
+'_' Operator
+' ' Text
+'in' Keyword
+' ' Text
+'0' Literal.Number.Integer
+'..' Operator
+'4095' Literal.Number.Integer
+' ' Text
+'->' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'List' Name
+'<' Operator
+'int' Name
+'>' Operator
+'()' Name.Builtin.Pseudo
+' ' Text
+'|]' Operator
+' ' Text
+'else' Keyword
+' ' Text
+'null' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'crc' Name
+' ' Text
+'=' Operator
+' ' Text
+'~' Operator
+'~' Operator
+'~' Operator
+'0u' Literal.Number.Integer
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'read' Name.Variable
+' ' Text
+'pos' Name
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'rlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'sin' Name
+'.' Operator
+'Read' Name
+'(' Operator
+'buf' Name
+',' Operator
+' ' Text
+'pos' Name
+',' Operator
+' ' Text
+'len' Name
+')' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'rlen' Name
+' ' Text
+'<' Operator
+' ' Text
+'len' Name
+' ' Text
+'then' Keyword
+' ' Text
+'length' Name
+' ' Text
+'<-' Operator
+' ' Text
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'rlen' Name
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'pos' Name
+' ' Text
+'to' Keyword
+' ' Text
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'rlen' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'b' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'int' Name
+'(' Operator
+'crc' Name
+' ' Text
+'^^' Operator
+'^' Operator
+' ' Text
+'(' Operator
+'uint32' Keyword.Type
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+')' Operator
+')' Operator
+' ' Text
+'&&' Operator
+'&' Operator
+' ' Text
+'0' Literal.Number.Integer
+'xff' Name
+'\n ' Text
+'crc' Name
+' ' Text
+'<-' Operator
+' ' Text
+'(' Operator
+'crc' Name
+' ' Text
+'>' Operator
+'>' Operator
+'>' Operator
+' ' Text
+'8' Literal.Number.Integer
+')' Operator
+' ' Text
+'^^' Operator
+'^' Operator
+' ' Text
+'crc32_table' Name
+'.' Operator
+'[' Operator
+'b' Name
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'hash' Name
+' ' Text
+'<' Operator
+'>' Operator
+' ' Text
+'null' Keyword
+' ' Text
+'then' Keyword
+'\n ' Text
+'for' Keyword
+' ' Text
+'list' Keyword.Type
+' ' Text
+'in' Keyword
+' ' Text
+'hash' Name
+' ' Text
+'do' Keyword
+' ' Text
+'list' Keyword.Type
+'.' Operator
+'Clear' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'fill' Name
+' ' Text
+'counts' Name
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'counts' Name
+'.' Operator
+'Length' Name
+' ' Text
+'0' Literal.Number.Integer
+'\n \n ' Text
+'do' Keyword
+'\n ' Text
+'read' Name
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'buflen' Name
+'\n \n ' Text
+'let' Keyword
+' ' Text
+'search' Name.Variable
+' ' Text
+'(' Operator
+'pos' Name
+':' Operator
+'int' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'maxp' Name
+' ' Text
+'=' Operator
+' ' Text
+'-' Operator
+'1' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'maxl' Name
+' ' Text
+'=' Operator
+' ' Text
+'2' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Math' Name.Namespace
+'.' Punctuation
+'Min' Name
+'(' Operator
+'maxlen' Name
+',' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'pos' Name
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'last' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Math' Name.Namespace
+'.' Punctuation
+'Max' Name
+'(' Operator
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'pos' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxbuf' Name
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'h' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'getHash' Name
+' ' Text
+'buf' Name
+' ' Text
+'pos' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'hash' Name
+' ' Text
+'<' Operator
+'>' Operator
+' ' Text
+'null' Keyword
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'list' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'hash' Name
+'.' Operator
+'[' Operator
+'h' Name
+']' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'list' Keyword.Type
+'.' Operator
+'Count' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'while' Keyword
+' ' Text
+'i' Name
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'p' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'list' Keyword.Type
+'.' Operator
+'[' Operator
+'i' Name
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'<' Operator
+' ' Text
+'last' Name
+' ' Text
+'then' Keyword
+' ' Text
+'i' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'while' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'mlen' Name
+' ' Text
+'&&' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+']' Operator
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+']' Operator
+' ' Text
+'do' Keyword
+'\n ' Text
+'len' Name
+' ' Text
+'<-' Operator
+' ' Text
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'maxp' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+'\n ' Text
+'maxl' Name
+' ' Text
+'<-' Operator
+' ' Text
+'len' Name
+'\n ' Text
+'i' Name
+' ' Text
+'<-' Operator
+' ' Text
+'i' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'c' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'counts' Name
+'.' Operator
+'[' Operator
+'h' Name
+']' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'p1' Name.Variable
+',' Operator
+' ' Text
+'p2' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'c' Name
+' ' Text
+'<' Operator
+' ' Text
+'16' Literal.Number.Integer
+' ' Text
+'then' Keyword
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'c' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'else' Keyword
+' ' Text
+'c' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Operator
+' ' Text
+'c' Name
+' ' Text
+'+' Operator
+' ' Text
+'16' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'p2' Name
+'\n ' Text
+'while' Keyword
+' ' Text
+'i' Name
+' ' Text
+'>' Operator
+'=' Operator
+' ' Text
+'p1' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'p' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'tables' Name
+'.' Operator
+'[' Operator
+'h' Name
+',' Operator
+' ' Text
+'i' Name
+' ' Text
+'&&' Operator
+'&' Operator
+' ' Text
+'15' Literal.Number.Integer
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'<' Operator
+' ' Text
+'last' Name
+' ' Text
+'then' Keyword
+' ' Text
+'i' Name
+' ' Text
+'<-' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'while' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'mlen' Name
+' ' Text
+'&&' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+']' Operator
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'pos' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+']' Operator
+' ' Text
+'do' Keyword
+'\n ' Text
+'len' Name
+' ' Text
+'<-' Operator
+' ' Text
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'if' Keyword
+' ' Text
+'len' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'maxp' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+'\n ' Text
+'maxl' Name
+' ' Text
+'<-' Operator
+' ' Text
+'len' Name
+'\n ' Text
+'i' Name
+' ' Text
+'<-' Operator
+' ' Text
+'i' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'maxp' Name
+',' Operator
+' ' Text
+'maxl' Name
+'\n \n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Crc' Name.Function
+' ' Text
+'=' Operator
+' ' Text
+'~' Operator
+'~' Operator
+'~' Operator
+'crc' Name
+'\n\n ' Text
+'member' Keyword
+' ' Text
+'x' Name
+'.' Punctuation
+'Compress' Name.Function
+' ' Text
+'(' Operator
+'sout' Name
+':' Operator
+'Stream' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'use' Keyword
+' ' Text
+'bw' Name
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'BitWriter' Name
+'(' Operator
+'sout' Name
+')' Operator
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteBit' Name
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'bw' Name
+'.' Operator
+'WriteLE' Name
+' ' Text
+'2' Literal.Number.Integer
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'hw' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'FixedHuffmanWriter' Name
+'(' Operator
+'bw' Name
+')' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'p' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n ' Text
+'match' Keyword
+' ' Text
+'t' Name
+' ' Text
+'with' Keyword
+'\n ' Text
+'|' Operator
+' ' Text
+'2' Literal.Number.Integer
+' ' Text
+'->' Operator
+'\n ' Text
+'while' Keyword
+' ' Text
+'p' Name
+' ' Text
+'<' Operator
+' ' Text
+'length' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'b' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'<' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'2' Literal.Number.Integer
+']' Operator
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'3' Literal.Number.Integer
+']' Operator
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'4' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Math' Name.Namespace
+'.' Punctuation
+'Min' Name
+'(' Operator
+'maxlen' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'p' Name
+')' Operator
+'\n ' Text
+'while' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'mlen' Name
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+']' Operator
+' ' Text
+'do' Keyword
+'\n ' Text
+'len' Name
+' ' Text
+'<-' Operator
+' ' Text
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'hw' Name
+'.' Operator
+'Write' Name
+'(' Operator
+'int' Name
+' ' Text
+'b' Name
+')' Operator
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteLen' Name
+'(' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteDist' Name
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'maxp' Name.Variable
+',' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'=' Operator
+' ' Text
+'search' Name
+' ' Text
+'p' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'maxp' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'hw' Name
+'.' Operator
+'Write' Name
+'(' Operator
+'int' Name
+' ' Text
+'b' Name
+')' Operator
+'\n ' Text
+'addHash2' Name
+' ' Text
+'tables' Name
+' ' Text
+'counts' Name
+' ' Text
+'buf' Name
+' ' Text
+'p' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteLen' Name
+' ' Text
+'maxl' Name
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteDist' Name
+' ' Text
+'(' Operator
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxp' Name
+')' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'p' Name
+' ' Text
+'to' Keyword
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'addHash2' Name
+' ' Text
+'tables' Name
+' ' Text
+'counts' Name
+' ' Text
+'buf' Name
+' ' Text
+'i' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxl' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxbuf2' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'Copy' Name
+'(' Operator
+'buf' Name
+',' Operator
+' ' Text
+'maxbuf' Name
+',' Operator
+' ' Text
+'buf' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'length' Name
+' ' Text
+'<' Operator
+' ' Text
+'buflen' Name
+' ' Text
+'then' Keyword
+' ' Text
+'length' Name
+' ' Text
+'<-' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'else' Keyword
+'\n ' Text
+'read' Name
+' ' Text
+'(' Operator
+'maxbuf' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'addHash2' Name
+' ' Text
+'tables' Name
+' ' Text
+'counts' Name
+' ' Text
+'buf' Name
+' ' Text
+'i' Name
+'\n ' Text
+'|' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'->' Operator
+'\n ' Text
+'while' Keyword
+' ' Text
+'p' Name
+' ' Text
+'<' Operator
+' ' Text
+'length' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'b' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+']' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'<' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+']' Operator
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'2' Literal.Number.Integer
+']' Operator
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'3' Literal.Number.Integer
+']' Operator
+' ' Text
+'then' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'mutable' Name.Variable
+' ' Text
+'len' Name
+' ' Text
+'=' Operator
+' ' Text
+'4' Literal.Number.Integer
+'\n ' Text
+'let' Keyword
+' ' Text
+'mlen' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'Math' Name.Namespace
+'.' Punctuation
+'Min' Name
+'(' Operator
+'maxlen' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+',' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'p' Name
+')' Operator
+'\n ' Text
+'while' Keyword
+' ' Text
+'len' Name
+' ' Text
+'<' Operator
+' ' Text
+'mlen' Name
+' ' Text
+'&&' Operator
+' ' Text
+'b' Name
+' ' Text
+'=' Operator
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+']' Operator
+' ' Text
+'do' Keyword
+'\n ' Text
+'len' Name
+' ' Text
+'<-' Operator
+' ' Text
+'len' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'hw' Name
+'.' Operator
+'Write' Name
+'(' Operator
+'int' Name
+' ' Text
+'b' Name
+')' Operator
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteLen' Name
+'(' Operator
+'len' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+')' Operator
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteDist' Name
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'len' Name
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'maxp' Name.Variable
+',' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'=' Operator
+' ' Text
+'search' Name
+' ' Text
+'p' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'maxp' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'hw' Name
+'.' Operator
+'Write' Name
+'(' Operator
+'int' Name
+' ' Text
+'b' Name
+')' Operator
+'\n ' Text
+'addHash' Name
+' ' Text
+'hash' Name
+' ' Text
+'buf' Name
+' ' Text
+'p' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteLen' Name
+' ' Text
+'maxl' Name
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteDist' Name
+' ' Text
+'(' Operator
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxp' Name
+')' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'p' Name
+' ' Text
+'to' Keyword
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'addHash' Name
+' ' Text
+'hash' Name
+' ' Text
+'buf' Name
+' ' Text
+'i' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxl' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxbuf2' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'Copy' Name
+'(' Operator
+'buf' Name
+',' Operator
+' ' Text
+'maxbuf' Name
+',' Operator
+' ' Text
+'buf' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'length' Name
+' ' Text
+'<' Operator
+' ' Text
+'buflen' Name
+' ' Text
+'then' Keyword
+' ' Text
+'length' Name
+' ' Text
+'<-' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'else' Keyword
+'\n ' Text
+'read' Name
+' ' Text
+'(' Operator
+'maxbuf' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'addHash' Name
+' ' Text
+'hash' Name
+' ' Text
+'buf' Name
+' ' Text
+'i' Name
+'\n ' Text
+'|' Operator
+' ' Text
+'_' Operator
+' ' Text
+'->' Operator
+'\n ' Text
+'while' Keyword
+' ' Text
+'p' Name
+' ' Text
+'<' Operator
+' ' Text
+'length' Name
+' ' Text
+'do' Keyword
+'\n ' Text
+'let' Keyword
+' ' Text
+'maxp' Name.Variable
+',' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'=' Operator
+' ' Text
+'search' Name
+' ' Text
+'p' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'maxp' Name
+' ' Text
+'<' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'then' Keyword
+'\n ' Text
+'hw' Name
+'.' Operator
+'Write' Name
+'(' Operator
+'int' Name
+' ' Text
+'buf' Name
+'.' Operator
+'[' Operator
+'p' Name
+']' Operator
+')' Operator
+'\n ' Text
+'hash' Name
+'.' Operator
+'[' Operator
+'getHash' Name
+' ' Text
+'buf' Name
+' ' Text
+'p' Name
+']' Operator
+'.' Operator
+'Add' Name
+' ' Text
+'p' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n ' Text
+'else' Keyword
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteLen' Name
+' ' Text
+'maxl' Name
+'\n ' Text
+'hw' Name
+'.' Operator
+'WriteDist' Name
+' ' Text
+'(' Operator
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxp' Name
+')' Operator
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'p' Name
+' ' Text
+'to' Keyword
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxl' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'hash' Name
+'.' Operator
+'[' Operator
+'getHash' Name
+' ' Text
+'buf' Name
+' ' Text
+'i' Name
+']' Operator
+'.' Operator
+'Add' Name
+' ' Text
+'i' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxl' Name
+'\n ' Text
+'if' Keyword
+' ' Text
+'p' Name
+' ' Text
+'>' Operator
+' ' Text
+'maxbuf2' Name
+' ' Text
+'then' Keyword
+'\n ' Text
+'Array' Name.Namespace
+'.' Punctuation
+'Copy' Name
+'(' Operator
+'buf' Name
+',' Operator
+' ' Text
+'maxbuf' Name
+',' Operator
+' ' Text
+'buf' Name
+',' Operator
+' ' Text
+'0' Literal.Number.Integer
+',' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+'\n ' Text
+'if' Keyword
+' ' Text
+'length' Name
+' ' Text
+'<' Operator
+' ' Text
+'buflen' Name
+' ' Text
+'then' Keyword
+' ' Text
+'length' Name
+' ' Text
+'<-' Operator
+' ' Text
+'length' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxbuf' Name
+' ' Text
+'else' Keyword
+'\n ' Text
+'read' Name
+' ' Text
+'(' Operator
+'maxbuf' Name
+' ' Text
+'+' Operator
+' ' Text
+'maxlen' Name
+')' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'p' Name
+' ' Text
+'<-' Operator
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'maxbuf' Name
+'\n ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'to' Keyword
+' ' Text
+'p' Name
+' ' Text
+'-' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'do' Keyword
+'\n ' Text
+'hash' Name
+'.' Operator
+'[' Operator
+'getHash' Name
+' ' Text
+'buf' Name
+' ' Text
+'i' Name
+']' Operator
+'.' Operator
+'Add' Name
+' ' Text
+'i' Name
+'\n ' Text
+'hw' Name
+'.' Operator
+'Write' Name
+' ' Text
+'256' Literal.Number.Integer
+'\n\n' Text
+
+'let' Keyword
+' ' Text
+'GetCompressBytes' Name.Variable
+' ' Text
+'(' Operator
+'sin' Name
+':' Operator
+'Stream' Name
+')' Operator
+' ' Text
+'=' Operator
+'\n ' Text
+'let' Keyword
+' ' Text
+'now' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'DateTime' Name.Namespace
+'.' Punctuation
+'Now' Name
+'\n ' Text
+'let' Keyword
+' ' Text
+'ms' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'MemoryStream' Name
+'()' Name.Builtin.Pseudo
+'\n ' Text
+'let' Keyword
+' ' Text
+'w' Name.Variable
+' ' Text
+'=' Operator
+' ' Text
+'new' Keyword
+' ' Text
+'Writer' Name
+'(' Operator
+'1' Literal.Number.Integer
+',' Operator
+' ' Text
+'sin' Name
+')' Operator
+'\n ' Text
+'w' Name
+'.' Operator
+'Compress' Name
+' ' Text
+'ms' Name
+'\n ' Text
+'ms' Name
+'.' Operator
+'ToArray' Name
+'()' Name.Builtin.Pseudo
+',' Operator
+' ' Text
+'w' Name
+'.' Operator
+'Crc' Name
+'\n' Text