|
22 | 22 | from pdfalyzer.util import adobe_strings |
23 | 23 | from pdfalyzer.util.helpers.collections_helper import prefix_keys, safe_json |
24 | 24 | from pdfalyzer.util.helpers.rich_helper import vertically_padded_panel |
25 | | -from pdfalyzer.util.helpers.string_helper import regex_to_highlight_pattern |
| 25 | +from pdfalyzer.util.helpers.string_helper import highlight_pattern |
26 | 26 |
|
27 | 27 | ClassStyle = namedtuple('ClassStyle', ['cls', 'style']) |
28 | 28 |
|
|
73 | 73 | ClassStyle(NoneType, NULL_STYLE), |
74 | 74 | ] |
75 | 75 |
|
| 76 | +PDF_OBJ_TYPE_STYLE_DICT = {f"{cs.cls.__name__}": cs.style for cs in PDF_OBJ_TYPE_STYLES} |
| 77 | + |
76 | 78 | # Subclasses of the key type will be styled with the value string |
77 | 79 | OBJ_TYPE_STYLES = PDF_OBJ_TYPE_STYLES + [ |
78 | 80 | ClassStyle(Number, 'cyan bold'), |
|
146 | 148 | adobe_strings.TRUE: 'green bold', |
147 | 149 | }) |
148 | 150 |
|
| 151 | +# Compile regexes as keys |
| 152 | +NODE_STYLE_REGEXES = {re.compile(k): v for k, v in NODE_STYLES_BASE_DICT.items()} |
| 153 | + |
| 154 | +# Unite class styles for things like ArrayObject with node styles for things like /Parent |
149 | 155 | NODE_STYLES_THEME_DICT = { |
150 | 156 | **PdfHighlighter.prefix_styles({k.removeprefix('/'): v for k, v in NODE_STYLES_BASE_DICT.items()}), |
151 | | - **PdfHighlighter.prefix_styles({f"{cs.cls.__name__}": cs.style for cs in PDF_OBJ_TYPE_STYLES}) |
| 157 | + **PdfHighlighter.prefix_styles(PDF_OBJ_TYPE_STYLE_DICT) |
152 | 158 | } |
153 | 159 |
|
| 160 | +# Merge all the theme dicts |
154 | 161 | LOG_THEME_DICT = LogHighlighter.prefix_styles(LOG_HIGHLIGHT_STYLES) |
155 | 162 | COMPLETE_THEME_DICT = {**PDFALYZER_THEME_DICT, **LOG_THEME_DICT, **NODE_STYLES_THEME_DICT} |
156 | 163 |
|
157 | | -# Compile regexes as keys |
158 | | -NODE_STYLE_REGEXES = {re.compile(k): v for k, v in NODE_STYLES_BASE_DICT.items()} |
159 | | - |
160 | | - |
161 | 164 | # Add patterns to highlighters |
162 | | -LogHighlighter.set_highlights( |
163 | | - LOG_HIGHLIGHT_PATTERNS + |
164 | | - [regex_to_highlight_pattern(cs.cls.__name__) for cs in PDF_OBJ_TYPE_STYLES] |
165 | | -) |
166 | | - |
167 | | -PdfHighlighter.set_highlights( |
168 | | - [regex_to_highlight_pattern(r) for r in NODE_STYLE_REGEXES.keys()] |
169 | | -) |
170 | | - |
| 165 | +LogHighlighter.set_highlights(LOG_HIGHLIGHT_PATTERNS + [highlight_pattern(k) for k in PDF_OBJ_TYPE_STYLE_DICT.keys()]) |
| 166 | +PdfHighlighter.set_highlights([highlight_pattern(r) for r in NODE_STYLE_REGEXES.keys()]) |
171 | 167 |
|
172 | 168 | # Push themes into the console objects that manage stdout. |
173 | 169 | console.push_theme(Theme(COMPLETE_THEME_DICT)) |
|
0 commit comments