src/cm/utils/comment_positioning.py
author rbernard
Wed, 20 Jan 2010 20:43:38 +0100
changeset 103 61fd17f9ab78
parent 58 a480a91d63ca
child 172 9a355903350d
permissions -rw-r--r--
enh: detached comments bug fix: test corrected bug fix: permalink to comment
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
from difflib import SequenceMatcher
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
#from cm.utils.spannifier import Spannifier
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
import sys, operator
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
from cm.utils.spannifier import spannify
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
from cm.converters.pandoc_converters import pandoc_convert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
import logging
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
from cm.utils.spannifier import get_the_soup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
import html5lib
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
from html5lib import treebuilders
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
def compute_new_comment_positions(old_content, old_format, new_content, new_format, commentList):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
    if old_format!='html':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
        previousVersionContent = pandoc_convert(old_content, old_format, 'html')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
    else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
        previousVersionContent = old_content
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    if new_format != 'html':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
        newVersionContent = pandoc_convert(new_content, new_format, 'html')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
    else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
        newVersionContent = new_content
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
    _, previous_char_list, span_starts_previous = spannify(previousVersionContent)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
    _, new_char_list, span_starts_new = spannify(newVersionContent)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
    sm = SequenceMatcher(None, previous_char_list, new_char_list)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    opcodes = sm.get_opcodes()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
    to_remove_comments_ids = set()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
    
103
61fd17f9ab78 enh: detached comments
rbernard
parents: 58
diff changeset
    33
    # limit to real comments (not replies) and those that have scope 
61fd17f9ab78 enh: detached comments
rbernard
parents: 58
diff changeset
    34
    commentList = [c for c in commentList if not c.is_reply() and not c.is_scope_removed()]
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    for comment in commentList:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
            comment.initial_start_offset = span_starts_previous[comment.start_wrapper] + comment.start_offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
            comment.initial_end_offset = span_starts_previous[comment.end_wrapper] + comment.end_offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        except KeyError:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
            logging.error('Key error (wrapper out of bounds of span_starts_previous)')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            continue
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        comment.computed_start_offset = comment.initial_start_offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        comment.computed_end_offset = comment.initial_end_offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
#        comment.computed_start_wrapper = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
#        comment.computed_end_wrapper = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        comment.valid = True
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
    for tag, i1, i2, j1, j2 in opcodes:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        #print tag, i1, i2, j1, j2
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        for i in xrange(len(commentList)) :            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
            if tag != 'equal' :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
                comment = commentList[i]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
                if not comment.valid:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
                    continue
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
                if comment.initial_start_offset >= i2 :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
                    # if offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
                    delta = ((j2 - j1) - (i2 - i1))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
                    comment.computed_start_offset += delta
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
                    comment.computed_end_offset += delta
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
                elif comment.initial_end_offset > i1:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
                    comment.valid = False
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        #    id, initial_start, initial_end, computed_start, computed_end, valid = self.computationResults[i]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
    for c in commentList:        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        if c.valid:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
            for id in xrange(len(span_starts_new.keys())):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
                start = span_starts_new.get(id)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
                end = span_starts_new.get(id+1, sys.maxint)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
                # adjust start                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
                if c.computed_start_offset >= start and c.computed_start_offset < end:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
                    c.start_wrapper = id
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
                    c.start_offset = c.computed_start_offset - start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
                # adjust end                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
                if c.computed_end_offset >= start and c.computed_end_offset < end:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
                    c.end_wrapper = id
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
                    c.end_offset = c.computed_end_offset - start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
    # returns to_modify, to_remove
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
    return [c for c in commentList if c.valid], \
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
           [c for c in commentList if not c.valid]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
## no colors, just markers           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
#def insert_comment_markers_and_nocolors(htmlcontent, comments):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
#    parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
#    html = parser.parse(htmlcontent.encode("utf8"), encoding="utf8")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
#    cpt = 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
#    # key : node id, value : indexes of added markers
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
#    # to remember index of inserted markers
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
#    rememberMarkerOffsets = {}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
#    #O(n²) ?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
#    for comment in comments :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
#        for i in [0,1] :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
#            wrapper = comment.start_wrapper if i == 0 else comment.end_wrapper
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
#            offset =  comment.start_offset if i == 0 else comment.end_offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
#            marker = "[%d>"%cpt if i == 0 else "<%d]"%cpt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
#            marker_length = len(marker)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
#            content = html.find(id = "sv-%d"%wrapper).contents[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
##            import pdb;pdb.set_trace()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
#            smallerIndexes = rememberMarkerOffsets.get(wrapper, [])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
#            original_offset =  offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
#            offset += marker_length * len([index for index in smallerIndexes if index <= offset])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
#        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
#            smallerIndexes.append(original_offset)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
#            rememberMarkerOffsets[wrapper] = smallerIndexes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
#        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
#            content.replaceWith(content[:offset]+marker+content[offset:])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
#                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
#        cpt = cpt + 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
#    return unicode(html)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
def add_marker(text, color, start_ids, end_ids, with_markers, with_colors):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
# TODO
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
# THESE 3 LINES ARE REALLY JUST FOR TESTING THIS IS COPIED FROM C-TEXT.CSS AND SHOULD BE DONE DIFFERENTLY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
    BCKCOLORS = ['#FFF', '#FFF39A', '#FFDB9A', '#FFC39A', '#FFAB9A', '#FF879A', '#FF7B9A', '#FF6272']
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
    for i in range(30) :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
        BCKCOLORS.append('#FF6272')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
    ret = text 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
    if with_markers:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
        end_ids.reverse()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
        ret = "%s%s%s"%(''.join(["[%s>"%start_id for start_id in start_ids]), ret, ''.join(["<%s]"%end_id for end_id in end_ids]))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
    if with_colors and color != 0 :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        ret = "<span style='background-color:%s;'>%s</span>"%(BCKCOLORS[color], ret)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    return ret
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
103
61fd17f9ab78 enh: detached comments
rbernard
parents: 58
diff changeset
   143
