<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link rel="next" href="Netulex.Ulexing.html"> <link rel="Up" href="Netulex.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of class attributes" rel=Appendix href="index_attributes.html"> <link title="Index of class methods" rel=Appendix href="index_methods.html"> <link title="Index of classes" rel=Appendix href="index_classes.html"> <link title="Index of class types" rel=Appendix href="index_class_types.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html"> <link title="Equeue" rel="Chapter" href="Equeue.html"> <link title="Unixqueue" rel="Chapter" href="Unixqueue.html"> <link title="Uq_engines" rel="Chapter" href="Uq_engines.html"> <link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html"> <link title="Unixqueue_mt" rel="Chapter" href="Unixqueue_mt.html"> <link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html"> <link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html"> <link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html"> <link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html"> <link title="Netcgi" rel="Chapter" href="Netcgi.html"> <link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html"> <link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html"> <link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html"> <link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html"> <link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html"> <link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html"> <link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html"> <link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html"> <link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html"> <link title="Http_client" rel="Chapter" href="Http_client.html"> <link title="Telnet_client" rel="Chapter" href="Telnet_client.html"> <link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html"> <link title="Ftp_client" rel="Chapter" href="Ftp_client.html"> <link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html"> <link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html"> <link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html"> <link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html"> <link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html"> <link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html"> <link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html"> <link title="Netplex_types" rel="Chapter" href="Netplex_types.html"> <link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html"> <link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html"> <link title="Netplex_log" rel="Chapter" href="Netplex_log.html"> <link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html"> <link title="Netplex_container" rel="Chapter" href="Netplex_container.html"> <link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html"> <link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html"> <link title="Netplex_main" rel="Chapter" href="Netplex_main.html"> <link title="Netplex_config" rel="Chapter" href="Netplex_config.html"> <link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html"> <link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html"> <link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html"> <link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html"> <link title="Netshm" rel="Chapter" href="Netshm.html"> <link title="Netshm_data" rel="Chapter" href="Netshm_data.html"> <link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html"> <link title="Netshm_array" rel="Chapter" href="Netshm_array.html"> <link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html"> <link title="Netconversion" rel="Chapter" href="Netconversion.html"> <link title="Netchannels" rel="Chapter" href="Netchannels.html"> <link title="Netstream" rel="Chapter" href="Netstream.html"> <link title="Mimestring" rel="Chapter" href="Mimestring.html"> <link title="Netmime" rel="Chapter" href="Netmime.html"> <link title="Netsendmail" rel="Chapter" href="Netsendmail.html"> <link title="Neturl" rel="Chapter" href="Neturl.html"> <link title="Netaddress" rel="Chapter" href="Netaddress.html"> <link title="Netbuffer" rel="Chapter" href="Netbuffer.html"> <link title="Netdate" rel="Chapter" href="Netdate.html"> <link title="Netencoding" rel="Chapter" href="Netencoding.html"> <link title="Netulex" rel="Chapter" href="Netulex.html"> <link title="Netaccel" rel="Chapter" href="Netaccel.html"> <link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html"> <link title="Nethtml" rel="Chapter" href="Nethtml.html"> <link title="Netstring_str" rel="Chapter" href="Netstring_str.html"> <link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html"> <link title="Netstring_mt" rel="Chapter" href="Netstring_mt.html"> <link title="Netmappings" rel="Chapter" href="Netmappings.html"> <link title="Netaux" rel="Chapter" href="Netaux.html"> <link title="Nethttp" rel="Chapter" href="Nethttp.html"> <link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html"> <link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html"> <link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html"> <link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html"> <link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html"> <link title="Netsys" rel="Chapter" href="Netsys.html"> <link title="Netpop" rel="Chapter" href="Netpop.html"> <link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html"> <link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html"> <link title="Rpc_time" rel="Chapter" href="Rpc_time.html"> <link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html"> <link title="Rtypes" rel="Chapter" href="Rtypes.html"> <link title="Xdr" rel="Chapter" href="Xdr.html"> <link title="Rpc" rel="Chapter" href="Rpc.html"> <link title="Rpc_program" rel="Chapter" href="Rpc_program.html"> <link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html"> <link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html"> <link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html"> <link title="Rpc_client" rel="Chapter" href="Rpc_client.html"> <link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html"> <link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html"> <link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html"> <link title="Rpc_server" rel="Chapter" href="Rpc_server.html"> <link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html"> <link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html"> <link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html"> <link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html"> <link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html"> <link title="Shell_sys" rel="Chapter" href="Shell_sys.html"> <link title="Shell" rel="Chapter" href="Shell.html"> <link title="Shell_uq" rel="Chapter" href="Shell_uq.html"> <link title="Shell_mt" rel="Chapter" href="Shell_mt.html"> <link title="Shell_intro" rel="Chapter" href="Shell_intro.html"> <link title="Netsmtp" rel="Chapter" href="Netsmtp.html"><title>Ocamlnet 2 Reference Manual : Netulex.ULB</title> </head> <body> <div class="navbar"> <a href="Netulex.html">Up</a> <a href="Netulex.Ulexing.html">Next</a> </div> <center><h1>Module <a href="type_Netulex.ULB.html">Netulex.ULB</a></h1></center> <br> <pre><span class="keyword">module</span> ULB: <code class="code">sig</code> <a href="Netulex.ULB.html">..</a> <code class="code">end</code></pre><hr width="100%"> <br> This module provides the <code class="code">unicode_lexbuf</code> record with access functions. In this record, the data is available in two forms: As an array of Unicode code points <code class="code">ulb_chars</code>, and as string of encoded chars <code class="code">ulb_rawbuf</code>. Both buffers are synchronised by <code class="code">ulb_chars_pos</code>. This array stores where every character of <code class="code">ulb_chars</code> can be found in <code class="code">ulb_rawbuf</code>.<br> <br><code><span class="keyword">type</span> <a name="TYPEunicode_lexbuf"></a><code class="type"></code>unicode_lexbuf = private {</code><table class="typetable"> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_encoding : <code class="type"><a href="Netconversion.html#TYPEencoding">Netconversion.encoding</a></code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The character encoding of <code class="code">ulb_rawbuf</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_encoding_start : <code class="type">int</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The first character position to which <code class="code">ulb_encoding</code> applies (the encoding of earlier positions is lost)</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_rawbuf : <code class="type">string</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The encoded string to analyse</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_rawbuf_len : <code class="type">int</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The filled part of <code class="code">ulb_rawbuf</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_rawbuf_end : <code class="type">int</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The analysed part of <code class="code">ulb_rawbuf</code>. We have always <code class="code">ulb_rawbuf_end <= ulb_rawbuf_len</code>. The analysed part may be shorter than the filled part because there is not enough space in <code class="code">ulb_chars</code>, or because the filled part ends with an incomplete multi-byte character</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_rawbuf_const : <code class="type">bool</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >Whether <code class="code">ulb_rawbuf</code> is considered as a constant. If <code class="code">true</code>, it is never blitted.</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_chars : <code class="type">int array</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The analysed part of <code class="code">ulb_rawbuf</code> as array of Unicode code points. Only the positions 0 to <code class="code">ulb_chars_len-1</code> of the array are filled.</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_chars_pos : <code class="type">int array</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >For every analysed character this array stores the byte position where the character begins in <code class="code">ulb_rawbuf</code>. In addition, the array contains at <code class="code">ulb_chars_len</code> the value of <code class="code">ulb_rawbuf_end</code>. <p> This array is one element longer than <code class="code">ulb_chars</code>.</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_chars_len : <code class="type">int</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The filled part of <code class="code">ulb_chars</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_eof : <code class="type">bool</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >Whether EOF has been seen</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_refill : <code class="type">string -> int -> int -> int</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >The refill function</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_enc_change_hook : <code class="type"><a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit</code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >This function is called when the encoding changes</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr> <tr> <td align="left" valign="top" > <code> </code></td> <td align="left" valign="top" > <code><span class="keyword">mutable </span>ulb_cursor : <code class="type"><a href="Netconversion.html#TYPEcursor">Netconversion.cursor</a></code>;</code></td> <td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >Internally used by the implementation</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td> </tr></table> } <pre><span class="keyword">val</span> <a name="VALfrom_function"></a>from_function : <code class="type">?raw_size:int -><br> ?char_size:int -><br> ?enc_change_hook:(<a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit) -><br> refill:(string -> int -> int -> int) -><br> <a href="Netconversion.html#TYPEencoding">Netconversion.encoding</a> -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a></code></pre><div class="info"> Creates a <code class="code">unicode_lexbuf</code> to analyse strings of the passed <code class="code">encoding</code> coming from the <code class="code">refill</code> function. <p> <br> </div> <div class="param_info"><code class="code">raw_size</code> : The initial size for <code class="code">ulb_rawbuf</code>. Defaults to 512</div> <div class="param_info"><code class="code">char_size</code> : The initial size for <code class="code">ulb_chars</code>. Defaults to 256</div> <div class="param_info"><code class="code">enc_change_hook</code> : This function is called when the encoding is changed, either by this module, or by the user calling <code class="code">set_encoding</code>.</div> <div class="param_info"><code class="code">refill</code> : This function is called with arguments <code class="code">ulb_rawbuf</code>, <code class="code">ulb_rawbuf_len</code>, and <code class="code">l</code>, where <code class="code">l = String.length ulb_rawbuf - ulb_rawbuf_len</code> is the free space in the buffer. The function should fill new bytes into this substring, and return the number of added bytes. The return value 0 signals EOF.</div> <pre><span class="keyword">val</span> <a name="VALfrom_in_obj_channel"></a>from_in_obj_channel : <code class="type">?raw_size:int -><br> ?char_size:int -><br> ?enc_change_hook:(<a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit) -><br> <a href="Netconversion.html#TYPEencoding">Netconversion.encoding</a> -><br> <a href="Netchannels.in_obj_channel.html">Netchannels.in_obj_channel</a> -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a></code></pre><div class="info"> Creates a <code class="code">unicode_lexbuf</code> to analyse strings of the passed <code class="code">encoding</code> coming from the object channel. <p> <br> </div> <div class="param_info"><code class="code">raw_size</code> : The initial size for <code class="code">ulb_rawbuf</code>. Defaults to 512</div> <div class="param_info"><code class="code">char_size</code> : The initial size for <code class="code">ulb_chars</code>. Defaults to 256</div> <div class="param_info"><code class="code">enc_change_hook</code> : This function is called when the encoding is changed, either by this module, or by the user calling <code class="code">set_encoding</code>.</div> <pre><span class="keyword">val</span> <a name="VALfrom_string"></a>from_string : <code class="type">?enc_change_hook:(<a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit) -><br> <a href="Netconversion.html#TYPEencoding">Netconversion.encoding</a> -> string -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a></code></pre><div class="info"> Creates a <code class="code">unicode_lexbuf</code> analysing the passed string encoded in the passed encoding. This function copies the input string. <p> <br> </div> <div class="param_info"><code class="code">enc_change_hook</code> : This function is called when the encoding is changed, either by this module, or by the user calling <code class="code">set_encoding</code></div> <pre><span class="keyword">val</span> <a name="VALfrom_string_inplace"></a>from_string_inplace : <code class="type">?enc_change_hook:(<a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit) -><br> <a href="Netconversion.html#TYPEencoding">Netconversion.encoding</a> -> string -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a></code></pre><div class="info"> Creates a <code class="code">unicode_lexbuf</code> analysing the passed string encoded in the passed encoding. This function does not copy the input string, but uses it directly as <code class="code">ulb_rawbuf</code>. The string is not modified by <code class="code">ULB</code>, but the caller must ensure that other program parts do not modify it either. <p> <br> </div> <div class="param_info"><code class="code">enc_change_hook</code> : This function is called when the encoding is changed, either by this module, or by the user calling <code class="code">set_encoding</code></div> <pre><span class="keyword">val</span> <a name="VALdelete"></a>delete : <code class="type">int -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit</code></pre><div class="info"> Deletes the number of characters from <code class="code">unicode_lexbuf</code>. These characters are removed from the beginning of the buffer, i.e. <code class="code">ulb_chars.(n)</code> becomes the new first character of the buffer. All three buffers <code class="code">ulb_rawbuf</code>, <code class="code">ulb_chars</code>, and <code class="code">ulb_chars_pos</code> are blitted as necessary. <p> When the buffer is already at EOF, the function fails. <p> For efficiency, it should be tried to call <code class="code">delete</code> as seldom as possible. Its speed is linear to the number of characters to move.<br> </div> <pre><span class="keyword">val</span> <a name="VALrefill"></a>refill : <code class="type"><a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit</code></pre><div class="info"> Tries to add characters to the <code class="code">unicode_lexbuf</code> by calling the <code class="code">ulb_refill</code> function. When the buffer is already at EOF, the exception <code class="code">End_of_file</code> is raised, and the buffer is not modified. Otherwise, the <code class="code">ulb_refill</code> function is called to add new characters. If necessary, <code class="code">ulb_rawbuf</code>, <code class="code">ulb_chars</code>, and <code class="code">ulb_chars_pos</code> are enlarged such that it is ensured that either at least one new character is added, or that EOF is found for the first time In the latter case, <code class="code">ulb_eof</code> is set to <code class="code">true</code> (and the next call of <code class="code">refill_unicode_lexbuf</code> will raise <code class="code">End_of_file</code>).<br> </div> <pre><span class="keyword">val</span> <a name="VALset_encoding"></a>set_encoding : <code class="type"><a href="Netconversion.html#TYPEencoding">Netconversion.encoding</a> -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit</code></pre><div class="info"> Sets the <code class="code">encoding</code> to the passed value. This only affects future <code class="code">refill</code> calls. The hook <code class="code">enc_change_hook</code> is invoked when defined.<br> </div> <pre><span class="keyword">val</span> <a name="VALclose"></a>close : <code class="type"><a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> unit</code></pre><div class="info"> Sets <code class="code">ulb_eof</code> of the <code class="code">unicode_lexbuf</code>. The rest of the buffer is not modified<br> </div> <pre><span class="keyword">val</span> <a name="VALutf8_sub_string"></a>utf8_sub_string : <code class="type">int -> int -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> string</code></pre><div class="info"> The two <code class="code">int</code> arguments are the position and length of a sub string of the lexbuf that is returned as UTF8 string. Position and length are given as character multiples, not byte multiples.<br> </div> <pre><span class="keyword">val</span> <a name="VALutf8_sub_string_length"></a>utf8_sub_string_length : <code class="type">int -> int -> <a href="Netulex.ULB.html#TYPEunicode_lexbuf">unicode_lexbuf</a> -> int</code></pre><div class="info"> Returns <code class="code">String.length(utf8_sub_string args)</code>. Tries not to allocate the UTF-8 string.<br> </div> </body></html>