// This is the SIP interface definition for TQChar and TQString. // // Copyright (c) 2007 // Riverbank Computing Limited // // 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 TQChar (TQt v2+) uchar &cell const Not implemented. uchar &row const Not implemented. TQString A Python string object (or Unicode object) can be used whenever a TQString can be used. A TQString can be converted to a Python string object using the Python str() function, and to a Python Unicode object using the Python unicode() function. The Python +, +=, *, *=, len, [] (for reading slices and individual characters), in and comparison operators are supported. TQCharRef at uint i Not yet implemented. (TQt v2+) TQChar constref const uint i Not yet implemented. (TQt v2+) TQChar &ref uint i Not yet implemented. (TQt v2+) TQString &setUnicodeCodes const ushort *unicode_as_shorts uint len Not yet implemented. (TQt v2.1+) TQString &sprintf const char *format ... Not implemented. short toShort bool *ok = 0 This returns a tuple of the short result and the ok value. ushort toUShort bool *ok = 0 This returns a tuple of the ushort result and the ok value. int toInt bool *ok = 0 This returns a tuple of the int result and the ok value. uint toUInt bool *ok = 0 This returns a tuple of the uint result and the ok value. long toLong bool *ok = 0 This returns a tuple of the long result and the ok value. ulong toULong bool *ok = 0 This returns a tuple of the ulong result and the ok value. float toFloat bool *ok = 0 This returns a tuple of the float result and the ok value. double toDouble bool *ok = 0 This returns a tuple of the double result and the ok value. %End %If (TQt_2_00 -) class TQChar { %TypeHeaderCode #include %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; %If (TQt_2_2_0 -) static const TQChar nbsp; %End %If (- TQt_3_0_0) 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_Dask, Punctuation_Open, Punctuation_Close, Punctuation_InitialQuote, Punctuation_FinalQuote, Punctuation_Other, Symbol_Math, Symbol_Currency, Symbol_Modifier, Symbol_Other }; %End %If (TQt_3_0_0 -) 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 }; %End %If (- TQt_3_0_0) enum Direction { DirL, DirR, DirEN, DirES, DirET, DirAN, DirCS, DirB, DirS, DirWS, DirON }; %End %If (TQt_3_0_0 -) enum Direction { DirL, DirR, DirEN, DirES, DirET, DirAN, DirCS, DirB, DirS, DirWS, DirON, DirLRE, DirLRO, DirAL, DirRLE, DirRLO, DirPDF, DirNSM, DirBN }; %End 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 }; %If (TQt_3_0_0 -) 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 }; %End int digitValue() const; TQChar lower() const; TQChar upper() const; Category category() const; Direction direction() const; Joining joining() const; bool mirrored() const; %If (TQt_2_1_0 -) TQChar mirroredChar() const; %End %If (- TQt_3_0_0) TQString decomposition() const; %End %If (TQt_3_0_0 -) const TQString &decomposition() const; %End Decomposition decompositionTag() const; %If (TQt_3_0_0 -) unsigned char combiningClass() const; %End 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; %If (TQt_2_1_0 -) bool isLetterOrNumber() const; %End bool isDigit() const; %If (TQt_3_0_0 -) bool isSymbol() const; %End // uchar& cell(); // uchar& row(); uchar cell() const; uchar row() const; %If (TQt_3_0_0 -) void setCell(uchar); void setRow(uchar); %End 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 %End public: TQString(); TQString(TQChar); TQString(const TQString &); TQString(const TQByteArray &); // TQString(const TQChar *,uint); // TQString(const char *); %If (TQt_2_1_0 -) // This is how we implement TQUrl::operator TQString() const. TQString(const TQUrl &); %End %If (TQt_3_0_0 -) // This is how we implement TQKeySequence::operator TQString() const. TQString(const TQKeySequence &); // This is how we implement TQUuid::operator TQString() const. TQString(const TQUuid &); %End static const TQString null; bool isNull() const; bool isEmpty() const; uint length() const; void truncate(uint); %If (- TQt_3_0_0) void fill(TQChar,int = -1); %End %If (TQt_3_0_0 -) TQString &fill(TQChar,int = -1); %End TQString copy() const; TQString arg(int /Constrained/,int = 0,int = 10) const; TQString arg(double /Constrained/,int = 0,char = 'g',int = -1) const; %If (TQt_3_2_0 -) // TQString arg(TQ_LLONG,int = 0,int = 10) const; // TQString arg(TQ_ULLONG,int = 0,int = 10) const; %End 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; %If (TQt_3_2_0 -) 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; %End // 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; %If (TQt_3_0_0 -) 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; %End 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 &); %If (TQt_3_2_0 -) TQString &insert(uint,const TQByteArray &); // TQString &insert(uint,const char *); %End TQString &insert(uint,TQChar *,uint); TQString &insert(uint,TQChar); TQString &insert(uint,char); TQString &append(char); %If (TQt_2_2_0 -) TQString &append(TQChar); %End TQString &append(const TQString &); TQString &prepend(char); %If (TQt_2_2_0 -) TQString &prepend(TQChar); %End TQString &prepend(const TQString &); TQString &remove(uint,uint); %If (TQt_3_1_0 -) TQString &remove(const TQString &); %If (TQt_3_2_0 -) TQString &remove(const TQString &,bool); %End TQString &remove(TQChar); TQString &remove(char); TQString &remove(const TQRegExp &); %End TQString &replace(uint,uint,const TQString &); TQString &replace(uint,uint,const TQChar *,uint); %If (TQt_3_1_0 -) TQString &replace(uint,uint,TQChar); TQString &replace(uint,uint,char); TQString &replace(TQChar,const TQString &); %If (TQt_3_2_0 -) TQString &replace(TQChar,const TQString &,bool); %End TQString &replace(char,const TQString &); %If (TQt_3_2_0 -) TQString &replace(char,const TQString &,bool); %End TQString &replace(const TQString &,const TQString &); %If (TQt_3_2_0 -) TQString &replace(const TQString &,const TQString &,bool); %End %End TQString &replace(const TQRegExp &,const TQString &); %If (TQt_3_1_0 -) TQString &replace(TQChar,TQChar); %End 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; %If (TQt_3_2_0 -) // TQ_LLONG toLongLong(bool * = 0,int = 10) const; // TQ_ULLONG toULongLong(bool * = 0,int = 10) const; %End 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); %If (TQt_3_2_0 -) // TQString &setNum(TQ_LLONG,int = 10); // TQString &setNum(TQ_ULLONG,int = 10); %End // 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); %If (TQt_3_2_0 -) // static TQString number(TQ_LLONG,int = 10); // static TQString number(TQ_ULLONG,int = 10); %End // static TQString number(uint,int = 10); void setExpand(uint,TQChar); TQString &operator+=(const TQString &); %If (TQt_3_3_0 -) TQString &operator+=(const TQByteArray &); %End 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; %If (TQt_3_1_0 -) static TQString fromAscii(const char *,int = -1); %End 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); %If (TQt_3_1_0 -) // static TQString fromUcs2(const unsigned short *); // const unsigned short *ucs2() const; %End %If (TQt_2_1_0 -) // TQString &setUnicode(const TQChar *,uint); // TQString &setUnicodeCodes(const ushort *,uint); %End %If (TQt_3_1_0 -) TQString &setAscii(const char *,int = -1); %End %If (TQt_2_1_0 -) TQString &setLatin1(const char *,int = -1); %End int compare(const TQString &) const; static int compare(const TQString &,const TQString &); %If (TQt_3_0_0 -) int localeAwareCompare(const TQString &) const; static int localeAwareCompare(const TQString &,const TQString &); %End void compose(); %If (- TQt_3_0_0) TQChar::Direction basicDirection(); TQString visual(int = 0,int = -1); %End %If (TQt_2_2_0 -) bool startsWith(const TQString &) const; %End %If (TQt_3_2_0 -) bool startsWith(const TQString &,bool) const; %End %If (TQt_3_0_0 -) bool endsWith(const TQString &) const; %End %If (TQt_3_2_0 -) bool endsWith(const TQString &,bool) const; %End %If (TQt_3_0_0 -) void setLength(uint); %End %If (TQt_3_2_0 -) uint capacity() const; void reserve(uint); void squeeze(); %End %If (TQt_3_0_0 -) bool simpleText() const; bool isRightToLeft() const; %End // 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 #if PY_VERSION_HEX >= 0x02050000 Py_ssize_t len, start, stop, step, slicelength, i; #else int len, start, stop, step, slicelength, i; #endif 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 #if PY_VERSION_HEX >= 0x01060000 sipRes = TQStringToPyUnicode(sipCpp); #else Py_INCREF(Py_None); sipRes = Py_None; #endif %End SIP_PYOBJECT __str__(); %MethodCode #if PY_VERSION_HEX >= 0x01060000 sipRes = TQStringToPyUnicode(sipCpp); #else const char *s; Py_BEGIN_ALLOW_THREADS s = *sipCpp; Py_END_ALLOW_THREADS if (s == NULL) s = ""; sipRes = PyString_FromString(s); #endif %End %TypeCode #include #if PY_VERSION_HEX >= 0x01060000 // Convenience function for converting a TQString to a Python Unicode object. static PyObject *TQStringToPyUnicode(TQString *qs) { PyObject *uobj; if ((uobj = PyUnicode_FromUnicode(NULL,qs -> length())) == NULL) return NULL; Py_UNICODE *pyu = PyUnicode_AS_UNICODE(uobj); for (uint i = 0; i < qs -> length(); ++i) *pyu++ = (qs -> at(i)).unicode(); return uobj; } #endif // Convenience function for converting a Python unicode or string object to a // TQString on the heap. static TQString *PyUnicodeStringToTQString(PyObject *py) { #if PY_VERSION_HEX >= 0x01060000 if (PyUnicode_Check(py)) { TQString *qs = new TQString; #if defined(Py_UNICODE_WIDE) PY_UNICODE_TYPE *ucode = PyUnicode_AS_UNICODE(py); int len = PyUnicode_GET_SIZE(py); for (int i = 0; i < len; ++i) qs->ref(i) = (uint)ucode[i]; #else qs -> setUnicodeCodes((ushort *)PyUnicode_AS_UNICODE(py),PyUnicode_GET_SIZE(py)); #endif return qs; } #endif if (PyString_Check(py)) return new TQString(PyString_AS_STRING(py)); return 0; } %End %ConvertToTypeCode // Allow a Python string (or a unicode string) whenever a TQString is // expected. if (sipIsErr == NULL) return (PyString_Check(sipPy) || #if PY_VERSION_HEX >= 0x01060000 PyUnicode_Check(sipPy) || #endif sipCanConvertToInstance(sipPy,sipClass_TQString,SIP_NO_CONVERTORS)); *sipCppPtr = PyUnicodeStringToTQString(sipPy); if (*sipCppPtr) return sipGetState(sipTransferObj); *sipCppPtr = reinterpret_cast(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 = PyString_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 &); %End %If (- TQt_2_00) class TQString : TQByteArray { %TypeHeaderCode #include %End public: TQString(); TQString(int); TQString(const TQString &); TQString(const char *); TQString(const char *,uint); bool isNull() const; bool isEmpty() const; uint length() const; bool resize(uint); bool truncate(uint); bool fill(char,int = -1); TQString copy() const; // TQString &sprintf(const char *,...); int find(char,int = 0,bool = 1) const; int find(const char *,int = 0,bool = 1) const; int find(const TQRegExp &,int = 0) const; int findRev(char,int = -1,bool = 1) const; int findRev(const char *,int = -1,bool = 1) const; int findRev(const TQRegExp &,int = -1) const; int contains(char,bool = 1) const; int contains(const char *,bool = 1) const; int contains(const TQRegExp &) const; TQString left(uint) const; TQString right(uint) const; TQString mid(uint,uint) const; TQString leftJustify(uint,char = ' ',bool = 0) const; TQString rightJustify(uint,char = ' ',bool = 0) const; TQString lower() const; TQString upper() const; TQString stripWhiteSpace() const; TQString simplifyWhiteSpace() const; TQString &insert(uint,const char *); TQString &insert(uint,char); TQString &append(const char *); TQString &prepend(const char *); TQString &remove(uint,uint); TQString &replace(uint,uint,const char *); TQString &replace(const TQRegExp &,const char *); short toShort(bool * = 0) const; ushort toUShort(bool * = 0) const; int toInt(bool * = 0) const; uint toUInt(bool * = 0) const; long toLong(bool * = 0) const; ulong toULong(bool * = 0) const; float toFloat(bool * = 0) const; double toDouble(bool * = 0) const; TQString &setStr(const char *); // TQString &setNum(short); // TQString &setNum(ushort); TQString &setNum(int /Constrained/); // TQString &setNum(uint); // TQString &setNum(long); // TQString &setNum(ulong); // TQString &setNum(float,char = 'g',int = 6); TQString &setNum(double,char = 'g',int = 6); bool setExpand(uint,char); SIP_PYOBJECT __str__(); %MethodCode const char *s; Py_BEGIN_ALLOW_THREADS s = *sipCpp; Py_END_ALLOW_THREADS if (s == NULL) s = ""; sipRes = PyString_FromString(s); %End %ConvertToTypeCode // Allow a Python string whenever a TQString is expected. if (sipIsErr == NULL) return (PyString_Check(sipPy) || sipCanConvertToInstance(sipPy,sipClass_TQString,SIP_NO_CONVERTORS)); if (PyString_Check(sipPy)) { *sipCppPtr = new TQString(PyString_AS_STRING(sipPy)); return sipGetState(sipTransferObj); } *sipCppPtr = reinterpret_cast(sipConvertToInstance(sipPy,sipClass_TQString,sipTransferObj,SIP_NO_CONVERTORS,0,sipIsErr)); return 0; %End }; %End