]> git.wincent.com - wikitext.git/commitdiff
Automatically append link in _Wikitext_hyperlink
authorWincent Colaiuta <win@wincent.com>
Thu, 7 May 2009 22:39:18 +0000 (00:39 +0200)
committerWincent Colaiuta <win@wincent.com>
Thu, 7 May 2009 22:39:18 +0000 (00:39 +0200)
All call sites of _Wikitext_hyperlink take the return value and
append it to the the parser->output buffer.

Avoid this repetition by performing the output automatically
from within the function itself so that the callers don't
have to do it.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
ext/parser.c

index e3ed3484eaec9dfa4c58e7ae842cb5480c264134..11feceb1555876071c8930873e52441fe6340844 100644 (file)
@@ -230,6 +230,7 @@ VALUE _Wikitext_downcase(VALUE string)
     return string;
 }
 
+// prepare hyperlink and append it to parser->output
 VALUE _Wikitext_hyperlink(parser_t *parser, VALUE link_prefix, VALUE link_target, VALUE link_text, VALUE link_class)
 {
     VALUE string = rb_str_new(a_start, sizeof(a_start) - 1);        // <a href="
@@ -252,6 +253,7 @@ VALUE _Wikitext_hyperlink(parser_t *parser, VALUE link_prefix, VALUE link_target
     rb_str_cat(string, a_start_close, sizeof(a_start_close) - 1);   // ">
     rb_str_append(string, link_text);
     rb_str_cat(string, a_end, sizeof(a_end) - 1);
+    rb_str_append(parser->output, string);
     return string;
 }
 
@@ -909,7 +911,8 @@ void _Wikitext_rollback_failed_external_link(parser_t *parser)
     {
         if (parser->autolink == Qtrue)
             parser->link_target = _Wikitext_hyperlink(parser, Qnil, parser->link_target, parser->link_target, parser->external_link_class);
-        rb_str_append(parser->output, parser->link_target);
+        else
+            rb_str_append(parser->output, parser->link_target);
         if (scope_includes_space)
         {
             rb_str_cat(parser->output, space, sizeof(space) - 1);
@@ -1961,7 +1964,8 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                     i = TOKEN_TEXT(token);
                     if (parser->autolink == Qtrue)
                         i = _Wikitext_hyperlink(parser, rb_str_new2("mailto:"), i, i, mailto_class);
-                    rb_str_append(parser->output, i);
+                    else
+                        rb_str_append(parser->output, i);
                 }
                 break;
 
@@ -1977,7 +1981,8 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                     i = TOKEN_TEXT(token);
                     if (parser->autolink == Qtrue)
                         i = _Wikitext_hyperlink(parser, Qnil, i, i, parser->external_link_class); // link target, link text
-                    rb_str_append(parser->output, i);
+                    else
+                        rb_str_append(parser->output, i);
                 }
                 else if (IN(EXT_LINK_START))
                 {
@@ -2003,7 +2008,8 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                             rb_str_cat(parser->output, ext_link_start, sizeof(ext_link_start) - 1);
                             if (parser->autolink == Qtrue)
                                 i = _Wikitext_hyperlink(parser, Qnil, i, i, parser->external_link_class); // link target, link text
-                            rb_str_append(parser->output, i);
+                            else
+                                rb_str_append(parser->output, i);
                         }
                     }
                     else
@@ -2024,7 +2030,8 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                     i = TOKEN_TEXT(token);
                     if (parser->autolink == Qtrue)
                         i = _Wikitext_hyperlink(parser, Qnil, i, i, parser->external_link_class); // link target, link text
-                    rb_str_append(parser->output, i);
+                    else
+                        rb_str_append(parser->output, i);
                 }
                 break;
 
@@ -2217,7 +2224,6 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                     _Wikitext_pop_from_stack_up_to(parser, i, LINK_START, Qtrue);
                     parser->capture     = Qnil;
                     i = _Wikitext_hyperlink(parser, prefix, parser->link_target, parser->link_text, Qnil);
-                    rb_str_append(parser->output, i);
                     parser->link_target = Qnil;
                     parser->link_text   = Qnil;
                 }
@@ -2301,7 +2307,6 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                         _Wikitext_pop_from_stack_up_to(parser, i, EXT_LINK_START, Qtrue);
                         parser->capture = Qnil;
                         i = _Wikitext_hyperlink(parser, Qnil, parser->link_target, parser->link_text, j);
-                        rb_str_append(parser->output, i);
                     }
                     parser->link_target = Qnil;
                     parser->link_text   = Qnil;