Переглянути джерело

Now using tuples for patterns instead of arrays

Taddeus Kroes 11 роки тому
батько
коміт
a2db9fe60c
1 змінених файлів з 141 додано та 144 видалено
  1. 141 144
      artify.ml

+ 141 - 144
artify.ml

@@ -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