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