Author: dr
Date: Tue Feb 12 17:09:42 2008
New Revision: 7352
Log:
- Added an translation string extracter visitor to introspect which
translatable strings exist in a template.
Added:
trunk/TemplateTranslationTiein/src/visitors/
trunk/TemplateTranslationTiein/src/visitors/string_extracter.php (with
props)
trunk/TemplateTranslationTiein/tests/extracter.php (with props)
trunk/TemplateTranslationTiein/tests/test_files/
trunk/TemplateTranslationTiein/tests/test_files/test.ezt
Modified:
trunk/TemplateTranslationTiein/design/class_diagram.png
trunk/TemplateTranslationTiein/src/template_translation_autoload.php
trunk/TemplateTranslationTiein/tests/suite.php
Modified: trunk/TemplateTranslationTiein/design/class_diagram.png
==============================================================================
Binary files - no diff available.
Modified: trunk/TemplateTranslationTiein/src/template_translation_autoload.php
==============================================================================
--- trunk/TemplateTranslationTiein/src/template_translation_autoload.php
[iso-8859-1] (original)
+++ trunk/TemplateTranslationTiein/src/template_translation_autoload.php
[iso-8859-1] Tue Feb 12 17:09:42 2008
@@ -14,5 +14,6 @@
'ezcTemplateTranslationManagerNotConfiguredException' =>
'TemplateTranslationTiein/exceptions/manager_not_configured.php',
'ezcTemplateTranslationConfiguration' =>
'TemplateTranslationTiein/configuration.php',
'ezcTemplateTranslationProvider' =>
'TemplateTranslationTiein/provider.php',
+ 'ezcTemplateTranslationStringExtracter' =>
'TemplateTranslationTiein/visitors/string_extracter.php',
);
?>
Added: trunk/TemplateTranslationTiein/src/visitors/string_extracter.php
==============================================================================
--- trunk/TemplateTranslationTiein/src/visitors/string_extracter.php (added)
+++ trunk/TemplateTranslationTiein/src/visitors/string_extracter.php
[iso-8859-1] Tue Feb 12 17:09:42 2008
@@ -1,0 +1,110 @@
+<?php
+/**
+ * File containing the ezcTemplateTranslationStringExtracter class
+ *
+ * @package TemplateTranslation
+ * @version //autogen//
+ * @copyright Copyright (C) 2005-2008 eZ systems as. All rights reserved.
+ * @license http://ez.no/licenses/new_bsd New BSD License
+ * @access private
+ */
+/**
+ * A visiter that can be used to extract translatable strings from a template.
+ *
+ * Implements the ezcTemplateTstNodeVisiter interface for visiting the nodes
+ * and generating the appropriate ast nodes for them.
+ *
+ * @package TemplateTranslation
+ * @version //autogen//
+ * @access private
+ */
+class ezcTemplateTranslationStringExtracter extends ezcTemplateTstWalker
+{
+ /**
+ * Contains the active default translation context
+ *
+ * @var string
+ */
+ public $translationContext;
+
+ /**
+ * Contans an array of arrays, where the key is the context, and the value
an array of ezcTranslationData elements.
+ *
+ * @var array(string=>array(ezcTranslationData)
+ */
+ public $strings;
+
+ /**
+ * Initialize the transformer, after this send this object to the accept()
method on a node.
+ *
+ * @param ezcTemplateParser $parser The main parser object.
+ */
+ public function __construct( ezcTemplateParser $parser )
+ {
+ $this->parser = $parser;
+ $this->strings = array();
+ }
+
+ /**
+ * visitTranslationTstNode
+ *
+ * @param ezcTemplateTranslationTstNode $node
+ * @return ezcTemplateNopAstNode
+ */
+ public function visitTranslationTstNode( ezcTemplateTranslationTstNode
$node )
+ {
+ $string = $node->string->accept( $this )->value;
+ $comment = $node->comment ? $node->comment->accept( $this )->value :
null;
+ $file = realpath( $node->source->stream );
+ $line = $node->string->startCursor->line;
+ $column = $node->string->startCursor->column + 1;
+ // check for the translation context. If we have one, we use it. If we
+ // don't have one, we check whether there is one set through a
+ // tr_context block. If not, we throw an exception.
+ if ( $node->context !== null )
+ {
+ $context = $node->context->accept( $this )->value;
+ }
+ else
+ {
+ if ( $this->translationContext !== null )
+ {
+ $context = $this->translationContext;
+ }
+ else
+ {
+ throw new ezcTemplateParserException( $node->source,
$node->startCursor, $node->endCursor,
ezcTemplateSourceToTstErrorMessages::MSG_NO_TRANSLATION_CONTEXT );
+ }
+ }
+
+ $this->strings[$context][] = new ezcTranslationData( $string, $string,
$comment, ezcTranslationData::UNFINISHED, $file, $line, $column );
+ }
+
+ /**
+ * visitTranslationContextTstNode
+ *
+ * @param ezcTemplateTranslationContextTstNode $node
+ * @return ezcTemplateNopAstNode
+ */
+ public function visitTranslationContextTstNode(
ezcTemplateTranslationContextTstNode $node )
+ {
+ $this->translationContext = $node->context->value;
+ return new ezcTemplateNopAstNode();
+ }
+
+ /**
+ * Returns an array of translation datamaps indexed by context
+ *
+ * @return array(string=>ezcTranslation)
+ */
+ function getTranslation()
+ {
+ $ret = array();
+ foreach( $this->strings as $context => $data )
+ {
+ $ret[$context] = new ezcTranslation( $data );
+ }
+ return $ret;
+ }
+}
+?>
Propchange: trunk/TemplateTranslationTiein/src/visitors/string_extracter.php
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/TemplateTranslationTiein/tests/extracter.php
==============================================================================
--- trunk/TemplateTranslationTiein/tests/extracter.php (added)
+++ trunk/TemplateTranslationTiein/tests/extracter.php [iso-8859-1] Tue Feb 12
17:09:42 2008
@@ -1,0 +1,42 @@
+<?php
+/**
+ * @copyright Copyright (C) 2005-2008 eZ systems as. All rights reserved.
+ * @license http://ez.no/licenses/new_bsd New BSD License
+ * @version //autogentag//
+ * @filesource
+ * @package TemplateTranslationTiein
+ * @subpackage Tests
+ */
+
+/**
+ * @package TemplateTranslationTiein
+ * @subpackage Tests
+ */
+class ezcTemplateTranslationExtracterTest extends ezcTestCase
+{
+ function testExtracter()
+ {
+ $file = dirname( __FILE__ ) . '/test_files/test.ezt';
+ $source = new ezcTemplateSourceCode( $file, $file );
+ $source->load();
+
+ $parser = new ezcTemplateParser( $source, new ezcTemplate() );
+ $tst = $parser->parseIntoNodeTree();
+
+ $et = new ezcTemplateTranslationStringExtracter( $parser );
+ $eted = $tst->accept( $et );
+
+ $tr = $et->getTranslation();
+ self::assertEquals(
+ array( 'een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven',
'acht', 'negen', 'tien', 'elf' ),
+ array_keys( $this->readAttribute( $tr['test'], 'translationMap' )
)
+ );
+ }
+
+ public static function suite()
+ {
+ return new PHPUnit_Framework_TestSuite(
'ezcTemplateTranslationExtracterTest' );
+ }
+}
+
+?>
Propchange: trunk/TemplateTranslationTiein/tests/extracter.php
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/TemplateTranslationTiein/tests/suite.php
==============================================================================
--- trunk/TemplateTranslationTiein/tests/suite.php [iso-8859-1] (original)
+++ trunk/TemplateTranslationTiein/tests/suite.php [iso-8859-1] Tue Feb 12
17:09:42 2008
@@ -13,6 +13,7 @@
*/
require_once 'configuration.php';
require_once 'provider.php';
+require_once 'extracter.php';
/**
* @package TemplateTranslationTiein
@@ -27,6 +28,7 @@
$this->addTest( ezcTemplateTranslationConfigurationTest::suite() );
$this->addTest( ezcTemplateTranslationProviderTest::suite() );
+ $this->addTest( ezcTemplateTranslationExtracterTest::suite() );
}
public static function suite()
Added: trunk/TemplateTranslationTiein/tests/test_files/test.ezt
==============================================================================
--- trunk/TemplateTranslationTiein/tests/test_files/test.ezt (added)
+++ trunk/TemplateTranslationTiein/tests/test_files/test.ezt [iso-8859-1] Tue
Feb 12 17:09:42 2008
@@ -1,0 +1,40 @@
+{var $twee, $drie, $zes, $zeven, $acht, $elf}
+{tr_context "test"}
+
+{cache_block}
+{tr "een"}
+{/cache_block}
+
+{capture $twee}
+{tr "twee"}
+{/capture}
+
+{switch $drie}
+{case 3}{tr "drie"}{/case}
+{default}{tr "vier"}{/default}
+{/switch}
+
+{cache_block}
+{dynamic}
+{tr "vijf"}
+{/dynamic}
+{/cache_block}
+
+{foreach array() as $zes}
+{tr "zes"}
+{/foreach}
+
+{if $zeven}
+{tr "zeven"}
+{elseif $acht}
+{tr "acht"}
+{else}
+{tr "negen"}
+{/if}
+
+{tr "tien"}
+
+{while $elf}
+{tr "elf"}
+{delimiter}{tr "twaalf"}{/delimiter}
+{/while}
--
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components