File: unicode_charinfo.ml

package info (click to toggle)
ocamlnet 4.1.9-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 54,040 kB
  • sloc: ml: 151,939; ansic: 11,071; sh: 2,003; makefile: 1,310
file content (37 lines) | stat: -rw-r--r-- 857 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(* $Id$ *)

open Printf

let filename = Sys.argv.(1)

let generate label name =
  let f = open_in filename in
  let scanner = Scanf.Scanning.from_channel f in
  printf "let %s k =\n" name;
  printf " match k with\n";
  ( try
      while true do
        Scanf.bscanf scanner "%s %d-%d %d-%d\n"
          (fun l r1s r1e r2s r2e ->
             if l = label then (
               if r1s = r1e then
                 printf "   | %d -> %d\n" r1s r2s
               else (
                 for k = r1s to r1e do
                   printf "   | %d\n" k
                 done;
                 printf "       -> k + (%d)\n" (r2s-r1s)
               )
             )
          )
      done
    with End_of_file -> ()
  );
  printf "   | _ -> k";
  printf ";;\n";
  close_in f

let () =
  generate "L" "to_lower";
  generate "U" "to_upper";
  generate "T" "to_title"