[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Parsing/Handler/ -> Preformatted.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Parsing\Handler;
   4  
   5  class Preformatted implements ReWriterInterface
   6  {
   7  
   8      /** @var CallWriterInterface original call writer */
   9      protected $callWriter;
  10  
  11      protected $calls = array();
  12      protected $pos;
  13      protected $text ='';
  14  
  15      /**
  16       * @inheritdoc
  17       */
  18      public function __construct(CallWriterInterface $CallWriter)
  19      {
  20          $this->callWriter = $CallWriter;
  21      }
  22  
  23      /** @inheritdoc */
  24      public function writeCall($call)
  25      {
  26          $this->calls[] = $call;
  27      }
  28  
  29      /**
  30       * @inheritdoc
  31       * Probably not needed but just in case...
  32       */
  33      public function writeCalls($calls)
  34      {
  35          $this->calls = array_merge($this->calls, $calls);
  36      }
  37  
  38      /** @inheritdoc */
  39      public function finalise()
  40      {
  41          $last_call = end($this->calls);
  42          $this->writeCall(array('preformatted_end',array(), $last_call[2]));
  43  
  44          $this->process();
  45          $this->callWriter->finalise();
  46          unset($this->callWriter);
  47      }
  48  
  49      /** @inheritdoc */
  50      public function process()
  51      {
  52          foreach ($this->calls as $call) {
  53              switch ($call[0]) {
  54                  case 'preformatted_start':
  55                      $this->pos = $call[2];
  56                      break;
  57                  case 'preformatted_newline':
  58                      $this->text .= "\n";
  59                      break;
  60                  case 'preformatted_content':
  61                      $this->text .= $call[1][0];
  62                      break;
  63                  case 'preformatted_end':
  64                      if (trim($this->text)) {
  65                          $this->callWriter->writeCall(array('preformatted', array($this->text), $this->pos));
  66                      }
  67                      // see FS#1699 & FS#1652, add 'eol' instructions to ensure proper triggering of following p_open
  68                      $this->callWriter->writeCall(array('eol', array(), $this->pos));
  69                      $this->callWriter->writeCall(array('eol', array(), $this->pos));
  70                      break;
  71              }
  72          }
  73  
  74          return $this->callWriter;
  75      }
  76  }