2012-12-15 2 views
5

나는 diff-match를 사용하고 있습니다. http://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_diff.htmlGoogle-diff-match는 새로운 행을 표시하지 않습니까?

두 가지 HTML의 차이점을 보여줄 수 있습니다. 문제는 스크립트가 새로운 라인을

으로 표시한다는 것입니다. 표시하지 않을 방법이 있습니까?

지금 난 그냥 \n\r의 모든 istances을 제거하고 있지만이 문서에서 보았 듯이이 나던 '

+0

Diff Match 패치를 사용하여 작업 한 이래로 오랜 시간이 걸렸습니다. 구현시 매우 견고하기 때문에 단락 기호가 문제가된다는 것을 기억하지 못합니다. 너 뭐 해봤 니? – Hemlock

답변

9

좋은 소리, 예쁜 HTML 기능이 멋진 UI를 개발하는 단지 샘플입니다. 그러나 함수에서 null이있는 ¶ (& para;)을 바꾸면 기호가 사라집니다.

diff_match_patch.prototype.diff_prettyHtml = function(diffs) { 
    var html = []; 
    var pattern_amp = /&/g; 
    var pattern_lt = /</g; 
    var pattern_gt = />/g; 
    var pattern_para = /\n/g; 
    for (var x = 0; x < diffs.length; x++) { 
     var op = diffs[x][0]; // Operation (insert, delete, equal) 
     var data = diffs[x][1]; // Text of change. 
     //var text = data.replace(pattern_amp, '&amp;').replace(pattern_lt, '&lt;') 
     // .replace(pattern_gt, '&gt;').replace(pattern_para, '&para;<br>'); 
     var text = data.replace(pattern_amp, '&amp;').replace(pattern_lt, '&lt;') 
      .replace(pattern_gt, '&gt;').replace(pattern_para, '<br>'); 
     switch (op) { 
     case DIFF_INSERT: 
      html[x] = '<ins style="background:#e6ffe6;">' + text + '</ins>'; 
      break; 
     case DIFF_DELETE: 
      html[x] = '<del style="background:#ffe6e6;">' + text + '</del>'; 
      break; 
     case DIFF_EQUAL: 
      html[x] = '<span>' + text + '</span>'; 
      break; 
     } 
    } 
    return html.join(''); 
    }; 

는 컴퓨팅은 diff 버튼을 눌렀을 전에 기능 위에 붙여 Chrome에서 콘솔 사본에 제공된 링크로 이동이를 테스트합니다.

+0

@llnk : 작동 했습니까? – closure

+1

나는 그것을 시도하지 않았다. 나는 어쨌든 설정 +1이 있었다. – dynamic

+1

prettyHtml은 편의 기능 일 뿐이라고 언급했다. 저자는 사용자가 자신의 UI로 구워 지길 원합니다. 편의 기능을위한 구성 매개 변수를 제공하는 것은 이치에 맞지 않습니다. 사실, 우리는 위의 사용자 정의 UI를 수행했습니다. 우리는이 fn을 다른 것으로 부르고 베이킹을 시작할 수 있습니다. – closure

관련 문제