File: units.ml

package info (click to toggle)
camlimages 2.20-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 4,020 kB
  • ctags: 2,432
  • sloc: ml: 12,244; ansic: 2,402; makefile: 1,135; sh: 193
file content (38 lines) | stat: -rw-r--r-- 1,584 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
38
(***********************************************************************)
(*                                                                     *)
(*                           Objective Caml                            *)
(*                                                                     *)
(*            Franois Pessaux, projet Cristal, INRIA Rocquencourt     *)
(*            Pierre Weis, projet Cristal, INRIA Rocquencourt          *)
(*            Jun Furuse, projet Cristal, INRIA Rocquencourt           *)
(*                                                                     *)
(*  Copyright 1999-2004,                                               *)
(*  Institut National de Recherche en Informatique et en Automatique.  *)
(*  Distributed only by permission.                                    *)
(*                                                                     *)
(***********************************************************************)

(* $Id: units.ml,v 1.5 2004/09/24 14:27:28 weis Exp $ *)

let inch_cm = 2.54;;
let inch_pt = 72.0;;

let units = [
   "mm", 0.1 /. inch_cm *. inch_pt;
   "cm", 1.0 /. inch_cm *. inch_pt;
   "pt", 1.0;
   "in", inch_pt;
 ];;

let parse_length s = (* return in pt *)
  let v =
    let l = String.length s in
    let digit,unit =
      if l > 2 then String.sub s 0 2, String.sub s (l-2) 2 else "", "" in
    try
      (List.assoc (String.lowercase unit) units) *. float_of_string digit
    with
    | Not_found -> (* think it is in "pt" *)
      float_of_string s in
  prerr_endline (Printf.sprintf "%s -> %fpt" s v);
  v;;