@@ -86,26 +86,29 @@ def __init__(self, md: Markdown | None = None, abbrs: dict | None = None):
8686 self .RE : re .RegexObject | None = None
8787 super ().__init__ (md )
8888
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+
8996 def iter_element (self , el : etree .Element , parent : etree .Element | None = None ) -> None :
9097 ''' Recursively iterate over elements, run regex on text and wrap matches in `abbr` tags. '''
9198 for child in reversed (el ):
9299 self .iter_element (child , el )
93100 if text := el .text :
94101 for m in reversed (list (self .RE .finditer (text ))):
95102 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 ():])
99104 el .insert (0 , abbr )
100105 text = text [:m .start ()]
101106 el .text = text
102107 if parent is not None and el .tail :
103108 tail = el .tail
104109 index = list (parent ).index (el ) + 1
105110 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 ():])
109112 parent .insert (index , abbr )
110113 tail = tail [:m .start ()]
111114 el .tail = tail
0 commit comments