diff options
Diffstat (limited to 'sip/qt/qstring.sip')
-rw-r--r-- | sip/qt/qstring.sip | 946 |
1 files changed, 0 insertions, 946 deletions
diff --git a/sip/qt/qstring.sip b/sip/qt/qstring.sip deleted file mode 100644 index a09e68d..0000000 --- a/sip/qt/qstring.sip +++ /dev/null @@ -1,946 +0,0 @@ -// This is the SIP interface definition for TQChar and TQString. -// -// Copyright (c) 2007 -// Riverbank Computing Limited <info@riverbankcomputing.co.uk> -// -// This file is part of PyTQt. -// -// This copy of PyTQt 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, or (at your option) any later -// version. -// -// PyTQt is supplied 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 -// PyTQt; see the file LICENSE. If not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - -%ExportedDoc -<Sect2><Title>TQChar (TQt v2+)</Title> -<FuncSynopsis> - <FuncDef>uchar &<Function>cell</Function> const</FuncDef> - <ParamDef></ParamDef> -</FuncSynopsis> -<Para> -Not implemented. -</Para> - -<FuncSynopsis> - <FuncDef>uchar &<Function>row</Function> const</FuncDef> - <ParamDef></ParamDef> -</FuncSynopsis> -<Para> -Not implemented. -</Para> -</Sect2> - -<Sect2><Title>TQString</Title> -<Para> -A Python string object (or Unicode object) can be used whenever a -<Literal>TQString</Literal> can be used. A <Literal>TQString</Literal> can be -converted to a Python string object using the Python <Literal>str()</Literal> -function, and to a Python Unicode object using the Python -<Literal>unicode()</Literal> function. -</Para> - -<Para> -The Python <Literal>+</Literal>, <Literal>+=</Literal>, <Literal>*</Literal>, -<Literal>*=</Literal>, <Literal>len</Literal>, <Literal>[]</Literal> -(for reading slices and individual characters), <Literal>in</Literal> and -comparison operators are supported. -</Para> - -<FuncSynopsis> - <FuncDef>TQCharRef <Function>at</Function></FuncDef> - <ParamDef>uint <Parameter>i</Parameter></ParamDef> -</FuncSynopsis> -<Para> -Not yet implemented. (TQt v2+) -</Para> - -<FuncSynopsis> - <FuncDef>TQChar <Function>constref</Function> const</FuncDef> - <ParamDef>uint <Parameter>i</Parameter></ParamDef> -</FuncSynopsis> -<Para> -Not yet implemented. (TQt v2+) -</Para> - -<FuncSynopsis> - <FuncDef>TQChar &<Function>ref</Function></FuncDef> - <ParamDef>uint <Parameter>i</Parameter></ParamDef> -</FuncSynopsis> -<Para> -Not yet implemented. (TQt v2+) -</Para> - -<FuncSynopsis> - <FuncDef>TQString &<Function>setUnicodeCodes</Function></FuncDef> - <ParamDef>const ushort *<Parameter>unicode_as_shorts</Parameter></ParamDef> - <ParamDef>uint <Parameter>len</Parameter></ParamDef> -</FuncSynopsis> -<Para> -Not yet implemented. (TQt v2.1+) -</Para> - -<FuncSynopsis> - <FuncDef>TQString &<Function>sprintf</Function></FuncDef> - <ParamDef>const char *<Parameter>format</Parameter></ParamDef> - <ParamDef>...</ParamDef> -</FuncSynopsis> -<Para> -Not implemented. -</Para> - -<FuncSynopsis> - <FuncDef>short <Function>toShort</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>short</Literal> result and the -<Literal>ok</Literal> value. -</Para> - -<FuncSynopsis> - <FuncDef>ushort <Function>toUShort</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>ushort</Literal> result and the -<Literal>ok</Literal> value. -</Para> - -<FuncSynopsis> - <FuncDef>int <Function>toInt</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>int</Literal> result and the -<Literal>ok</Literal> value. -</Para> - -<FuncSynopsis> - <FuncDef>uint <Function>toUInt</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>uint</Literal> result and the -<Literal>ok</Literal> value. -</Para> - -<FuncSynopsis> - <FuncDef>long <Function>toLong</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>long</Literal> result and the -<Literal>ok</Literal> value. -</Para> - -<FuncSynopsis> - <FuncDef>ulong <Function>toULong</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>ulong</Literal> result and the -<Literal>ok</Literal> value. -</Para> - -<FuncSynopsis> - <FuncDef>float <Function>toFloat</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>float</Literal> result and the -<Literal>ok</Literal> value. -</Para> - -<FuncSynopsis> - <FuncDef>double <Function>toDouble</Function></FuncDef> - <ParamDef>bool *<Parameter>ok</Parameter> = 0</ParamDef> -</FuncSynopsis> -<Para> -This returns a tuple of the <Literal>double</Literal> result and the -<Literal>ok</Literal> value. -</Para> -</Sect2> -%End - - -class TQChar -{ -%TypeHeaderCode -#include <tqstring.h> -%End - -public: - TQChar(); - TQChar(char); -// TQChar(uchar); - TQChar(uchar,uchar); - TQChar(const TQChar &); -// TQChar(ushort); -// TQChar(short); -// TQChar(uint); - TQChar(int); - - static const TQChar null; - static const TQChar replacement; - static const TQChar byteOrderMark; - static const TQChar byteOrderSwapped; - static const TQChar nbsp; - - enum Category { - NoCategory, - - Mark_NonSpacing, - Mark_SpacingCombining, - Mark_Enclosing, - - Number_DecimalDigit, - Number_Letter, - Number_Other, - - Separator_Space, - Separator_Line, - Separator_Paragraph, - - Other_Control, - Other_Format, - Other_Surrogate, - Other_PrivateUse, - Other_NotAssigned, - - Letter_Uppercase, - Letter_Lowercase, - Letter_Titlecase, - Letter_Modifier, - Letter_Other, - - Punctuation_Connector, - Punctuation_Dash, - Punctuation_Open, - Punctuation_Close, - Punctuation_InitialQuote, - Punctuation_FinalQuote, - Punctuation_Other, - - Symbol_Math, - Symbol_Currency, - Symbol_Modifier, - Symbol_Other - }; - - enum Direction { - DirL, - DirR, - DirEN, - DirES, - DirET, - DirAN, - DirCS, - DirB, - DirS, - DirWS, - DirON, - DirLRE, - DirLRO, - DirAL, - DirRLE, - DirRLO, - DirPDF, - DirNSM, - DirBN - }; - - enum Decomposition { - Single, - Canonical, - Font, - NoBreak, - Initial, - Medial, - Final, - Isolated, - Circle, - Super, - Sub, - Vertical, - Wide, - Narrow, - Small, - Square, - Compat, - Fraction - }; - - enum Joining { - OtherJoining, - Dual, - Right, - Center - }; - - enum CombiningClass { - Combining_BelowLeftAttached, - Combining_BelowAttached, - Combining_BelowRightAttached, - Combining_LeftAttached, - Combining_RightAttached, - Combining_AboveLeftAttached, - Combining_AboveAttached, - Combining_AboveRightAttached, - - Combining_BelowLeft, - Combining_Below, - Combining_BelowRight, - Combining_Left, - Combining_Right, - Combining_AboveLeft, - Combining_Above, - Combining_AboveRight, - - Combining_DoubleBelow, - Combining_DoubleAbove, - Combining_IotaSubscript - }; - - int digitValue() const; - TQChar lower() const; - TQChar upper() const; - - Category category() const; - Direction direction() const; - Joining joining() const; - bool mirrored() const; - TQChar mirroredChar() const; - const TQString &decomposition() const; - Decomposition decompositionTag() const; - unsigned char combiningClass() const; - - char latin1() const; - ushort unicode() const; - - bool isNull() const; - bool isPrint() const; - bool isPunct() const; - bool isSpace() const; - bool isMark() const; - bool isLetter() const; - bool isNumber() const; - bool isLetterOrNumber() const; - bool isDigit() const; - bool isSymbol() const; - -// uchar& cell(); -// uchar& row(); - uchar cell() const; - uchar row() const; - void setCell(uchar); - void setRow(uchar); - - static bool networkOrdered(); -}; - -bool operator==(TQChar,char); -bool operator==(TQChar,TQChar); -bool operator!=(TQChar,TQChar); -bool operator!=(TQChar,char); -bool operator<=(TQChar,char); -bool operator<=(TQChar,TQChar); -bool operator>=(TQChar,char); -bool operator>=(TQChar,TQChar); -bool operator<(TQChar,char); -bool operator<(TQChar,TQChar); -bool operator>(TQChar,char); -bool operator>(TQChar,TQChar); - - -class TQString -{ -%TypeHeaderCode -#include <tqstring.h> -#include <tqtextcodec.h> -%End - -public: - TQString(); - TQString(TQChar); - TQString(const TQString &); - TQString(const TQByteArray &); -// TQString(const TQChar *,uint); -// TQString(const char *); - - // This is how we implement TQUrl::operator TQString() const. - TQString(const TQUrl &); - - // This is how we implement TQKeySequence::operator TQString() const. - TQString(const TQKeySequence &); - - // This is how we implement TQUuid::operator TQString() const. - TQString(const TQUuid &); - - static const TQString null; - - bool isNull() const; - bool isEmpty() const; - uint length() const; - void truncate(uint); - TQString &fill(TQChar,int = -1); - TQString copy() const; - - TQString arg(int /Constrained/,int = 0,int = 10) const; - TQString arg(double /Constrained/,int = 0,char = 'g',int = -1) const; -// TQString arg(TQ_LLONG,int = 0,int = 10) const; -// TQString arg(TQ_ULLONG,int = 0,int = 10) const; - TQString arg(long,int = 0,int = 10) const; - TQString arg(ulong,int = 0,int = 10) const; -// TQString arg(uint,int = 0,int = 10) const; -// TQString arg(short,int = 0,int = 10) const; -// TQString arg(ushort,int = 0,int = 10) const; - TQString arg(char,int = 0) const; - TQString arg(TQChar,int = 0) const; - TQString arg(const TQString&,int = 0) const; - TQString arg(const TQString &,const TQString &) const; - TQString arg(const TQString &,const TQString &,const TQString &) const; - TQString arg(const TQString &,const TQString &,const TQString &, - const TQString &) const; - -// TQString &sprintf(const char *,...); - - int find(TQChar,int = 0,bool = 1) const; - int find(char,int = 0,bool = 1) const; - int find(const TQString &,int = 0,bool = 1) const; - int find(const TQRegExp &,int = 0) const; -// int find(const char *,int = 0) const; - int findRev(TQChar,int = -1,bool = 1) const; - int findRev(char,int = -1,bool = 1) const; - int findRev(const TQString &,int = -1,bool = 1) const; - int findRev(const TQRegExp &,int = -1) const; -// int findRev(const char *,int = -1) const; - int contains(TQChar,bool = 1) const; - int contains(char,bool = 1) const; -// int contains(const char *,bool = 1) const; - int contains(const TQString &,bool = 1) const; - int contains(const TQRegExp &) const; - - enum SectionFlags { - SectionDefault, - SectionSkipEmpty, - SectionIncludeLeadingSep, - SectionIncludeTrailingSep, - SectionCaseInsensitiveSeps - }; - - TQString section(TQChar,int,int = 0xffffffff,int = SectionDefault) const; -// TQString section(char,int,int = 0xffffffff,int = SectionDefault) const; -// TQString section(const char *,int,int = 0xffffffff, -// int = SectionDefault) const; - TQString section(const TQString &,int,int = 0xffffffff, - int = SectionDefault) const; - TQString section(const TQRegExp &,int,int = 0xffffffff, - int = SectionDefault) const; - - TQString left(uint) const; - TQString right(uint) const; - TQString mid(uint,uint = 0xffffffff) const; - TQString leftJustify(uint,TQChar = ' ',bool = 0) const; - TQString rightJustify(uint,TQChar = ' ',bool = 0) const; - TQString lower() const; - TQString upper() const; - TQString stripWhiteSpace() const; - TQString simplifyWhiteSpace() const; - - TQString &insert(uint,const TQString &); - TQString &insert(uint,const TQByteArray &); -// TQString &insert(uint,const char *); - TQString &insert(uint,TQChar *,uint); - TQString &insert(uint,TQChar); - TQString &insert(uint,char); - - TQString &append(char); - TQString &append(TQChar); - TQString &append(const TQString &); - TQString &prepend(char); - TQString &prepend(TQChar); - TQString &prepend(const TQString &); - TQString &remove(uint,uint); - TQString &remove(const TQString &); - TQString &remove(const TQString &,bool); - TQString &remove(TQChar); - TQString &remove(char); - TQString &remove(const TQRegExp &); - TQString &replace(uint,uint,const TQString &); - TQString &replace(uint,uint,const TQChar *,uint); - TQString &replace(uint,uint,TQChar); - TQString &replace(uint,uint,char); - TQString &replace(TQChar,const TQString &); - TQString &replace(TQChar,const TQString &,bool); - TQString &replace(char,const TQString &); - TQString &replace(char,const TQString &,bool); - TQString &replace(const TQString &,const TQString &); - TQString &replace(const TQString &,const TQString &,bool); - TQString &replace(const TQRegExp &,const TQString &); - TQString &replace(TQChar,TQChar); - - short toShort(bool * = 0,int = 10) const; - ushort toUShort(bool * = 0,int = 10) const; - int toInt(bool * = 0,int = 10) const; - uint toUInt(bool * = 0,int = 10) const; - long toLong(bool * = 0,int = 10) const; - ulong toULong(bool * = 0,int = 10) const; -// TQ_LLONG toLongLong(bool * = 0,int = 10) const; -// TQ_ULLONG toULongLong(bool * = 0,int = 10) const; - float toFloat(bool * = 0) const; - double toDouble(bool * = 0) const; - - TQString &setNum(int /Constrained/,int = 10); - TQString &setNum(double /Constrained/,char = 'g',int = 6); -// TQString &setNum(short,int = 10); -// TQString &setNum(ushort,int = 10); -// TQString &setNum(uint,int = 10); - TQString &setNum(long,int = 10); - TQString &setNum(ulong,int = 10); -// TQString &setNum(TQ_LLONG,int = 10); -// TQString &setNum(TQ_ULLONG,int = 10); -// TQString &setNum(float,char = 'g',int = 6); - - static TQString number(int /Constrained/,int = 10); - static TQString number(double /Constrained/,char = 'g',int = 6); - static TQString number(long,int = 10); - static TQString number(ulong,int = 10); -// static TQString number(TQ_LLONG,int = 10); -// static TQString number(TQ_ULLONG,int = 10); -// static TQString number(uint,int = 10); - - void setExpand(uint,TQChar); - - TQString &operator+=(const TQString &); - TQString &operator+=(const TQByteArray &); - TQString &operator+=(TQChar); - //TQString &operator+=(char); - - TQString operator*(int); -%MethodCode - sipRes = new TQString(); - - while (a0-- > 0) - *sipRes += *sipCpp; -%End - - TQString &operator*=(int); -%MethodCode - TQString orig(*sipCpp); - - sipCpp -> truncate(0); - - while (a0-- > 0) - *sipCpp += orig; -%End - - TQChar at(uint) const; -// TQCharRef at(uint); -// TQChar constref(uint) const; -// TQChar &ref(uint); -// const TQChar *unicode() const; - const char *ascii() const; - static TQString fromAscii(const char *,int = -1); - const char *latin1() const; - static TQString fromLatin1(const char *,int = -1); - TQCString utf8() const; - static TQString fromUtf8(const char *,int = -1); - TQCString local8Bit() const; - static TQString fromLocal8Bit(const char *,int = -1); - -// static TQString fromUcs2(const unsigned short *); -// const unsigned short *ucs2() const; - -// TQString &setUnicode(const TQChar *,uint); -// TQString &setUnicodeCodes(const ushort *,uint); - TQString &setAscii(const char *,int = -1); - TQString &setLatin1(const char *,int = -1); - - int compare(const TQString &) const; - static int compare(const TQString &,const TQString &); - - int localeAwareCompare(const TQString &) const; - static int localeAwareCompare(const TQString &,const TQString &); - - void compose(); - bool startsWith(const TQString &) const; - bool startsWith(const TQString &,bool) const; - bool endsWith(const TQString &) const; - bool endsWith(const TQString &,bool) const; - - void setLength(uint); - - uint capacity() const; - void reserve(uint); - void squeeze(); - - bool simpleText() const; - bool isRightToLeft() const; - - // Force the numeric interpretation so that str + TQString gets handled - // as we want. - const TQString operator+(const TQString &) /Numeric/; - - TQString operator[](int) const; -%MethodCode - int len; - - len = sipCpp -> length(); - - if ((a0 = (int)sipConvertFromSequenceIndex(a0,len)) < 0) - sipIsErr = 1; - else - sipRes = new TQString(sipCpp -> at(a0)); -%End - - TQString operator[](SIP_PYSLICE) const; -%MethodCode - Py_ssize_t len, start, stop, step, slicelength, i; - - len = sipCpp -> length(); - - if (sipConvertFromSliceObject(a0,len,&start,&stop,&step,&slicelength) < 0) - sipIsErr = 1; - else - { - sipRes = new TQString(); - - for (i = 0; i < slicelength; ++i) - { - sipRes -> append(sipCpp -> at(start)); - start += step; - } - } -%End - - int __len__() const; -%MethodCode - sipRes = sipCpp -> length(); -%End - - int __contains__(const TQString &) const; -%MethodCode - sipRes = (sipCpp -> contains(*a0) > 0); -%End - - SIP_PYOBJECT __unicode__(); -%MethodCode - sipRes = PyTQt_qt_PyObject_FromTQString(sipCpp); -%End - - SIP_PYOBJECT __str__(); -%MethodCode - sipRes = PyTQt_qt_PyObject_FromTQString(sipCpp); -%End - -%ConvertToTypeCode - // Allow a Python string (or a unicode string) whenever a TQString is - // expected. - - if (sipIsErr == NULL) - return (PyBytes_Check(sipPy) || - PyUnicode_Check(sipPy) || - sipCanConvertToInstance(sipPy,sipClass_TQString,SIP_NO_CONVERTORS)); - - *sipCppPtr = PyTQt_qt_PyObject_AsTQString(sipPy); - - if (*sipCppPtr) - return sipGetState(sipTransferObj); - - *sipCppPtr = reinterpret_cast<TQString *>(sipConvertToInstance(sipPy,sipClass_TQString,sipTransferObj,SIP_NO_CONVERTORS,0,sipIsErr)); - - return 0; -%End - -%BIGetReadBufferCode - if (sipSegment != 0) - { - PyErr_SetString(PyExc_SystemError, "accessing non-existent TQString segment"); - sipRes = -1; - } - else - { - *sipPtrPtr = (void *)sipCpp->ucs2(); - sipRes = sipCpp->length() * sizeof (ushort); - } -%End - -%BIGetSegCountCode - if (sipLenPtr) - *sipLenPtr = sipCpp->length() * sizeof (ushort); - - sipRes = 1; -%End - -%BIGetCharBufferCode - if (sipSegment != 0) - { - PyErr_SetString(PyExc_SystemError, "accessing non-existent TQString segment"); - sipRes = -1; - } - else - { - static TQTextCodec *codec = 0; - static bool check_codec = TRUE; - - // For the first time only, try and find a TQt codec that - // corresponds to the default Python codec. If one wasn't - // found then fall back to ASCII (which is actually the codec - // returned by TQTextCodec::codecForCStrings()). - if (check_codec) - { - codec = TQTextCodec::codecForName(PyUnicode_GetDefaultEncoding()); - check_codec = FALSE; - } - - if (codec) - { - // A Python string is the most convenient method to - // save the encoded version on the heap. - PyObject *encobj = ((sipSimpleWrapper *)sipSelf)->user; - TQCString enc; - - Py_XDECREF(encobj); - - enc = codec->fromUnicode(*sipCpp); - - if ((encobj = PyBytes_FromString(enc.data())) != NULL) - { - *sipPtrPtr = (void *)PyString_AS_STRING(encobj); - sipRes = PyString_GET_SIZE(encobj); - - ((sipSimpleWrapper *)sipSelf)->user = encobj; - } - else - sipRes = -1; - } - else - { - const char *asc = sipCpp->ascii(); - - *sipPtrPtr = (void *)asc; - sipRes = tqstrlen(asc); - } - } -%End -}; - -bool operator==(const TQString &,const TQString &); -bool operator!=(const TQString &,const TQString &); -bool operator<(const TQString &,const TQString &); -bool operator<=(const TQString &,const TQString &); -bool operator>(const TQString &,const TQString &); -bool operator>=(const TQString &,const TQString &); - - -%ModuleHeaderCode -extern PyObject *PyTQt_qt_PyObject_FromTQString(const TQString *qstr); -%End - -%ModuleCode -// Convert a QString to a Python Unicode object. -PyObject *PyTQt_qt_PyObject_FromTQString(const TQString *qstr) -{ - PyObject *obj; - -#if PY_VERSION_HEX >= 0x03030000 - // We have to work out exactly which kind to use. We assume ASCII while we - // are checking so that we only go through the string once in the most - // common case. Note that we can't use PyUnicode_FromKindAndData() because - // it doesn't handle surrogates in UCS2 strings. - - int qt_len = qstr->length(); - Py_UCS4 maxchar = 0x007f; - - for (int qt_i = 0; qt_i < qt_len && maxchar < 0xffff; ++qt_i) - { - Py_UCS4 uch = qstr->at(qt_i).unicode(); - - if (uch > 0x00ff) - { - maxchar = 0xffff; - } - else if (uch > 0x007f) - { - maxchar = 0x00ff; - } - } - - // Create the correctly sized object. - if ((obj = PyUnicode_New(qt_len, maxchar)) == NULL) - return NULL; - - int kind = PyUnicode_KIND(obj); - void *data = PyUnicode_DATA(obj); - - for (int qt_i = 0; qt_i < qt_len; ++qt_i) - { - Py_UCS4 uch = qstr->at(qt_i).unicode(); - PyUnicode_WRITE(kind, data, qt_i, uch); - } -#elif defined(Py_UNICODE_WIDE) - // Note that this doesn't handle code points greater than 0xffff. It could - // but it's only an issue for old versions of Qt. - - if ((obj = PyUnicode_FromUnicode(NULL, qstr->length())) == NULL) - return NULL; - - Py_UNICODE *pyu = PyUnicode_AS_UNICODE(obj); - - for (unsigned int i = 0; i < qstr->length(); ++i) - *pyu++ = (qstr->at(i)).unicode(); -#else - if ((obj = PyUnicode_FromUnicode(NULL, qstr->length())) == NULL) - return NULL; - - memcpy(PyUnicode_AS_UNICODE(obj), qstr->ucs2(), - qstr->length() * sizeof (Py_UNICODE)); -#endif - - return obj; -} -%End - - -%ModuleHeaderCode -extern TQString *PyTQt_qt_PyObject_AsTQString(PyObject *obj); -%End - -%ModuleCode -// Convert a Python Unicode object to a QString. -TQString *PyTQt_qt_PyObject_AsTQString(PyObject *obj) -{ - if (PyUnicode_Check(obj)) - { -#if PY_VERSION_HEX >= 0x03030000 - SIP_SSIZE_T len = PyUnicode_GET_LENGTH(obj); - - switch (PyUnicode_KIND(obj)) - { - case PyUnicode_1BYTE_KIND: - return new TQString(TQString::fromUtf8((char *)PyUnicode_1BYTE_DATA(obj), len)); - - case PyUnicode_2BYTE_KIND: - // The (TQChar *) cast should be safe. - return new TQString((TQChar *)PyUnicode_2BYTE_DATA(obj), len); - - case PyUnicode_4BYTE_KIND: - // Note that this doesn't handle code points greater than 0xffff. It - // could but it's only an issue for old versions of Qt. - - TQString *qstr = new TQString; - - Py_UCS4 *ucode = PyUnicode_4BYTE_DATA(obj); - - for (SIP_SSIZE_T i = 0; i < len; ++i) - qstr->append(TQChar((uint)ucode[i])); - - return qstr; - } - - return NULL; -#else - TQString *qstr = new TQString; - -# ifdef Py_UNICODE_WIDE - Py_UNICODE *ucode = PyUnicode_AS_UNICODE(obj); - SIP_SSIZE_T len = PyUnicode_GET_SIZE(obj); - - for (SIP_SSIZE_T i = 0; i < len; ++i) - qstr->append(TQChar((uint)ucode[i])); -# else - qstr->setUnicodeCodes((ushort *)PyUnicode_AS_UNICODE(obj),PyUnicode_GET_SIZE(obj)); -# endif - - return qstr; -#endif - } - else if (PyBytes_Check(obj)) - { - return new TQString(PyBytes_AS_STRING(obj)); - } - - return NULL; -} -%End - - -%ModuleHeaderCode -extern const char *PyTQt_qt_encode(PyObject **s, TQApplication::Encoding encoding); -%End - -%ModuleCode -// Convert a Python unicode/string/bytes object to a character string encoded -// according to the given encoding. Update the object with a new reference to -// the object that owns the data. -const char *PyTQt_qt_encode(PyObject **s, TQApplication::Encoding encoding) -{ - PyObject *obj = *s; - const char *es = 0; - SIP_SSIZE_T sz; - - if (PyUnicode_Check(obj)) - { - if (encoding == TQApplication::UnicodeUTF8) - { - obj = PyUnicode_AsUTF8String(obj); - } - else - { - TQTextCodec *codec = TQTextCodec::codecForTr(); - - if (codec) - { - // Use the Qt codec to get to a byte string, and then to a - // Python object. - TQString *qstr = PyTQt_qt_PyObject_AsTQString(obj); - TQString qs = *qstr; - TQByteArray ba = codec->fromUnicode(qs); - delete qstr; - - obj = PyBytes_FromStringAndSize(ba.data(), ba.size()); - } - else - { - obj = PyUnicode_AsLatin1String(obj); - } - } - - if (obj) - { - es = PyBytes_AS_STRING(obj); - } - } - else if (PyBytes_Check(obj)) - { - es = PyBytes_AS_STRING(obj); - Py_INCREF(obj); - } - else if (PyObject_AsCharBuffer(obj, &es, &sz) >= 0) - { - Py_INCREF(obj); - } - - if (es) - { - *s = obj; - } - else - { - PyErr_Format(PyExc_UnicodeEncodeError, - "unable to convert '%s' to requested encoding", - Py_TYPE(*s)->tp_name); - } - - return es; -} -%End |