(* $Id: netmappings.mli 1219 2009-04-14 13:28:56Z ChriS $
* ----------------------------------------------------------------------
*)
(** Internal access to the character conversion database
*
* This is an internal module.
*)
type from_uni_list =
U_nil
| U_single of (int*int)
| U_double of (int*int * int*int)
| U_array of int array
;;
(* A representation of (int*int) list that is optimized for the case that
* lists with 0 and 1 and 2 elements are the most frequent cases.
*)
val get_to_unicode : string -> int array
val get_from_unicode : string -> from_uni_list array
(* These functions get the conversion tables from local encodings to
* Unicode and vice versa.
* It is normally not necessary to access these tables; the
* Netconversion module does it already for you.
*
* The argument is the internal name of the encoding. (E.g. if
* encoding = `Enc_iso88591, the internal name is "iso88591", i.e.
* the "`Enc_" prefix is removed. However, for "composite encodings"
* like `Enc_eucjp things are more complicated.)
*
* Specification of the conversion tables:
*
* to_unicode: maps a local code to Unicode, i.e.
* let m = Hashtbl.find `Enc_isoXXX to_unicode in
* let unicode = m.(isocode)
* - This may be (-1) to indicate that the code point is not defined.
*
* from_unicode: maps Unicode to a local code, i.e.
* let m = Hashtbl.find `Enc_isoXXX from_unicode in
* let l = m.(unicode land mask)
* Now search in l the pair (unicode, isocode), and return isocode.
* Where mask = Array.length from_unicode - 1
*)
val lock : unit -> unit
(* In multi-threaded applications: obtains a lock which is required to
* Lazy.force the values found in to_unicode and from_unicode.
* In single-threaded applications: a NO-OP
*)
val unlock : unit -> unit
(* In multi-threaded applications: releases the lock which is required to
* Lazy.force the values found in to_unicode and from_unicode.
* In single-threaded applications: a NO-OP
*)