1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#pragma once
typedef byte* string;
typedef struct str·Hdr
{
vlong len;
vlong cap;
byte buf[];
} str·Hdr;
// -------------------------------------------------------------------------
// UTF-8 functions.
// Perhaps break into own unit
// TODO: Add to(upper|lower|title)
typedef uint32 Rune;
enum
{
UTFmax = 4,
RuneSync = 0x80,
RuneSelf = 0x80,
RuneErr = 0xFFFD,
RuneMax = 0x10FFFF,
};
int utf8·fullrune(byte *s, int n);
byte *utf8·findrune(byte *s, long i);
int utf8·chartorune(Rune *r, byte *s);
int utf8·runetochar(byte *s, Rune *r);
int utf8·len(byte *s);
int utf8·runelen(Rune r);
int utf8·isletter(Rune r);
int utf8·isdigit(Rune r);
int utf8·isspace(Rune r);
int utf8·istitle(Rune r);
// -------------------------------------------------------------------------
// Dynamic string functions
string str·newcap(const byte *s, vlong len, vlong cap);
string str·newlen(const byte *s, vlong len);
string str·new(const byte *s);
string str·newf(const byte *fmt, ...);
void str·free(string s);
int str·len(const string s);
int str·cap(const string s);
string str·clear(string s);
string str·grow(string s, vlong delta);
string str·fit(string s);
string str·appendcount(string s, vlong len, const byte *b);
string str·append(string s, const byte* b);
string str·appendf(string s, const byte* fmt, ...);
string str·appendbyte(string s, const byte b);
bool str·equals(const string s, const string t);
int str·find(string s, const byte* substr);
void str·lower(string s);
void str·upper(string s);
void str·replace(string s, const byte* from, const byte* to);
string* str·split(string s, const byte* tok);
string str·join(vlong len, byte** fields, const byte* sep);
|