Update ronnjs (fix rendering of html self-closing tags)
authorJérémy Lal <kapouer@melix.org>
Wed, 14 Jul 2010 12:10:17 +0000 (14:10 +0200)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 14 Jul 2010 16:52:59 +0000 (09:52 -0700)
tools/ronnjs/lib/ext/markdown.js
tools/ronnjs/lib/ronn.js

index f46f595..4c610f9 100644 (file)
@@ -1252,11 +1252,12 @@ expose.renderJsonML = function( jsonml, options ) {
   options = options || {};
   // include the root element in the rendered output?
   options.root = options.root || false;
+  options.xhtml = options.xhtml || false;
 
   var content = [];
 
   if ( options.root ) {
-    content.push( render_tree( jsonml ) );
+    content.push( render_tree( jsonml, options.xhtml ) );
   }
   else {
     jsonml.shift(); // get rid of the tag
@@ -1265,14 +1266,14 @@ expose.renderJsonML = function( jsonml, options ) {
     }
 
     while ( jsonml.length ) {
-      content.push( render_tree( jsonml.shift() ) );
+      content.push( render_tree( jsonml.shift(), options.xhtml ) );
     }
   }
 
-  return content.join( "\n" ).replace( /\n+$/, "" );
+  return content.join( "\n\n" );
 }
 
-function render_tree( jsonml ) {
+function render_tree( jsonml, xhtml ) {
   // basic case
   if ( typeof jsonml === "string" ) {
     return jsonml.replace( /&/g, "&amp;" )
@@ -1289,24 +1290,25 @@ function render_tree( jsonml ) {
   }
 
   while ( jsonml.length ) {
-    content.push( arguments.callee( jsonml.shift() ) );
+    content.push( arguments.callee( jsonml.shift(), xhtml ) );
   }
 
   var tag_attrs = "";
   for ( var a in attributes ) {
     tag_attrs += " " + a + '="' + attributes[ a ] + '"';
   }
-
-  var newlinetab = "\n  ",
-      newline = "\n";
-
-  if ( ~["em", "strong", "img", "br", "a"].indexOf( tag ) ) {
-    newlinetab = "";
-    newline = "";
-  }
-
+  
+  // if xhtml, self-close empty tags
   // be careful about adding whitespace here for inline elements
-  return "<"+ tag + tag_attrs + ">" + newlinetab + content.join( "" ).replace( /\n$/, "" ).replace( /\n/g, "\n  " ) + newline + "</" + tag + ">" + newline;
+  var markup = "<"+ tag + tag_attrs;
+  var contentstr = content.join( "" );
+  if ( xhtml && contentstr.length == 0 ) {
+    markup +=  " />";
+  }
+  else {
+    markup += ">" + contentstr + "</" + tag + ">";
+  }
+  return markup;
 }
 
 function convert_tree_to_html( tree, references ) {
index 884d91c..aadcb3d 100644 (file)
@@ -267,11 +267,11 @@ exports.Ronn = function(text, version, manual, date) {
 
        function toHTML(node) {
                // problème ici : les & sont remplacés par des &amp;
-               return md.renderJsonML(node, {root:true});
+               return md.renderJsonML(node, {root:true, xhtml:true});
        }
 
        function toHTMLfragment(node) {
-               return md.renderJsonML(node);
+               return md.renderJsonML(node, {xhtml:true});
        }
 
        function comment(out, str) {