MediaWiki  master
WordAccumulator.php
Go to the documentation of this file.
1 <?php
26 namespace MediaWiki\Diff;
27 
35  public $insClass = ' class="diffchange diffchange-inline"';
36  public $delClass = ' class="diffchange diffchange-inline"';
37 
38  private $lines = [];
39  private $line = '';
40  private $group = '';
41  private $tag = '';
42 
46  private function flushGroup( $new_tag ) {
47  if ( $this->group !== '' ) {
48  if ( $this->tag == 'ins' ) {
49  $this->line .= "<ins{$this->insClass}>" . htmlspecialchars( $this->group ) . '</ins>';
50  } elseif ( $this->tag == 'del' ) {
51  $this->line .= "<del{$this->delClass}>" . htmlspecialchars( $this->group ) . '</del>';
52  } else {
53  $this->line .= htmlspecialchars( $this->group );
54  }
55  }
56  $this->group = '';
57  $this->tag = $new_tag;
58  }
59 
63  private function flushLine( $new_tag ) {
64  $this->flushGroup( $new_tag );
65  if ( $this->line != '' ) {
66  array_push( $this->lines, $this->line );
67  } else {
68  # make empty lines visible by inserting an NBSP
69  array_push( $this->lines, "\u{00A0}" );
70  }
71  $this->line = '';
72  }
73 
78  public function addWords( $words, $tag = '' ) {
79  if ( $tag != $this->tag ) {
80  $this->flushGroup( $tag );
81  }
82 
83  foreach ( $words as $word ) {
84  // new-line should only come as first char of word.
85  if ( $word == '' ) {
86  continue;
87  }
88  if ( $word[0] == "\n" ) {
89  $this->flushLine( $tag );
90  $word = substr( $word, 1 );
91  }
92  // FIXME: Don't use assert()
93  // phpcs:ignore MediaWiki.Usage.ForbiddenFunctions.assert
94  assert( !strstr( $word, "\n" ) );
95  $this->group .= $word;
96  }
97  }
98 
102  public function getLines() {
103  $this->flushLine( '~done' );
104 
105  return $this->lines;
106  }
107 }
MediaWiki\Diff\WordAccumulator\getLines
getLines()
Definition: WordAccumulator.php:102
MediaWiki\Diff\WordAccumulator\$line
$line
Definition: WordAccumulator.php:39
MediaWiki\Diff
Definition: ComplexityException.php:22
MediaWiki\Diff\WordAccumulator\$tag
$tag
Definition: WordAccumulator.php:41
MediaWiki\Diff\WordAccumulator\$insClass
$insClass
Definition: WordAccumulator.php:35
MediaWiki\Diff\WordAccumulator
Stores, escapes and formats the results of word-level diff.
Definition: WordAccumulator.php:34
MediaWiki\Diff\WordAccumulator\$group
$group
Definition: WordAccumulator.php:40
MediaWiki\Diff\WordAccumulator\$lines
$lines
Definition: WordAccumulator.php:38
MediaWiki\Diff\WordAccumulator\addWords
addWords( $words, $tag='')
Definition: WordAccumulator.php:78
MediaWiki\Diff\WordAccumulator\flushGroup
flushGroup( $new_tag)
Definition: WordAccumulator.php:46
MediaWiki\Diff\WordAccumulator\flushLine
flushLine( $new_tag)
Definition: WordAccumulator.php:63
MediaWiki\Diff\WordAccumulator\$delClass
$delClass
Definition: WordAccumulator.php:36