[Checkins] SVN: Sandbox/malthe/chameleon.core/ Added support for translating dynamic body text.

Malthe Borch mborch at gmail.com
Fri Oct 3 21:46:56 EDT 2008


Log message for revision 91722:
  Added support for translating dynamic body text.

Changed:
  U   Sandbox/malthe/chameleon.core/CHANGES.txt
  U   Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py

-=-
Modified: Sandbox/malthe/chameleon.core/CHANGES.txt
===================================================================
--- Sandbox/malthe/chameleon.core/CHANGES.txt	2008-10-04 01:23:45 UTC (rev 91721)
+++ Sandbox/malthe/chameleon.core/CHANGES.txt	2008-10-04 01:46:56 UTC (rev 91722)
@@ -4,6 +4,9 @@
 head
 ~~~~
 
+- Added support for translating dynamic body text (used in
+  interpolation expressions). [malthe]
+
 - Added support for macros prebound to keyword arguments. [malthe]
 
 1.0b1 (released 2/10/2008)

Modified: Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py
===================================================================
--- Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py	2008-10-04 01:23:45 UTC (rev 91721)
+++ Sandbox/malthe/chameleon.core/src/chameleon/core/translation.py	2008-10-04 01:46:56 UTC (rev 91722)
@@ -246,6 +246,35 @@
                 
             _.append(clauses.Write(content))
 
+        # dynamic text
+        elif self.translate is not None and \
+                 True in map(lambda part: isinstance(part, types.expression), text):
+            if len(self.element):
+                raise ValueError(
+                    "Can't translate dynamic text block with elements in it.")
+                
+            subclauses = []
+            subclauses.append(clauses.Define(
+                types.declaration((self.symbols.out, self.symbols.write)),
+                types.template('%(init)s.initialize_stream()')))
+
+            for part in text:
+                if isinstance(part, types.expression):
+                    subclauses.append(clauses.Write(part))
+                else:
+                    part = part.strip().replace('  ', ' ').replace('\n', '')
+                    if part != "":
+                        subclauses.append(clauses.Out(part))
+
+            # attempt translation
+            subclauses.append(clauses.Assign(
+                self.translate_expression(
+                types.value('%(out)s.getvalue()'), 
+                default=None), self.symbols.tmp))
+
+            _.append(clauses.Group(subclauses))
+            _.append(clauses.Write(types.value(self.symbols.tmp)))
+
         # include
         elif self.include:
             # compute macro function arguments and create argument string



More information about the Checkins mailing list