Skip to content

Commit b06111d

Browse files
authored
Merge pull request #61 from MatthieuBizien/fast_serialize_string_value
perfs: optimize serialize_string_value
2 parents f71ebd3 + 83ef15b commit b06111d

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

tinycss2/serializer.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import re
2+
3+
14
def serialize(nodes):
25
"""Serialize nodes to CSS syntax.
36
@@ -66,16 +69,19 @@ def serialize_name(value):
6669
)
6770

6871

72+
_replacement_string_value = {
73+
'"': r"\"",
74+
"\\": r"\\",
75+
"\n": r"\A ",
76+
"\r": r"\D ",
77+
"\f": r"\C ",
78+
}
79+
_re_string_value = "".join(re.escape(e) for e in _replacement_string_value.keys())
80+
_re_string_value = re.compile("["+ _re_string_value + "]", re.MULTILINE )
81+
def _serialize_string_value_match(match):
82+
return _replacement_string_value[match.group(0)]
6983
def serialize_string_value(value):
70-
return ''.join(
71-
r'\"' if c == '"' else
72-
r'\\' if c == '\\' else
73-
r'\A ' if c == '\n' else
74-
r'\D ' if c == '\r' else
75-
r'\C ' if c == '\f' else
76-
c
77-
for c in value
78-
)
84+
return _re_string_value.sub(_serialize_string_value_match, value)
7985

8086

8187
def serialize_url(value):

0 commit comments

Comments
 (0)