Caml1999I037 { ,Stdlib__Char!t3;@@@A$charB@@@@@@@(char.mli\\@@A@@@A@$code4@@@@#intA@@@@@ݐ)%identityAA @@@__ @@-A@@#chr5@@@@0@@@@@@.b==/b=R@@@B@@'escaped6@?@@@&stringQ@@@@@@CgDg@@UC@@'compare7@\@@@@@@@G@@@@@@@@[rqq\rq@@mD@@%equal8@@@@@@@@$boolE@@@@@@@@tx  ux  @@E@@Ӡ%Ascii9@#min?@@@@Q  Q  @@F@@#max@@@@@T  T  @@G@@(is_validA@@@@5@@@@@@Y 9 ;Y 9 V@@H@@(is_upperB@@@@H@@@@@@]  ]  @@I@@(is_lowerC@@@@[@@@@@@aa@@J@@)is_letterD@@@@n@@@@@@eACeA_@@K@@+is_alphanumE@@@@@@@@@@hh@@L@@(is_whiteF@@@@@@@@@@kk@@M@@(is_blankG@@@@@@@@@@r13r1N@@+N@@*is_graphicH@*@@@@@@@@@,v-v@@>O@@(is_printI@=@@@@@@@@@?z@z@@QP@@*is_controlJ@P@@@@@@@@@R}S}@@dQ@@(is_digitK@c@@@@@@@@@ef@@wR@@,digit_to_intL@v@@@d@@@@@@xsuys@@S@@,digit_of_intM@s@@@@@@@@@242R@@T@@,is_hex_digitN@@@@,@@@@@@@@U@@0hex_digit_to_intO@@@@@@@@@@@@V@@6lower_hex_digit_of_intP@@@@@@@@@@@@W@@6upper_hex_digit_of_intQ@@@@@@@@@@sus@@X@@)uppercaseR@@@@@@@@@@DFDb@@Y@@)lowercaseS@@@@@@@@@@2@@Z@@@@M  @[@@@/lowercase_ascii:@@@@@@@@@@ @@&\@@/uppercase_ascii;@%@@@)@@@@@@'RR(Rt@@9]@@+seeded_hash<@"@@@@@@@+@@@@@@@@?@@@Q^@@$hash=@@@@=@@@@@@QR@@c_@@*unsafe_chr>@L@@@f@@@@@)%identityAAN@@@h  i 9@@z`@@@j:.,Stdlib__Char0`(caJ&Stdlib0Lku]8_٠8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037n E>27C,Stdlib__Char*ocaml.text&_none_@@A G Character operations. Characters are the elements of [string] and [bytes] values. Characters represent bytes, that is an integer in the range \[[0x00];[0xFF]\]. Some of the functions of this module interpret the characters in the range \[[0x00];[0x7F]\] as the characters of the ASCII character set. (char.mliP77Xx@@@@@@3@@@@@@#intA;@@@A@@@@@:@A@$charB;@@A@@@@@>@A@&stringQ;@@ A@@@@@B@@@%bytesC;@@ A@@@@@F@@@%floatD;@@A@@@@@J@@@$boolE;@@%falsec@@T@$trued@@Z@@@A@@@@@[@A@$unitF;@@"()e@@e@@@A@@@@@f@A@ #exnG;@@@A@@@@@j@@@#effH;@@O@A@A@@@@@@s@@@,continuationI;@@Q@@P@B@A@nY@@@@@@@@@%arrayJ;@@R@A@A@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@A=ocaml.warn_on_literal_pattern @ @0Division_by_zero]#@@@A  @+End_of_file\#$@@@A@'FailureY#,@'@@A!$$@0Invalid_argumentX#5@0@@A*$-#-@-Match_failureV#>@@=@9@;@@a@@A;5>4>@)Not_foundZ#O@@@AC=F<F@-Out_of_memoryW#W@@@AKENDN@.Stack_overflow^#_@@@ASMVLV@.Sys_blocked_io_#g@@@A[U^T^@)Sys_error[#o@j@@Ad^g]g@:Undefined_recursive_modulea#x@@w@s@u@@h@@Auoxnx@:Continuation_already_takenb#@@@A}wv@&Stdlib@Ax; {1:characters Characters} ZZ@@@@@@A+!tA\\@@;@@@Ak@@@@@@@\\@)ocaml.doc & An alias for the type of characters. ]]@@@@@@@A@@@@@Aг$char\@@ 3@+;@@@A3@@@@@@@@'$@@@A &@@(%Ґ$#@##@@@#@#@@ʰ32@$code__@б@г$char__@@ @@@3@[U@A@@гà#int__@@ @@@@@@@@@@)%identityAA @@@__ @e * Return the integer code of the argument. `  ` ;@@@@@@@'A@@@v#@@@@@@8#chr&b=A'b=D@б@г#int1b=G2b=J@@ @@@332233333@Qf?@A@@г$char@b=NAb=R@@ @@@@@@@@@@@Kb== @ Return the character with the given integer code. @raise Invalid_argument if the argument is outside the range \[[0x00];[0xFF]\]. XcSSYe@@@@@@@qB@@@l@@@@@@1'escapedogpg@б@гH$charzg{g@@ @@@3|{{|||||@J_8@A@@гS&stringgg@@ @@@@@@@@@@@g @  Return a string representing the given character, with special characters escaped following the lexical conventions of OCaml. All characters outside the ASCII printable range \[[0x20];[0x7E]\] are escaped, as well as backslash, double-quote, and single-quote. hl@@@@@@@C@@@@@@@@@1 N {1:predicates Predicates and comparisons} See also the {!Ascii} module. npKo@@@@@@3@CX1@A'comparerqurq|@б@гE!trq~rq@@ @@@@@б@гT!trqrq@@ @@@)@@гŠ#intrqrq@@ @@@6@@@@@9@@@%@@<( @@@rqq@d The comparison function for characters, with the same specification as {!Stdlib.compare}. Along with the type [t], this function [compare] allows the module [Char] to be passed as argument to the functors {!Set.Make} and {!Map.Make}.  sv f @@@@@@@&D@@@t!@@@@@@[%equal$x  %x  @б@г!t/x  0x  @@ @@@310011111@to8@A@@б@г!t@x  Ax  @@ @@@@@г $boolMx  Nx  @@ @@@@@@@@!@@@'@@$* @@@[x  @ / The equal function for chars. @since 4.03 hy  iz  @@@@@@@E@@@|@@@@@@C ' {1:ascii_characters ASCII characters} |  |  @@@@@@3@Uj1@A%Ascii-BM  M  @[@@Б; {1:characters Characters} O  O  @@@@@@3@#@A#minQ  Q  @г$charQ  Q  @@ @@@@@@Q  @)4 [min] is ['\x00']. R  R  @@@@@@@F@@@9搠@@@@@@6#maxT  T  @г$charT  T  @@ @@@3@pI6@A@@@T   @`4 [max] is ['\x7F'].  U   U  @@@@@@@"G@@@p@@@@@@!+*; {1:predicates Predicates} 'W  (W  7@@@@@@3&%%&&&&&@3F1@A(is_valid3Y 9 ?4Y 9 G@б@г $char>Y 9 J?Y 9 N@@ @@@@@г $boolKY 9 RLY 9 V@@ @@@'@@@@@*@@@VY 9 ; @ x [is_valid c] is [true] if and only if [c] is an ASCII character, that is a byte in the range \[{!min};{!max}\]. cZ W Zd[  @@@@@@@|H@@@w@@@@@@I(is_upperz]  {]  @б@гS$char]  ]  @@ @@@3@b]8@A@@гR$bool]  ]  @@ @@@@@@@@@@@]   @ [is_upper c] is [true] if and only if [c] is an ASCII uppercase letter ['A'] to ['Z'], that is a byte in the range \[[0x41];[0x5A]\]. ^  _D@@@@@@@I@@@@@@@@@1(is_loweraa@б@г$charaa@@ @@@3@J_8@A@@г$boolaa@@ @@@@@@@@@@@a @L [is_lower c] is [true] if and only if [c] is an ASCII lowercase letter ['a'] to ['z'], that is a byte in the range \[[0x61];[0x7A]\]. bc?@@@@@@@J@@@\ @@@@@@1)is_letter eAG eAP@б@г堐$chareASeAW@@ @@@3@J_8@A@@г䠐$bool&eA['eA_@@ @@@@@@@@@@@1eAC @ 6 [is_letter c] is {!is_lower}[ c || ]{!is_upper}[ c]. >f`b?f`@@@@@@@WK@@@R@@@@@@1+is_alphanumUhVh@б@г.$char`hah@@ @@@3baabbbbb@J_8@A@@г-$boolohph@@ @@@@@@@@@@@zh @ސ 9 [is_alphanum c] is {!is_letter}[ c || ]{!is_digit}[ c]. ii@@@@@@@L@@@@@@@@@1(is_whitekk@б@гw$charkk@@ @@@3@J_8@A@@гv$boolkk@@ @@@@@@@@@@@k @'  [is_white c] is [true] if and only if [c] is an ASCII white space character, that is one of tab ['\t'] ([0x09]), newline ['\n'] ([0x0A]), vertical tab ([0x0B]), form feed ([0x0C]), carriage return ['\r'] ([0x0D]) or space [' '] ([0x20]), l "p/@@@@@@@M@@@7䐠@@@@@@1(is_blank r17r1?@б@г$charr1Br1F@@ @@@3@J_8@A@@г$boolr1Jr1N@@ @@@@@@@@@@@ r13 @p [is_blank c] is [true] if and only if [c] is an ASCII blank character, that is either space [' '] ([0x20]) or tab ['\t'] ([0x09]). sOQt@@@@@@@2N@@@-@@@@@@1*is_graphic!0v1v@б@г $char;v<v@@ @@@3=<<=====@J_8@A@@г$boolJvKv@@ @@@@@@@@@@@Uv @ [is_graphic c] is [true] if and only if [c] is an ASCII graphic character, that is a byte in the range \[[0x21];[0x7E]\]. bwcxH@@@@@@@{O@@@v@@@@@@1(is_print"yzzz@б@гR$charzz@@ @@@3@J_8@A@@гQ$boolzz@@ @@@@@@@@@@@z @ / [is_print c] is {!is_graphic}[ c || c = ' ']. {{@@@@@@@P@@@@@@@@@1*is_control#}}@б@г$char}}@@ @@@3@J_8@A@@г$bool}}@@ @@@@@@@@@@@} @K [is_control c] is [true] if and only if [c] is an ASCII control character, that is a byte in the range \[[0x00];[0x1F]\] or [0x7F]. ~S@@@@@@@ Q@@@[@@@@@@1 # {1:decimal_digits Decimal digits} @@@@@@3@CX1@A(is_digit$@б@г$char)*@@ @@@@@г$bool67@@ @@@'@@@@@*@@@A @ [is_digit c] is [true] if and only if [c] is an ASCII decimal digit ['0'] to ['9'], that is a byte in the range \[[0x30];[0x39]\]. NO*q@@@@@@@gR@@@b@@@@@@I,digit_to_int%esyfs@б@г>$charpsqs@@ @@@3rqqrrrrr@b]8@A@@гR#intss@@ @@@@@@@@@@@su @ [digit_to_int c] is the numerical value of a digit that satisfies {!is_digit}. Raises [Invalid_argument] if {!is_digit}[ c] is [false].  0@@@@@@@S@@@@@@@@@1,digit_of_int&282D@б@г#int2G2J@@ @@@3@J_8@A@@г$char2N2R@@ @@@@@@@@@@@24 @7 Z [digit_of_int n] is an ASCII decimal digit for the decimal value [abs (n mod 10)]. SU@@@@@@@T@@@G@@@@@@1 # {1:hex_digits Hexadecimal digits} @@@@@@3@CX1@A,is_hex_digit'  @б@г㠐$char@@ @@@@@гࠐ$bool"#@@ @@@'@@@@@*@@@- @ [is_hex_digit c] is [true] if and only if [c] is an ASCII hexadecimal digit ['0'] to ['9'], ['a'] to ['f'] or ['A'] to ['F'], that is a byte in one of the ranges \[[0x30];[0x39]\], \[[0x41];[0x46]\], \[[0x61];[0x66]\]. :;@@@@@@@SU@@@N@@@@@@I0hex_digit_to_int(QR@б@г*$char\]@@ @@@3^]]^^^^^@b]8@A@@г>#intkl@@ @@@@@@@@@@@v @ڐ [hex_digit_to_int c] is the numerical value of a digit that satisfies {!is_hex_digit}. Raises [Invalid_argument] if {!is_hex_digit}[ c] is [false].  "@@@@@@@V@@@@@@@@@16lower_hex_digit_of_int)@б@гx#int@@ @@@3@J_8@A@@г$char@@ @@@@@@@@@@@ @# u [lower_hex_digit_of_int n] is a lowercase ASCII hexadecimal digit for the hexadecimal value [abs (n mod 16)]. Aq@@@@@@@W@@@3@@@@@@16upper_hex_digit_of_int*sys@б@г#intss@@ @@@3@J_8@A@@гˠ$charss@@ @@@@@@@@@@@ su @l v [upper_hex_digit_of_int n] is an uppercase ASCII hexadecimal digit for the hexadecimal value [abs (n mod 16)].   @@@@@@@ .X@@@| )@@@@@@1 7 6> {1:casing Casing transforms}  3 4B@@@@@@3 2 1 1 2 2 2 2 2@CX1@A)uppercase+ ?DJ @DS@б@г $char JDV KDZ@@ @@@@@г %$char WD^ XDb@@ @@@'@@@@@*@@@ bDF @Ɛ [uppercase c] is [c] with ASCII characters ['a'] to ['z'] respectively mapped to uppercase characters ['A'] to ['Z']. Other characters are left untouched.  oce p@@@@@@@ Y@@@ @@@@@@I)lowercase,  #@б@г _$char & *@@ @@@3        @b]8@A@@г n$char . 2@@ @@@@@@@@@@@  @ [lowercase c] is [c] with ASCII characters ['A'] to ['Z'] respectively mapped to lowercase characters ['a'] to ['z']. Other characters are left untouched.  35 @@@@@@@ Z@@@ ̐@@@@@@1@@@y@Y2@@@]@=@@@hA@!@@[@;@@u@U.@@@oH@@3        @\qJ@A-l M   @@Z  r ASCII character set support. These functions give meaning to the integers \[[0x00];[0x7F]\] of the {{:https://en.wikipedia.org/wiki/ASCII#Character_set}ASCII character set}. Since the UTF-8 encoding of Unicode has the same encoding and character semantics (U+0000 to U+001F) for these bytes, the functions can be safely used on elements of UTF-8 encoded [string] and [bytes] values. However the functions only deal with ASCII related matters. For example the notion of Unicode whitespace is much larger than the ASCII whitespace determined by {!Char.Ascii.is_white}. @since 5.4  ~   L o @@@@@@@ M  @@/lowercase_ascii.  @б@г ꠐ$char  @@ @@@3        @@wd@D/@@@pI@)@@t@T-@ @@X@%@@r@?@@@lE@@@@WV@VV@@@V@V@S@A>=@@г /$char a b @@ @@@E@@@K@@HN@@@ l @А @ Use the equivalent {!Ascii.lowercase} instead. @since 4.03  y   z>P@@@@@@@ \@@@ @@@@@@g/uppercase_ascii/ RV Re@б@г i$char Rh Rl@@ @@@3        @8@A@@г x$char Rp Rt@@ @@@@@@@@@@@ RR @  @ Use the equivalent {!Ascii.uppercase} instead. @since 4.03  uu @@@@@@@ ]@@@ ) ֐@@@@@@1  㐠5 {1:hashing Hashing}   @@@@@@3        @CX1@A+seeded_hash0  @б@г ʠ#int  @@ @@@@@б@г u!t  @@ @@@)@@г 栐#int  @@ @@@6@@@@@9@@@%@@<( @@@ !@ A seeded hash function for characters, with the same output value as {!Hashtbl.seeded_hash}. This function allows this module to be passed as argument to the functor {!Hashtbl.MakeSeeded}. @since 5.1  . /@@@@@@@ G^@@@  B@@@@@@[$hash1 E F@б@г !t P Q@@ @@@3 R Q Q R R R R R@to8@A@@г 2#int _ `@@ @@@@@@@@@@@ j @ ΐ An unseeded hash function for characters, with the same output value as {!Hashtbl.hash}. This function allows this module to be passed as argument to the functor {!Hashtbl.Make}. @since 5.1  w x@@@@@@@ _@@@  @@@@@@1  "/*  @@@@@@3        @CX1@A*unsafe_chr2    @б@г #int     #@@ @@@@@г $char  '  +@@ @@@'@@@@@*@@)%identityAA ɠ@@@     9@@ `@@@@6@ B