Changeset - b97ba9b23796
[Not reviewed]
default
0 1 0
Mads Kiilerich - 11 years ago 2014-07-04 14:12:07
madski@unity3d.com
helpers: introduce render_w_mentions

Eventually this function should support and auto detect multiple formats and is
thus not named for a specific format. But for now it is plain text only.

This kind of markup can quite easily and safely support additional magic
markup. It is much harder to do that on top of a richer markup format; it
must essentially be done in a single pass, with both all the various regexps
and the rst formatting done in a single pass.
1 file changed with 21 insertions and 1 deletions:
0 comments (0 inline, 0 general)
kallithea/lib/helpers.py
Show inline comments
 
@@ -52,13 +52,13 @@ from webhelpers.html.tags import _set_in
 
    convert_boolean_attrs, NotGiven, _make_safe_id_component
 

	
 
from kallithea.lib.annotate import annotate_highlight
 
from kallithea.lib.utils import repo_name_slug, get_custom_lexer
 
from kallithea.lib.utils2 import str2bool, safe_unicode, safe_str, \
 
    get_changeset_safe, datetime_to_time, time_to_datetime, AttributeDict, \
 
    safe_int
 
    safe_int, MENTIONS_REGEX
 
from kallithea.lib.markup_renderer import MarkupRenderer, url_re
 
from kallithea.lib.vcs.exceptions import ChangesetDoesNotExistError
 
from kallithea.lib.vcs.backends.base import BaseChangeset, EmptyChangeset
 
from kallithea.config.conf import DATE_FORMAT, DATETIME_FORMAT
 
from kallithea.model.changeset_status import ChangesetStatusModel
 
from kallithea.model.db import URL_SEP, Permission
 
@@ -1394,12 +1394,32 @@ def rst_w_mentions(source):
 

	
 
    :param source:
 
    """
 
    return literal('<div class="rst-block">%s</div>' %
 
                   MarkupRenderer.rst_with_mentions(source))
 

	
 

	
 
def mentions_replace(match_obj):
 
    return '<b>@%s</b>' % match_obj.group(1)
 

	
 

	
 
def render_w_mentions(source):
 
    """
 
    Render plain text with @mention highlighting.
 
    """
 
    s = source.rstrip()
 
    s = safe_unicode(s)
 
    s = '\n'.join(s.splitlines())
 
    s = html_escape(s)
 
    # this sequence of html-ifications seems to be safe and non-conflicting
 
    # if the issues regexp is sane
 
    s = _urlify_text(s)
 
    s = MENTIONS_REGEX.sub(mentions_replace, s)
 
    return literal('<code style="white-space:pre-wrap">%s</code>' % s)
 

	
 

	
 
def short_ref(ref_type, ref_name):
 
    if ref_type == 'rev':
 
        return short_id(ref_name)
 
    return ref_name
 

	
 
def link_to_ref(repo_name, ref_type, ref_name, rev=None):
0 comments (0 inline, 0 general)