]> git.wincent.com - wikitext.git/commitdiff
Emit <code> rather than <tt> elements
authorWincent Colaiuta <win@wincent.com>
Fri, 11 Jun 2010 16:33:55 +0000 (18:33 +0200)
committerWincent Colaiuta <win@wincent.com>
Fri, 11 Jun 2010 16:33:55 +0000 (18:33 +0200)
The <tt> element has been dropped from HTML5 and the recommendation is
to instead use more "semantic" elements such as <code>, <samp> and
<kbd>. As one of the major goals for the 2.0 release is to emit valid
HTML5, the <tt> element has to go.

Given that we are working with wikitext markup and the focus is on
simplicity, we won't be adding new syntax to enable the user to control
which of the three "semantic" tag alternatives is emitted.

Instead, we maintain the existing input markup options (that is,
backticks and <tt> elements will continue to be recognized) to maintain
compatibility with existing bodies of wikitext markup, and we choose
one of the three possible elements as a replacement for <tt>.

In the end, we're going with <code> because it seems to be the most
frequently used in the terrain where the wikitext module is used (online
wikis). A customization option to override this choice could be added in
the future, but I honestly don't expect there to be any demand for it.
Likewise, explicit support for <samp> and <kbd> tags could be added, but
I doubt there'll ever be a call for it, as the whole point of working in
wikitext markup is to have an easy-to-use format and not have to write
HTML tags.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
ext/parser.c
spec/blockquote_spec.rb
spec/external_link_spec.rb
spec/integration_spec.rb
spec/internal_link_spec.rb
spec/pre_spec.rb
spec/tt_spec.rb
spec/ul_spec.rb

index af18d69b1518280393acaaac79e63c08bd52928a..aa6fd70742cfa27f28ec65bd621fafb29d1035d9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2007-2009 Wincent Colaiuta. All rights reserved.
+// Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are met:
@@ -83,8 +83,8 @@ const char strong_start[]               = "<strong>";
 const char strong_end[]                 = "</strong>";
 const char em_start[]                   = "<em>";
 const char em_end[]                     = "</em>";
-const char tt_start[]                   = "<tt>";
-const char tt_end[]                     = "</tt>";
+const char code_start[]                 = "<code>";
+const char code_end[]                   = "</code>";
 const char ol_start[]                   = "<ol>";
 const char ol_end[]                     = "</ol>";
 const char ul_start[]                   = "<ul>";
@@ -422,7 +422,7 @@ void wiki_pop_from_stack(parser_t *parser, str_t *target)
 
         case TT:
         case TT_START:
-            str_append(target, tt_end, sizeof(tt_end) - 1);
+            str_append(target, code_end, sizeof(code_end) - 1);
             break;
 
         case OL:
@@ -1608,7 +1608,7 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                         wiki_pop_from_stack_up_to(parser, output, EM_START, true);
                     else
                     {
-                        // no EM_START in scope, so must interpret the TT_END without any special meaning
+                        // no EM_START in scope, so must interpret the EM_END without any special meaning
                         wiki_pop_excess_elements(parser);
                         wiki_start_para_if_necessary(parser);
                         str_append(output, escaped_em_end, sizeof(escaped_em_end) - 1);
@@ -1636,7 +1636,7 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                         // this is a new opening
                         wiki_pop_excess_elements(parser);
                         wiki_start_para_if_necessary(parser);
-                        str_append(output, tt_start, sizeof(tt_start) - 1);
+                        str_append(output, code_start, sizeof(code_start) - 1);
                         ary_push(parser->scope, TT);
                         ary_push(parser->line, TT);
                     }
@@ -1658,7 +1658,7 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                     {
                         wiki_pop_excess_elements(parser);
                         wiki_start_para_if_necessary(parser);
-                        str_append(output, tt_start, sizeof(tt_start) - 1);
+                        str_append(output, code_start, sizeof(code_start) - 1);
                         ary_push(parser->scope, TT_START);
                         ary_push(parser->line, TT_START);
                     }
index e67cbbadf7780a483939d3fdca66b4e0d451ee0b..3d3caa19765e5f8a667a194e243f5aaa9d4d5dae 100644 (file)
@@ -194,7 +194,7 @@ describe Wikitext::Parser, 'standard blockquotes (">" in first column)' do
     END
     expected = dedent <<-END
       <blockquote>
