! Copyright (C) 2008, 2010 Slava Pestov
! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel lcs sequences strings xml.syntax
xml.writer ;
IN: lcs.diff2html

GENERIC: diff-line ( obj -- xml )

: item-string ( item -- string )
    item>> [ CHAR: no-break-space 1string ] when-empty ;

M: retain diff-line
    item-string
    [XML <td class="retain"><-></td> XML]
    dup [XML <tr><-><-></tr> XML] ;

M: insert diff-line
    item-string [XML
        <tr>
            <td> </td>
            <td class="insert"><-></td>
        </tr>
    XML] ;

M: delete diff-line
    item-string [XML
        <tr>
            <td class="delete"><-></td>
            <td> </td>
        </tr>
    XML] ;

: htmlize-diff ( diff -- xml )
    [ diff-line ] map
    [XML
        <table width="100%" class="comparison">
            <tr><th>Old</th><th>New</th></tr>
            <->
        </table>
    XML] ;