@@ -86,26 +86,29 @@ def __init__(self, md: Markdown | None = None, abbrs: dict | None = None):
86
86
self .RE : re .RegexObject | None = None
87
87
super ().__init__ (md )
88
88
89
+ def create_element (self , title : str , text : str , tail : str ) -> etree .Element :
90
+ ''' Create an `abbr` element. '''
91
+ abbr = etree .Element ('abbr' , {'title' : title })
92
+ abbr .text = AtomicString (text )
93
+ abbr .tail = tail
94
+ return abbr
95
+
89
96
def iter_element (self , el : etree .Element , parent : etree .Element | None = None ) -> None :
90
97
''' Recursively iterate over elements, run regex on text and wrap matches in `abbr` tags. '''
91
98
for child in reversed (el ):
92
99
self .iter_element (child , el )
93
100
if text := el .text :
94
101
for m in reversed (list (self .RE .finditer (text ))):
95
102
if self .abbrs [m .group (0 )]:
96
- abbr = etree .Element ('abbr' , {'title' : self .abbrs [m .group (0 )]})
97
- abbr .text = AtomicString (m .group (0 ))
98
- abbr .tail = text [m .end ():]
103
+ abbr = self .create_element (self .abbrs [m .group (0 )], m .group (0 ), text [m .end ():])
99
104
el .insert (0 , abbr )
100
105
text = text [:m .start ()]
101
106
el .text = text
102
107
if parent is not None and el .tail :
103
108
tail = el .tail
104
109
index = list (parent ).index (el ) + 1
105
110
for m in reversed (list (self .RE .finditer (tail ))):
106
- abbr = etree .Element ('abbr' , {'title' : self .abbrs [m .group (0 )]})
107
- abbr .text = AtomicString (m .group (0 ))
108
- abbr .tail = tail [m .end ():]
111
+ abbr = self .create_element (self .abbrs [m .group (0 )], m .group (0 ), tail [m .end ():])
109
112
parent .insert (index , abbr )
110
113
tail = tail [:m .start ()]
111
114
el .tail = tail
0 commit comments