|
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 |
|
3 | 3 | import re |
| 4 | +import sys |
4 | 5 |
|
5 | 6 |
|
6 | 7 | BETWEEN_QUOTES_PATTERN = r'"([^"]*)"' |
|
46 | 47 |
|
47 | 48 |
|
48 | 49 | def unicode_decode(unicode_char): |
49 | | - """ |
50 | | - Decodes an unicode char (e.g. 20AC to €). |
| 50 | + """ |
| 51 | + Decodes an unicode char (e.g. 20AC to €). |
51 | 52 |
|
52 | | - :param unicode_char: An unicode char |
53 | | - :return: A (decoded) unicode char |
54 | | - """ |
55 | | - |
56 | | - return unichr(int(unicode_char, 16)) |
| 53 | + :param unicode_char: An unicode char |
| 54 | + :return: A (decoded) unicode char |
| 55 | + """ |
| 56 | + if sys.version_info >= (3, 0): |
| 57 | + return chr(int(unicode_char, 16)) |
| 58 | + else: |
| 59 | + # Keep this for Python 2.x |
| 60 | + return unichr(int(unicode_char, 16)) |
57 | 61 |
|
58 | 62 |
|
59 | 63 | def unicode_encode(char): |
60 | | - """ |
61 | | - Encodes an char (e.g. € to <U20AC>). |
| 64 | + """ |
| 65 | + Encodes an char (e.g. € to <U20AC>). |
62 | 66 |
|
63 | | - :param char: A char |
64 | | - :return: An (encoded) char |
65 | | - """ |
| 67 | + :param char: A char |
| 68 | + :return: An (encoded) char |
| 69 | + """ |
66 | 70 |
|
67 | | - return '<U%04X>' % (ord(char)) |
| 71 | + return '<U%04X>' % (ord(char)) |
68 | 72 |
|
69 | 73 |
|
70 | 74 | def replace_positional(original, start, replacement, end): |
71 | | - """ |
72 | | - Replaces a substring in a string between a start and end position. |
| 75 | + """ |
| 76 | + Replaces a substring in a string between a start and end position. |
73 | 77 |
|
74 | | - :param original: An original string |
75 | | - :param start: A start position |
76 | | - :param replacement: A replacement string |
77 | | - :param end: An end position |
78 | | - :return: A (replaced) string |
79 | | - """ |
| 78 | + :param original: An original string |
| 79 | + :param start: A start position |
| 80 | + :param replacement: A replacement string |
| 81 | + :param end: An end position |
| 82 | + :return: A (replaced) string |
| 83 | + """ |
80 | 84 |
|
81 | | - return original[:start] + replacement + original[end:] |
| 85 | + return original[:start] + replacement + original[end:] |
82 | 86 |
|
83 | 87 |
|
84 | 88 | def reverse_iter(iterator): |
85 | | - """ |
86 | | - Reverses an iterator. |
| 89 | + """ |
| 90 | + Reverses an iterator. |
87 | 91 |
|
88 | | - :param iterator: An iterator |
89 | | - :return: A reversed iterator |
90 | | - """ |
| 92 | + :param iterator: An iterator |
| 93 | + :return: A reversed iterator |
| 94 | + """ |
91 | 95 |
|
92 | | - return reversed(list(iterator)) |
| 96 | + return reversed(list(iterator)) |
93 | 97 |
|
94 | 98 |
|
95 | 99 | def between_range(range1, range2): |
96 | | - """ |
97 | | - Checks whether or not range 2 is between range 1. |
| 100 | + """ |
| 101 | + Checks whether or not range 2 is between range 1. |
98 | 102 |
|
99 | | - :param range1: A range |
100 | | - :param range2: A range |
101 | | - :return: Whether or not range 2 is between range 1 |
102 | | - """ |
| 103 | + :param range1: A range |
| 104 | + :param range2: A range |
| 105 | + :return: Whether or not range 2 is between range 1 |
| 106 | + """ |
103 | 107 |
|
104 | | - return range1['start'] <= range2['start'] <= range1['end'] and range1['start'] <= range2['end'] <= range1['end'] |
| 108 | + return range1['start'] <= range2['start'] <= range1['end'] and range1['start'] <= range2['end'] <= range1['end'] |
105 | 109 |
|
106 | 110 |
|
107 | 111 | def in_unsafe_spans(match_start, match_end, unsafe_spans): |
108 | | - """ |
109 | | - Checks whether not a range (match start and end) is in unsafe ranges. |
| 112 | + """ |
| 113 | + Checks whether not a range (match start and end) is in unsafe ranges. |
110 | 114 |
|
111 | | - :param match_start: A match start position |
112 | | - :param match_end: A match end position |
113 | | - :param unsafe_spans: A list of unsafe spans |
114 | | - :return: Whether not a range is in unsafe ranges |
115 | | - """ |
| 115 | + :param match_start: A match start position |
| 116 | + :param match_end: A match end position |
| 117 | + :param unsafe_spans: A list of unsafe spans |
| 118 | + :return: Whether not a range is in unsafe ranges |
| 119 | + """ |
116 | 120 |
|
117 | | - for unsafe_span in unsafe_spans: |
118 | | - if between_range(unsafe_span, {'start': match_start, 'end': match_end}): |
119 | | - return True |
| 121 | + for unsafe_span in unsafe_spans: |
| 122 | + if between_range(unsafe_span, {'start': match_start, 'end': match_end}): |
| 123 | + return True |
120 | 124 |
|
121 | | - return False |
| 125 | + return False |
122 | 126 |
|
123 | 127 |
|
124 | 128 | def get_unsafe_spans(lines, lines_joined): |
125 | | - """ |
126 | | - Generates a list of unsafe spans. |
| 129 | + """ |
| 130 | + Generates a list of unsafe spans. |
127 | 131 |
|
128 | | - Unsafe span are comment lines that contain double quotes (that should not be (en|de)coded). |
| 132 | + Unsafe span are comment lines that contain double quotes (that should not be (en|de)coded). |
129 | 133 |
|
130 | | - :param lines: A list of lines |
131 | | - :param lines_joined: A string of lines |
132 | | - :return: A list of unsafe spans |
133 | | - """ |
| 134 | + :param lines: A list of lines |
| 135 | + :param lines_joined: A string of lines |
| 136 | + :return: A list of unsafe spans |
| 137 | + """ |
134 | 138 |
|
135 | | - unsafe_lines = [] |
136 | | - for line in lines: |
137 | | - if re.search(COMMENT_LINE_WITH_QUOTES_PATTERN, line): |
138 | | - unsafe_lines.append(line) |
| 139 | + unsafe_lines = [] |
| 140 | + for line in lines: |
| 141 | + if re.search(COMMENT_LINE_WITH_QUOTES_PATTERN, line): |
| 142 | + unsafe_lines.append(line) |
139 | 143 |
|
140 | | - unsafe_lines_pattern = '({0})'.format('|'.join(map(re.escape, unsafe_lines))) |
| 144 | + unsafe_lines_pattern = '({0})'.format('|'.join(map(re.escape, unsafe_lines))) |
141 | 145 |
|
142 | | - unsafe_spans = [] |
143 | | - for unsafe_line in re.finditer(unsafe_lines_pattern, lines_joined): |
144 | | - unsafe_spans.append({'start': unsafe_line.start(0), 'end': unsafe_line.end(0)}) |
| 146 | + unsafe_spans = [] |
| 147 | + for unsafe_line in re.finditer(unsafe_lines_pattern, lines_joined): |
| 148 | + unsafe_spans.append({'start': unsafe_line.start(0), 'end': unsafe_line.end(0)}) |
145 | 149 |
|
146 | | - return unsafe_spans |
| 150 | + return unsafe_spans |
0 commit comments