diff mde/lookup/Translation.d @ 79:61ea26abe4dd

Moved mde/mergetag/parse/parse(To/From) to mde/mergetag/(de)serialize. Implemented (de)serialization of structs.
author Diggory Hardy <diggory.hardy@gmail.com>
date Tue, 05 Aug 2008 11:51:51 +0100
parents 25cb7420dc91
children d8fccaa45d5f
line wrap: on
line diff
--- a/mde/lookup/Translation.d	Tue Jul 29 18:14:53 2008 +0100
+++ b/mde/lookup/Translation.d	Tue Aug 05 11:51:51 2008 +0100
@@ -44,7 +44,7 @@
 import mde.mergetag.DataSet;
 import mde.mergetag.Reader;
 import mde.mergetag.exception;
-import mde.mergetag.parse.parseTo;
+import mde.mergetag.deserialize;
 
 import tango.util.log.Log : Log, Logger;
 
@@ -68,7 +68,7 @@
     char[] entry (char[] id) {
         Entry* p = id in entries;
         if (p) {
-            return p.str;
+            return p.name;
         } else {
             return id;
         }
@@ -78,7 +78,7 @@
         Entry* p = id in entries;
         if (p) {
             description = p.desc;
-            return p.str;
+            return p.name;
         } else {
             return id;
         }
@@ -91,7 +91,7 @@
             return *p;
         } else {
             Entry ret;
-            ret.str  = id;
+            ret.name = id;
             return ret;
         }
     }
@@ -117,7 +117,7 @@
         
         IReader reader;
         try {
-            reader = dataDir.makeMTReader ("L10n/"~name, PRIORITY.HIGH_LOW);
+            reader = dataDir.makeMTReader (name, PRIORITY.HIGH_LOW);
             /* Note: we don't want to load every translation section depended on to its own class
             * instance, since we want to merge them. So make every mergetag section use the same
             * instance. */
@@ -167,22 +167,14 @@
     */
     void addTag (char[] tp, ID id, char[] dt) {
         if (tp == "entry") {
-            char[][] fields = split (stripBrackets (dt));
+            // If the tag already exists, don't replace it
+            if (cast(char[]) id in entries) return;
             
-            if (fields.length < 1) {
-                // This tag is invalid, but this fact doesn't need to be reported elsewhere:
+            Entry entry = deserialize!(Entry) (dt);
+            if (entry.name is null) {   // This tag is invalid; ignore it
                 logger.error ("For name "~name~", L10n "~L10n~": tag with ID "~cast(char[])id~" has no data");
                 return;
             }
-            // If the tag already exists, don't replace it
-            if (cast(char[]) id in entries) return;
-            
-            Entry entry;
-            entry.str = parseTo!(char[]) (fields[0]);
-            
-            if (fields.length >= 2)
-                entry.desc = parseTo!(char[]) (fields[1]);
-            
             entries[cast(char[]) id] = entry;
         } else if (tp == "char[][]") {
             if (id == cast(ID)"depends") depends = cast(ID[]) parseTo!(char[][]) (dt);
@@ -197,7 +189,7 @@
      * Note that although each entry also has a version field, this is not loaded for general use.
      */
     struct Entry {
-        char[] str;         // The translated string
+        char[] name;        // The translated string
         char[] desc;        // An optional description
     }
     
@@ -236,7 +228,7 @@
         char[] currentL10n = miscOpts.L10n;
         miscOpts.L10n = "test-1";
         
-        Translation transl = load ("i18nUnitTest");
+        Translation transl = load ("unittest/Translation");
         
         // Simple get-string, check dependancy's entry doesn't override
         assert (transl.entry ("Str1") == "Test 1");