ext/rest.py
brancholdstable
changeset 4985 02b52bf9f5f8
parent 4719 aaed3f813ef8
child 4769 5b878b02b67b
equal deleted inserted replaced
4563:c25da7573ebd 4985:02b52bf9f5f8
    68         prb = inliner.problematic(rawtext, rawtext, msg)
    68         prb = inliner.problematic(rawtext, rawtext, msg)
    69         return [prb], [msg]
    69         return [prb], [msg]
    70     # Base URL mainly used by inliner.pep_reference; so this is correct:
    70     # Base URL mainly used by inliner.pep_reference; so this is correct:
    71     context = inliner.document.settings.context
    71     context = inliner.document.settings.context
    72     try:
    72     try:
    73         refedentity = context.req.entity_from_eid(eid_num)
    73         refedentity = context._cw.entity_from_eid(eid_num)
    74     except UnknownEid:
    74     except UnknownEid:
    75         ref = '#'
    75         ref = '#'
    76         rest += u' ' + context.req._('(UNEXISTANT EID)')
    76         rest += u' ' + context._cw._('(UNEXISTANT EID)')
    77     else:
    77     else:
    78         ref = refedentity.absolute_url()
    78         ref = refedentity.absolute_url()
    79     set_classes(options)
    79     set_classes(options)
    80     return [nodes.reference(rawtext, utils.unescape(rest), refuri=ref,
    80     return [nodes.reference(rawtext, utils.unescape(rest), refuri=ref,
    81                             **options)], []
    81                             **options)], []
    94     context = state.document.settings.context
    94     context = state.document.settings.context
    95     source = state_machine.input_lines.source(
    95     source = state_machine.input_lines.source(
    96         lineno - state_machine.input_offset - 1)
    96         lineno - state_machine.input_offset - 1)
    97     #source_dir = os.path.dirname(os.path.abspath(source))
    97     #source_dir = os.path.dirname(os.path.abspath(source))
    98     fid = arguments[0]
    98     fid = arguments[0]
    99     for lang in chain((context.req.lang, context.vreg.property_value('ui.language')),
    99     for lang in chain((context._cw.lang, context.vreg.property_value('ui.language')),
   100                       context.config.available_languages()):
   100                       context.config.available_languages()):
   101         rid = '%s_%s.rst' % (fid, lang)
   101         rid = '%s_%s.rst' % (fid, lang)
   102         resourcedir = context.config.locate_doc_file(rid)
   102         resourcedir = context.config.locate_doc_file(rid)
   103         if resourcedir:
   103         if resourcedir:
   104             break
   104             break
   145 winclude_directive.options = {'literal': directives.flag,
   145 winclude_directive.options = {'literal': directives.flag,
   146                               'encoding': directives.encoding}
   146                               'encoding': directives.encoding}
   147 
   147 
   148 try:
   148 try:
   149     from pygments import highlight
   149     from pygments import highlight
   150     from pygments.lexers import get_lexer_by_name, LEXERS
   150     from pygments.lexers import get_lexer_by_name
   151     from pygments.formatters import HtmlFormatter
   151     from pygments.formatters import HtmlFormatter
   152 except ImportError:
   152 except ImportError:
   153     pygments_directive = None
   153     pygments_directive = None
   154 else:
   154 else:
   155     _PYGMENTS_FORMATTER = HtmlFormatter()
   155     _PYGMENTS_FORMATTER = HtmlFormatter()
   157     def pygments_directive(name, arguments, options, content, lineno,
   157     def pygments_directive(name, arguments, options, content, lineno,
   158                            content_offset, block_text, state, state_machine):
   158                            content_offset, block_text, state, state_machine):
   159         try:
   159         try:
   160             lexer = get_lexer_by_name(arguments[0])
   160             lexer = get_lexer_by_name(arguments[0])
   161         except ValueError:
   161         except ValueError:
   162             import traceback
       
   163             traceback.print_exc()
       
   164             print sorted(aliases for module_name, name, aliases, _, _  in LEXERS.itervalues())
       
   165             # no lexer found
   162             # no lexer found
   166             lexer = get_lexer_by_name('text')
   163             lexer = get_lexer_by_name('text')
   167         parsed = highlight(u'\n'.join(content), lexer, _PYGMENTS_FORMATTER)
   164         parsed = highlight(u'\n'.join(content), lexer, _PYGMENTS_FORMATTER)
   168         context = state.document.settings.context
   165         # don't fail if no context set on the sourcecode directive
   169         context.req.add_css('pygments.css')
   166         try:
       
   167             context = state.document.settings.context
       
   168             context._cw.add_css('pygments.css')
       
   169         except AttributeError:
       
   170             # used outside cubicweb
       
   171             pass
   170         return [nodes.raw('', parsed, format='html')]
   172         return [nodes.raw('', parsed, format='html')]
   171 
   173 
   172     pygments_directive.arguments = (1, 0, 1)
   174     pygments_directive.arguments = (1, 0, 1)
   173     pygments_directive.content = 1
   175     pygments_directive.content = 1
   174 
   176 
   204 
   206 
   205     :rtype: unicode
   207     :rtype: unicode
   206     :return:
   208     :return:
   207       the data formatted as HTML or the original data if an error occured
   209       the data formatted as HTML or the original data if an error occured
   208     """
   210     """
   209     req = context.req
   211     req = context._cw
   210     if isinstance(data, unicode):
   212     if isinstance(data, unicode):
   211         encoding = 'unicode'
   213         encoding = 'unicode'
   212         # remove unprintable characters unauthorized in xml
   214         # remove unprintable characters unauthorized in xml
   213         data = data.translate(ESC_UCAR_TABLE)
   215         data = data.translate(ESC_UCAR_TABLE)
   214     else:
   216     else: