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;