1439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.deEX
2439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.ift .ft5
3439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.nf
4439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin..
5439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.deEE
6439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.ft1
7439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.fi
8439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin..
9439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.TH RUNE 3
10439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SH NAME
11439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinrunetochar, chartorune, runelen, runenlen, fullrune, utfecpy, utflen, utfnlen, utfrune, utfrrune, utfutf \- rune/UTF conversion
12439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SH SYNOPSIS
13439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.ta \w'\fLchar*xx'u
14439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B #include <utf.h>
15439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
16439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
17439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinint	runetochar(char *s, Rune *r)
18439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
19439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
20439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinint	chartorune(Rune *r, char *s)
21439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
22439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
23439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinint	runelen(long r)
24439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
25439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
26439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinint	runenlen(Rune *r, int n)
27439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
28439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
29439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinint	fullrune(char *s, int n)
30439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
31439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
32439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinchar*	utfecpy(char *s1, char *es1, char *s2)
33439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
34439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
35439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinint	utflen(char *s)
36439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
37439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
38439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinint	utfnlen(char *s, long n)
39439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
40439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
41439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinchar*	utfrune(char *s, long c)
42439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
43439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
44439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinchar*	utfrrune(char *s, long c)
45439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
46439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B
47439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinchar*	utfutf(char *s1, char *s2)
48439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SH DESCRIPTION
49439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinThese routines convert to and from a
50439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
51439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinbyte stream and runes.
52439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
53439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Runetochar
54439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkincopies one rune at
55439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I r
56439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinto at most
57439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B UTFmax
58439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinbytes starting at
59439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I s
60439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinand returns the number of bytes copied.
61439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.BR UTFmax ,
62439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkindefined as
63439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B 3
64439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinin
65439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.BR <libc.h> ,
66439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinis the maximum number of bytes required to represent a rune.
67439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
68439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Chartorune
69439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkincopies at most
70439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B UTFmax
71439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinbytes starting at
72439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I s
73439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinto one rune at
74439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I r
75439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinand returns the number of bytes copied.
76439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinIf the input is not exactly in
77439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
78439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinformat,
79439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I chartorune
80439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinwill convert to 0x80 and return 1.
81439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
82439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Runelen
83439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns the number of bytes
84439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinrequired to convert
85439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I r
86439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkininto
87439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF.
88439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
89439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Runenlen
90439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns the number of bytes
91439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinrequired to convert the
92439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I n
93439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinrunes pointed to by
94439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I r
95439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkininto
96439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF.
97439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
98439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Fullrune
99439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns 1 if the string
100439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I s
101439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinof length
102439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I n
103439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinis long enough to be decoded by
104439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I chartorune
105439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinand 0 otherwise.
106439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinThis does not guarantee that the string
107439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkincontains a legal
108439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
109439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinencoding.
110439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinThis routine is used by programs that
111439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinobtain input a byte at
112439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkina time and need to know when a full rune
113439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinhas arrived.
114439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
115439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinThe following routines are analogous to the
116439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkincorresponding string routines with
117439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B utf
118439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinsubstituted for
119439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B str
120439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinand
121439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B rune
122439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinsubstituted for
123439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.BR chr .
124439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
125439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Utfecpy
126439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkincopies UTF sequences until a null sequence has been copied, but writes no 
127439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinsequences beyond
128439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR es1 .
129439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinIf any sequences are copied,
130439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I s1
131439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinis terminated by a null sequence, and a pointer to that sequence is returned.
132439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinOtherwise, the original
133439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I s1
134439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinis returned.
135439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
136439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Utflen
137439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns the number of runes that
138439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinare represented by the
139439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
140439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinstring
141439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR s .
142439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
143439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Utfnlen
144439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns the number of complete runes that
145439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinare represented by the first
146439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I n
147439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinbytes of
148439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
149439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinstring
150439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR s .
151439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinIf the last few bytes of the string contain an incompletely coded rune,
152439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I utfnlen
153439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinwill not count them; in this way, it differs from
154439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR utflen ,
155439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinwhich includes every byte of the string.
156439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
157439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Utfrune
158439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.RI ( utfrrune )
159439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns a pointer to the first (last)
160439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinoccurrence of rune
161439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I c
162439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinin the
163439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
164439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinstring
165439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR s ,
166439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinor 0 if
167439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I c
168439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkindoes not occur in the string.
169439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinThe NUL byte terminating a string is considered to
170439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinbe part of the string
171439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR s .
172439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.PP
173439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I Utfutf
174439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns a pointer to the first occurrence of
175439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinthe
176439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
177439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinstring
178439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I s2
179439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinas a
180439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SM UTF
181439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinsubstring of
182439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR s1 ,
183439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinor 0 if there is none.
184439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinIf
185439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I s2
186439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinis the null string,
187439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.I utfutf
188439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkinreturns
189439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR s1 .
190439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SH SOURCE
191439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.B http://swtch.com/plan9port/unix
192439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.SH SEE ALSO
193439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR utf (7),
194439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin.IR tcs (1)
195