Edgewall Software

Ticket #2232: oneliner_simplify_blocks.3.patch

File oneliner_simplify_blocks.3.patch, 12.8 KB (added by cboos, 7 years ago)

Improvement to the previous patch. Now the shorten_line is done after the OneLinerFormatter parsing, so blocks are actually seen in their entirety. Patch on r2409.

  • trac/ticket/web_ui.py

     
    294294                        message = util.escape(message) 
    295295                else: 
    296296                    href = self.env.href.ticket(id) 
    297                     message = util.shorten_line(message) 
    298297                    if status != 'new': 
    299298                        message = ': '.join(filter(None, [ 
    300299                            resolution, 
    301                             wiki_to_oneliner(message, self.env, db) 
     300                            wiki_to_oneliner(message, self.env, db, 
     301                                             shorten=True) 
    302302                        ])) 
    303303                    else: 
    304                         message = util.escape(message) 
     304                        message = util.escape(util.shorten_line(message)) 
    305305                yield kinds[status], href, title, t, author, message 
    306306 
    307307    # Internal methods 
     
    486486                message = '' 
    487487                if len(field_changes) > 0: 
    488488                    message = ', '.join(field_changes) + ' changed.<br />' 
    489                 message += wiki_to_oneliner(util.shorten_line(comment), 
    490                                             self.env, db, absurls=absurls) 
     489                message += wiki_to_oneliner(comment, self.env, db, 
     490                                            shorten=True, absurls=absurls) 
    491491                yield 'editedticket', href, title, t, author, message 
  • trac/ticket/roadmap.py

     
    318318                                           absurls=True) 
    319319                else: 
    320320                    href = self.env.href.milestone(name) 
    321                     message = wiki_to_oneliner(shorten_line(description), 
    322                                                self.env, db) 
     321                    message = wiki_to_oneliner(description, self.env, db, 
     322                                               shorten=True) 
    323323                yield 'milestone', href, title, completed, None, message 
    324324 
    325325    # IRequestHandler methods 
  • trac/versioncontrol/web_ui/util.py

     
    1717import re 
    1818import urllib 
    1919 
    20 from trac.util import escape, format_datetime, pretty_timedelta, shorten_line,\ 
     20from trac.util import escape, format_datetime, pretty_timedelta, shorten_line, \ 
    2121                      TracError 
    2222from trac.wiki import wiki_to_html, wiki_to_oneliner 
    2323 
     
    2929    changes = {} 
    3030    for rev in revs: 
    3131        changeset = repos.get_changeset(rev) 
    32         message = changeset.message 
    33         shortlog = shorten_line(message)         
     32        message = changeset.message or '--' 
    3433        files = None 
    3534        if format == 'changelog': 
    3635            files = [change[0] for change in changeset.get_changes()] 
    3736        elif message: 
    3837            if not full: 
    39                 message = wiki_to_oneliner(shortlog, env, db) 
     38                message = wiki_to_oneliner(message, env, db, 
     39                                           shorten=True) 
    4040            else: 
    4141                message = wiki_to_html(message, env, req, db, 
    4242                                       absurls=(format == 'rss'), 
     
    4848            'date': format_datetime(changeset.date), 
    4949            'age': pretty_timedelta(changeset.date), 
    5050            'author': changeset.author or 'anonymous', 
    51             'shortlog': shortlog, 
    5251            'message': message, 
     52            'shortlog': util.shorten_line(message), 
    5353            'files': files 
    5454        } 
    5555    return changes 
  • trac/versioncontrol/web_ui/changeset.py

     
    117117                if chgset.date < start: 
    118118                    return 
    119119                if chgset.date < stop: 
    120                     excerpt = util.shorten_line(chgset.message or '--') 
     120                    message = chgset.message or '--' 
    121121                    if format == 'rss': 
    122                         title = 'Changeset <em>[%s]</em>: %s' % ( 
    123                             util.escape(chgset.rev), util.escape(excerpt)) 
     122                        title = 'Changeset <em>[%s]</em>: %s' \ 
     123                                % (util.escape(chgset.rev), 
     124                                   util.escape(util.shorten_line(message))) 
    124125                        href = self.env.abs_href.changeset(chgset.rev) 
    125                         message = wiki_to_html(chgset.message or '--', self.env, 
    126                                                db, absurls=True) 
     126                        message = wiki_to_html(message, self.env, db, 
     127                                               absurls=True) 
    127128                    else: 
    128                         title = 'Changeset <em>[%s]</em> by %s' % ( 
    129                             util.escape(chgset.rev), util.escape(chgset.author)) 
     129                        title = 'Changeset <em>[%s]</em> by %s' \ 
     130                                % (util.escape(chgset.rev), 
     131                                   util.escape(chgset.author)) 
    130132                        href = self.env.href.changeset(chgset.rev) 
    131                         message = wiki_to_oneliner(excerpt, self.env, db) 
     133                        message = wiki_to_oneliner(message, self.env, db, 
     134                                                   shorten=True) 
    132135                    if show_files: 
    133136                        files = [] 
    134137                        for chg in chgset.get_changes(): 
  • trac/Search.py

     
    2020 
    2121from trac.core import * 
    2222from trac.perm import IPermissionRequestor 
    23 from trac.util import TracError, escape, format_datetime, shorten_line 
     23from trac.util import TracError, escape, format_datetime 
    2424from trac.web import IRequestHandler 
    2525from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    2626from trac.wiki import IWikiSyntaxProvider 
  • trac/Timeline.py

     
    2222 
    2323from trac.core import * 
    2424from trac.perm import IPermissionRequestor 
    25 from trac.util import enum, escape, format_date, format_time, http_date, \ 
    26                       shorten_line 
     25from trac.util import enum, escape, format_date, format_time, http_date 
    2726from trac.web import IRequestHandler 
    2827from trac.web.chrome import add_link, add_stylesheet, INavigationContributor 
    2928 
  • trac/wiki/web_ui.py

     
    141141                                           absurls=True) 
    142142                else: 
    143143                    href = self.env.href.wiki(name) 
    144                     comment = wiki_to_oneliner(shorten_line(comment), self.env, 
    145                                                db) 
     144                    comment = wiki_to_oneliner(comment, self.env, db, 
     145                                               shorten=True) 
    146146                yield 'wiki', href, title, t, author, comment 
    147147 
    148148    # Internal methods 
  • trac/wiki/tests/wiki-tests.txt

     
    394394<pre class="wiki">Preformatted text. 
    395395</pre> 
    396396------------------------------ 
     397 [&hellip;] 
     398============================== 
    397399{{{ 
    398 Preformatted text. 
     400Outer block. 
     401{{{ 
     402Inner block. 
    399403}}} 
     404}}} 
     405------------------------------ 
     406<pre class="wiki">Outer block. 
     407{{{ 
     408Inner block. 
     409}}} 
     410</pre> 
     411------------------------------ 
     412 [&hellip;] 
    400413============================== 
     414Block  
    401415{{{ 
    402 #!default 
    403 Preformatted text. 
     416number one 
    404417}}} 
     418and block 
     419{{{ 
     420number two 
     421}}} 
    405422------------------------------ 
    406 <pre class="wiki">Preformatted text. 
     423<p> 
     424Block  
     425</p> 
     426<pre class="wiki">number one 
    407427</pre> 
     428<p> 
     429and block 
     430</p> 
     431<pre class="wiki">number two 
     432</pre> 
    408433------------------------------ 
     434Block  [&hellip;] 
     435and block [&hellip;] 
     436============================== 
    409437{{{ 
    410438#!default 
    411439Preformatted text. 
    412440}}} 
     441------------------------------ 
     442<pre class="wiki">Preformatted text. 
     443</pre> 
     444------------------------------ 
     445 [&hellip;] 
    413446============================== 
    414447{{{ 
    415448#!/bin/sh 
     
    420453echo &#34;foo&#34; 
    421454</pre> 
    422455------------------------------ 
    423 {{{ 
    424 #!/bin/sh 
    425 echo "foo" 
    426 }}} 
     456 [&hellip;] 
    427457============================== 
    428458{{{ 
    429459#!html 
     
    432462------------------------------ 
    433463<p>Hello World</p> 
    434464------------------------------ 
    435 {{{ 
    436 #!html 
    437 &lt;p&gt;Hello World&lt;/p&gt; 
    438 }}} 
     465 [&hellip;] 
    439466============================== 
    440467{{{ 
    441468#!html 
     
    448475</pre> 
    449476</div> 
    450477------------------------------ 
    451 {{{ 
    452 #!html 
    453 &lt;script&gt;alert("");&lt;/script&gt; 
    454 }}} 
     478 [&hellip;] 
    455479============================== 
    456480{{{ 
    457481#!html 
     
    464488</pre> 
    465489</div> 
    466490------------------------------ 
    467 {{{ 
    468 #!html 
    469 &lt;div onclick="alert(<i>)"&gt;Click me&lt;/div&gt; 
    470 }}}</i> 
     491 [&hellip;] 
    471492============================== 
    472493^superscript^, ,,subscript,,, normal. 
    473494------------------------------ 
     
    536557</p> 
    537558------------------------------ 
    538559Test comment blocks 
    539 {{{ 
    540 #!comment 
    541 This is simply removed from the output 
    542 }}} 
    543560============================== 
    544561Inline [[comment(This should not be seen)]] comment 
    545562------------------------------ 
     
    629646</i></strong></p> 
    630647------------------------------ 
    631648============================== 
     649{{{verbatim}}} 
     650{{{ 
     651{{{in `block` 
     652}}} 
     653`{{{this is verbatim}}}` and {{{`that` should also `be` verbatim}}} 
     654------------------------------ 
     655<p> 
     656<tt>verbatim</tt> 
     657</p> 
     658<pre class="wiki">{{{in `block` 
     659</pre> 
     660<p> 
     661<tt>{{{this is verbatim}}}</tt> and <tt>`that` should also `be` verbatim</tt> 
     662</p> 
     663------------------------------ 
     664<tt>verbatim</tt> 
     665{{{ 
     666{{{in <tt>block</tt> 
     667}}} 
     668<tt>{{{this is verbatim}}}</tt> and <tt>`that` should also `be` verbatim</tt> 
     669============================== 
    632670 term:: definition 
    633671------------------------------ 
    634672<dl><dt>term</dt><dd>definition 
  • trac/wiki/formatter.py

     
    637637    """ 
    638638    flavor = 'oneliner' 
    639639 
     640    _non_nested_block_re = re.compile(r"(?:^|\n)\{\{\{(?:\n(#![\w+-/]+))?" 
     641                                      r"(?:\n([^{}]|\{(?!\{\{)|\}(?!\}\}))+)+" 
     642                                      r"\}\}\}") 
     643     
    640644    def __init__(self, env, absurls=0, db=None): 
    641645        Formatter.__init__(self, env, None, absurls, db) 
    642646 
     
    658662            args = fullmatch.group('macroargs') 
    659663            return '[[%s%s]]' % (name,  args and '(...)' or '') 
    660664 
    661     def format(self, text, out): 
     665    def format(self, text, out, shorten=False): 
    662666        if not text: 
    663667            return 
    664668        self.out = out 
    665669        self._open_tags = [] 
    666670 
    667         result = re.sub(self.rules, self.replace, util.escape(text.strip(), False)) 
     671        result = text.strip() 
     672 
     673        # Simplify code blocks 
     674        def simplify(fullmatch): 
     675            processor = fullmatch.group(1) 
     676            if processor == '#!comment': 
     677                return '' 
     678            elif '\n' in fullmatch.group(): 
     679                return ' ![...]' 
     680            else: 
     681                return '`%s`' % match[3:-3] 
     682 
     683        old = '' 
     684        while old != result: 
     685            old = result 
     686            result = re.sub(self._non_nested_block_re, simplify, old) 
     687 
     688        if shorten: 
     689            result = util.shorten_line(result) 
     690 
     691        result = re.sub(self.rules, self.replace, util.escape(result, False)) 
     692        result = result.replace('[...]', '[&hellip;]') 
     693        if result.endswith('...'): 
     694            result = result[:-4] + ' &hellip;' 
     695 
    668696        # Close all open 'one line'-tags 
    669697        result += self.close_tag(None) 
    670698        out.write(result) 
     
    723751    Formatter(env, req, absurls, db).format(wikitext, out, escape_newlines) 
    724752    return out.getvalue() 
    725753 
    726 def wiki_to_oneliner(wikitext, env, db=None, absurls=0): 
     754def wiki_to_oneliner(wikitext, env, db=None, shorten=False, absurls=0): 
    727755    out = StringIO() 
    728     OneLinerFormatter(env, absurls, db).format(wikitext, out) 
     756    OneLinerFormatter(env, absurls, db).format(wikitext, out, shorten) 
    729757    return out.getvalue() 
    730758 
    731759def wiki_to_outline(wikitext, env, db=None, absurls=0, max_depth=None,