From f76724a46dee840092905f3d819423ffd556f14e Mon Sep 17 00:00:00 2001 From: Tom N Harris Date: Sat, 16 Feb 2013 16:07:00 -0500 Subject: Move inline diff headers into a vertical column. --- inc/DifferenceEngine.php | 19 +++++++++++-------- inc/html.php | 27 +++++++++++++++++++++------ 2 files changed, 32 insertions(+), 14 deletions(-) (limited to 'inc') diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php index 1b68cf6d3..1099f40eb 100644 --- a/inc/DifferenceEngine.php +++ b/inc/DifferenceEngine.php @@ -1070,11 +1070,13 @@ class TableDiffFormatter extends DiffFormatter { } function addedLine($line) { - return '+' . $line.''; + return '+'. + '' . $line.''; } function deletedLine($line) { - return '-' . $line.''; + return '-'. + '' . $line.''; } function emptyLine() { @@ -1082,7 +1084,8 @@ class TableDiffFormatter extends DiffFormatter { } function contextLine($line) { - return ' '.$line.''; + return ' '. + ''.$line.''; } function _added($lines) { @@ -1121,7 +1124,7 @@ class TableDiffFormatter extends DiffFormatter { * */ class InlineDiffFormatter extends DiffFormatter { - var $colspan = 4; + var $colspan = 2; function __construct() { $this->leading_context_lines = 2; @@ -1167,19 +1170,19 @@ class InlineDiffFormatter extends DiffFormatter { function _added($lines) { foreach ($lines as $line) { - print(''. $line . "\n"); + print('+'. $line . "\n"); } } function _deleted($lines) { foreach ($lines as $line) { - print('' . $line . "\n"); + print('-' . $line . "\n"); } } function _context($lines) { foreach ($lines as $line) { - print(''.$line."\n"); + print(' '.$line."\n"); } } @@ -1188,7 +1191,7 @@ class InlineDiffFormatter extends DiffFormatter { $add = $diff->inline(); foreach ($add as $line) - print(''.$line."\n"); + print('!'.$line."\n"); } } diff --git a/inc/html.php b/inc/html.php index c2723bceb..78042cb8b 100644 --- a/inc/html.php +++ b/inc/html.php @@ -1003,14 +1003,16 @@ function html_backlinks(){ * @param string $r_rev Right revision * @param string $id Page id, if null $ID is used * @param bool $media If it is for media files + * @param bool $inline Return the header on a single line * @return array HTML snippets for diff header */ -function html_diff_head($l_rev, $r_rev, $id = null, $media = false) { +function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = false) { global $lang; if ($id === null) { global $ID; $id = $ID; } + $head_separator = $inline ? ' ' : '
'; $media_or_wikiFN = $media ? 'mediaFN' : 'wikiFN'; $ml_or_wl = $media ? 'ml' : 'wl'; $l_minor = $r_minor = ''; @@ -1032,7 +1034,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false) { $l_head_title = ($media) ? dformat($l_rev) : $id.' ['.dformat($l_rev).']'; $l_head = ''. $l_head_title.''. - '
'.$l_user.' '.$l_sum; + $head_separator.$l_user.' '.$l_sum; } if($r_rev){ @@ -1050,7 +1052,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false) { $r_head_title = ($media) ? dformat($r_rev) : $id.' ['.dformat($r_rev).']'; $r_head = ''. $r_head_title.''. - '
'.$r_user.' '.$r_sum; + $head_separator.$r_user.' '.$r_sum; }elseif($_rev = @filemtime($media_or_wikiFN($id))){ $_info = getRevisionInfo($id,$_rev,true, $media); if($_info['user']){ @@ -1067,7 +1069,7 @@ function html_diff_head($l_rev, $r_rev, $id = null, $media = false) { $r_head = ''. $r_head_title.' '. '('.$lang['current'].')'. - '
'.$_user.' '.$_sum; + $head_separator.$_user.' '.$_sum; }else{ $r_head = '— ('.$lang['current'].')'; } @@ -1160,7 +1162,7 @@ function html_diff($text='',$intro=true,$type=null){ } $r_text = rawWiki($ID,$r_rev); - list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev); + list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev, null, false, $type == 'inline'); } $df = new Diff(explode("\n",hsc($l_text)),explode("\n",hsc($r_text))); @@ -1205,6 +1207,18 @@ function html_diff($text='',$intro=true,$type=null){ ?>
+ + + + + + + + - format($df)); ?> + format($df)); ?>
---> + +
+++> + +
> @@ -1213,7 +1227,8 @@ function html_diff($text='',$intro=true,$type=null){
Date: Sat, 16 Feb 2013 21:11:40 +0000 Subject: fix a couple of diff issues: shouldn't be any need to html encode before finding diffs; move quantifier outside regex condition --- inc/html.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'inc') diff --git a/inc/html.php b/inc/html.php index c2723bceb..6c42f6e7b 100644 --- a/inc/html.php +++ b/inc/html.php @@ -1163,7 +1163,7 @@ function html_diff($text='',$intro=true,$type=null){ list($l_head, $r_head, $l_minor, $r_minor) = html_diff_head($l_rev, $r_rev); } - $df = new Diff(explode("\n",hsc($l_text)),explode("\n",hsc($r_text))); + $df = new Diff(explode("\n",$l_text),explode("\n",$r_text)); if($type == 'inline'){ $tdf = new InlineDiffFormatter(); @@ -1238,8 +1238,8 @@ function html_softbreak_callback($match){ &\#?\\w{1,6};) # ... for html entities - we don't want to split them (ok to catch some invalid combinations) &\#?\\w{1,6}; # yes pattern - a quicker match for the html entity, since we know we have one | -[?/,&\#;:]+ # no pattern - any other group of 'special' characters to insert a breaking character after -) # end conditional expression +[?/,&\#;:] # no pattern - any other group of 'special' characters to insert a breaking character after +)+ # end conditional expression REGEX; return preg_replace('<'.$regex.'>xu','\0​',$match[0]); -- cgit v1.2.3 From c0e94f2ae82b91c9a8af05eea8443b37eef52ba7 Mon Sep 17 00:00:00 2001 From: Tom N Harris Date: Sat, 16 Feb 2013 16:28:01 -0500 Subject: Monospace font for header prefix. --- inc/html.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'inc') diff --git a/inc/html.php b/inc/html.php index 78042cb8b..420efd633 100644 --- a/inc/html.php +++ b/inc/html.php @@ -1209,12 +1209,12 @@ function html_diff($text='',$intro=true,$type=null){ - - -- cgit v1.2.3 From 56133a04d1c5dcd4825f4c0c978b8a9336d603d0 Mon Sep 17 00:00:00 2001 From: Tom N Harris Date: Sat, 16 Feb 2013 18:15:13 -0500 Subject: Fix width of indicator column. --- inc/DifferenceEngine.php | 10 +++++----- inc/html.php | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'inc') diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php index 1099f40eb..2125ad879 100644 --- a/inc/DifferenceEngine.php +++ b/inc/DifferenceEngine.php @@ -1151,7 +1151,7 @@ class InlineDiffFormatter extends DiffFormatter { $xbeg .= "," . $xlen; if ($ylen != 1) $ybeg .= "," . $ylen; - $r = '\n"; @@ -1170,19 +1170,19 @@ class InlineDiffFormatter extends DiffFormatter { function _added($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } function _deleted($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } function _context($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } @@ -1191,7 +1191,7 @@ class InlineDiffFormatter extends DiffFormatter { $add = $diff->inline(); foreach ($add as $line) - print('\n"); + print('\n"); } } diff --git a/inc/html.php b/inc/html.php index 420efd633..e657d2c78 100644 --- a/inc/html.php +++ b/inc/html.php @@ -1209,12 +1209,12 @@ function html_diff($text='',$intro=true,$type=null){
---> + --->
+++> + +++>
@@ '.$lang['line']." -$xbeg +$ybeg @@"; + $r = '
@@ '.$lang['line']." -$xbeg +$ybeg @@"; $r .= ' '.$lang['deleted'].''; $r .= ' '.$lang['created'].''; $r .= "
+'. $line . "
+'. $line . "
-' . $line . "
-' . $line . "
 '.$line."
 '.$line."
!'.$line."
!'.$line."
- - -- cgit v1.2.3 From a69506c52fbd9c92500be4f380acc7e68d4d6560 Mon Sep 17 00:00:00 2001 From: Tom N Harris Date: Sat, 16 Feb 2013 18:27:12 -0500 Subject: Remove the prefix from inline diffs. The line prefix was not actually indicating what it should indicate. In particular, anything in a "changed" block would show a "!" even if the entire line was added or deleted. Better to print nothing than something that's wrong. --- inc/DifferenceEngine.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'inc') diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php index 2125ad879..c15c8b163 100644 --- a/inc/DifferenceEngine.php +++ b/inc/DifferenceEngine.php @@ -1170,13 +1170,13 @@ class InlineDiffFormatter extends DiffFormatter { function _added($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } function _deleted($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } @@ -1191,7 +1191,7 @@ class InlineDiffFormatter extends DiffFormatter { $add = $diff->inline(); foreach ($add as $line) - print('\n"); + print('\n"); } } -- cgit v1.2.3 From 60056e697fb1666e9b491b6f9f5654b694e3b8c9 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Sun, 17 Feb 2013 14:56:12 +0000 Subject: ensure diff formatters escape their output --- inc/DifferenceEngine.php | 58 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 16 deletions(-) (limited to 'inc') diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php index 1b68cf6d3..42975b208 100644 --- a/inc/DifferenceEngine.php +++ b/inc/DifferenceEngine.php @@ -797,7 +797,7 @@ class DiffFormatter { function _lines($lines, $prefix = ' ') { foreach ($lines as $line) - echo "$prefix $line\n"; + echo "$prefix ".$this->_escape($line)."\n"; } function _context($lines) { @@ -816,6 +816,10 @@ class DiffFormatter { echo "---\n"; $this->_added($closing); } + + function _escape($str){ + return $str; + } } /** @@ -871,13 +875,13 @@ class _HWLDF_WordAccumulator { function _flushGroup($new_tag) { if ($this->_group !== '') { if ($this->_tag == 'mark') - $this->_line .= ''.$this->_group.''; + $this->_line .= ''.$this->_escape($this->_group).''; elseif ($this->_tag == 'add') - $this->_line .= ''.$this->_group.''; + $this->_line .= ''.$this->_escape($this->_group).''; elseif ($this->_tag == 'del') - $this->_line .= ''.$this->_group.''; + $this->_line .= ''.$this->_escape($this->_group).''; else - $this->_line .= $this->_group; + $this->_line .= $this->_escape($this->_group); } $this->_group = ''; $this->_tag = $new_tag; @@ -912,6 +916,10 @@ class _HWLDF_WordAccumulator { $this->_flushLine('~done'); return $this->_lines; } + + function _escape($str){ + return hsc($str); + } } class WordLevelDiff extends MappedDiff { @@ -1069,11 +1077,17 @@ class TableDiffFormatter extends DiffFormatter { function _lines($lines, $prefix=' ', $color="white") { } - function addedLine($line) { + function addedLine($line,$escaped=false) { + if (!$escaped){ + $line = $this->_escape($line); + } return ''; } - function deletedLine($line) { + function deletedLine($line,$escaped=false) { + if (!$escaped){ + $line = $this->_escape($line); + } return ''; } @@ -1082,12 +1096,16 @@ class TableDiffFormatter extends DiffFormatter { } function contextLine($line) { - return ''; + return ''; } function _added($lines) { + $this->_addedLines($lines,false); + } + + function _addedLines($lines,$escaped=false){ foreach ($lines as $line) { - print('' . $this->emptyLine() . $this->addedLine($line) . "\n"); + print('' . $this->emptyLine() . $this->addedLine($line,$escaped) . "\n"); } } @@ -1104,15 +1122,19 @@ class TableDiffFormatter extends DiffFormatter { } function _changed($orig, $closing) { - $diff = new WordLevelDiff($orig, $closing); + $diff = new WordLevelDiff($orig, $closing); // this escapes the diff data $del = $diff->orig(); $add = $diff->closing(); while ($line = array_shift($del)) { $aline = array_shift($add); - print('' . $this->deletedLine($line) . $this->addedLine($aline) . "\n"); + print('' . $this->deletedLine($line,true) . $this->addedLine($aline,true) . "\n"); } - $this->_added($add); # If any leftovers + $this->_addedLines($add,true); # If any leftovers + } + + function _escape($str) { + return hsc($str); } } @@ -1167,29 +1189,33 @@ class InlineDiffFormatter extends DiffFormatter { function _added($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } function _deleted($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } function _context($lines) { foreach ($lines as $line) { - print('\n"); + print('\n"); } } function _changed($orig, $closing) { - $diff = new InlineWordLevelDiff($orig, $closing); + $diff = new InlineWordLevelDiff($orig, $closing); // this escapes the diff data $add = $diff->inline(); foreach ($add as $line) print('\n"); } + + function _escape($str) { + return hsc($str); + } } -- cgit v1.2.3 From 3a4ea35cfcc40e754577cb6a1e41442d14b6a0a6 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Sun, 17 Feb 2013 19:30:55 +0000 Subject: replace remaining hardcoded 'colspan' values with ->colspan --- inc/DifferenceEngine.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'inc') diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php index f6ed9aa13..e0fbf8e03 100644 --- a/inc/DifferenceEngine.php +++ b/inc/DifferenceEngine.php @@ -1037,6 +1037,7 @@ class UnifiedDiffFormatter extends DiffFormatter { * */ class TableDiffFormatter extends DiffFormatter { + var $colspan = 2; function __construct() { $this->leading_context_lines = 2; @@ -1061,8 +1062,8 @@ class TableDiffFormatter extends DiffFormatter { global $lang; $l1 = $lang['line'].' '.$xbeg; $l2 = $lang['line'].' '.$ybeg; - $r = '\n". - '\n". + $r = '\n". + '\n". "\n"; return $r; } @@ -1094,7 +1095,7 @@ class TableDiffFormatter extends DiffFormatter { } function emptyLine() { - return ''; + return ''; } function contextLine($line) { @@ -1173,7 +1174,7 @@ class InlineDiffFormatter extends DiffFormatter { $xbeg .= "," . $xlen; if ($ylen != 1) $ybeg .= "," . $ylen; - $r = '\n"; -- cgit v1.2.3
---> + ->
+++> + +>
+'. $line . "
 '. $line . "
-' . $line . "
 ' . $line . "
!'.$line."
 '.$line."
+' . $line.'-' . $line.' '.$line.' '.$this->_escape($line).'
'. $line . "
'. $this->_escape($line) . "
' . $line . "
' . $this->_escape($line) . "
'.$line."
'.$this->_escape($line)."
'.$line."
'.$l1.":'.$l2.":
'.$l1.":'.$l2.":
  
@@ '.$lang['line']." -$xbeg +$ybeg @@"; + $r = '
@@ '.$lang['line']." -$xbeg +$ybeg @@"; $r .= ' '.$lang['deleted'].''; $r .= ' '.$lang['created'].''; $r .= "