Esempio n. 1
0
 public function create($usage, $template)
 {
     $_this = $this;
     $config = $this->parse($usage);
     if (!$template instanceof Template) {
         $template = new Template($template);
     }
     $template->replaceTokens('#\\{(?:[A-Z]+[A-Z_0-9]*|@[-\\w]+)\\}#', function ($m) use($config, $_this) {
         $tokenId = \substr($m[0], 1, -1);
         if ($tokenId[0] === '@') {
             return array('expression', $tokenId);
         }
         if (isset($config['tokens'][$tokenId])) {
             return array('expression', '@' . $config['tokens'][$tokenId]);
         }
         if ($tokenId === $config['passthroughToken']) {
             return array('passthrough');
         }
         if ($_this->isFilter($tokenId)) {
             throw new RuntimeException('Token {' . $tokenId . '} is ambiguous or undefined');
         }
         return array('expression', '$' . $tokenId);
     });
     $return = array('bbcode' => $config['bbcode'], 'bbcodeName' => $config['bbcodeName'], 'tag' => $config['tag']);
     $return['tag']->template = $template;
     return $return;
 }
 /**
  * @testdox saveChanges() updates the document's original template
  */
 public function testSaveChanges()
 {
     $template = new Template('<hr/>');
     $dom = $template->asDOM();
     $dom->documentElement->firstChild->setAttribute('id', 'x');
     $dom->saveChanges();
     $this->assertEquals('<hr id="x"/>', $template);
 }
Esempio n. 3
0
 /**
  * Create a BBCode and its underlying tag and template(s) based on its reference usage
  *
  * @param  string          $usage    BBCode usage, e.g. [B]{TEXT}[/b]
  * @param  string|Template $template BBCode's template
  * @return array                     An array containing three elements: 'bbcode', 'bbcodeName'
  *                                   and 'tag'
  */
 public function create($usage, $template)
 {
     // Parse the BBCode usage
     $config = $this->parse($usage);
     // Create a template object for manipulation
     if (!$template instanceof Template) {
         $template = new Template($template);
     }
     // Replace the passthrough token in the BBCode's template
     $template->replaceTokens('#\\{(?:[A-Z]+[A-Z_0-9]*|@[-\\w]+)\\}#', function ($m) use($config) {
         $tokenId = substr($m[0], 1, -1);
         // Acknowledge {@foo} as an XPath expression even outside of attribute value
         // templates
         if ($tokenId[0] === '@') {
             return ['expression', $tokenId];
         }
         // Test whether this is a known token
         if (isset($config['tokens'][$tokenId])) {
             // Replace with the corresponding attribute
             return ['expression', '@' . $config['tokens'][$tokenId]];
         }
         // Test whether the token is used as passthrough
         if ($tokenId === $config['passthroughToken']) {
             return ['passthrough'];
         }
         // Undefined token. If it's the name of a filter, consider it's an error
         if ($this->isFilter($tokenId)) {
             throw new RuntimeException('Token {' . $tokenId . '} is ambiguous or undefined');
         }
         // Use the token's name as parameter name
         return ['expression', '$' . $tokenId];
     });
     // Prepare the return array
     $return = ['bbcode' => $config['bbcode'], 'bbcodeName' => $config['bbcodeName'], 'tag' => $config['tag']];
     // Set the template for this BBCode's tag
     $return['tag']->template = $template;
     return $return;
 }
Esempio n. 4
0
 /**
  * @testdox setContent() updates the template's content
  */
 public function testSetContent()
 {
     $template = new Template('<hr/>');
     $template->setContent('<br/>');
     $this->assertEquals('<br/>', $template);
 }