-        <p>link to <a href="/wiki/something">something</a>, and <em>other</em> <tt>styled</tt> <strong>spans</strong>.</p>
+        <p>link to <a href="/wiki/something">something</a>, and <em>other</em> <code>styled</code> <strong>spans</strong>.</p>
       </blockquote>
     END
     @parser.parse(input).should == expected
@@ -243,7 +243,7 @@ describe Wikitext::Parser, 'standard blockquotes (">" in first column)' do
           <li>a</li>
           <li>list</li>
         </ul>
-        <p>outer para with <em>styled</em> <tt>stuff</tt> in it</p>
+        <p>outer para with <em>styled</em> <code>stuff</code> in it</p>
         <blockquote>
           <p>inner blockquote</p>
           <ol>
@@ -268,7 +268,7 @@ describe Wikitext::Parser, 'standard blockquotes (">" in first column)' do
     END
     expected = dedent <<-END
       <blockquote>
-        <p>some <tt>styled</tt></p>
+        <p>some <code>styled</code></p>
       </blockquote>
     END
     @parser.parse(input).should == expected
index f59b7f8f44b3c924dba6474d9ddea95f6b1401b8..deca45cfae48f2d004266ef865f617285d9038c3 100644 (file)
@@ -117,12 +117,12 @@ describe Wikitext::Parser, 'external links' do
   end
 
   it 'should format a link with <tt></tt> tags in the link text' do
-    expected = %Q{<p><a href="http://google.com/" class="external">Google <tt>SOC</tt></a></p>\n}
+    expected = %Q{<p><a href="http://google.com/" class="external">Google <code>SOC</code></a></p>\n}
     @parser.parse("[http://google.com/ Google <tt>SOC</tt>]").should == expected
   end
 
   it 'should automatically close unmatched <tt> tags in the link text' do
-    expected = %Q{<p><a href="http://google.com/" class="external">Google <tt>SOC</tt></a></p>\n}
+    expected = %Q{<p><a href="http://google.com/" class="external">Google <code>SOC</code></a></p>\n}
     @parser.parse("[http://google.com/ Google <tt>SOC]").should == expected
   end
 
@@ -194,7 +194,7 @@ describe Wikitext::Parser, 'external links' do
     @parser.parse("foo '']'' bar").should == "<p>foo <em>]</em> bar</p>\n"                        # in EM scope
     @parser.parse("foo ''']''' bar").should == "<p>foo <strong>]</strong> bar</p>\n"              # in STRONG scope
     @parser.parse("foo ''''']''''' bar").should == "<p>foo <strong><em>]</em></strong> bar</p>\n" # in STRONG_EM scope
-    @parser.parse('foo <tt>]</tt> bar').should == "<p>foo <tt>]</tt> bar</p>\n"                   # in TT scope
+    @parser.parse('foo <tt>]</tt> bar').should == "<p>foo <code>]</code> bar</p>\n"               # in TT scope
     @parser.parse('= foo ] bar =').should == "<h1>foo ] bar</h1>\n"                               # in H1 scope
     @parser.parse('== foo ] bar ==').should == "<h2>foo ] bar</h2>\n"                             # in H2 scope
     @parser.parse('=== foo ] bar ===').should == "<h3>foo ] bar</h3>\n"                           # in H3 scope
index fcb96af1ebf3faa62463a082c3fa38663aeefe25..1364df34d1b812a98102b474a117f30110d19820 100644 (file)
@@ -186,14 +186,14 @@ describe Wikitext::Parser, 'with large slab of input text' do
       syntax as you can see.</pre>
       </blockquote>
       <h2>another heading</h2>
