Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
6359641b
Commit
6359641b
authored
Apr 17, 2015
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #20181: Converted the unicodedata module to Argument Clinic.
parent
9260e773
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
556 additions
and
239 deletions
+556
-239
Modules/clinic/unicodedata.c.h
Modules/clinic/unicodedata.c.h
+360
-12
Modules/unicodedata.c
Modules/unicodedata.c
+196
-227
No files found.
Modules/clinic/unicodedata.c.h
View file @
6359641b
...
...
@@ -3,37 +3,385 @@ preserve
[clinic start generated code]*/
PyDoc_STRVAR
(
unicodedata_UCD_decimal__doc__
,
"decimal($self,
uni
chr, default=None, /)
\n
"
"decimal($self, chr, default=None, /)
\n
"
"--
\n
"
"
\n
"
"Converts a Unicode character into its equivalent decimal value.
\n
"
"
\n
"
"Returns the decimal value assigned to the
Unicode character unichr
\n
"
"
as integer. If no such value is defined, default is returned, or, if
\n
"
"
not given,
ValueError is raised."
);
"Returns the decimal value assigned to the
character chr as integer.
\n
"
"
If no such value is defined, default is returned, or, if not given,
\n
"
"ValueError is raised."
);
#define UNICODEDATA_UCD_DECIMAL_METHODDEF \
{"decimal", (PyCFunction)unicodedata_UCD_decimal, METH_VARARGS, unicodedata_UCD_decimal__doc__},
static
PyObject
*
unicodedata_UCD_decimal_impl
(
PreviousDBVersion
*
self
,
PyUnicodeObject
*
unichr
,
unicodedata_UCD_decimal_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
);
static
PyObject
*
unicodedata_UCD_decimal
(
P
reviousDBVersion
*
self
,
PyObject
*
args
)
unicodedata_UCD_decimal
(
P
yObject
*
self
,
PyObject
*
args
)
{
PyObject
*
return_value
=
NULL
;
PyUnicodeObject
*
uni
chr
;
int
chr
;
PyObject
*
default_value
=
NULL
;
if
(
!
PyArg_ParseTuple
(
args
,
"
O!
|O:decimal"
,
&
PyUnicode_Type
,
&
uni
chr
,
&
default_value
))
"
C
|O:decimal"
,
&
chr
,
&
default_value
))
goto
exit
;
return_value
=
unicodedata_UCD_decimal_impl
(
self
,
uni
chr
,
default_value
);
return_value
=
unicodedata_UCD_decimal_impl
(
self
,
chr
,
default_value
);
exit:
return
return_value
;
}
/*[clinic end generated code: output=33b488251c4fd143 input=a9049054013a1b77]*/
PyDoc_STRVAR
(
unicodedata_UCD_digit__doc__
,
"digit($self, chr, default=None, /)
\n
"
"--
\n
"
"
\n
"
"Converts a Unicode character into its equivalent digit value.
\n
"
"
\n
"
"Returns the digit value assigned to the character chr as integer.
\n
"
"If no such value is defined, default is returned, or, if not given,
\n
"
"ValueError is raised."
);
#define UNICODEDATA_UCD_DIGIT_METHODDEF \
{"digit", (PyCFunction)unicodedata_UCD_digit, METH_VARARGS, unicodedata_UCD_digit__doc__},
static
PyObject
*
unicodedata_UCD_digit_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
);
static
PyObject
*
unicodedata_UCD_digit
(
PyObject
*
self
,
PyObject
*
args
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
PyObject
*
default_value
=
NULL
;
if
(
!
PyArg_ParseTuple
(
args
,
"C|O:digit"
,
&
chr
,
&
default_value
))
goto
exit
;
return_value
=
unicodedata_UCD_digit_impl
(
self
,
chr
,
default_value
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_numeric__doc__
,
"numeric($self, chr, default=None, /)
\n
"
"--
\n
"
"
\n
"
"Converts a Unicode character into its equivalent numeric value.
\n
"
"
\n
"
"Returns the numeric value assigned to the character chr as float.
\n
"
"If no such value is defined, default is returned, or, if not given,
\n
"
"ValueError is raised."
);
#define UNICODEDATA_UCD_NUMERIC_METHODDEF \
{"numeric", (PyCFunction)unicodedata_UCD_numeric, METH_VARARGS, unicodedata_UCD_numeric__doc__},
static
PyObject
*
unicodedata_UCD_numeric_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
);
static
PyObject
*
unicodedata_UCD_numeric
(
PyObject
*
self
,
PyObject
*
args
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
PyObject
*
default_value
=
NULL
;
if
(
!
PyArg_ParseTuple
(
args
,
"C|O:numeric"
,
&
chr
,
&
default_value
))
goto
exit
;
return_value
=
unicodedata_UCD_numeric_impl
(
self
,
chr
,
default_value
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_category__doc__
,
"category($self, chr, /)
\n
"
"--
\n
"
"
\n
"
"Returns the general category assigned to the character chr as string."
);
#define UNICODEDATA_UCD_CATEGORY_METHODDEF \
{"category", (PyCFunction)unicodedata_UCD_category, METH_O, unicodedata_UCD_category__doc__},
static
PyObject
*
unicodedata_UCD_category_impl
(
PyObject
*
self
,
int
chr
);
static
PyObject
*
unicodedata_UCD_category
(
PyObject
*
self
,
PyObject
*
arg
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
if
(
!
PyArg_Parse
(
arg
,
"C:category"
,
&
chr
))
goto
exit
;
return_value
=
unicodedata_UCD_category_impl
(
self
,
chr
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_bidirectional__doc__
,
"bidirectional($self, chr, /)
\n
"
"--
\n
"
"
\n
"
"Returns the bidirectional class assigned to the character chr as string.
\n
"
"
\n
"
"If no such value is defined, an empty string is returned."
);
#define UNICODEDATA_UCD_BIDIRECTIONAL_METHODDEF \
{"bidirectional", (PyCFunction)unicodedata_UCD_bidirectional, METH_O, unicodedata_UCD_bidirectional__doc__},
static
PyObject
*
unicodedata_UCD_bidirectional_impl
(
PyObject
*
self
,
int
chr
);
static
PyObject
*
unicodedata_UCD_bidirectional
(
PyObject
*
self
,
PyObject
*
arg
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
if
(
!
PyArg_Parse
(
arg
,
"C:bidirectional"
,
&
chr
))
goto
exit
;
return_value
=
unicodedata_UCD_bidirectional_impl
(
self
,
chr
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_combining__doc__
,
"combining($self, chr, /)
\n
"
"--
\n
"
"
\n
"
"Returns the canonical combining class assigned to the character chr as integer.
\n
"
"
\n
"
"Returns 0 if no combining class is defined."
);
#define UNICODEDATA_UCD_COMBINING_METHODDEF \
{"combining", (PyCFunction)unicodedata_UCD_combining, METH_O, unicodedata_UCD_combining__doc__},
static
int
unicodedata_UCD_combining_impl
(
PyObject
*
self
,
int
chr
);
static
PyObject
*
unicodedata_UCD_combining
(
PyObject
*
self
,
PyObject
*
arg
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
int
_return_value
;
if
(
!
PyArg_Parse
(
arg
,
"C:combining"
,
&
chr
))
goto
exit
;
_return_value
=
unicodedata_UCD_combining_impl
(
self
,
chr
);
if
((
_return_value
==
-
1
)
&&
PyErr_Occurred
())
goto
exit
;
return_value
=
PyLong_FromLong
((
long
)
_return_value
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_mirrored__doc__
,
"mirrored($self, chr, /)
\n
"
"--
\n
"
"
\n
"
"Returns the mirrored property assigned to the character chr as integer.
\n
"
"
\n
"
"Returns 1 if the character has been identified as a
\"
mirrored
\"\n
"
"character in bidirectional text, 0 otherwise."
);
#define UNICODEDATA_UCD_MIRRORED_METHODDEF \
{"mirrored", (PyCFunction)unicodedata_UCD_mirrored, METH_O, unicodedata_UCD_mirrored__doc__},
static
int
unicodedata_UCD_mirrored_impl
(
PyObject
*
self
,
int
chr
);
static
PyObject
*
unicodedata_UCD_mirrored
(
PyObject
*
self
,
PyObject
*
arg
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
int
_return_value
;
if
(
!
PyArg_Parse
(
arg
,
"C:mirrored"
,
&
chr
))
goto
exit
;
_return_value
=
unicodedata_UCD_mirrored_impl
(
self
,
chr
);
if
((
_return_value
==
-
1
)
&&
PyErr_Occurred
())
goto
exit
;
return_value
=
PyLong_FromLong
((
long
)
_return_value
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_east_asian_width__doc__
,
"east_asian_width($self, chr, /)
\n
"
"--
\n
"
"
\n
"
"Returns the east asian width assigned to the character chr as string."
);
#define UNICODEDATA_UCD_EAST_ASIAN_WIDTH_METHODDEF \
{"east_asian_width", (PyCFunction)unicodedata_UCD_east_asian_width, METH_O, unicodedata_UCD_east_asian_width__doc__},
static
PyObject
*
unicodedata_UCD_east_asian_width_impl
(
PyObject
*
self
,
int
chr
);
static
PyObject
*
unicodedata_UCD_east_asian_width
(
PyObject
*
self
,
PyObject
*
arg
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
if
(
!
PyArg_Parse
(
arg
,
"C:east_asian_width"
,
&
chr
))
goto
exit
;
return_value
=
unicodedata_UCD_east_asian_width_impl
(
self
,
chr
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_decomposition__doc__
,
"decomposition($self, chr, /)
\n
"
"--
\n
"
"
\n
"
"Returns the character decomposition mapping assigned to the character chr as string.
\n
"
"
\n
"
"An empty string is returned in case no such mapping is defined."
);
#define UNICODEDATA_UCD_DECOMPOSITION_METHODDEF \
{"decomposition", (PyCFunction)unicodedata_UCD_decomposition, METH_O, unicodedata_UCD_decomposition__doc__},
static
PyObject
*
unicodedata_UCD_decomposition_impl
(
PyObject
*
self
,
int
chr
);
static
PyObject
*
unicodedata_UCD_decomposition
(
PyObject
*
self
,
PyObject
*
arg
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
if
(
!
PyArg_Parse
(
arg
,
"C:decomposition"
,
&
chr
))
goto
exit
;
return_value
=
unicodedata_UCD_decomposition_impl
(
self
,
chr
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_normalize__doc__
,
"normalize($self, form, unistr, /)
\n
"
"--
\n
"
"
\n
"
"Return the normal form
\'
form
\'
for the Unicode string unistr.
\n
"
"
\n
"
"Valid values for form are
\'
NFC
\'
,
\'
NFKC
\'
,
\'
NFD
\'
, and
\'
NFKD
\'
."
);
#define UNICODEDATA_UCD_NORMALIZE_METHODDEF \
{"normalize", (PyCFunction)unicodedata_UCD_normalize, METH_VARARGS, unicodedata_UCD_normalize__doc__},
static
PyObject
*
unicodedata_UCD_normalize_impl
(
PyObject
*
self
,
const
char
*
form
,
PyObject
*
input
);
static
PyObject
*
unicodedata_UCD_normalize
(
PyObject
*
self
,
PyObject
*
args
)
{
PyObject
*
return_value
=
NULL
;
const
char
*
form
;
PyObject
*
input
;
if
(
!
PyArg_ParseTuple
(
args
,
"sO!:normalize"
,
&
form
,
&
PyUnicode_Type
,
&
input
))
goto
exit
;
return_value
=
unicodedata_UCD_normalize_impl
(
self
,
form
,
input
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_name__doc__
,
"name($self, chr, default=None, /)
\n
"
"--
\n
"
"
\n
"
"Returns the name assigned to the character chr as a string.
\n
"
"
\n
"
"If no name is defined, default is returned, or, if not given,
\n
"
"ValueError is raised."
);
#define UNICODEDATA_UCD_NAME_METHODDEF \
{"name", (PyCFunction)unicodedata_UCD_name, METH_VARARGS, unicodedata_UCD_name__doc__},
static
PyObject
*
unicodedata_UCD_name_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
);
static
PyObject
*
unicodedata_UCD_name
(
PyObject
*
self
,
PyObject
*
args
)
{
PyObject
*
return_value
=
NULL
;
int
chr
;
PyObject
*
default_value
=
NULL
;
if
(
!
PyArg_ParseTuple
(
args
,
"C|O:name"
,
&
chr
,
&
default_value
))
goto
exit
;
return_value
=
unicodedata_UCD_name_impl
(
self
,
chr
,
default_value
);
exit:
return
return_value
;
}
PyDoc_STRVAR
(
unicodedata_UCD_lookup__doc__
,
"lookup($self, name, /)
\n
"
"--
\n
"
"
\n
"
"Look up character by name.
\n
"
"
\n
"
"If a character with the given name is found, return the
\n
"
"corresponding character. If not found, KeyError is raised."
);
#define UNICODEDATA_UCD_LOOKUP_METHODDEF \
{"lookup", (PyCFunction)unicodedata_UCD_lookup, METH_O, unicodedata_UCD_lookup__doc__},
static
PyObject
*
unicodedata_UCD_lookup_impl
(
PyObject
*
self
,
const
char
*
name
,
Py_ssize_clean_t
name_length
);
static
PyObject
*
unicodedata_UCD_lookup
(
PyObject
*
self
,
PyObject
*
arg
)
{
PyObject
*
return_value
=
NULL
;
const
char
*
name
;
Py_ssize_clean_t
name_length
;
if
(
!
PyArg_Parse
(
arg
,
"s#:lookup"
,
&
name
,
&
name_length
))
goto
exit
;
return_value
=
unicodedata_UCD_lookup_impl
(
self
,
name
,
name_length
);
exit:
return
return_value
;
}
/*[clinic end generated code: output=1f04e31ae703ffed input=a9049054013a1b77]*/
Modules/unicodedata.c
View file @
6359641b
...
...
@@ -101,50 +101,31 @@ new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4)
}
static
Py_UCS4
getuchar
(
PyUnicodeObject
*
obj
)
{
if
(
PyUnicode_READY
(
obj
))
return
(
Py_UCS4
)
-
1
;
if
(
PyUnicode_GET_LENGTH
(
obj
)
==
1
)
{
if
(
PyUnicode_READY
(
obj
))
return
(
Py_UCS4
)
-
1
;
return
PyUnicode_READ_CHAR
(
obj
,
0
);
}
PyErr_SetString
(
PyExc_TypeError
,
"need a single Unicode character as parameter"
);
return
(
Py_UCS4
)
-
1
;
}
/* --- Module API --------------------------------------------------------- */
/*[clinic input]
unicodedata.UCD.decimal
unichr: object(type='PyUnicodeObject *', subclass_of='&PyUnicode_Type')
self: self
chr: int(types={'str'})
default: object=NULL
/
Converts a Unicode character into its equivalent decimal value.
Returns the decimal value assigned to the
Unicode character unichr
as integer. If no such value is defined, default is returned, or, if
not given,
ValueError is raised.
Returns the decimal value assigned to the
character chr as integer.
If no such value is defined, default is returned, or, if not given,
ValueError is raised.
[clinic start generated code]*/
static
PyObject
*
unicodedata_UCD_decimal_impl
(
PreviousDBVersion
*
self
,
PyUnicodeObject
*
unichr
,
unicodedata_UCD_decimal_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
)
/*[clinic end generated code: output=b
f853108f246ba19 input=c25c9d2b4de076b1
]*/
/*[clinic end generated code: output=b
e23376e1a185231 input=3acf7f2238874a49
]*/
{
int
have_old
=
0
;
long
rc
;
Py_UCS4
c
;
c
=
getuchar
(
unichr
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
if
(
self
&&
UCD_Check
(
self
))
{
const
change_record
*
old
=
get_old_record
(
self
,
c
);
...
...
@@ -175,61 +156,64 @@ unicodedata_UCD_decimal_impl(PreviousDBVersion *self,
return
PyLong_FromLong
(
rc
);
}
PyDoc_STRVAR
(
unicodedata_digit__doc__
,
"digit(unichr[, default])
\n
\
\n
\
Returns the digit value assigned to the Unicode character unichr as
\n
\
integer. If no such value is defined, default is returned, or, if
\n
\
not given, ValueError is raised."
);
/*[clinic input]
unicodedata.UCD.digit
self: self
chr: int(types={'str'})
default: object=NULL
/
Converts a Unicode character into its equivalent digit value.
Returns the digit value assigned to the character chr as integer.
If no such value is defined, default is returned, or, if not given,
ValueError is raised.
[clinic start generated code]*/
static
PyObject
*
unicodedata_digit
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_digit_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
)
/*[clinic end generated code: output=96e18c950171fd2f input=733f093b399f5ab6]*/
{
PyUnicodeObject
*
v
;
PyObject
*
defobj
=
NULL
;
long
rc
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!|O:digit"
,
&
PyUnicode_Type
,
&
v
,
&
defobj
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
rc
=
Py_UNICODE_TODIGIT
(
c
);
if
(
rc
<
0
)
{
if
(
def
obj
==
NULL
)
{
if
(
def
ault_value
==
NULL
)
{
PyErr_SetString
(
PyExc_ValueError
,
"not a digit"
);
return
NULL
;
}
else
{
Py_INCREF
(
def
obj
);
return
def
obj
;
Py_INCREF
(
def
ault_value
);
return
def
ault_value
;
}
}
return
PyLong_FromLong
(
rc
);
}
PyDoc_STRVAR
(
unicodedata_numeric__doc__
,
"numeric(unichr[, default])
\n
\
\n
\
Returns the numeric value assigned to the Unicode character unichr
\n
\
as float. If no such value is defined, default is returned, or, if
\n
\
not given, ValueError is raised."
);
/*[clinic input]
unicodedata.UCD.numeric
self: self
chr: int(types={'str'})
default: object=NULL
/
Converts a Unicode character into its equivalent numeric value.
Returns the numeric value assigned to the character chr as float.
If no such value is defined, default is returned, or, if not given,
ValueError is raised.
[clinic start generated code]*/
static
PyObject
*
unicodedata_numeric
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_numeric_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
)
/*[clinic end generated code: output=53ce281fe85b10c4 input=c5875fa7cc768fb2]*/
{
PyUnicodeObject
*
v
;
PyObject
*
defobj
=
NULL
;
int
have_old
=
0
;
double
rc
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!|O:numeric"
,
&
PyUnicode_Type
,
&
v
,
&
defobj
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
if
(
self
&&
UCD_Check
(
self
))
{
const
change_record
*
old
=
get_old_record
(
self
,
c
);
...
...
@@ -247,37 +231,34 @@ unicodedata_numeric(PyObject *self, PyObject *args)
if
(
!
have_old
)
rc
=
Py_UNICODE_TONUMERIC
(
c
);
if
(
rc
==
-
1
.
0
)
{
if
(
def
obj
==
NULL
)
{
if
(
def
ault_value
==
NULL
)
{
PyErr_SetString
(
PyExc_ValueError
,
"not a numeric character"
);
return
NULL
;
}
else
{
Py_INCREF
(
def
obj
);
return
def
obj
;
Py_INCREF
(
def
ault_value
);
return
def
ault_value
;
}
}
return
PyFloat_FromDouble
(
rc
);
}
PyDoc_STRVAR
(
unicodedata_category__doc__
,
"category(unichr)
\n
\
\n
\
Returns the general category assigned to the Unicode character
\n
\
unichr as string."
);
/*[clinic input]
unicodedata.UCD.category
self: self
chr: int(types={'str'})
/
Returns the general category assigned to the character chr as string.
[clinic start generated code]*/
static
PyObject
*
unicodedata_category
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_category_impl
(
PyObject
*
self
,
int
chr
)
/*[clinic end generated code: output=8571539ee2e6783a input=f5edd6fd04bd455d]*/
{
PyUnicodeObject
*
v
;
int
index
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!:category"
,
&
PyUnicode_Type
,
&
v
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
index
=
(
int
)
_getrecord_ex
(
c
)
->
category
;
if
(
self
&&
UCD_Check
(
self
))
{
const
change_record
*
old
=
get_old_record
(
self
,
c
);
...
...
@@ -287,26 +268,24 @@ unicodedata_category(PyObject *self, PyObject *args)
return
PyUnicode_FromString
(
_PyUnicode_CategoryNames
[
index
]);
}
PyDoc_STRVAR
(
unicodedata_bidirectional__doc__
,
"bidirectional(unichr)
\n
\
\n
\
Returns the bidirectional class assigned to the Unicode character
\n
\
unichr as string. If no such value is defined, an empty string is
\n
\
returned."
);
/*[clinic input]
unicodedata.UCD.bidirectional
self: self
chr: int(types={'str'})
/
Returns the bidirectional class assigned to the character chr as string.
If no such value is defined, an empty string is returned.
[clinic start generated code]*/
static
PyObject
*
unicodedata_bidirectional
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_bidirectional_impl
(
PyObject
*
self
,
int
chr
)
/*[clinic end generated code: output=d36310ce2039bb92 input=5ce2f877b35305b5]*/
{
PyUnicodeObject
*
v
;
int
index
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!:bidirectional"
,
&
PyUnicode_Type
,
&
v
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
index
=
(
int
)
_getrecord_ex
(
c
)
->
bidirectional
;
if
(
self
&&
UCD_Check
(
self
))
{
const
change_record
*
old
=
get_old_record
(
self
,
c
);
...
...
@@ -318,55 +297,52 @@ unicodedata_bidirectional(PyObject *self, PyObject *args)
return
PyUnicode_FromString
(
_PyUnicode_BidirectionalNames
[
index
]);
}
PyDoc_STRVAR
(
unicodedata_combining__doc__
,
"combining(unichr)
\n
\
\n
\
Returns the canonical combining class assigned to the Unicode
\n
\
character unichr as integer. Returns 0 if no combining class is
\n
\
defined."
);
/*[clinic input]
unicodedata.UCD.combining -> int
static
PyObject
*
unicodedata_combining
(
PyObject
*
self
,
PyObject
*
args
)
self: self
chr: int(types={'str'})
/
Returns the canonical combining class assigned to the character chr as integer.
Returns 0 if no combining class is defined.
[clinic start generated code]*/
static
int
unicodedata_UCD_combining_impl
(
PyObject
*
self
,
int
chr
)
/*[clinic end generated code: output=cad056d0cb6a5920 input=9125ea7d50b319e7]*/
{
PyUnicodeObject
*
v
;
int
index
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!:combining"
,
&
PyUnicode_Type
,
&
v
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
index
=
(
int
)
_getrecord_ex
(
c
)
->
combining
;
if
(
self
&&
UCD_Check
(
self
))
{
const
change_record
*
old
=
get_old_record
(
self
,
c
);
if
(
old
->
category_changed
==
0
)
index
=
0
;
/* unassigned */
}
return
PyLong_FromLong
(
index
)
;
return
index
;
}
PyDoc_STRVAR
(
unicodedata_mirrored__doc__
,
"mirrored(unichr)
\n
\
\n
\
Returns the mirrored property assigned to the Unicode character
\n
\
unichr as integer. Returns 1 if the character has been identified as
\n
\
a
\"
mirrored
\"
character in bidirectional text, 0 otherwise."
);
/*[clinic input]
unicodedata.UCD.mirrored -> int
static
PyObject
*
unicodedata_mirrored
(
PyObject
*
self
,
PyObject
*
args
)
self: self
chr: int(types={'str'})
/
Returns the mirrored property assigned to the character chr as integer.
Returns 1 if the character has been identified as a "mirrored"
character in bidirectional text, 0 otherwise.
[clinic start generated code]*/
static
int
unicodedata_UCD_mirrored_impl
(
PyObject
*
self
,
int
chr
)
/*[clinic end generated code: output=2532dbf8121b50e6 input=4e51e8aaf8d7e23e]*/
{
PyUnicodeObject
*
v
;
int
index
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!:mirrored"
,
&
PyUnicode_Type
,
&
v
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
index
=
(
int
)
_getrecord_ex
(
c
)
->
mirrored
;
if
(
self
&&
UCD_Check
(
self
))
{
const
change_record
*
old
=
get_old_record
(
self
,
c
);
...
...
@@ -375,28 +351,25 @@ unicodedata_mirrored(PyObject *self, PyObject *args)
else
if
(
old
->
mirrored_changed
!=
0xFF
)
index
=
old
->
mirrored_changed
;
}
return
PyLong_FromLong
(
index
)
;
return
index
;
}
PyDoc_STRVAR
(
unicodedata_east_asian_width__doc__
,
"east_asian_width(unichr)
\n
\
\n
\
Returns the east asian width assigned to the Unicode character
\n
\
unichr as string."
);
/*[clinic input]
unicodedata.UCD.east_asian_width
self: self
chr: int(types={'str'})
/
Returns the east asian width assigned to the character chr as string.
[clinic start generated code]*/
static
PyObject
*
unicodedata_east_asian_width
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_east_asian_width_impl
(
PyObject
*
self
,
int
chr
)
/*[clinic end generated code: output=484e8537d9ee8197 input=f93c61f37276c8f0]*/
{
PyUnicodeObject
*
v
;
int
index
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!:east_asian_width"
,
&
PyUnicode_Type
,
&
v
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
index
=
(
int
)
_getrecord_ex
(
c
)
->
east_asian_width
;
if
(
self
&&
UCD_Check
(
self
))
{
const
change_record
*
old
=
get_old_record
(
self
,
c
);
...
...
@@ -406,29 +379,27 @@ unicodedata_east_asian_width(PyObject *self, PyObject *args)
return
PyUnicode_FromString
(
_PyUnicode_EastAsianWidthNames
[
index
]);
}
PyDoc_STRVAR
(
unicodedata_decomposition__doc__
,
"decomposition(unichr)
\n
\
\n
\
Returns the character decomposition mapping assigned to the Unicode
\n
\
character unichr as string. An empty string is returned in case no
\n
\
such mapping is defined."
);
/*[clinic input]
unicodedata.UCD.decomposition
self: self
chr: int(types={'str'})
/
Returns the character decomposition mapping assigned to the character chr as string.
An empty string is returned in case no such mapping is defined.
[clinic start generated code]*/
static
PyObject
*
unicodedata_decomposition
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_decomposition_impl
(
PyObject
*
self
,
int
chr
)
/*[clinic end generated code: output=7d699f3ec7565d27 input=7f2c0ee66d75468f]*/
{
PyUnicodeObject
*
v
;
char
decomp
[
256
];
int
code
,
index
,
count
;
size_t
i
;
unsigned
int
prefix_index
;
Py_UCS4
c
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!:decomposition"
,
&
PyUnicode_Type
,
&
v
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
code
=
(
int
)
c
;
...
...
@@ -829,22 +800,24 @@ is_normalized(PyObject *self, PyObject *input, int nfc, int k)
return
1
;
/* certainly normalized */
}
PyDoc_STRVAR
(
unicodedata_normalize__doc__
,
"normalize(form, unistr)
\n
\
\n
\
Return the normal form 'form' for the Unicode string unistr. Valid
\n
\
values for form are 'NFC', 'NFKC', 'NFD', and 'NFKD'."
);
/*[clinic input]
unicodedata.UCD.normalize
static
PyObject
*
unicodedata_normalize
(
PyObject
*
self
,
PyObject
*
args
)
{
char
*
form
;
PyObject
*
input
;
self: self
form: str
unistr as input: object(subclass_of='&PyUnicode_Type')
/
if
(
!
PyArg_ParseTuple
(
args
,
"sO!:normalize"
,
&
form
,
&
PyUnicode_Type
,
&
input
))
return
NULL
;
Return the normal form 'form' for the Unicode string unistr.
Valid values for form are 'NFC', 'NFKC', 'NFD', and 'NFKD'.
[clinic start generated code]*/
static
PyObject
*
unicodedata_UCD_normalize_impl
(
PyObject
*
self
,
const
char
*
form
,
PyObject
*
input
)
/*[clinic end generated code: output=62d1f8870027efdc input=cd092e631cf11883]*/
{
if
(
PyUnicode_READY
(
input
)
==
-
1
)
return
NULL
;
...
...
@@ -1203,64 +1176,67 @@ static const _PyUnicode_Name_CAPI hashAPI =
/* -------------------------------------------------------------------- */
/* Python bindings */
PyDoc_STRVAR
(
unicodedata_name__doc__
,
"name(unichr[, default])
\n
\
Returns the name assigned to the Unicode character unichr as a
\n
\
string. If no name is defined, default is returned, or, if not
\n
\
given, ValueError is raised."
);
/*[clinic input]
unicodedata.UCD.name
self: self
chr: int(types={'str'})
default: object=NULL
/
Returns the name assigned to the character chr as a string.
If no name is defined, default is returned, or, if not given,
ValueError is raised.
[clinic start generated code]*/
static
PyObject
*
unicodedata_name
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_name_impl
(
PyObject
*
self
,
int
chr
,
PyObject
*
default_value
)
/*[clinic end generated code: output=6bbb37a326407707 input=51ee2f971c918113]*/
{
char
name
[
NAME_MAXLEN
];
Py_UCS4
c
;
PyUnicodeObject
*
v
;
PyObject
*
defobj
=
NULL
;
if
(
!
PyArg_ParseTuple
(
args
,
"O!|O:name"
,
&
PyUnicode_Type
,
&
v
,
&
defobj
))
return
NULL
;
c
=
getuchar
(
v
);
if
(
c
==
(
Py_UCS4
)
-
1
)
return
NULL
;
Py_UCS4
c
=
(
Py_UCS4
)
chr
;
if
(
!
_getucname
(
self
,
c
,
name
,
sizeof
(
name
),
0
))
{
if
(
def
obj
==
NULL
)
{
if
(
def
ault_value
==
NULL
)
{
PyErr_SetString
(
PyExc_ValueError
,
"no such name"
);
return
NULL
;
}
else
{
Py_INCREF
(
def
obj
);
return
def
obj
;
Py_INCREF
(
def
ault_value
);
return
def
ault_value
;
}
}
return
PyUnicode_FromString
(
name
);
}
PyDoc_STRVAR
(
unicodedata_lookup__doc__
,
"lookup(name)
\n
\
\n
\
Look up character by name. If a character with the
\n
\
given name is found, return the corresponding Unicode
\n
\
character. If not found, KeyError is raised."
);
/*[clinic input]
unicodedata.UCD.lookup
self: self
name: str(types={'str', 'robuffer'}, length=True)
/
Look up character by name.
If a character with the given name is found, return the
corresponding character. If not found, KeyError is raised.
[clinic start generated code]*/
static
PyObject
*
unicodedata_lookup
(
PyObject
*
self
,
PyObject
*
args
)
unicodedata_UCD_lookup_impl
(
PyObject
*
self
,
const
char
*
name
,
Py_ssize_clean_t
name_length
)
/*[clinic end generated code: output=765cb8186788e6be input=f2bf29706135a590]*/
{
Py_UCS4
code
;
char
*
name
;
Py_ssize_t
namelen
;
unsigned
int
index
;
if
(
!
PyArg_ParseTuple
(
args
,
"s#:lookup"
,
&
name
,
&
namelen
))
return
NULL
;
if
(
namelen
>
INT_MAX
)
{
if
(
name_length
>
INT_MAX
)
{
PyErr_SetString
(
PyExc_KeyError
,
"name too long"
);
return
NULL
;
}
if
(
!
_getcode
(
self
,
name
,
(
int
)
name
len
,
&
code
,
1
))
{
if
(
!
_getcode
(
self
,
name
,
(
int
)
name
_length
,
&
code
,
1
))
{
PyErr_Format
(
PyExc_KeyError
,
"undefined character name '%s'"
,
name
);
return
NULL
;
}
...
...
@@ -1279,24 +1255,17 @@ unicodedata_lookup(PyObject* self, PyObject* args)
static
PyMethodDef
unicodedata_functions
[]
=
{
UNICODEDATA_UCD_DECIMAL_METHODDEF
{
"digit"
,
unicodedata_digit
,
METH_VARARGS
,
unicodedata_digit__doc__
},
{
"numeric"
,
unicodedata_numeric
,
METH_VARARGS
,
unicodedata_numeric__doc__
},
{
"category"
,
unicodedata_category
,
METH_VARARGS
,
unicodedata_category__doc__
},
{
"bidirectional"
,
unicodedata_bidirectional
,
METH_VARARGS
,
unicodedata_bidirectional__doc__
},
{
"combining"
,
unicodedata_combining
,
METH_VARARGS
,
unicodedata_combining__doc__
},
{
"mirrored"
,
unicodedata_mirrored
,
METH_VARARGS
,
unicodedata_mirrored__doc__
},
{
"east_asian_width"
,
unicodedata_east_asian_width
,
METH_VARARGS
,
unicodedata_east_asian_width__doc__
},
{
"decomposition"
,
unicodedata_decomposition
,
METH_VARARGS
,
unicodedata_decomposition__doc__
},
{
"name"
,
unicodedata_name
,
METH_VARARGS
,
unicodedata_name__doc__
},
{
"lookup"
,
unicodedata_lookup
,
METH_VARARGS
,
unicodedata_lookup__doc__
},
{
"normalize"
,
unicodedata_normalize
,
METH_VARARGS
,
unicodedata_normalize__doc__
},
UNICODEDATA_UCD_DIGIT_METHODDEF
UNICODEDATA_UCD_NUMERIC_METHODDEF
UNICODEDATA_UCD_CATEGORY_METHODDEF
UNICODEDATA_UCD_BIDIRECTIONAL_METHODDEF
UNICODEDATA_UCD_COMBINING_METHODDEF
UNICODEDATA_UCD_MIRRORED_METHODDEF
UNICODEDATA_UCD_EAST_ASIAN_WIDTH_METHODDEF
UNICODEDATA_UCD_DECOMPOSITION_METHODDEF
UNICODEDATA_UCD_NAME_METHODDEF
UNICODEDATA_UCD_LOOKUP_METHODDEF
UNICODEDATA_UCD_NORMALIZE_METHODDEF
{
NULL
,
NULL
}
/* sentinel */
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment