Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
   1  <?php
   2  
   3  /**

   4   * Factory for token generation.

   5   *

   6   * @note Doing some benchmarking indicates that the new operator is much

   7   *       slower than the clone operator (even discounting the cost of the

   8   *       constructor).  This class is for that optimization.

   9   *       Other then that, there's not much point as we don't

  10   *       maintain parallel HTMLPurifier_Token hierarchies (the main reason why

  11   *       you'd want to use an abstract factory).

  12   * @todo Port DirectLex to use this

  13   */
  14  class HTMLPurifier_TokenFactory
  15  {
  16      // p stands for prototype

  17  
  18      /**

  19       * @type HTMLPurifier_Token_Start

  20       */
  21      private $p_start;
  22  
  23      /**

  24       * @type HTMLPurifier_Token_End

  25       */
  26      private $p_end;
  27  
  28      /**

  29       * @type HTMLPurifier_Token_Empty

  30       */
  31      private $p_empty;
  32  
  33      /**

  34       * @type HTMLPurifier_Token_Text

  35       */
  36      private $p_text;
  37  
  38      /**

  39       * @type HTMLPurifier_Token_Comment

  40       */
  41      private $p_comment;
  42  
  43      /**

  44       * Generates blank prototypes for cloning.

  45       */
  46      public function __construct()
  47      {
  48          $this->p_start = new HTMLPurifier_Token_Start('', array());
  49          $this->p_end = new HTMLPurifier_Token_End('');
  50          $this->p_empty = new HTMLPurifier_Token_Empty('', array());
  51          $this->p_text = new HTMLPurifier_Token_Text('');
  52          $this->p_comment = new HTMLPurifier_Token_Comment('');
  53      }
  54  
  55      /**

  56       * Creates a HTMLPurifier_Token_Start.

  57       * @param string $name Tag name

  58       * @param array $attr Associative array of attributes

  59       * @return HTMLPurifier_Token_Start Generated HTMLPurifier_Token_Start

  60       */
  61      public function createStart($name, $attr = array())
  62      {
  63          $p = clone $this->p_start;
  64          $p->__construct($name, $attr);
  65          return $p;
  66      }
  67  
  68      /**

  69       * Creates a HTMLPurifier_Token_End.

  70       * @param string $name Tag name

  71       * @return HTMLPurifier_Token_End Generated HTMLPurifier_Token_End

  72       */
  73      public function createEnd($name)
  74      {
  75          $p = clone $this->p_end;
  76          $p->__construct($name);
  77          return $p;
  78      }
  79  
  80      /**

  81       * Creates a HTMLPurifier_Token_Empty.

  82       * @param string $name Tag name

  83       * @param array $attr Associative array of attributes

  84       * @return HTMLPurifier_Token_Empty Generated HTMLPurifier_Token_Empty

  85       */
  86      public function createEmpty($name, $attr = array())
  87      {
  88          $p = clone $this->p_empty;
  89          $p->__construct($name, $attr);
  90          return $p;
  91      }
  92  
  93      /**

  94       * Creates a HTMLPurifier_Token_Text.

  95       * @param string $data Data of text token

  96       * @return HTMLPurifier_Token_Text Generated HTMLPurifier_Token_Text

  97       */
  98      public function createText($data)
  99      {
 100          $p = clone $this->p_text;
 101          $p->__construct($data);
 102          return $p;
 103      }
 104  
 105      /**

 106       * Creates a HTMLPurifier_Token_Comment.

 107       * @param string $data Data of comment token

 108       * @return HTMLPurifier_Token_Comment Generated HTMLPurifier_Token_Comment

 109       */
 110      public function createComment($data)
 111      {
 112          $p = clone $this->p_comment;
 113          $p->__construct($data);
 114          return $p;
 115      }
 116  }
 117  
 118  // vim: et sw=4 sts=4