(* $Id$ * ---------------------------------------------------------------------- * *) (**********************************************************************) (* Several encodings important for the net *) (**********************************************************************) (**********************************************************************) (* Base 64 encoding *) (**********************************************************************) (* See RFC 2045 for a description of Base 64 encoding. *) (* THREAD-SAFETY: * All Base64 functions are reentrant and thus thread-safe. *) module Base64 : sig val encode : ?pos:int -> ?len:int -> ?linelength:int -> ?crlf:bool -> string -> string (* Compute the "base 64" encoding of the given string argument. * Note that the result is a string that only contains the characters * a-z, A-Z, 0-9, +, /, =, and optionally spaces, CR and LF characters. * * If pos and/or len are passed, only the substring starting at * pos (default: 0) with length len (default: rest of the string) * is encoded. * * The result is divided up into lines not longer than 'linelength' * (without counting the line separator); default: do not divide lines. * If 'linelength' is smaller than 4, no line division is performed. * If 'linelength' is not divisible by 4, the produced lines are a * bit shorter than 'linelength'. * * If 'crlf' (default: false) the lines are ended by CRLF; otherwise * they are only ended by LF. * (You need the crlf option to produce correct MIME messages.) * *) val url_encode : ?pos:int -> ?len:int -> ?linelength:int -> ?crlf:bool -> string -> string (* Same as 'encode' but use slightly different characters that can be * part of URLs without additional encodings. * The encoded string consists only of the characters a-z, A-Z, 0-9, * -, /, . * 'url_encode' does NOT implement the Base 64 encoding as described * in the standard! *) val encode_substring : string -> pos:int -> len:int -> linelength:int -> crlf:bool -> string (* *** DEPRECATED FUNCTION *** Use 'encode' instead! *** * * encode_substring s pos len linelen crlf: * Encodes the substring at position 'pos' in 's' with length 'len'. * The result is divided up into lines not longer than 'linelen' (without * counting the line separator). * If 'linelen' is smaller than 4, no line division is performed. * If 'linelen' is not divisible by 4, the produced lines are a * bit shorter than 'linelen'. * If 'crlf' the lines are ended by CRLF; otherwise they are only * ended by LF. * (You need the crlf option to produce correct MIME messages.) *) val decode : ?pos:int -> ?len:int -> ?url_variant:bool -> ?accept_spaces:bool -> string -> string (* Decodes the given string argument. * * If pos and/or len are passed, only the substring starting at * pos (default: 0) with length len (default: rest of the string) * is decoded. * * If url_variant (default: true) is set, the functions also * accepts the characters '-' and '.' as produced by 'url_encode'. * * If accept_spaces (default: false) is set, the function ignores * white space contained in the string to decode (otherwise the * function fails if it finds white space). *) val decode_ignore_spaces : string -> string (* *** DEPRECATED FUNCTION *** Use 'decode' instead! *** * * Decodes the string, too, but it is allowed that the string contains * whitespace characters. * This function is slower than 'decode'. *) val decode_substring : string -> pos:int -> len:int -> url_variant:bool -> accept_spaces:bool -> string (* *** DEPRECATED FUNCTION *** Use 'decode' instead! *** * * decode_substring s pos len url spaces: * Decodes the substring of 's' beginning at 'pos' with length 'len'. * If 'url', strings created by 'url_encode' are accepted, too. * If 'spaces', whitespace characters are allowed in the string. *) end (**********************************************************************) (* Quoted printable encoding *) (**********************************************************************) (* See RFC 2045. * This implementation assumes that the encoded string has a text MIME * type. Because of this, the characters CR and LF are never protected * by hex tokens; they are copied literally to the output string. *) (* THREAD-SAFETY: * All QuotedPrintable functions are reentrant and thus thread-safe. *) module QuotedPrintable : sig val encode : ?pos:int -> ?len:int -> string -> string (* Encodes the string and returns it. * Note line breaks: * No additional soft line breaks are added. The characters CR * and LF are not represented as =0D resp. =0A. (But other control * characters ARE encoded.) * Note unsafe characters: * As recommended by RFC 2045, the characters !\"#$@[]^`{|}~ * are additionally represented as hex tokens. -- " * * If pos and/or len are passed, only the substring starting at * pos (default: 0) with length len (default: rest of the string) * is encoded. *) val encode_substring : string -> pos:int -> len:int -> string (* *** DEPRECATED FUNCTION *** Use 'encode' instead! *** * encode_substring s pos len: * Encodes the substring of 's' beginning at 'pos' with length 'len'. *) val decode : ?pos:int -> ?len:int -> string -> string (* Decodes the string and returns it. * Most format errors cause an Invalid_argument exception. * Note that soft line breaks can be properly decoded although * 'encode' will never produce them. * * If pos and/or len are passed, only the substring starting at * pos (default: 0) with length len (default: rest of the string) * is decoded. *) val decode_substring : string -> pos:int -> len:int -> string (* *** DEPRECATED FUNCTION *** Use 'decode' instead! *** * decode_substring s pos len: * Decodes the substring of 's' beginning at 'pos' with length 'len'. *) end (**********************************************************************) (* Q encoding *) (**********************************************************************) (* See RFC 2047. * The functions behave similar to those of QuotedPrintable. *) (* THREAD-SAFETY: * All Q functions are reentrant and thus thread-safe. *) module Q : sig val encode : ?pos:int -> ?len:int -> string -> string (* Note: * All characters except alphanumeric characters are protected by * hex tokens. * In particular, spaces are represented as "=20", not as "_". *) val decode : ?pos:int -> ?len:int -> string -> string val encode_substring : string -> pos:int -> len:int -> string (* *** DEPRECATED FUNCTION *** Use 'encode' instead! *** *) val decode_substring : string -> pos:int -> len:int -> string (* *** DEPRECATED FUNCTION *** Use 'decode' instead! *** *) end (**********************************************************************) (* B encoding *) (**********************************************************************) (* The B encoding of RFC 2047 is the same as Base64. *) (**********************************************************************) (* URL-encoding *) (**********************************************************************) (* Encoding/Decoding within URLs: * * The following two functions perform the '%'-substitution for * characters that may otherwise be interpreted as metacharacters. * * According to: RFC 1738, RFC 1630 *) (* THREAD-SAFETY: * The Url functions are thread-safe. *) module Url : sig val decode : string -> string val encode : string -> string end (**********************************************************************) (* HTMLization *) (**********************************************************************) (* Encodes characters that need protection by converting them to * entity references. E.g. "<" is converted to "<". * As the entities may be named, there is a dependency on the character * set. Currently, there are only functions for the Latin 1 alphabet. *) (* THREAD-SAFETY: * The Html functions are thread-safe. *) module Html : sig val encode_from_latin1 : string -> string (* Encodes the characters 0-8, 11-12, 14-31, '<', '>', '"', '&', * 127-255. If the characters have a name, a named entity is * preferred over a numeric entity. *) val decode_to_latin1 : string -> string (* Decodes the string. Unknown named entities are left as they * are (i.e. decode_to_latin1 "&nonsense;" = "&nonsense;"). * The same applies to numeric entities greater than 255. *) end (* ====================================================================== * History: * * $Log$ * Revision 1.1 2000/11/17 09:57:27 lpadovan * Initial revision * * Revision 1.4 2000/06/25 22:34:43 gerd * Added labels to arguments. * * Revision 1.3 2000/06/25 21:15:48 gerd * Checked thread-safety. * * Revision 1.2 2000/03/03 01:08:29 gerd * Added Netencoding.Html functions. * * Revision 1.1 2000/03/02 01:14:48 gerd * Initial revision. * * *)