45 from logilab.mtconverter import ESC_UCAR_TABLE, ESC_CAR_TABLE, xml_escape |
45 from logilab.mtconverter import ESC_UCAR_TABLE, ESC_CAR_TABLE, xml_escape |
46 |
46 |
47 from cubicweb import UnknownEid |
47 from cubicweb import UnknownEid |
48 from cubicweb.ext.html4zope import Writer |
48 from cubicweb.ext.html4zope import Writer |
49 |
49 |
|
50 from cubicweb.web.views import vid_from_rset # XXX better not to import c.w.views here... |
|
51 |
50 # We provide our own parser as an attempt to get rid of |
52 # We provide our own parser as an attempt to get rid of |
51 # state machine reinstanciation |
53 # state machine reinstanciation |
52 |
54 |
53 import re |
55 import re |
54 # compile states.Body patterns |
56 # compile states.Body patterns |
91 ref = refedentity.absolute_url() |
93 ref = refedentity.absolute_url() |
92 set_classes(options) |
94 set_classes(options) |
93 return [nodes.reference(rawtext, utils.unescape(rest), refuri=ref, |
95 return [nodes.reference(rawtext, utils.unescape(rest), refuri=ref, |
94 **options)], [] |
96 **options)], [] |
95 |
97 |
|
98 def rql_role(role, rawtext, text, lineno, inliner, options={}, content=[]): |
|
99 """:rql:`Any X,Y WHERE X is CWUser, X login Y:table`""" |
|
100 _cw = inliner.document.settings.context._cw |
|
101 text = text.strip() |
|
102 if ':' in text: |
|
103 rql, vid = text.rsplit(u':', 1) |
|
104 rql = rql.strip() |
|
105 else: |
|
106 rql, vid = text, None |
|
107 _cw.ensure_ro_rql(rql) |
|
108 rset = _cw.execute(rql, {'userid': _cw.user.eid}) |
|
109 if vid is None: |
|
110 vid = vid_from_rset(_cw, rset, _cw.vreg.schema) |
|
111 view = _cw.vreg['views'].select(vid, _cw, rset=rset) |
|
112 content = view.render() |
|
113 set_classes(options) |
|
114 return [nodes.raw('', content, format='html')], [] |
96 |
115 |
97 def winclude_directive(name, arguments, options, content, lineno, |
116 def winclude_directive(name, arguments, options, content, lineno, |
98 content_offset, block_text, state, state_machine): |
117 content_offset, block_text, state, state_machine): |
99 """Include a reST file as part of the content of this reST file. |
118 """Include a reST file as part of the content of this reST file. |
100 |
119 |
286 global _INITIALIZED |
305 global _INITIALIZED |
287 if _INITIALIZED: |
306 if _INITIALIZED: |
288 return |
307 return |
289 _INITIALIZED = True |
308 _INITIALIZED = True |
290 register_canonical_role('eid', eid_reference_role) |
309 register_canonical_role('eid', eid_reference_role) |
|
310 register_canonical_role('rql', rql_role) |
291 directives.register_directive('winclude', winclude_directive) |
311 directives.register_directive('winclude', winclude_directive) |
292 if pygments_directive is not None: |
312 if pygments_directive is not None: |
293 directives.register_directive('sourcecode', pygments_directive) |
313 directives.register_directive('sourcecode', pygments_directive) |