@@@ lbuf needs test
[mLib-python] / str.pyx
1 ### -*-pyrex-*-
2 ###
3 ### String utilities
4 ###
5 ### (c) 2006 Straylight/Edgeware
6 ###
7
8 ###----- Licensing notice ---------------------------------------------------
9 ###
10 ### This file is part of the Python interface to mLib.
11 ###
12 ### mLib/Python is free software; you can redistribute it and/or modify
13 ### it under the terms of the GNU General Public License as published by
14 ### the Free Software Foundation; either version 2 of the License, or
15 ### (at your option) any later version.
16 ###
17 ### mLib/Python is distributed in the hope that it will be useful,
18 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 ### GNU General Public License for more details.
21 ###
22 ### You should have received a copy of the GNU General Public License
23 ### along with mLib/Python; if not, write to the Free Software Foundation,
24 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26 def word(object p, object quotep = False):
27 """word(STR, [quotep = False]) -> WORD, REST"""
28 cdef unsigned f = 0
29 cdef char *op = xstrdup(TEXT_PTR(p))
30 cdef char *pp = op
31 cdef char *q
32 cdef object w
33 cdef object r
34
35 if quotep:
36 f |= STRF_QUOTE
37 q = str_qword(&pp, f)
38 if q is NULL:
39 w = None
40 else:
41 w = <str>q
42 if pp is NULL:
43 r = ''
44 else:
45 r = <str>pp
46 xfree(op)
47 return w, r
48
49 def split(object p, int n = -1, quotep = False):
50 """split(STR, [n = -1], [quotep = False]) -> WORDS, REST"""
51 cdef unsigned f = 0
52 cdef char *op = xstrdup(TEXT_PTR(p))
53 cdef char *pp = op
54 cdef char *q
55 cdef object l = []
56 cdef object r
57
58 if quotep:
59 f |= STRF_QUOTE
60 while n != 0:
61 q = str_qword(&pp, f)
62 if q is NULL:
63 break
64 l.append(<str>q)
65 if n > 0:
66 n -= 1
67 if pp is NULL:
68 r = ''
69 else:
70 r = <str>pp
71 xfree(op)
72 return l, r
73
74 def match(object p, object s, prefixp = False):
75 """match(PAT, STR, [prefixp = False]) -> BOOL"""
76 cdef unsigned f = 0
77
78 if prefixp:
79 f |= STRF_PREFIX
80 return str_matchx(TEXT_PTR(p), TEXT_PTR(s), f)
81
82 def sanitize(object s, int n = -1):
83 """sanitize(STR, [n = -1]) -> STR"""
84 cdef Py_ssize_t nn
85 cdef const char *ss = _text_strlen(s, &nn)
86 cdef char *buf
87 cdef object d
88
89 if n < 0:
90 n = nn
91 buf = <char *>xmalloc(n + 1)
92 str_sanitize(buf, ss, n + 1)
93 d = <str>buf
94 xfree(buf)
95 return d
96
97 def versioncmp(object va, object vb):
98 """versioncmp(V0, V1) -> -1 | 0 | +1"""
99 return _versioncmp(TEXT_PTR(va), TEXT_PTR(vb))
100
101 ###----- That's all, folks --------------------------------------------------