@@@ cython and python 3 wip
[mLib-python] / str.pyx
CommitLineData
5b1830f3
MW
1### -*-pyrex-*-
2###
3### String utilities
4###
5### (c) 2006 Straylight/Edgeware
6###
6a6bd8fa 7
5b1830f3
MW
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.
6a6bd8fa 25
965caf5f 26def word(object p, object quotep = False):
addc0c37 27 """word(STR, [quotep = False]) -> WORD, REST"""
965caf5f
MW
28 cdef unsigned f = 0
29 cdef char *op = xstrdup(TEXT_PTR(p))
30 cdef char *pp = op
6a6bd8fa
MW
31 cdef char *q
32 cdef object w
33 cdef object r
34
6a6bd8fa 35 if quotep:
965caf5f 36 f |= STRF_QUOTE
6a6bd8fa
MW
37 q = str_qword(&pp, f)
38 if q is NULL:
39 w = None
40 else:
965caf5f 41 w = <str>q
6a6bd8fa
MW
42 if pp is NULL:
43 r = ''
44 else:
965caf5f 45 r = <str>pp
6a6bd8fa
MW
46 xfree(op)
47 return w, r
48
965caf5f 49def split(object p, int n = -1, quotep = False):
addc0c37 50 """split(STR, [n = -1], [quotep = False]) -> WORDS, REST"""
965caf5f
MW
51 cdef unsigned f = 0
52 cdef char *op = xstrdup(TEXT_PTR(p))
53 cdef char *pp = op
6a6bd8fa 54 cdef char *q
965caf5f 55 cdef object l = []
6a6bd8fa
MW
56 cdef object r
57
6a6bd8fa 58 if quotep:
965caf5f 59 f |= STRF_QUOTE
6a6bd8fa
MW
60 while n != 0:
61 q = str_qword(&pp, f)
62 if q is NULL:
63 break
965caf5f 64 l.append(<str>q)
6a6bd8fa 65 if n > 0:
965caf5f 66 n -= 1
6a6bd8fa
MW
67 if pp is NULL:
68 r = ''
69 else:
965caf5f 70 r = <str>pp
6a6bd8fa
MW
71 xfree(op)
72 return l, r
73
965caf5f 74def match(object p, object s, prefixp = False):
addc0c37 75 """match(PAT, STR, [prefixp = False]) -> BOOL"""
965caf5f 76 cdef unsigned f = 0
23bff39b 77
95920c4f 78 if prefixp:
965caf5f
MW
79 f |= STRF_PREFIX
80 return str_matchx(TEXT_PTR(p), TEXT_PTR(s), f)
6a6bd8fa 81
965caf5f 82def sanitize(object s, int n = -1):
addc0c37 83 """sanitize(STR, [n = -1]) -> STR"""
965caf5f
MW
84 cdef Py_ssize_t nn
85 cdef const char *ss = _text_strlen(s, &nn)
6a6bd8fa
MW
86 cdef char *buf
87 cdef object d
88
89 if n < 0:
965caf5f 90 n = nn
6a6bd8fa 91 buf = <char *>xmalloc(n + 1)
965caf5f
MW
92 str_sanitize(buf, ss, n + 1)
93 d = <str>buf
6a6bd8fa
MW
94 xfree(buf)
95 return d
ae68e889 96
965caf5f 97def versioncmp(object va, object vb):
addc0c37 98 """versioncmp(V0, V1) -> -1 | 0 | +1"""
965caf5f 99 return _versioncmp(TEXT_PTR(va), TEXT_PTR(vb))
6a6bd8fa 100
5b1830f3 101###----- That's all, folks --------------------------------------------------