changeset 674:6a934ff01b68

Added code to GermanTranslator to pluralize types if needed.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Fri, 18 Jan 2008 17:25:37 +0100
parents 64fec49651cf
children e7811328e6c7
files trunk/src/dil/translator/German.d
diffstat 1 files changed, 28 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/dil/translator/German.d	Fri Jan 18 16:44:20 2008 +0100
+++ b/trunk/src/dil/translator/German.d	Fri Jan 18 17:25:37 2008 +0100
@@ -19,13 +19,15 @@
 +/
 class GermanTranslator : DefaultVisitor
 {
-  Print!(char) put;
+  Print!(char) put; /// Output buffer.
+
+  char[] indent; /// Current indendation string.
+  char[] indentStep; /// Appended to indent at each indendation level.
 
-  char[] indent;
-  char[] indentStep;
+  Declaration inAggregate; /// Current aggregate.
+  Declaration inFunc; /// Current function.
 
-  Declaration inAggregate;
-  Declaration inFunc;
+  bool pluralize; /// Whether to use the plural in the next type.
 
   /++
     Construct a GermanTranslator.
@@ -279,26 +281,34 @@
 
   TypeNode visit(ArrayType n)
   {
+    char[] c1 = "s", c2 = "";
+    if (pluralize)
+      (pluralize = false), (c1 = "n"), (c2 = "s");
+    // Types after arrays should be in plural.
+    pluralize = true;
     if (n.assocType)
-      put("assoziatives Array von ");
+      put.format("assoziative{} Array{} von ", c1, c2);
 //       visitT(n.assocType);
     else if (n.e)
     {
       if (n.e2)
-        put("gescheibtes Array von ");
+        put.format("gescheibte{} Array{} von ", c1, c2);
       else
-        put("statisches Array von ");
+        put.format("statische{} Array{} von ", c1, c2);
 //       visitE(n.e), n.e2 && visitE(n.e2);
     }
     else
-      put("dynamisches Array von ");
+      put.format("dynamische{} Array{} von ", c1, c2);
     visitT(n.next);
     return n;
   }
 
   TypeNode visit(PointerType n)
   {
-    put("Zeiger auf "), visitT(n.next);
+    char[] c = "";
+    if (pluralize)
+      (pluralize = false), c = "n";
+    put.format("Zeiger{} auf ", c), visitT(n.next);
     return n;
   }
 
@@ -318,7 +328,14 @@
 
   TypeNode visit(IntegralType n)
   {
-    put(n.begin.srcText);
+    char[] c = "";
+    if (pluralize)
+    {
+      (pluralize = false), c = "s";
+      if (n.tok == TOK.Void) // Avoid pluralizing "void"
+        c = "";
+    }
+    put.format(n.begin.srcText, c);
     return n;
   }
 }