-      <p>paragraph within <em>multiple <strong>styles</strong></em> and <tt>tt span</tt></p>
+      <p>paragraph within <em>multiple <strong>styles</strong></em> and <code>tt span</code></p>
       <p>similar, but with <strong>styles in <em>different</em> order</strong></p>
       <p>again, a <strong>different <em>order</em></strong></p>
       <ul>
         <li>list item 1 [<a href="http://google.com/" class="external">http://google.com/</a> unterminated
           <ul>
             <li>nested list item 1 with [[bad link</li>
-            <li>nested list item 2 with unclosed <tt>span</tt></li>
+            <li>nested list item 2 with unclosed <code>span</code></li>
             <li>nested list item 3</li>
           </ul>
         </li>
@@ -216,7 +216,7 @@ describe Wikitext::Parser, 'with large slab of input text' do
           <li>a</li>
           <li>list</li>
         </ul>
-        <p>And here is a link to <a href="/wiki/something">something</a>, and some <em>other</em> <tt>styled</tt> <strong>spans</strong>.</p>
+        <p>And here is a link to <a href="/wiki/something">something</a>, and some <em>other</em> <code>styled</code> <strong>spans</strong>.</p>
         <blockquote>
           <p>Finally we have a nested blockquote.</p>
           <ol>
index 489ebacd4e47ad814dc68cc10c29f488c7cee14d..c3a1c47c2f8ba77f089de3aee7b0ad9c75e0ea1a 100644 (file)
@@ -34,7 +34,7 @@ describe Wikitext::Parser, 'internal links (space to underscore off)' do
     @parser.parse("foo '']]'' bar").should == "<p>foo <em>]]</em> bar</p>\n"                        # in EM scope
     @parser.parse("foo ''']]''' bar").should == "<p>foo <strong>]]</strong> bar</p>\n"              # in STRONG scope
     @parser.parse("foo ''''']]''''' bar").should == "<p>foo <strong><em>]]</em></strong> bar</p>\n" # in STRONG_EM scope
-    @parser.parse('foo <tt>]]</tt> bar').should == "<p>foo <tt>]]</tt> bar</p>\n"                   # in TT scope
+    @parser.parse('foo <tt>]]</tt> bar').should == "<p>foo <code>]]</code> bar</p>\n"               # in TT scope
     @parser.parse('= foo ]] bar =').should == "<h1>foo ]] bar</h1>\n"                               # in H1 scope
     @parser.parse('== foo ]] bar ==').should == "<h2>foo ]] bar</h2>\n"                             # in H2 scope
     @parser.parse('=== foo ]] bar ===').should == "<h3>foo ]] bar</h3>\n"                           # in H3 scope
@@ -314,12 +314,12 @@ describe Wikitext::Parser, 'internal links (space to underscore off)' do
     end
 
     it 'should allow tt markup in the custom link text' do
-      expected = %Q{<p><a href="/wiki/foo">bar <tt>baz</tt></a></p>\n}
+      expected = %Q{<p><a href="/wiki/foo">bar <code>baz</code></a></p>\n}
       @parser.parse('[[foo|bar <tt>baz</tt>]]').should == expected
     end
 
     it 'should automatically close unclosed tt markup in the custom link text' do
-      expected = %Q{<p><a href="/wiki/foo">bar <tt>baz</tt></a></p>\n}
+      expected = %Q{<p><a href="/wiki/foo">bar <code>baz</code></a></p>\n}
       @parser.parse('[[foo|bar <tt>baz]]').should == expected
     end
 
@@ -579,7 +579,7 @@ describe Wikitext::Parser, 'internal links (space to underscore on)' do
     @parser.parse("foo '']]'' bar").should == "<p>foo <em>]]</em> bar</p>\n"                        # in EM scope
     @parser.parse("foo ''']]''' bar").should == "<p>foo <strong>]]</strong> bar</p>\n"              # in STRONG scope
     @parser.parse("foo ''''']]''''' bar").should == "<p>foo <strong><em>]]</em></strong> bar</p>\n" # in STRONG_EM scope
-    @parser.parse('foo <tt>]]</tt> bar').should == "<p>foo <tt>]]</tt> bar</p>\n"                   # in TT scope
+    @parser.parse('foo <tt>]]</tt> bar').should == "<p>foo <code>]]</code> bar</p>\n"               # in TT scope
     @parser.parse('= foo ]] bar =').should == "<h1>foo ]] bar</h1>\n"                               # in H1 scope
     @parser.parse('== foo ]] bar ==').should == "<h2>foo ]] bar</h2>\n"                             # in H2 scope
     @parser.parse('=== foo ]] bar ===').should == "<h3>foo ]] bar</h3>\n"                           # in H3 scope
@@ -854,12 +854,12 @@ describe Wikitext::Parser, 'internal links (space to underscore on)' do
     end
 
     it 'should allow tt markup in the custom link text' do
-      expected = %Q{<p><a href="/wiki/foo">bar <tt>baz</tt></a></p>\n}
+      expected = %Q{<p><a href="/wiki/foo">bar <code>baz</code></a></p>\n}
       @parser.parse('[[foo|bar <tt>baz</tt>]]').should == expected
     end
 
     it 'should automatically close unclosed tt markup in the custom link text' do
-      expected = %Q{<p><a href="/wiki/foo">bar <tt>baz</tt></a></p>\n}
+      expected = %Q{<p><a href="/wiki/foo">bar <code>baz</code></a></p>\n}
       @parser.parse('[[foo|bar <tt>baz]]').should == expected
     end
 
index 4f70ed24cf27d87e4dd8c9e070b3059f81fc0aca..0abb98649d17d502fb17dfe2323e31630c23f24a 100644 (file)
@@ -420,7 +420,7 @@ describe Wikitext::Parser, 'parsing PRE_START/PRE_END blocks' do
 
     # `
     expected = dedent <<-END
-      <p>hello <tt>my </tt></p>
+      <p>hello <code>my </code></p>
       <pre>world</pre>
     END
     @parser.parse("hello `my <pre>world</pre>").should == expected
@@ -448,7 +448,7 @@ describe Wikitext::Parser, 'parsing PRE_START/PRE_END blocks' do
 
     # <tt>
     expected = dedent <<-END
-      <p>hello <tt>my </tt></p>
+      <p>hello <code>my </code></p>
       <pre>world</pre>
     END
     @parser.parse("hello <tt>my <pre>world</pre>").should == expected
index 1a7c2d7df723f5aecb0a04ae0c601bd724ee1245..514974dc33cd5e5311d9cc25043f8a5e8c7284e4 100644 (file)
@@ -31,21 +31,23 @@ describe Wikitext::Parser, 'parsing <tt> spans' do
   end
 
   it 'should recognize paired <tt> and </tt> tags' do
-    @parser.parse('foo <tt>bar</tt> baz').should == "<p>foo <tt>bar</tt> baz</p>\n"
+    # note how in version 2.0 and above, we output <code> tags instead of <tt>
+    # tags, seeing as the latter have been removed from HTML5
+    @parser.parse('foo <tt>bar</tt> baz').should == "<p>foo <code>bar</code> baz</p>\n"
   end
 
   it 'should recognize <tt> tags case-insensitively' do
-    @parser.parse('foo <TT>bar</tT> baz').should == "<p>foo <tt>bar</tt> baz</p>\n"
-    @parser.parse('foo <tT>bar</Tt> baz').should == "<p>foo <tt>bar</tt> baz</p>\n"
-    @parser.parse('foo <Tt>bar</TT> baz').should == "<p>foo <tt>bar</tt> baz</p>\n"
+    @parser.parse('foo <TT>bar</tT> baz').should == "<p>foo <code>bar</code> baz</p>\n"
+    @parser.parse('foo <tT>bar</Tt> baz').should == "<p>foo <code>bar</code> baz</p>\n"
+    @parser.parse('foo <Tt>bar</TT> baz').should == "<p>foo <code>bar</code> baz</p>\n"
   end
 
   it 'should automatically insert missing closing tags' do
-    @parser.parse('foo <tt>bar').should == "<p>foo <tt>bar</tt></p>\n"
+    @parser.parse('foo <tt>bar').should == "<p>foo <code>bar</code></p>\n"
   end
 
   it 'should automatically close unclosed spans upon hitting newline' do
-    @parser.parse("foo <tt>bar\nbaz").should == "<p>foo <tt>bar</tt> baz</p>\n"
+    @parser.parse("foo <tt>bar\nbaz").should == "<p>foo <code>bar</code> baz</p>\n"
   end
 
   it 'should convert unexpected closing tags into entities' do
@@ -53,11 +55,11 @@ describe Wikitext::Parser, 'parsing <tt> spans' do
   end
 
   it 'should handle (illegal) nested <tt> spans' do
-    @parser.parse('foo <tt>bar <tt>inner</tt></tt> baz').should == "<p>foo <tt>bar &lt;tt&gt;inner</tt>&lt;/tt&gt; baz</p>\n"
+    @parser.parse('foo <tt>bar <tt>inner</tt></tt> baz').should == "<p>foo <code>bar &lt;tt&gt;inner</code>&lt;/tt&gt; baz</p>\n"
   end
 
   it 'should handle (illegal) interleaved spans' do
-    @parser.parse("foo <tt>bar '''inner</tt> baz'''").should == "<p>foo <tt>bar <strong>inner</strong></tt> baz<strong></strong></p>\n"
+    @parser.parse("foo <tt>bar '''inner</tt> baz'''").should == "<p>foo <code>bar <strong>inner</strong></code> baz<strong></strong></p>\n"
   end
 
   it 'should have no effect inside <pre> blocks' do
@@ -69,7 +71,7 @@ describe Wikitext::Parser, 'parsing <tt> spans' do
   end
 
   it 'should have no effect if a backtick span is already open' do
-    @parser.parse('foo `<tt>bar</tt>` baz').should == "<p>foo <tt>&lt;tt&gt;bar&lt;/tt&gt;</tt> baz</p>\n"
+    @parser.parse('foo `<tt>bar</tt>` baz').should == "<p>foo <code>&lt;tt&gt;bar&lt;/tt&gt;</code> baz</p>\n"
   end
 end
 
@@ -79,19 +81,19 @@ describe Wikitext::Parser, 'parsing backtick spans' do
   end
 
   it 'should recognize paired backticks' do
-    @parser.parse('foo `bar` baz').should == "<p>foo <tt>bar</tt> baz</p>\n"
+    @parser.parse('foo `bar` baz').should == "<p>foo <code>bar</code> baz</p>\n"
   end
 
   it 'should automatically insert missing closing backtick' do
-    @parser.parse('foo `bar').should == "<p>foo <tt>bar</tt></p>\n"
+    @parser.parse('foo `bar').should == "<p>foo <code>bar</code></p>\n"
   end
 
   it 'should automatically close unclosed spans upon hitting newline' do
-    @parser.parse("foo `bar\nbaz").should == "<p>foo <tt>bar</tt> baz</p>\n"
+    @parser.parse("foo `bar\nbaz").should == "<p>foo <code>bar</code> baz</p>\n"
   end
 
   it 'should handle (illegal) interleaved spans' do
-    @parser.parse("foo `bar '''inner` baz'''").should == "<p>foo <tt>bar <strong>inner</strong></tt> baz<strong></strong></p>\n"
+    @parser.parse("foo `bar '''inner` baz'''").should == "<p>foo <code>bar <strong>inner</strong></code> baz<strong></strong></p>\n"
   end
 
   it 'should have no effect inside <pre> blocks' do
@@ -103,7 +105,7 @@ describe Wikitext::Parser, 'parsing backtick spans' do
   end
 
   it 'should have no effect if a <tt> span is already open' do
-    @parser.parse('foo <tt>`bar`</tt> baz').should == "<p>foo <tt>`bar`</tt> baz</p>\n"
+    @parser.parse('foo <tt>`bar`</tt> baz').should == "<p>foo <code>`bar`</code> baz</p>\n"
   end
 end
 
index b05fa291e828524b13baf35ec8ac1d5f9f6b7485..7dad24f1cc292967dc2d99d8a5ec709fa17cacad 100644 (file)
@@ -223,7 +223,7 @@ describe Wikitext::Parser, 'parsing unordered lists' do
     END
     expected = dedent <<-END
       <ul>
-        <li><tt>hello</tt></li>
+        <li><code>hello</code></li>
         <li>world</li>
       </ul>
     END
@@ -237,7 +237,7 @@ describe Wikitext::Parser, 'parsing unordered lists' do
     END
     expected = dedent <<-END
       <ul>
-        <li><tt>hello</tt></li>
+        <li><code>hello</code></li>
         <li>world</li>
       </ul>
     END