-# -*-pyrex-*-
-#
-# $Id$
-#
-# String utilities
-#
-# (c) 2006 Straylight/Edgeware
-#
+### -*-pyrex-*-
+###
+### String utilities
+###
+### (c) 2006 Straylight/Edgeware
+###
-#----- Licensing notice -----------------------------------------------------
-#
-# This file is part of the Python interface to mLib.
-#
-# mLib/Python is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# mLib/Python is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with mLib/Python; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+###----- Licensing notice ---------------------------------------------------
+###
+### This file is part of the Python interface to mLib.
+###
+### mLib/Python is free software; you can redistribute it and/or modify
+### it under the terms of the GNU General Public License as published by
+### the Free Software Foundation; either version 2 of the License, or
+### (at your option) any later version.
+###
+### mLib/Python is distributed in the hope that it will be useful,
+### but WITHOUT ANY WARRANTY; without even the implied warranty of
+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+### GNU General Public License for more details.
+###
+### You should have received a copy of the GNU General Public License
+### along with mLib/Python; if not, write to the Free Software Foundation,
+### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-def word(char *p, quotep = False):
- cdef unsigned f
- cdef char *op
- cdef char *pp
+def word(object p, object quotep = False):
+ """word(STR, [quotep = False]) -> WORD, REST"""
+ cdef unsigned f = 0
+ cdef char *op = xstrdup(TEXT_PTR(p))
+ cdef char *pp = op
cdef char *q
cdef object w
cdef object r
- f = 0
if quotep:
- f = f | STRF_QUOTE
- pp = op = xstrdup(p)
+ f |= STRF_QUOTE
q = str_qword(&pp, f)
if q is NULL:
w = None
else:
- w = q
+ w = <str>q
if pp is NULL:
r = ''
else:
- r = pp
+ r = <str>pp
xfree(op)
return w, r
-def split(char *p, int n = -1, quotep = False):
- cdef unsigned f
- cdef char *op
- cdef char *pp
+def split(object p, int n = -1, quotep = False):
+ """split(STR, [n = -1], [quotep = False]) -> WORDS, REST"""
+ cdef unsigned f = 0
+ cdef char *op = xstrdup(TEXT_PTR(p))
+ cdef char *pp = op
cdef char *q
- cdef object l
+ cdef object l = []
cdef object r
- f = 0
if quotep:
- f = f | STRF_QUOTE
- l = []
- op = pp = xstrdup(p)
+ f |= STRF_QUOTE
while n != 0:
q = str_qword(&pp, f)
if q is NULL:
break
- l.append(q)
+ l.append(<str>q)
if n > 0:
- n = n - 1
+ n -= 1
if pp is NULL:
r = ''
else:
- r = pp
+ r = <str>pp
xfree(op)
return l, r
-def match(char *p, char *s, prefixp = False):
- cdef unsigned f
+def match(object p, object s, prefixp = False):
+ """match(PAT, STR, [prefixp = False]) -> BOOL"""
+ cdef unsigned f = 0
+
if prefixp:
- f = f | STRF_PREFIX
- return _tobool(str_matchx(p, s, f))
+ f |= STRF_PREFIX
+ return str_matchx(TEXT_PTR(p), TEXT_PTR(s), f)
-def sanitize(char *p, int n = -1):
+def sanitize(object s, int n = -1):
+ """sanitize(STR, [n = -1]) -> STR"""
+ cdef Py_ssize_t nn
+ cdef const char *ss = _text_strlen(s, &nn)
cdef char *buf
cdef object d
if n < 0:
- n = strlen(p)
+ n = nn
buf = <char *>xmalloc(n + 1)
- str_sanitize(buf, p, n + 1)
- d = buf
+ str_sanitize(buf, ss, n + 1)
+ d = <str>buf
xfree(buf)
return d
-def versioncmp(char *va, char *vb):
- return _versioncmp(va, vb)
+def versioncmp(object va, object vb):
+ """versioncmp(V0, V1) -> -1 | 0 | +1"""
+ return _versioncmp(TEXT_PTR(va), TEXT_PTR(vb))
-#----- That's all, folks ----------------------------------------------------
+###----- That's all, folks --------------------------------------------------