# comments are comments and replies :
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
def insert_comment_markers(htmlcontent, comments, with_markers, with_colors) :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
#    parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
#    html = parser.parse(htmlcontent.encode("utf8"), encoding="utf8")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
    html = get_the_soup(htmlcontent) ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
#    import pdb;pdb.set_trace()
58
a480a91d63ca BUG FIX : pdf export PhA tests, TODO fix special html caracters in comments
reno
parents: 0
diff changeset
   151
    if comments :
a480a91d63ca BUG FIX : pdf export PhA tests, TODO fix special html caracters in comments
reno
parents: 0
diff changeset
   152
        max_wrapper = max([comment.end_wrapper for comment in comments])
a480a91d63ca BUG FIX : pdf export PhA tests, TODO fix special html caracters in comments
reno
parents: 0
diff changeset
   153
        min_wrapper = min([comment.start_wrapper for comment in comments])
a480a91d63ca BUG FIX : pdf export PhA tests, TODO fix special html caracters in comments
reno
parents: 0
diff changeset
   154
        
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
    datas = {} # { wrapper_id : {'start_color':nb_of_comments_unterminated_at_wrapper_start, 'offsets':{offset: [[ids of wrappers starting at offset], [ids of wrappers ending at offset]]}}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
    # datas['offsets'][someoffset][0] and idem[1] will be ordered the way comments are (should be ('start_wrapper', 'start_offset', 'end_wrapper', 'end_offset') important)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
    cpt = 1 # starting numbered comment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
    for comment in comments :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
        if comment.is_reply() :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
            continue ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
        #import pdb;pdb.set_trace()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
        # start 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
        wrapper_data = datas.get(comment.start_wrapper, {'start_color':0, 'offsets':{}})
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        offset = wrapper_data.get('offsets').get(comment.start_offset, [[],[]])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        offset[0].append(cpt)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
        #offset[0].append(comment.id)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
        wrapper_data['offsets'][comment.start_offset] = offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
        datas[comment.start_wrapper] = wrapper_data
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
        # end 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
        wrapper_data = datas.get(comment.end_wrapper, {'start_color':0, 'offsets':{}})
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
        offset = wrapper_data.get('offsets').get(comment.end_offset, [[],[]])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
        offset[1].append(cpt)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        #offset[1].append(comment.id)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
        wrapper_data['offsets'][comment.end_offset] = offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
        datas[comment.end_wrapper] = wrapper_data
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
        for cc in range(comment.start_wrapper + 1, comment.end_wrapper + 1) : 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
            wrapper_data = datas.get(cc, {'start_color':0, 'offsets':{}})
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
            wrapper_data['start_color'] += 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
            datas[cc] = wrapper_data
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
        cpt = cpt + 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
    # order ee values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
    for (wrapper_id, wrapper_data) in datas.items() :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
        start_color = wrapper_data['start_color']
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
        offsets = sorted(wrapper_data['offsets'].items(), key=operator.itemgetter(0))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
        content = html.find(id = "sv-%d"%wrapper_id).contents[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
        spans = ""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
        if offsets :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
            color = start_color
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
            start = 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
            start_ids = []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
            end_ids = []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
#            for offset, nbs in offsets :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
            for offset, ids in offsets :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
                end_ids = ids[1]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
                end = offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
                spans += add_marker(content[start:end], color, start_ids, end_ids, with_markers, with_colors)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
                start_ids = ids[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
                start = end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
                color += (len(ids[0]) - len(ids[1]))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
            end_ids = []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
            spans += add_marker(content[end:], color,start_ids, end_ids, with_markers, with_colors)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
        else : # the whole content is to be colored with start_color
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
            spans += add_marker(content, start_color, [], [], with_markers, with_colors)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
        content.replaceWith(spans)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
    return unicode(html)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
#def output_comment_line(comment) :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
#    ret = "<tr>"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
#    for i in range(comment.depth()) : 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
#        ret = ret + """<td width="1 em"></td>"""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
#    ret = ret + """<td width="1 em">[%d]</td><td>"""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
#
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
#def output_comments(comments) :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
#
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
#    max_depth = max([comment.depth() for comment in comments])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
#    top_comments = [comment for comment in comments if comment.reply_to_id == None]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
#    top_comment_cpt = 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
#    html_comments = ""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
#    for top_comment in top_comments :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
#        html_comments = html_comments + """<table>"""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
#         
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
#        html_comments = html_comments + "<table><tr>"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
#         
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
#        html_comments = html_comments + "</table>" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
#
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
#        top_comment_cpt = top_comment_cpt + 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
#    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
#    ret = "%s%s%s"%("""<div class="pagebreakhere">""", html_comments, """</div>""")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
#    return ret