changeset 800:dcd30b0ba711

Added --xml option to command 'ddoc'.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 01 Mar 2008 17:58:23 +0100
parents fd719161e743
children c39667f1e814
files trunk/src/TypeRules.d trunk/src/cmd/DDoc.d trunk/src/cmd/DDocXML.d trunk/src/cmd/Generate.d trunk/src/config.d trunk/src/main.d
diffstat 6 files changed, 115 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/TypeRules.d	Sat Mar 01 18:04:29 2008 +0200
+++ b/trunk/src/TypeRules.d	Sat Mar 01 17:58:23 2008 +0100
@@ -31,7 +31,7 @@
   "cfloat", "cdouble", "creal"/+, "void"+/
 ];
 
-static const string[] unaExpressions = [
+static const string[] unaryExpressions = [
   "!x",
   "&x",
   "~x",
@@ -43,7 +43,7 @@
   "x--",
 ];
 
-static const string[] binExpressions = [
+static const string[] binaryExpressions = [
   "x!<>=y",
   "x!<>y",
   "x!<=y",
@@ -72,7 +72,7 @@
   "x,y"
 ];
 
-char[] genBinExpArray(char[] expression)
+char[] genBinaryExpArray(char[] expression)
 {
   char[] result = "[\n";
   foreach (t1; basicTypes)
@@ -86,8 +86,24 @@
   result[result.length-1] = ']'; // Overwrite last comma.
   return result;
 }
+// pragma(msg, mixin(genBinaryExpArray("x%y")).stringof);
 
-char[] genUnaExpArray(char[] expression)
+char[] genBinaryExpsArray()
+{
+  char[] result = "[\n";
+  foreach (expression; binaryExpressions[0..42])
+  {
+//     pragma(msg, "asd");
+    result ~= genBinaryExpArray(expression)/+ ~ ",\n"+/;
+    result ~= ",\n";
+  }
+  result[result.length-2] = ']';
+  return result;
+}
+
+// pragma(msg, mixin(genBinaryExpsArray()).stringof);
+
+char[] genUnaryExpArray(char[] expression)
 {
   char[] result = "[\n";
   foreach (t1; basicTypes)
@@ -96,4 +112,67 @@
   return result;
 }
 
-// pragma(msg, mixin(genBinExpArray("x+y")).stringof);
+char[] genUnaryExpsArray()
+{
+  char[] result = "[\n";
+  foreach (expression; unaryExpressions)
+    result ~= genUnaryExpArray(expression) ~ ",\n";
+  result[result.length-2] = ']';
+  return result;
+}
+
+// pragma(msg, mixin(genUnaryExpsArray()).stringof);
+
+void genHTMLTypeRulesTables()
+{
+  auto unaryExpsResults = mixin(genUnaryExpsArray());
+//   auto binaryExpsResults = mixin(genBinaryExpsArray());
+
+  Stdout(
+    `<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">`\n
+    `<html>`\n
+    `<head>`\n
+    `  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">`\n
+    `  <link href="" rel="stylesheet" type="text/css">`\n
+    `</head>`\n
+    `<body>`\n
+  );
+
+  Stdout.format("<table>\n<tr><th colspan=\"{}\">Unary Expressions</th></tr>", unaryExpressions.length);
+  Stdout("<tr><td><!--typecol--></td>");
+  foreach (unaryExpression; unaryExpressions)
+    Stdout.format("<td>{}</td>", unaryExpression);
+  Stdout("</tr>\n");
+  foreach (i, basicType; basicTypes)
+  {
+    Stdout.format("<tr>\n<td>{}</td>", basicType);
+    foreach (unaryExpResults; unaryExpsResults)
+    {
+      assert(unaryExpResults.length == basicTypes.length);
+      Stdout.format("<td>{}</td>", unaryExpResults[i]);
+    }
+    Stdout("\n<tr>\n");
+  }
+  Stdout("</table>\n");
+
+  foreach (binaryExpression; binaryExpressions)
+  {
+    Stdout.format("<table>\n<tr><th colspan=\"{}\">Binary Expression</th></tr>", basicTypes.length);
+    Stdout.format("<tr><td>{}</td>", binaryExpression);
+    Stdout("\n<tr>\n");
+    foreach (i, basicType; basicTypes)
+    {
+      Stdout.format("<tr>\n<td>{}</td>", basicType);
+//       foreach (basicType; basicTypes)
+      {
+      }
+      Stdout("\n<tr>\n");
+    }
+    Stdout("</table>\n");
+  }
+
+  Stdout(
+    "\n</body>"
+    "\n</html>"
+  );
+}
--- a/trunk/src/cmd/DDoc.d	Sat Mar 01 18:04:29 2008 +0200
+++ b/trunk/src/cmd/DDoc.d	Sat Mar 01 17:58:23 2008 +0100
@@ -36,8 +36,8 @@
 
 /// Executes the doc generation command.
 void execute(string[] filePaths, string destDir, string[] macroPaths,
-             bool incUndoc, bool verbose, CompilationContext context,
-             InfoManager infoMan)
+             bool writeXML, bool incUndoc, bool verbose,
+             CompilationContext context, InfoManager infoMan)
 {
   // Parse macro files.
   MacroTable mtable;
@@ -52,7 +52,8 @@
 //   foreach (k, v; mtable.table)
 //     Stdout(k)("=")(v.text);
 
-  auto tokenHL = new TokenHighlighter(infoMan); // For DDoc code sections.
+  // For DDoc code sections.
+  auto tokenHL = new TokenHighlighter(infoMan, writeXML == false);
 
   // Process D files.
   foreach (filePath; filePaths)
@@ -69,7 +70,7 @@
 
     // Generate documentation.
     auto dest = new FilePath(destDir);
-    dest.append(mod.getFQN() ~ ".html");
+    dest.append(mod.getFQN() ~ (writeXML ? ".xml" : ".html"));
 
     InfoManager infoMan2; // Collects warnings from the macro expander.
     if (verbose)
@@ -78,14 +79,15 @@
       infoMan2 = new InfoManager();
     }
 
-    writeDocFile(dest.toString(), mod, mtable, incUndoc, tokenHL, infoMan2);
+    writeDocFile(dest.toString(), mod, mtable, writeXML, incUndoc, tokenHL, infoMan2);
 
     if (infoMan2)
       infoMan ~= infoMan2.info;
   }
 }
 
