from docutils import nodes import os import os.path def setup(app): app.add_role('package', package_role) def package_role(name, rawtext, text, lineno, inliner, options={}, content=[]): rel_lvl = inliner.document.current_source.replace(os.getcwd(),'').count('/') if not os.path.exists('_build/api/odoc/'+text): raise ValueError('opam package ' + text + ' does not exist in the odoc') url = "api/api-inline.html#" + text + '/index.html' for i in range(1,rel_lvl): url = '../' + url node = nodes.reference(rawtext, text, refuri=url, **options) return [node], []