@@@ cython and python 3 wip
[mLib-python] / str.pyx
diff --git a/str.pyx b/str.pyx
index bbde1b0..97dfa6a 100644 (file)
--- a/str.pyx
+++ b/str.pyx
-# -*-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 --------------------------------------------------