Added unescaped pragma.

This commit is contained in:
Justin Hileman
2010-04-30 00:09:27 -04:00
parent 9f8ff0d845
commit a834ef7845
5 changed files with 49 additions and 3 deletions
+24 -3
View File
@@ -27,6 +27,18 @@ class Mustache {
const PRAGMA_DOT_NOTATION = 'DOT-NOTATION'; const PRAGMA_DOT_NOTATION = 'DOT-NOTATION';
/**
* The {{%UNESCAPED}} pragma swaps the meaning of the {{normal}} and {{{unescaped}}}
* Mustache tags. That is, once this pragma is activated the {{normal}} tag will not be
* escaped while the {{{unescaped}}} tag will be escaped.
*
* Pragmas apply only to the current template. Partials, even those included after the
* {{%UNESCAPED}} call, will need their own pragma declaration.
*
* his may be useful in non-HTML Mustache situations.
*/
const PRAGMA_UNESCAPED = 'UNESCAPED';
protected $tagRegEx; protected $tagRegEx;
protected $template = ''; protected $template = '';
@@ -35,7 +47,8 @@ class Mustache {
protected $pragmas = array(); protected $pragmas = array();
protected $pragmasImplemented = array( protected $pragmasImplemented = array(
self::PRAGMA_DOT_NOTATION self::PRAGMA_DOT_NOTATION,
self::PRAGMA_UNESCAPED
); );
/** /**
@@ -310,11 +323,19 @@ class Mustache {
break; break;
case '{': case '{':
case '&': case '&':
return $this->renderUnescaped($tag_name, $context); if ($this->hasPragma(self::PRAGMA_UNESCAPED)) {
return $this->renderEscaped($tag_name, $context);
} else {
return $this->renderUnescaped($tag_name, $context);
}
break; break;
case '': case '':
default: default:
return $this->renderEscaped($tag_name, $context); if ($this->hasPragma(self::PRAGMA_UNESCAPED)) {
return $this->renderUnescaped($tag_name, $context);
} else {
return $this->renderEscaped($tag_name, $context);
}
break; break;
} }
} }
@@ -0,0 +1,5 @@
<?php
class PragmaUnescaped extends Mustache {
protected $vs = 'Bear > Shark';
}
@@ -0,0 +1,3 @@
{{%UNESCAPED}}
{{vs}}
{{{vs}}}
@@ -0,0 +1,2 @@
Bear > Shark
Bear &gt; Shark
+15
View File
@@ -0,0 +1,15 @@
<?php
require_once '../Mustache.php';
require_once 'PHPUnit/Framework.php';
class MustachePragmaUnescapedTest extends PHPUnit_Framework_TestCase {
public function testPragmaUnescaped() {
$m = new Mustache(null, array('title' => 'Bear > Shark'));
$this->assertEquals('Bear > Shark', $m->render('{{%UNESCAPED}}{{title}}'));
$this->assertEquals('Bear &gt; Shark', $m->render('{{%UNESCAPED}}{{{title}}}'));
}
}