|
|
@@ -34,165 +34,162 @@ let artify replace_pat s =
|
|
|
let y = i / w in
|
|
|
let o ox oy = char_at (x + ox) (y + oy) in
|
|
|
let m1 = -1 in
|
|
|
- [|o m1 m1; o 0 m1; o 1 m1;
|
|
|
- o m1 0; o 0 0; o 1 0;
|
|
|
- o m1 1; o 0 1; o 1 1|]
|
|
|
+ (o m1 m1, o 0 m1, o 1 m1,
|
|
|
+ o m1 0, o 0 0, o 1 0,
|
|
|
+ o m1 1, o 0 1, o 1 1)
|
|
|
in
|
|
|
UTF8.init (String.length s) (fun i -> replace_pat (make_pat i))
|
|
|
|
|
|
let u s = UTF8.get s 0
|
|
|
|
|
|
let replace_pat_safe = function
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '-'|'+'; '+' ; '-'|'+';
|
|
|
- _ ; '|'|'+'; _ |] -> u "┼"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '-'|'+'; '+' ; '-'|'+';
|
|
|
- _ ; '|'|'+'; _ |] -> u "┬"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '-'|'+'; '+' ; '-'|'+';
|
|
|
- _ ; _ ; _ |] -> u "┴"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- _ ; '+' ; '-'|'+';
|
|
|
- _ ; '|'|'+'; _ |] -> u "├"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '-'|'+'; '+' ; _ ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "┤"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; '+' ; '-'|'+';
|
|
|
- _ ; '|'|'+'; _ |] -> u "┌"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- _ ; '+' ; '-'|'+';
|
|
|
- _ ; _ ; _ |] -> u "└"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '-'|'+'; '+' ; _ ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "┐"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '-'|'+'; '+' ; _ ;
|
|
|
- _ ; _ ; _ |] -> u "┘"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; '-' ; '-'|'+';
|
|
|
- _ ; _ ; _ |]
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '-'|'+'; '-' ; _ ;
|
|
|
- _ ; _ ; _ |] -> u "─"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; '|' ; _ ;
|
|
|
- _ ; '|'|'+'; _ |]
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- _ ; '|' ; _ ;
|
|
|
- _ ; _ ; _ |] -> u "│"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '=' ; '+' ; '=' ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "╪"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '=' ; '+' ; '=' ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "╤"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '=' ; '+' ; '=' ;
|
|
|
- _ ; _ ; _ |] -> u "╧"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- _ ; '+' ; '=' ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "╞"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '=' ; '+' ; _ ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "╡"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; '+' ; '=' ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "╒"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- _ ; '+' ; '=' ;
|
|
|
- _ ; _ ; _ |] -> u "╘"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '=' ; '+' ; _ ;
|
|
|
- _ ; '|'|'+'; _ |] -> u "╕"
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- '=' ; '+' ; _ ;
|
|
|
- _ ; _ ; _ |] -> u "╛"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; '=' ; '='|'+';
|
|
|
- _ ; _ ; _ |]
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '='|'+'; '=' ; _ ;
|
|
|
- _ ; _ ; _ |] -> u "═"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; c ; _ ;
|
|
|
- _ ; _ ; _ |] -> UChar.of_char c
|
|
|
- | _ -> failwith "invalid pattern"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ ('-'|'+'), '+' , ('-'|'+'),
|
|
|
+ _ , ('|'|'+'), _ -> u "┼"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ('-'|'+'), '+' , ('-'|'+'),
|
|
|
+ _ , ('|'|'+'), _ -> u "┬"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ ('-'|'+'), '+' , ('-'|'+'),
|
|
|
+ _ , _ , _ -> u "┴"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ _ , '+' , ('-'|'+'),
|
|
|
+ _ , ('|'|'+'), _ -> u "├"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ ('-'|'+'), '+' , _ ,
|
|
|
+ _ , ('|'|'+'), _ -> u "┤"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '+' , ('-'|'+'),
|
|
|
+ _ , ('|'|'+'), _ -> u "┌"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ _ , '+' , ('-'|'+'),
|
|
|
+ _ , _ , _ -> u "└"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ('-'|'+'), '+' , _ ,
|
|
|
+ _ , ('|'|'+'), _ -> u "┐"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ ('-'|'+'), '+' , _ ,
|
|
|
+ _ , _ , _ -> u "┘"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '-' , ('-'|'+'),
|
|
|
+ _ , _ , _
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ('-'|'+'), '-' , _ ,
|
|
|
+ _ , _ , _ -> u "─"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '|' , _ ,
|
|
|
+ _ , ('|'|'+'), _
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ _ , '|' , _ ,
|
|
|
+ _ , _ , _ -> u "│"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ '=' , '+' , '=' ,
|
|
|
+ _ , ('|'|'+'), _ -> u "╪"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ '=' , '+' , '=' ,
|
|
|
+ _ , ('|'|'+'), _ -> u "╤"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ '=' , '+' , '=' ,
|
|
|
+ _ , _ , _ -> u "╧"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ _ , '+' , '=' ,
|
|
|
+ _ , ('|'|'+'), _ -> u "╞"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ '=' , '+' , _ ,
|
|
|
+ _ , ('|'|'+'), _ -> u "╡"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '+' , '=' ,
|
|
|
+ _ , ('|'|'+'), _ -> u "╒"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ _ , '+' , '=' ,
|
|
|
+ _ , _ , _ -> u "╘"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ '=' , '+' , _ ,
|
|
|
+ _ , ('|'|'+'), _ -> u "╕"
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ '=' , '+' , _ ,
|
|
|
+ _ , _ , _ -> u "╛"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '=' , ('='|'+'),
|
|
|
+ _ , _ , _
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ('='|'+'), '=' , _ ,
|
|
|
+ _ , _ , _ -> u "═"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , c , _ ,
|
|
|
+ _ , _ , _ -> UChar.of_char c
|
|
|
|
|
|
let replace_pat_unsafe =
|
|
|
let both_double x y = if x = y then x else '-' in
|
|
|
let pick_double x s = UTF8.get s (if x = '=' then 1 else 0) in
|
|
|
function
|
|
|
- | [| _ ; ' '; _ ;
|
|
|
- ' '; '+'; ' ';
|
|
|
- _ ; ' '; _ |] -> u "·" (* XXX: maybe just leave the '+' *)
|
|
|
- | [| _ ; ' '; _ ;
|
|
|
- _ ; '+'; ' ';
|
|
|
- _ ; ' '; _ |] -> u "╴"
|
|
|
- | [| _ ; ' '; _ ;
|
|
|
- ' '; '+'; _ ;
|
|
|
- _ ; ' '; _ |] -> u "╶"
|
|
|
- | [| _ ; ' '; _ ;
|
|
|
- ' '; '+'; ' ';
|
|
|
- _ ; _ ; _ |] -> u "╷"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- ' '; '+'; ' ';
|
|
|
- _ ; ' '; _ |] -> u "╵"
|
|
|
- | [| _ ; ' '; _ ;
|
|
|
- ' '; '+'; x ;
|
|
|
- _ ; _ ; _ |] -> pick_double x "┌╒"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- ' '; '+'; x ;
|
|
|
- _ ; ' '; _ |] -> pick_double x "└╘"
|
|
|
- | [| _ ; ' '; _ ;
|
|
|
- x ; '+'; ' ';
|
|
|
- _ ; _ ; _ |] -> pick_double x "┐╕"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- x ; '+'; ' ';
|
|
|
- _ ; ' '; _ |] -> pick_double x "┘╛"
|
|
|
- | [| _ ; ' '; _ ;
|
|
|
- x ; '+'; y ;
|
|
|
- _ ; _ ; _ |] -> pick_double (both_double x y) "┬╤"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- x ; '+'; y ;
|
|
|
- _ ; ' '; _ |] -> pick_double (both_double x y) "┴╧"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- ' '; '+'; x ;
|
|
|
- _ ; _ ; _ |] -> pick_double x "├╞"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- x ; '+'; ' ';
|
|
|
- _ ; _ ; _ |] -> pick_double x "┤╡"
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- x ; '+'; y ;
|
|
|
- _ ; _ ; _ |] -> pick_double (both_double x y) "┼╪"
|
|
|
+ | _ , ' ', _ ,
|
|
|
+ ' ', '+', ' ',
|
|
|
+ _ , ' ', _ -> u "·" (* XXX: maybe just leave the '+' *)
|
|
|
+ | _ , ' ', _ ,
|
|
|
+ _ , '+', ' ',
|
|
|
+ _ , ' ', _ -> u "╴"
|
|
|
+ | _ , ' ', _ ,
|
|
|
+ ' ', '+', _ ,
|
|
|
+ _ , ' ', _ -> u "╶"
|
|
|
+ | _ , ' ', _ ,
|
|
|
+ ' ', '+', ' ',
|
|
|
+ _ , _ , _ -> u "╷"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ' ', '+', ' ',
|
|
|
+ _ , ' ', _ -> u "╵"
|
|
|
+ | _ , ' ', _ ,
|
|
|
+ ' ', '+', x ,
|
|
|
+ _ , _ , _ -> pick_double x "┌╒"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ' ', '+', x ,
|
|
|
+ _ , ' ', _ -> pick_double x "└╘"
|
|
|
+ | _ , ' ', _ ,
|
|
|
+ x , '+', ' ',
|
|
|
+ _ , _ , _ -> pick_double x "┐╕"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ x , '+', ' ',
|
|
|
+ _ , ' ', _ -> pick_double x "┘╛"
|
|
|
+ | _ , ' ', _ ,
|
|
|
+ x , '+', y ,
|
|
|
+ _ , _ , _ -> pick_double (both_double x y) "┬╤"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ x , '+', y ,
|
|
|
+ _ , ' ', _ -> pick_double (both_double x y) "┴╧"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ' ', '+', x ,
|
|
|
+ _ , _ , _ -> pick_double x "├╞"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ x , '+', ' ',
|
|
|
+ _ , _ , _ -> pick_double x "┤╡"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ x , '+', y ,
|
|
|
+ _ , _ , _ -> pick_double (both_double x y) "┼╪"
|
|
|
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; '-' ; '-'|'+';
|
|
|
- _ ; _ ; _ |]
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '-'|'+'; '-' ; _ ;
|
|
|
- _ ; _ ; _ |] -> u "─"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '-' , ('-'|'+'),
|
|
|
+ _ , _ , _
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ('-'|'+'), '-' , _ ,
|
|
|
+ _ , _ , _ -> u "─"
|
|
|
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- _ ; '|' ; _ ;
|
|
|
- _ ; '|'|'+'; _ |]
|
|
|
- | [| _ ; '|'|'+'; _ ;
|
|
|
- _ ; '|' ; _ ;
|
|
|
- _ ; _ ; _ |] -> u "│"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '|' , _ ,
|
|
|
+ _ , ('|'|'+'), _
|
|
|
+ | _ , ('|'|'+'), _ ,
|
|
|
+ _ , '|' , _ ,
|
|
|
+ _ , _ , _ -> u "│"
|
|
|
|
|
|
- | [| _ ; _ ; _ ;
|
|
|
- '-'|'='|'+'; '='; _ ;
|
|
|
- _ ; _ ; _ |]
|
|
|
- | [|_ ; _ ; _ ;
|
|
|
- _ ; '='; '-'|'='|'+';
|
|
|
- _ ; _ ; _ |] -> u "═"
|
|
|
+ | _ , _ , _ ,
|
|
|
+ ('-'|'='|'+'), '=', _ ,
|
|
|
+ _ , _ , _
|
|
|
+ | _ , _ , _ ,
|
|
|
+ _ , '=', ('-'|'='|'+'),
|
|
|
+ _ , _ , _ -> u "═"
|
|
|
|
|
|
- | [|_; _; _;
|
|
|
- _; c; _;
|
|
|
- _; _; _|] -> UChar.of_char c
|
|
|
-
|
|
|
- | _ -> failwith "invalid pattern"
|
|
|
+ | _, _, _,
|
|
|
+ _, c, _,
|
|
|
+ _, _, _ -> UChar.of_char c
|
|
|
|
|
|
let () =
|
|
|
let args = List.tl (Array.to_list Sys.argv) in
|