Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'hotfix/1.1.0'

  • Loading branch information...
commit cd6bfaefd30e13082780b3711c2aa4b92d146b1e 2 parents 6c752e1 + 417b139
@bobthecow authored
Showing with 28 additions and 7 deletions.
  1. +1 −1  .gitmodules
  2. +23 −2 Mustache.php
  3. +4 −4 examples/i18n/I18n.php
View
2  .gitmodules
@@ -1,3 +1,3 @@
[submodule "test/spec"]
path = test/spec
- url = http://github.com/mustache/spec.git
+ url = git://github.com/mustache/spec.git
View
25 Mustache.php
@@ -14,7 +14,7 @@
*/
class Mustache {
- const VERSION = '1.0.0';
+ const VERSION = '1.1.0';
const SPEC_VERSION = '1.1.2';
/**
@@ -30,6 +30,9 @@ class Mustache {
MustacheException::UNKNOWN_PRAGMA => true,
);
+ // Override the escaper function. Defaults to `htmlspecialchars`.
+ protected $_escape;
+
// Override charset passed to htmlentities() and htmlspecialchars(). Defaults to UTF-8.
protected $_charset = 'UTF-8';
@@ -84,6 +87,11 @@ class Mustache {
* Passing an $options array allows overriding certain Mustache options during instantiation:
*
* $options = array(
+ * // `escape` -- custom escaper callback; must be callable.
+ * 'escape' => function($text) {
+ * return htmlspecialchars($text, ENT_COMPAT, 'UTF-8');
+ * },
+ *
* // `charset` -- must be supported by `htmlspecialentities()`. defaults to 'UTF-8'
* 'charset' => 'ISO-8859-1',
*
@@ -127,6 +135,13 @@ public function __construct($template = null, $view = null, $partials = null, ar
* @return void
*/
protected function _setOptions(array $options) {
+ if (isset($options['escape'])) {
+ if (!is_callable($options['escape'])) {
+ throw new InvalidArgumentException('Mustache constructor "escape" option must be callable');
+ }
+ $this->_escape = $options['escape'];
+ }
+
if (isset($options['charset'])) {
$this->_charset = $options['charset'];
}
@@ -640,7 +655,13 @@ protected function _stringHasR($str) {
* @return string
*/
protected function _renderEscaped($tag_name, $leading, $trailing) {
- $rendered = htmlentities($this->_renderUnescaped($tag_name, '', ''), ENT_COMPAT, $this->_charset);
+ $value = $this->_renderUnescaped($tag_name, '', '');
+ if (isset($this->_escape)) {
+ $rendered = call_user_func($this->_escape, $value);
+ } else {
+ $rendered = htmlentities($value, ENT_COMPAT, $this->_charset);
+ }
+
return $leading . $rendered . $trailing;
}
View
8 examples/i18n/I18n.php
@@ -9,12 +9,12 @@ class I18n extends Mustache {
public $__ = array(__CLASS__, '__trans');
// A *very* small i18n dictionary :)
- private $dictionary = array(
+ private static $dictionary = array(
'Hello.' => 'Hola.',
'My name is {{ name }}.' => 'Me llamo {{ name }}.',
);
- public function __trans($text) {
- return isset($this->dictionary[$text]) ? $this->dictionary[$text] : $text;
+ public static function __trans($text) {
+ return isset(self::$dictionary[$text]) ? self::$dictionary[$text] : $text;
}
-}
+}
Please sign in to comment.
Something went wrong with that request. Please try again.