diff --git a/src/process.c b/src/process.c index a548afe..402b12e 100644 --- a/src/process.c +++ b/src/process.c @@ -10,9 +10,14 @@ bool replace(tSyntaxElement* tree, tProcessingData* pd) { free(tree->content.none); - tSyntaxElement* clone = se_clone_no_next(pd->data.replace.replacewiththis, tree); + tSyntaxElement* clone = se_clone(pd->data.replace.replacewiththis, tree); tree->content = clone->content; tree->type = clone->type; + if (clone->next != NULL) { + tSyntaxElement* tmp = se_find_last(clone); + tmp->next = tree->next; + tree->next = clone->next; + } free(clone); diff --git a/src/syntax.c b/src/syntax.c index b59407b..0776672 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -142,3 +142,13 @@ tSyntaxElement* se_clone_no_next(tSyntaxElement* syntaxelement, tSyntaxElement* return clone; } + +tSyntaxElement* se_find_last(tSyntaxElement* syntaxelement) { + tSyntaxElement* i = syntaxelement; + while (1) + if (i->next == NULL) + return i; + else + i = i->next; +} + diff --git a/src/syntax.h b/src/syntax.h index 73e342d..e77ace0 100644 --- a/src/syntax.h +++ b/src/syntax.h @@ -47,4 +47,6 @@ tSyntaxElement* se_clone(tSyntaxElement*, tSyntaxElement*); tSyntaxElement* se_clone_no_next(tSyntaxElement*, tSyntaxElement*); +tSyntaxElement* se_find_last(tSyntaxElement*); + #endif