@@ -140,40 +140,52 @@ export default class TextReplaceHelper {
140140 const textBlock = textBlocks [ i ] ;
141141
142142 replaceTexts . forEach ( ( item ) => {
143- this . applyReplacement ( item , textBlock ) ;
143+ this . applyReplacement ( item , textBlock , i ) ;
144144 } ) ;
145145 }
146146 }
147147
148- applyReplacement ( replaceText : ReplaceText , textBlock : Element ) : void {
149- const replace =
150- this . options . openingTag + replaceText . replace + this . options . closingTag ;
148+ applyReplacement ( replaceText : ReplaceText , textBlock : Element , currentIndex :number ) : void {
149+ const replace = this . options . openingTag
150+ + replaceText . replace
151+ + this . options . closingTag ;
151152 let textNode = this . getTextElement ( textBlock ) ;
152153 const sourceText = textNode . firstChild . textContent ;
153154
154155 if ( sourceText . includes ( replace ) ) {
155156 const bys = GeneralHelper . arrayify ( replaceText . by ) ;
156- bys . forEach ( ( by , i ) => {
157- const replacedText = sourceText . replace ( replace , by . text ) ;
158- textNode = this . assertTextNode ( i , textBlock , textNode ) ;
159- ModifyTextHelper . content ( replacedText ) ( textNode )
160-
161- if ( by . style ) {
162- const styleParent = textNode . parentNode as Element ;
163- const styleElement = styleParent . getElementsByTagName ( 'a:rPr' ) [ 0 ] ;
164- ModifyTextHelper . style ( by . style ) ( styleElement )
165- }
157+ const modifyBlocks = this . assertTextBlocks ( bys . length , textBlock )
158+
159+ bys . forEach ( ( by , blockIndex ) => {
160+ const textNode = modifyBlocks [ blockIndex ] . getElementsByTagName ( 'a:t' ) [ 0 ]
161+ this . updateTextNode ( textNode , sourceText , replace , by )
166162 } ) ;
167163 }
168164 }
169165
170- assertTextNode ( i : number , textBlock : Element , textNode : Element ) : Element {
171- if ( i >= 1 ) {
172- const addedTextBlock = textBlock . cloneNode ( true ) as Element ;
173- XmlHelper . insertAfter ( addedTextBlock , textBlock ) ;
174- return this . getTextElement ( addedTextBlock ) ;
166+ assertTextBlocks ( length : number , textBlock :any ) : Element [ ] {
167+ const modifyBlocks = [ ]
168+ if ( length > 1 ) {
169+ for ( let i = 1 ; i < length ; i ++ ) {
170+ const addedTextBlock = textBlock . cloneNode ( true ) as Element ;
171+ XmlHelper . insertAfter ( addedTextBlock , textBlock ) ;
172+ modifyBlocks . push ( addedTextBlock )
173+ }
174+ }
175+ modifyBlocks . push ( textBlock )
176+ modifyBlocks . reverse ( )
177+ return modifyBlocks
178+ }
179+
180+ updateTextNode ( textNode : Element , sourceText , replace , by ) : void {
181+ const replacedText = sourceText . replace ( replace , by . text ) ;
182+ ModifyTextHelper . content ( replacedText ) ( textNode )
183+
184+ if ( by . style ) {
185+ const styleParent = textNode . parentNode as Element ;
186+ const styleElement = styleParent . getElementsByTagName ( 'a:rPr' ) [ 0 ] ;
187+ ModifyTextHelper . style ( by . style ) ( styleElement )
175188 }
176- return textNode ;
177189 }
178190
179191 getTextElement ( block : Element ) : Element {
0 commit comments