ext/mmd/token.c in rmultimarkdown-6.2.2.1 vs ext/mmd/token.c in rmultimarkdown-6.4.0.1

- old
+ new

@@ -188,11 +188,11 @@ /// Add a new token to the end of a token chain. The new token /// may or may not also be the start of a chain void token_chain_append(token * chain_start, token * t) { if ((chain_start == NULL) || - (t == NULL)) { + (t == NULL)) { return; } // Append t chain_start->tail->next = t; @@ -367,10 +367,22 @@ if (next) { next->prev = first; } + // Fix tail (prior tail is now a child) + if (first->next == NULL) { + token * walker = first; + + while (walker->prev) { + walker = walker->prev; + } + + first->tail = first; + walker->tail = first; + } + return first; } /// Free token @@ -463,19 +475,19 @@ /// Find the child node of a given parent that contains the specified /// offset position. token * token_child_for_offset( - token * parent, //!< Pointer to parent token - size_t offset //!< Search position + token * parent, //!< Pointer to parent token + size_t offset //!< Search position ) { if (parent == NULL) { return NULL; } if ((parent->start > offset) || - (parent->start + parent->len < offset)) { + (parent->start + parent->len < offset)) { return NULL; } token * walker = parent->child; @@ -503,20 +515,20 @@ } /// Find first child node of a given parent that intersects the specified /// offset range. token * token_first_child_in_range( - token * parent, //!< Pointer to parent token - size_t start, //!< Start search position - size_t len //!< Search length + token * parent, //!< Pointer to parent token + size_t start, //!< Start search position + size_t len //!< Search length ) { if (parent == NULL) { return NULL; } if ((parent->start > start + len) || - (parent->start + parent->len < start)) { + (parent->start + parent->len < start)) { return NULL; } token * walker = parent->child; @@ -537,19 +549,19 @@ /// Find last child node of a given parent that intersects the specified /// offset range. token * token_last_child_in_range( - token * parent, //!< Pointer to parent token - size_t start, //!< Start search position - size_t len //!< Search length + token * parent, //!< Pointer to parent token + size_t start, //!< Start search position + size_t len //!< Search length ) { if (parent == NULL) { return NULL; } if ((parent->start > start + len) || - (parent->start + parent->len < start)) { + (parent->start + parent->len < start)) { return NULL; } token * walker = parent->child; token * last = NULL;