diff options
| author | Georg Brandl <georg@python.org> | 2021-01-18 21:24:00 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2021-01-18 22:08:36 +0100 |
| commit | 2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch) | |
| tree | 809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/fsharp/example.txt | |
| parent | f0445be718da83541ea3401aad882f3937147263 (diff) | |
| download | pygments-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.txt | 7325 |
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 |
