@@@ cython and python 3 wip
[mLib-python] / str.pyx
diff --git a/str.pyx b/str.pyx
index f1a2ee5..97dfa6a 100644 (file)
--- a/str.pyx
+++ b/str.pyx
 ### 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):
+def word(object p, object quotep = False):
   """word(STR, [quotep = False]) -> WORD, REST"""
-  cdef unsigned f
-  cdef char *op
-  cdef char *pp
+  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):
+def split(object p, int n = -1, quotep = False):
   """split(STR, [n = -1], [quotep = False]) -> WORDS, REST"""
-  cdef unsigned f
-  cdef char *op
-  cdef char *pp
+  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):
+def match(object p, object s, prefixp = False):
   """match(PAT, STR, [prefixp = False]) -> BOOL"""
-  cdef unsigned f
+  cdef unsigned f = 0
 
-  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):
+def versioncmp(object va, object vb):
   """versioncmp(V0, V1) -> -1 | 0 | +1"""
-  return _versioncmp(va, vb)
+  return _versioncmp(TEXT_PTR(va), TEXT_PTR(vb))
 
 ###----- That's all, folks --------------------------------------------------