Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 69ac361

Browse files
committed
Added some support for unicode arguments.
1 parent dcfc202 commit 69ac361

9 files changed

Lines changed: 215 additions & 12 deletions

File tree

Mac/Modules/cf/_CFmodule.c

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,6 +2046,26 @@ static PyObject *CFMutableStringRefObj_CFStringAppend(CFMutableStringRefObject *
20462046
return _res;
20472047
}
20482048

2049+
static PyObject *CFMutableStringRefObj_CFStringAppendCharacters(CFMutableStringRefObject *_self, PyObject *_args)
2050+
{
2051+
PyObject *_res = NULL;
2052+
UniChar *chars__in__;
2053+
UniCharCount chars__len__;
2054+
int chars__in_len__;
2055+
#ifndef CFStringAppendCharacters
2056+
PyMac_PRECHECK(CFStringAppendCharacters);
2057+
#endif
2058+
if (!PyArg_ParseTuple(_args, "u#",
2059+
&chars__in__, &chars__in_len__))
2060+
return NULL;
2061+
chars__len__ = chars__in_len__;
2062+
CFStringAppendCharacters(_self->ob_itself,
2063+
chars__in__, chars__len__);
2064+
Py_INCREF(Py_None);
2065+
_res = Py_None;
2066+
return _res;
2067+
}
2068+
20492069
static PyObject *CFMutableStringRefObj_CFStringAppendPascalString(CFMutableStringRefObject *_self, PyObject *_args)
20502070
{
20512071
PyObject *_res = NULL;
@@ -2217,6 +2237,8 @@ static PyObject *CFMutableStringRefObj_CFStringTrimWhitespace(CFMutableStringRef
22172237
static PyMethodDef CFMutableStringRefObj_methods[] = {
22182238
{"CFStringAppend", (PyCFunction)CFMutableStringRefObj_CFStringAppend, 1,
22192239
"(CFStringRef appendedString) -> None"},
2240+
{"CFStringAppendCharacters", (PyCFunction)CFMutableStringRefObj_CFStringAppendCharacters, 1,
2241+
"(Buffer chars) -> None"},
22202242
{"CFStringAppendPascalString", (PyCFunction)CFMutableStringRefObj_CFStringAppendPascalString, 1,
22212243
"(Str255 pStr, CFStringEncoding encoding) -> None"},
22222244
{"CFStringAppendCString", (PyCFunction)CFMutableStringRefObj_CFStringAppendCString, 1,
@@ -3221,6 +3243,27 @@ static PyObject *CF_CFStringCreateWithCString(PyObject *_self, PyObject *_args)
32213243
return _res;
32223244
}
32233245

3246+
static PyObject *CF_CFStringCreateWithCharacters(PyObject *_self, PyObject *_args)
3247+
{
3248+
PyObject *_res = NULL;
3249+
CFStringRef _rv;
3250+
UniChar *chars__in__;
3251+
UniCharCount chars__len__;
3252+
int chars__in_len__;
3253+
#ifndef CFStringCreateWithCharacters
3254+
PyMac_PRECHECK(CFStringCreateWithCharacters);
3255+
#endif
3256+
if (!PyArg_ParseTuple(_args, "u#",
3257+
&chars__in__, &chars__in_len__))
3258+
return NULL;
3259+
chars__len__ = chars__in_len__;
3260+
_rv = CFStringCreateWithCharacters((CFAllocatorRef)NULL,
3261+
chars__in__, chars__len__);
3262+
_res = Py_BuildValue("O&",
3263+
CFStringRefObj_New, _rv);
3264+
return _res;
3265+
}
3266+
32243267
static PyObject *CF_CFStringCreateWithPascalStringNoCopy(PyObject *_self, PyObject *_args)
32253268
{
32263269
PyObject *_res = NULL;
@@ -3265,6 +3308,28 @@ static PyObject *CF_CFStringCreateWithCStringNoCopy(PyObject *_self, PyObject *_
32653308
return _res;
32663309
}
32673310

3311+
static PyObject *CF_CFStringCreateWithCharactersNoCopy(PyObject *_self, PyObject *_args)
3312+
{
3313+
PyObject *_res = NULL;
3314+
CFStringRef _rv;
3315+
UniChar *chars__in__;
3316+
UniCharCount chars__len__;
3317+
int chars__in_len__;
3318+
#ifndef CFStringCreateWithCharactersNoCopy
3319+
PyMac_PRECHECK(CFStringCreateWithCharactersNoCopy);
3320+
#endif
3321+
if (!PyArg_ParseTuple(_args, "u#",
3322+
&chars__in__, &chars__in_len__))
3323+
return NULL;
3324+
chars__len__ = chars__in_len__;
3325+
_rv = CFStringCreateWithCharactersNoCopy((CFAllocatorRef)NULL,
3326+
chars__in__, chars__len__,
3327+
(CFAllocatorRef)NULL);
3328+
_res = Py_BuildValue("O&",
3329+
CFStringRefObj_New, _rv);
3330+
return _res;
3331+
}
3332+
32683333
static PyObject *CF_CFStringCreateMutable(PyObject *_self, PyObject *_args)
32693334
{
32703335
PyObject *_res = NULL;
@@ -3667,10 +3732,14 @@ static PyMethodDef CF_methods[] = {
36673732
"(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)"},
36683733
{"CFStringCreateWithCString", (PyCFunction)CF_CFStringCreateWithCString, 1,
36693734
"(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)"},
3735+
{"CFStringCreateWithCharacters", (PyCFunction)CF_CFStringCreateWithCharacters, 1,
3736+
"(Buffer chars) -> (CFStringRef _rv)"},
36703737
{"CFStringCreateWithPascalStringNoCopy", (PyCFunction)CF_CFStringCreateWithPascalStringNoCopy, 1,
36713738
"(Str255 pStr, CFStringEncoding encoding) -> (CFStringRef _rv)"},
36723739
{"CFStringCreateWithCStringNoCopy", (PyCFunction)CF_CFStringCreateWithCStringNoCopy, 1,
36733740
"(char* cStr, CFStringEncoding encoding) -> (CFStringRef _rv)"},
3741+
{"CFStringCreateWithCharactersNoCopy", (PyCFunction)CF_CFStringCreateWithCharactersNoCopy, 1,
3742+
"(Buffer chars) -> (CFStringRef _rv)"},
36743743
{"CFStringCreateMutable", (PyCFunction)CF_CFStringCreateMutable, 1,
36753744
"(CFIndex maxLength) -> (CFMutableStringRef _rv)"},
36763745
{"CFStringCreateMutableCopy", (PyCFunction)CF_CFStringCreateMutableCopy, 1,

Mac/Modules/cf/cfscan.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ def makeblacklistnames(self):
9292
"CFStringGetCString",
9393
"CFStringGetCharacters",
9494
"CFURLCreateStringWithFileSystemPath", # Gone in later releases
95+
"CFStringCreateMutableWithExternalCharactersNoCopy", # Not a clue...
96+
"CFStringSetExternalCharactersNoCopy",
97+
"CFStringGetCharacterAtIndex", # No format for single unichars yet.
9598
]
9699

97100
def makegreylist(self):
@@ -105,9 +108,6 @@ def makeblacklisttypes(self):
105108
"void_ptr", # Ditto for various array lookup methods
106109
"CFArrayApplierFunction", # Callback function pointer
107110
"CFDictionaryApplierFunction", # Callback function pointer
108-
"UniChar_ptr", # XXXX To be done
109-
"const_UniChar_ptr", # XXXX To be done
110-
"UniChar", # XXXX To be done
111111
"va_list", # For printf-to-a-cfstring. Use Python.
112112
"const_CFStringEncoding_ptr", # To be done, I guess
113113
]
@@ -118,6 +118,9 @@ def makerepairinstructions(self):
118118
([("UInt8_ptr", "*", "InMode"), ("CFIndex", "*", "InMode")],
119119
[("UcharInBuffer", "*", "*")]),
120120

121+
([("UniChar_ptr", "*", "InMode"), ("CFIndex", "*", "InMode")],
122+
[("UnicodeInBuffer", "*", "*")]),
123+
121124
# Some functions return a const char *. Don't worry, we won't modify it.
122125
([("const_char_ptr", "*", "ReturnMode")],
123126
[("return_stringptr", "*", "*")]),

Mac/Modules/cf/cfsupport.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,6 @@ def parseArgumentList(self, args):
171171
CFStringEncoding = Type("CFStringEncoding", "l")
172172
CFComparisonResult = Type("CFComparisonResult", "l") # a bit dangerous, it's an enum
173173
CFURLPathStyle = Type("CFURLPathStyle", "l") # a bit dangerous, it's an enum
174-
FSRef_ptr = OpaqueType("FSRef", "PyMac_BuildFSRef", "PyMac_GetFSRef")
175-
FSRef = OpaqueByValueType("FSRef", "PyMac_BuildFSRef", "PyMac_GetFSRef")
176174

177175
char_ptr = stringptr
178176
return_stringptr = Type("char *", "s") # ONLY FOR RETURN VALUES!!

Mac/Modules/mlte/_Mltemodule.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,31 @@ static PyObject *TXNObj_TXNActivate(TXNObjectObject *_self, PyObject *_args)
10061006
return _res;
10071007
}
10081008

1009+
static PyObject *TXNObj_TXNEchoMode(TXNObjectObject *_self, PyObject *_args)
1010+
{
1011+
PyObject *_res = NULL;
1012+
OSStatus _err;
1013+
UniChar iEchoCharacter;
1014+
TextEncoding iEncoding;
1015+
Boolean iOn;
1016+
#ifndef TXNEchoMode
1017+
PyMac_PRECHECK(TXNEchoMode);
1018+
#endif
1019+
if (!PyArg_ParseTuple(_args, "hlb",
1020+
&iEchoCharacter,
1021+
&iEncoding,
1022+
&iOn))
1023+
return NULL;
1024+
_err = TXNEchoMode(_self->ob_itself,
1025+
iEchoCharacter,
1026+
iEncoding,
1027+
iOn);
1028+
if (_err != noErr) return PyMac_Error(_err);
1029+
Py_INCREF(Py_None);
1030+
_res = Py_None;
1031+
return _res;
1032+
}
1033+
10091034
static PyObject *TXNObj_TXNDoFontMenuSelection(TXNObjectObject *_self, PyObject *_args)
10101035
{
10111036
PyObject *_res = NULL;
@@ -1251,6 +1276,8 @@ static PyMethodDef TXNObj_methods[] = {
12511276
"(TXNFrameID iTXNFrameID, WindowPtr iWindow, DragReference iDragReference, Boolean iDifferentObjectSameWindow) -> None"},
12521277
{"TXNActivate", (PyCFunction)TXNObj_TXNActivate, 1,
12531278
"(TXNFrameID iTXNFrameID, TXNScrollBarState iActiveState) -> None"},
1279+
{"TXNEchoMode", (PyCFunction)TXNObj_TXNEchoMode, 1,
1280+
"(UniChar iEchoCharacter, TextEncoding iEncoding, Boolean iOn) -> None"},
12541281
{"TXNDoFontMenuSelection", (PyCFunction)TXNObj_TXNDoFontMenuSelection, 1,
12551282
"(TXNFontMenuObject iTXNFontMenuObject, SInt16 iMenuID, SInt16 iMenuItem) -> None"},
12561283
{"TXNPrepareFontMenu", (PyCFunction)TXNObj_TXNPrepareFontMenu, 1,

Mac/Modules/mlte/mltescan.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,6 @@ def makeblacklisttypes(self):
9393
"TXNTypeAttributes", #TBD
9494
"TXNMatchTextRecord", #TBD
9595
"TXNBackground", #TBD
96-
"UniChar", #TBD
97-
"UniCharCount", #TBD
98-
"UniChar_ptr", #TBD
9996
"TXNFindUPP",
10097
"ATSUStyle", #TBD
10198
"TXNActionKeyMapperProcPtr",

Mac/Modules/mlte/mltesupport.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@
129129

130130
OptFSSpecPtr = OpaqueByValueType("FSSpec *", "OptFSSpecPtr")
131131
OptRectPtr = OpaqueByValueType("Rect *", "OptRectPtr")
132+
133+
UniChar = Type("UniChar", "h") # XXXX For now...
132134
# ADD object type here
133135

134136
execfile("mltetypetest.py")

Mac/Modules/res/_Resmodule.c

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,6 +1382,36 @@ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args)
13821382
return _res;
13831383
}
13841384

1385+
static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args)
1386+
{
1387+
PyObject *_res = NULL;
1388+
FSRef parentRef;
1389+
UniChar *nameLength__in__;
1390+
UniCharCount nameLength__len__;
1391+
int nameLength__in_len__;
1392+
FSRef newRef;
1393+
FSSpec newSpec;
1394+
if (!PyArg_ParseTuple(_args, "O&u#",
1395+
PyMac_GetFSRef, &parentRef,
1396+
&nameLength__in__, &nameLength__in_len__))
1397+
return NULL;
1398+
nameLength__len__ = nameLength__in_len__;
1399+
FSCreateResFile(&parentRef,
1400+
nameLength__len__, nameLength__in__,
1401+
0,
1402+
(FSCatalogInfo *)0,
1403+
&newRef,
1404+
&newSpec);
1405+
{
1406+
OSErr _err = ResError();
1407+
if (_err != noErr) return PyMac_Error(_err);
1408+
}
1409+
_res = Py_BuildValue("O&O&",
1410+
PyMac_BuildFSRef, newRef,
1411+
PyMac_BuildFSSpec, newSpec);
1412+
return _res;
1413+
}
1414+
13851415
static PyObject *Res_FSResourceFileAlreadyOpen(PyObject *_self, PyObject *_args)
13861416
{
13871417
PyObject *_res = NULL;
@@ -1406,6 +1436,74 @@ static PyObject *Res_FSResourceFileAlreadyOpen(PyObject *_self, PyObject *_args)
14061436
return _res;
14071437
}
14081438

1439+
static PyObject *Res_FSCreateResourceFile(PyObject *_self, PyObject *_args)
1440+
{
1441+
PyObject *_res = NULL;
1442+
OSErr _rv;
1443+
FSRef parentRef;
1444+
UniChar *nameLength__in__;
1445+
UniCharCount nameLength__len__;
1446+
int nameLength__in_len__;
1447+
UniChar *forkNameLength__in__;
1448+
UniCharCount forkNameLength__len__;
1449+
int forkNameLength__in_len__;
1450+
FSRef newRef;
1451+
FSSpec newSpec;
1452+
if (!PyArg_ParseTuple(_args, "O&u#u#",
1453+
PyMac_GetFSRef, &parentRef,
1454+
&nameLength__in__, &nameLength__in_len__,
1455+
&forkNameLength__in__, &forkNameLength__in_len__))
1456+
return NULL;
1457+
nameLength__len__ = nameLength__in_len__;
1458+
forkNameLength__len__ = forkNameLength__in_len__;
1459+
_rv = FSCreateResourceFile(&parentRef,
1460+
nameLength__len__, nameLength__in__,
1461+
0,
1462+
(FSCatalogInfo *)0,
1463+
forkNameLength__len__, forkNameLength__in__,
1464+
&newRef,
1465+
&newSpec);
1466+
{
1467+
OSErr _err = ResError();
1468+
if (_err != noErr) return PyMac_Error(_err);
1469+
}
1470+
_res = Py_BuildValue("hO&O&",
1471+
_rv,
1472+
PyMac_BuildFSRef, newRef,
1473+
PyMac_BuildFSSpec, newSpec);
1474+
return _res;
1475+
}
1476+
1477+
static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args)
1478+
{
1479+
PyObject *_res = NULL;
1480+
OSErr _rv;
1481+
FSRef ref;
1482+
UniChar *forkNameLength__in__;
1483+
UniCharCount forkNameLength__len__;
1484+
int forkNameLength__in_len__;
1485+
SignedByte permissions;
1486+
SInt16 refNum;
1487+
if (!PyArg_ParseTuple(_args, "O&u#b",
1488+
PyMac_GetFSRef, &ref,
1489+
&forkNameLength__in__, &forkNameLength__in_len__,
1490+
&permissions))
1491+
return NULL;
1492+
forkNameLength__len__ = forkNameLength__in_len__;
1493+
_rv = FSOpenResourceFile(&ref,
1494+
forkNameLength__len__, forkNameLength__in__,
1495+
permissions,
1496+
&refNum);
1497+
{
1498+
OSErr _err = ResError();
1499+
if (_err != noErr) return PyMac_Error(_err);
1500+
}
1501+
_res = Py_BuildValue("hh",
1502+
_rv,
1503+
refNum);
1504+
return _res;
1505+
}
1506+
14091507
static PyObject *Res_Resource(PyObject *_self, PyObject *_args)
14101508
{
14111509
PyObject *_res = NULL;
@@ -1569,8 +1667,14 @@ static PyMethodDef Res_methods[] = {
15691667
#endif
15701668
{"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1,
15711669
"(FSRef ref, SignedByte permission) -> (short _rv)"},
1670+
{"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1,
1671+
"(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)"},
15721672
{"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1,
15731673
"(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)"},
1674+
{"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1,
1675+
"(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (OSErr _rv, FSRef newRef, FSSpec newSpec)"},
1676+
{"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1,
1677+
"(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (OSErr _rv, SInt16 refNum)"},
15741678
{"Resource", (PyCFunction)Res_Resource, 1,
15751679
"Convert a string to a resource object.\n\nThe created resource object is actually just a handle,\napply AddResource() to write it to a resource file.\nSee also the Handle() docstring.\n"},
15761680
{"Handle", (PyCFunction)Res_Handle, 1,

Mac/Modules/res/resscan.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ def makeblacklistnames(self):
4848

4949
def makeblacklisttypes(self):
5050
return [
51-
"UniCharCount", #TBD
5251
]
5352

5453
def makegreylist(self):
@@ -86,7 +85,11 @@ def makerepairinstructions(self):
8685
[("OutBuffer", "*", "InOutMode")]),
8786

8887
([("SInt8", "*", "*")],
89-
[("SignedByte", "*", "*")])
88+
[("SignedByte", "*", "*")]),
89+
90+
91+
([("UniCharCount", "*", "InMode"), ("UniChar_ptr", "*", "InMode")],
92+
[("UnicodeReverseInBuffer", "*", "*")]),
9093
]
9194

9295
if __name__ == "__main__":

Mac/Modules/res/ressupport.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
from macsupport import *
77

8-
FSRef_ptr = OpaqueType("FSRef", "PyMac_BuildFSRef", "PyMac_GetFSRef")
9-
108
class ResMixIn:
119

1210
def checkit(self):
@@ -20,6 +18,8 @@ class ResFunction(ResMixIn, FunctionGenerator): pass
2018
class ResMethod(ResMixIn, MethodGenerator): pass
2119

2220
RsrcChainLocation = Type("RsrcChainLocation", "h")
21+
FSCatalogInfoBitmap = FakeType("0") # Type("FSCatalogInfoBitmap", "l")
22+
FSCatalogInfo_ptr = FakeType("(FSCatalogInfo *)0")
2323

2424
# includestuff etc. are imported from macsupport
2525

0 commit comments

Comments
 (0)