-void writeDocFile(string dest, Module mod, MacroTable mtable, bool incUndoc,
+void writeDocFile(string dest, Module mod, MacroTable mtable,
+                  bool writeXML, bool incUndoc,
                   TokenHighlighter tokenHL, InfoManager infoMan)
 {
   // Create a macro environment for this module.
@@ -94,15 +96,19 @@
   // MODPATH is not in the specs.
   mtable.insert("MODPATH", mod.getFQNPath() ~ "." ~ mod.fileExtension());
   mtable.insert("TITLE", mod.getFQN());
-  mtable.insert("DOCFILENAME", mod.getFQN() ~ ".html");
+  mtable.insert("DOCFILENAME", mod.getFQN() ~ (writeXML ? ".xml" : ".html"));
   auto timeStr = Time.toString();
   mtable.insert("DATETIME", timeStr);
   mtable.insert("YEAR", Time.year(timeStr));
 
-  auto doc = new DDocXMLEmitter(mod, mtable, incUndoc, tokenHL);
-  doc.emit();
+  DDocEmitter docEmitter;
+  if (writeXML)
+    docEmitter = new DDocXMLEmitter(mod, mtable, incUndoc, tokenHL);
+  else
+    docEmitter = new DDocEmitter(mod, mtable, incUndoc, tokenHL);
+  docEmitter.emit();
   // Set BODY macro to the text produced by the DDocEmitter.
-  mtable.insert("BODY", doc.text);
+  mtable.insert("BODY", docEmitter.text);
   // Do the macro expansion pass.
   auto fileText = MacroExpander.expand(mtable, "$(DDOC)", mod.filePath, infoMan);
 // fileText ~= "\n<pre>\n" ~ doc.text ~ "\n</pre>";
--- a/trunk/src/cmd/DDocXML.d	Sat Mar 01 18:04:29 2008 +0200
+++ b/trunk/src/cmd/DDocXML.d	Sat Mar 01 17:58:23 2008 +0100
@@ -1,5 +1,5 @@
 /++
-  Author: Aziz Köksal & Jari-Matti Mäkelä
+  Authors: Aziz Köksal & Jari-Matti Mäkelä
   License: GPL3
 +/
 module cmd.DDocXML;
--- a/trunk/src/cmd/Generate.d	Sat Mar 01 18:04:29 2008 +0200
+++ b/trunk/src/cmd/Generate.d	Sat Mar 01 17:58:23 2008 +0100
@@ -371,7 +371,10 @@
   TagMap tags;
   this(InfoManager infoMan, bool useHTML = true)
   {
-    auto map = TagMapLoader(infoMan).load(GlobalSettings.htmlMapFile);
+    string filePath = GlobalSettings.htmlMapFile;
+    if (!useHTML)
+      filePath = GlobalSettings.xmlMapFile;
+    auto map = TagMapLoader(infoMan).load(filePath);
     tags = new TagMap(map);
   }
 
--- a/trunk/src/config.d	Sat Mar 01 18:04:29 2008 +0200
+++ b/trunk/src/config.d	Sat Mar 01 17:58:23 2008 +0100
@@ -14,7 +14,7 @@
 var import_paths = []; /// E.g.: ["src/", "import/"]
 
 /// DDoc macro file paths.
-var ddoc_files = ["predefined_xml.ddoc"]; /// E.g.: ["src/mymacros.ddoc", "othermacros.ddoc"]
+var ddoc_files = ["predefined.ddoc"]; /// E.g.: ["src/mymacros.ddoc", "othermacros.ddoc"]
 
 var xml_map = "xml_map.d";
 var html_map = "html_map.d";
--- a/trunk/src/main.d	Sat Mar 01 18:04:29 2008 +0200
+++ b/trunk/src/main.d	Sat Mar 01 17:58:23 2008 +0100
@@ -108,6 +108,7 @@
     auto macroPaths = GlobalSettings.ddocFilePaths;
     char[][] filePaths;
     bool incUndoc;
+    bool writeXML;
     bool verbose;
     // Parse arguments.
     auto context = newCompilationContext();
@@ -115,6 +116,8 @@
     {
       if (parseDebugOrVersion(arg, context))
       {}
+      else if (arg == "--xml")
+        writeXML = true;
       else if (arg == "-i")
         incUndoc = true;
       else if (arg == "-v")
@@ -127,7 +130,8 @@
 
     infoMan = new InfoManager();
     // Execute command.
-    cmd.DDoc.execute(filePaths, destination, macroPaths, incUndoc, verbose, context, infoMan);
+    cmd.DDoc.execute(filePaths, destination, macroPaths, writeXML,
+                     incUndoc, verbose, context, infoMan);
     infoMan.hasInfo && printErrors(infoMan);
     break;
   case "gen", "generate":
@@ -303,6 +307,9 @@
   case "?", "help":
     printHelp(args.length >= 3 ? args[2] : "");
     break;
+  // case "typerules":
+  //   genHTMLTypeRulesTables();
+  //   break;
   default:
   }
 }
@@ -448,6 +455,7 @@
   Files with the extension .ddoc are recognized as macro definition files.
 
 Options:
+  --xml            : write XML instead of HTML documents
   -i               : include undocumented symbols
   -v               : verbose output