|
15 | 15 | from doxmlparser import compound |
16 | 16 |
|
17 | 17 |
|
| 18 | +# Doxygen's encoding for special characters in refids, ordered longest-first |
| 19 | +# to avoid partial matches during replacement. |
| 20 | +_DOXYGEN_TEMPLATE_ENCODINGS = ( |
| 21 | + ("_8_8_8", "..."), # Variadic ellipsis |
| 22 | + ("_00", ", "), # Comma (with space for readability) |
| 23 | + ("_01", " "), # Space |
| 24 | + ("_02", "*"), # Pointer |
| 25 | + ("_05", "="), # Equals |
| 26 | + ("_06", "&"), # Reference |
| 27 | + ("_07", "("), # Open paren |
| 28 | + ("_08", ")"), # Close paren |
| 29 | + ("_3", "<"), # Template open |
| 30 | + ("_4", ">"), # Template close |
| 31 | +) |
| 32 | + |
| 33 | + |
18 | 34 | def decode_doxygen_template_encoding(encoded: str) -> str: |
19 | 35 | """Decode Doxygen's encoding for template specializations in refids. |
20 | 36 |
|
21 | | - Doxygen encodes special characters in refids using underscore-prefixed codes: |
22 | | - - '_3' = '<' (template open) |
23 | | - - '_4' = '>' (template close) |
24 | | - - '_01' = ' ' (space) |
25 | | - - '_07' = '(' (open paren) |
26 | | - - '_08' = ')' (close paren) |
27 | | - - '_8_8_8' = '...' (variadic ellipsis) |
28 | | - - '_00' = ',' (comma) |
29 | | - - '_02' = '*' (pointer) |
30 | | - - '_05' = '=' (equals) |
31 | | - - '_06' = '&' (reference) |
32 | | -
|
| 37 | + Doxygen encodes special characters in refids using underscore-prefixed codes. |
33 | 38 | e.g. 'SyncCallback_3_01R_07Args_8_8_8_08_4' -> 'SyncCallback< R(Args...)>' |
34 | 39 | """ |
35 | 40 | result = encoded |
36 | | - |
37 | | - # Process longer patterns first to avoid partial matches |
38 | | - result = result.replace("_8_8_8", "...") # Variadic ellipsis |
39 | | - |
40 | | - # Process two-char patterns (_0X codes) |
41 | | - result = result.replace("_00", ", ") # Comma (with space for readability) |
42 | | - result = result.replace("_01", " ") # Space |
43 | | - result = result.replace("_02", "*") # Pointer |
44 | | - result = result.replace("_05", "=") # Equals |
45 | | - result = result.replace("_06", "&") # Reference |
46 | | - result = result.replace("_07", "(") # Open paren |
47 | | - result = result.replace("_08", ")") # Close paren |
48 | | - |
49 | | - # Process single-char patterns last |
50 | | - result = result.replace("_3", "<") # Template open |
51 | | - result = result.replace("_4", ">") # Template close |
52 | | - |
| 41 | + for pattern, replacement in _DOXYGEN_TEMPLATE_ENCODINGS: |
| 42 | + result = result.replace(pattern, replacement) |
53 | 43 | return result |
54 | 44 |
|
55 | 45 |
|
|
0 commit comments