Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
a3f4b830
Commit
a3f4b830
authored
May 31, 2014
by
Kim Bauters
Browse files
add methods isspace(), isalpha(), isdigit(), isupper() and islower() to str
parent
1f07b7e3
Changes
4
Hide whitespace changes
Inline
Side-by-side
py/misc.h
View file @
a3f4b830
...
...
@@ -96,6 +96,8 @@ bool unichar_isalpha(unichar c);
bool
unichar_isprint
(
unichar
c
);
bool
unichar_isdigit
(
unichar
c
);
bool
unichar_isxdigit
(
unichar
c
);
bool
unichar_isupper
(
unichar
c
);
bool
unichar_islower
(
unichar
c
);
unichar
unichar_tolower
(
unichar
c
);
unichar
unichar_toupper
(
unichar
c
);
...
...
py/objstr.c
View file @
a3f4b830
...
...
@@ -1502,6 +1502,71 @@ STATIC mp_obj_t str_upper(mp_obj_t self_in) {
return
str_caseconv
(
CASE_UPPER
,
self_in
);
}
enum
{
IS_SPACE
,
IS_ALPHA
,
IS_DIGIT
,
IS_UPPER
,
IS_LOWER
};
STATIC
mp_obj_t
str_uni_istype
(
int
type
,
mp_obj_t
self_in
)
{
GET_STR_DATA_LEN
(
self_in
,
self_data
,
self_len
);
if
(
self_len
==
0
)
return
mp_const_false
;
// default to False for empty str
typedef
bool
(
*
check_function
)(
unichar
);
check_function
f
;
if
(
type
!=
IS_UPPER
&&
type
!=
IS_LOWER
)
{
switch
(
type
)
{
case
IS_SPACE
:
f
=
&
unichar_isspace
;
break
;
case
IS_ALPHA
:
f
=
&
unichar_isalpha
;
break
;
case
IS_DIGIT
:
f
=
&
unichar_isdigit
;
break
;
default:
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_TypeError
,
"unknown type provided for str_uni_istype"
));
}
for
(
int
i
=
0
;
i
<
self_len
;
i
++
)
{
if
(
!
f
(
*
self_data
++
))
return
mp_const_false
;
}
}
else
{
switch
(
type
)
{
case
IS_UPPER
:
f
=
&
unichar_isupper
;
break
;
case
IS_LOWER
:
f
=
&
unichar_islower
;
break
;
default:
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_TypeError
,
"unknown type provided for str_uni_istype"
));
}
bool
contains_alpha
=
false
;
for
(
int
i
=
0
;
i
<
self_len
;
i
++
)
{
// only check alphanumeric characters
if
(
unichar_isalpha
(
*
self_data
++
))
{
contains_alpha
=
true
;
if
(
!
f
(
*
(
self_data
-
1
)))
return
mp_const_false
;
// we already incremented
}
}
if
(
!
(
contains_alpha
))
return
mp_const_false
;
}
return
mp_const_true
;
}
STATIC
mp_obj_t
str_isspace
(
mp_obj_t
self_in
)
{
return
str_uni_istype
(
IS_SPACE
,
self_in
);
}
STATIC
mp_obj_t
str_isalpha
(
mp_obj_t
self_in
)
{
return
str_uni_istype
(
IS_ALPHA
,
self_in
);
}
STATIC
mp_obj_t
str_isdigit
(
mp_obj_t
self_in
)
{
return
str_uni_istype
(
IS_DIGIT
,
self_in
);
}
STATIC
mp_obj_t
str_isupper
(
mp_obj_t
self_in
)
{
return
str_uni_istype
(
IS_UPPER
,
self_in
);
}
STATIC
mp_obj_t
str_islower
(
mp_obj_t
self_in
)
{
return
str_uni_istype
(
IS_LOWER
,
self_in
);
}
#if MICROPY_CPYTHON_COMPAT
// These methods are superfluous in the presense of str() and bytes()
// constructors.
...
...
@@ -1569,6 +1634,11 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(str_partition_obj, str_partition);
STATIC
MP_DEFINE_CONST_FUN_OBJ_2
(
str_rpartition_obj
,
str_rpartition
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
str_lower_obj
,
str_lower
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
str_upper_obj
,
str_upper
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
str_isspace_obj
,
str_isspace
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
str_isalpha_obj
,
str_isalpha
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
str_isdigit_obj
,
str_isdigit
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
str_isupper_obj
,
str_isupper
);
STATIC
MP_DEFINE_CONST_FUN_OBJ_1
(
str_islower_obj
,
str_islower
);
STATIC
const
mp_map_elem_t
str_locals_dict_table
[]
=
{
#if MICROPY_CPYTHON_COMPAT
...
...
@@ -1594,6 +1664,11 @@ STATIC const mp_map_elem_t str_locals_dict_table[] = {
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_rpartition
),
(
mp_obj_t
)
&
str_rpartition_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_lower
),
(
mp_obj_t
)
&
str_lower_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_upper
),
(
mp_obj_t
)
&
str_upper_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_isspace
),
(
mp_obj_t
)
&
str_isspace_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_isalpha
),
(
mp_obj_t
)
&
str_isalpha_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_isdigit
),
(
mp_obj_t
)
&
str_isdigit_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_isupper
),
(
mp_obj_t
)
&
str_isupper_obj
},
{
MP_OBJ_NEW_QSTR
(
MP_QSTR_islower
),
(
mp_obj_t
)
&
str_islower_obj
},
};
STATIC
MP_DEFINE_CONST_DICT
(
str_locals_dict
,
str_locals_dict_table
);
...
...
py/qstrdefs.h
View file @
a3f4b830
...
...
@@ -246,6 +246,11 @@ Q(partition)
Q
(
rpartition
)
Q
(
lower
)
Q
(
upper
)
Q
(
isspace
)
Q
(
isalpha
)
Q
(
isdigit
)
Q
(
isupper
)
Q
(
islower
)
Q
(
iterable
)
Q
(
start
)
...
...
tests/basics/string_istest.py
0 → 100644
View file @
a3f4b830
print
(
""
.
isspace
())
print
(
"
\t\n\r\v\f
"
.
isspace
())
print
(
"a"
.
isspace
())
print
(
"
\t\n\r\v\f
a"
.
isspace
())
print
(
""
.
isalpha
())
print
(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
.
isalpha
())
print
(
"0abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
.
isalpha
())
print
(
"this "
.
isalpha
())
print
(
""
.
isdigit
())
print
(
"0123456789"
.
isdigit
())
print
(
"0123456789a"
.
isdigit
())
print
(
"0123456789 "
.
isdigit
())
print
(
""
.
isupper
())
print
(
"CHEESE-CAKE WITH ... _FROSTING_*99"
.
isupper
())
print
(
"aB"
.
isupper
())
print
(
""
.
islower
())
print
(
"cheese-cake with ... _frosting_*99"
.
islower
())
print
(
"aB"
.
islower
())
print
(
"123"
.
islower
())
print
(
"123a"
.
islower
())
Write
Preview
Supports
Markdown
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