Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.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