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