mirror of
https://github.com/vyos/vyos-documentation.git
synced 2025-10-26 08:41:46 +01:00
Merge branch 'newdirectives'
This commit is contained in:
commit
a4fbdcf4b0
13
.gitignore
vendored
13
.gitignore
vendored
@ -1,5 +1,7 @@
|
|||||||
# python virtualenv
|
# python virtualenv
|
||||||
venv/
|
venv/
|
||||||
|
ENV/
|
||||||
|
.venv
|
||||||
|
|
||||||
# put various editor ignores here
|
# put various editor ignores here
|
||||||
.vscode/
|
.vscode/
|
||||||
@ -7,3 +9,14 @@ venv/
|
|||||||
*.vpw
|
*.vpw
|
||||||
*.vpwhist
|
*.vpwhist
|
||||||
*.vtg
|
*.vtg
|
||||||
|
|
||||||
|
# python cache files
|
||||||
|
*.pyc
|
||||||
|
__pychache__
|
||||||
|
|
||||||
|
# dotenv
|
||||||
|
.env
|
||||||
|
.envrc
|
||||||
|
|
||||||
|
# os specific
|
||||||
|
.DS_Store
|
||||||
|
|||||||
290
docs/_ext/vyos.py
Normal file
290
docs/_ext/vyos.py
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
from docutils import nodes, utils
|
||||||
|
from docutils.parsers.rst.roles import set_classes
|
||||||
|
from docutils.parsers.rst import Directive
|
||||||
|
from sphinx.util.docutils import SphinxDirective
|
||||||
|
|
||||||
|
|
||||||
|
def setup(app):
|
||||||
|
|
||||||
|
app.add_config_value(
|
||||||
|
'vyos_phabricator_url',
|
||||||
|
'https://phabricator.vyos.net/', ''
|
||||||
|
)
|
||||||
|
app.add_role('vytask', vytask_role)
|
||||||
|
app.add_role('cfgcmd', cmd_role)
|
||||||
|
app.add_role('opcmd', cmd_role)
|
||||||
|
|
||||||
|
print(app.config.vyos_phabricator_url)
|
||||||
|
|
||||||
|
app.add_node(
|
||||||
|
inlinecmd,
|
||||||
|
html=(inlinecmd.visit_span, inlinecmd.depart_span),
|
||||||
|
latex=(inlinecmd.visit_tex, inlinecmd.depart_tex),
|
||||||
|
text=(inlinecmd.visit_span, inlinecmd.depart_span)
|
||||||
|
)
|
||||||
|
|
||||||
|
app.add_node(
|
||||||
|
CmdDiv,
|
||||||
|
html=(CmdDiv.visit_div, CmdDiv.depart_div),
|
||||||
|
latex=(CmdDiv.visit_tex, CmdDiv.depart_tex),
|
||||||
|
text=(CmdDiv.visit_div, CmdDiv.depart_div)
|
||||||
|
)
|
||||||
|
app.add_node(
|
||||||
|
CmdBody,
|
||||||
|
html=(CmdBody.visit_div, CmdBody.depart_div),
|
||||||
|
latex=(CmdBody.visit_tex, CmdBody.depart_tex),
|
||||||
|
text=(CmdBody.visit_div, CmdBody.depart_div)
|
||||||
|
)
|
||||||
|
app.add_node(
|
||||||
|
CmdHeader,
|
||||||
|
html=(CmdHeader.visit_div, CmdHeader.depart_div),
|
||||||
|
latex=(CmdHeader.tex, CmdHeader.tex),
|
||||||
|
text=(CmdHeader.visit_div, CmdHeader.depart_div)
|
||||||
|
)
|
||||||
|
app.add_node(CfgcmdList)
|
||||||
|
app.add_directive('cfgcmdlist', CfgcmdlistDirective)
|
||||||
|
|
||||||
|
app.add_node(OpcmdList)
|
||||||
|
app.add_directive('opcmdlist', OpcmdlistDirective)
|
||||||
|
|
||||||
|
app.add_directive('cfgcmd', CfgCmdDirective)
|
||||||
|
app.add_directive('opcmd', OpCmdDirective)
|
||||||
|
app.connect('doctree-resolved', process_cmd_nodes)
|
||||||
|
|
||||||
|
|
||||||
|
class CfgcmdList(nodes.General, nodes.Element):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class OpcmdList(nodes.General, nodes.Element):
|
||||||
|
pass
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
class CmdHeader(nodes.General, nodes.Element):
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def visit_div(self, node):
|
||||||
|
self.body.append(self.starttag(node, 'div'))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def depart_div(self, node=None):
|
||||||
|
# self.body.append('</div>\n')
|
||||||
|
self.body.append('<a class="cmdlink" href="#%s" ' %
|
||||||
|
node.children[0]['refid'] +
|
||||||
|
'title="%s"></a></div>' % (
|
||||||
|
'Permalink to this Command'))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def tex(self, node=None):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CmdDiv(nodes.General, nodes.Element):
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def visit_div(self, node):
|
||||||
|
self.body.append(self.starttag(node, 'div'))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def depart_div(self, node=None):
|
||||||
|
self.body.append('</div>\n')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def tex(self, node=None):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def visit_tex(self, node=None):
|
||||||
|
self.body.append('\n\n\\begin{changemargin}{0cm}{0cm}\n')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def depart_tex(self, node=None):
|
||||||
|
self.body.append('\n\\end{changemargin}\n\n')
|
||||||
|
|
||||||
|
class CmdBody(nodes.General, nodes.Element):
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def visit_div(self, node):
|
||||||
|
self.body.append(self.starttag(node, 'div'))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def depart_div(self, node=None):
|
||||||
|
self.body.append('</div>\n')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def visit_tex(self, node=None):
|
||||||
|
self.body.append('\n\n\\begin{changemargin}{0.5cm}{0.5cm}\n')
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def depart_tex(self, node=None):
|
||||||
|
self.body.append('\n\\end{changemargin}\n\n')
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def tex(self, node=None):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class inlinecmd(nodes.inline):
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def visit_span(self, node):
|
||||||
|
self.body.append(self.starttag(node, 'span'))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def depart_span(self, node=None):
|
||||||
|
self.body.append('</span>\n')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def visit_tex(self, node=None):
|
||||||
|
self.body.append(r'\sphinxbfcode{\sphinxupquote{')
|
||||||
|
#self.literal_whitespace += 1
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def depart_tex(self, node=None):
|
||||||
|
self.body.append(r'}}')
|
||||||
|
#self.literal_whitespace -= 1
|
||||||
|
|
||||||
|
|
||||||
|
class CfgcmdlistDirective(Directive):
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
return [CfgcmdList('')]
|
||||||
|
|
||||||
|
|
||||||
|
class OpcmdlistDirective(Directive):
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
return [OpcmdList('')]
|
||||||
|
|
||||||
|
|
||||||
|
class CmdDirective(SphinxDirective):
|
||||||
|
|
||||||
|
has_content = True
|
||||||
|
custom_class = ''
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
title_list = []
|
||||||
|
content_list = []
|
||||||
|
title_text = ''
|
||||||
|
content_text = ''
|
||||||
|
has_body = False
|
||||||
|
|
||||||
|
cfgmode = self.custom_class + "cmd"
|
||||||
|
|
||||||
|
if '' in self.content:
|
||||||
|
index = self.content.index('')
|
||||||
|
title_list = self.content[0:index]
|
||||||
|
content_list = self.content[index + 1:]
|
||||||
|
title_text = ' '.join(title_list)
|
||||||
|
content_text = '\n'.join(content_list)
|
||||||
|
has_body = True
|
||||||
|
else:
|
||||||
|
title_text = ' '.join(self.content)
|
||||||
|
|
||||||
|
anchor_id = nodes.make_id(self.custom_class + "cmd-" + title_text)
|
||||||
|
target = nodes.target(ids=[anchor_id])
|
||||||
|
|
||||||
|
panel_name = 'cmd-{}'.format(self.custom_class)
|
||||||
|
panel_element = CmdDiv()
|
||||||
|
panel_element['classes'] += ['cmd', panel_name]
|
||||||
|
|
||||||
|
heading_element = CmdHeader(title_text)
|
||||||
|
title_nodes, messages = self.state.inline_text(title_text,
|
||||||
|
self.lineno)
|
||||||
|
|
||||||
|
title = inlinecmd(title_text, '', *title_nodes)
|
||||||
|
target['classes'] += []
|
||||||
|
title['classes'] += [cfgmode]
|
||||||
|
heading_element.append(target)
|
||||||
|
heading_element.append(title)
|
||||||
|
|
||||||
|
heading_element['classes'] += [self.custom_class + 'cmd-heading']
|
||||||
|
|
||||||
|
panel_element.append(heading_element)
|
||||||
|
|
||||||
|
append_list = {
|
||||||
|
'docname': self.env.docname,
|
||||||
|
'cmdnode': title.deepcopy(),
|
||||||
|
'cmd': title_text,
|
||||||
|
'target': target,
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfgmode == 'opcmd':
|
||||||
|
if not hasattr(self.env, "vyos_opcmd"):
|
||||||
|
self.env.vyos_opcmd = []
|
||||||
|
self.env.vyos_opcmd.append(append_list)
|
||||||
|
|
||||||
|
if cfgmode == 'cfgcmd':
|
||||||
|
if not hasattr(self.env, "vyos_cfgcmd"):
|
||||||
|
self.env.vyos_cfgcmd = []
|
||||||
|
self.env.vyos_cfgcmd.append(append_list)
|
||||||
|
|
||||||
|
if has_body:
|
||||||
|
body_element = CmdBody(content_text)
|
||||||
|
self.state.nested_parse(
|
||||||
|
content_list,
|
||||||
|
self.content_offset,
|
||||||
|
body_element
|
||||||
|
)
|
||||||
|
|
||||||
|
body_element['classes'] += [self.custom_class + 'cmd-body']
|
||||||
|
panel_element.append(body_element)
|
||||||
|
return [panel_element]
|
||||||
|
|
||||||
|
|
||||||
|
class OpCmdDirective(CmdDirective):
|
||||||
|
custom_class = 'op'
|
||||||
|
|
||||||
|
|
||||||
|
class CfgCmdDirective(CmdDirective):
|
||||||
|
custom_class = 'cfg'
|
||||||
|
|
||||||
|
|
||||||
|
def process_cmd_node(app, cmd, fromdocname):
|
||||||
|
para = nodes.paragraph()
|
||||||
|
newnode = nodes.reference(' ', ' ')
|
||||||
|
innernode = cmd['cmdnode']
|
||||||
|
newnode['refdocname'] = cmd['docname']
|
||||||
|
newnode['refuri'] = app.builder.get_relative_uri(
|
||||||
|
fromdocname, cmd['docname'])
|
||||||
|
newnode['refuri'] += '#' + cmd['target']['refid']
|
||||||
|
newnode['classes'] += ['cmdlink']
|
||||||
|
newnode.append(innernode)
|
||||||
|
para += newnode
|
||||||
|
return para
|
||||||
|
|
||||||
|
|
||||||
|
def process_cmd_nodes(app, doctree, fromdocname):
|
||||||
|
env = app.builder.env
|
||||||
|
|
||||||
|
for node in doctree.traverse(CfgcmdList):
|
||||||
|
content = []
|
||||||
|
|
||||||
|
for cmd in sorted(env.vyos_cfgcmd, key=lambda i: i['cmd']):
|
||||||
|
content.append(process_cmd_node(app, cmd, fromdocname))
|
||||||
|
node.replace_self(content)
|
||||||
|
|
||||||
|
for node in doctree.traverse(OpcmdList):
|
||||||
|
content = []
|
||||||
|
|
||||||
|
for cmd in sorted(env.vyos_opcmd, key=lambda i: i['cmd']):
|
||||||
|
content.append(process_cmd_node(app, cmd, fromdocname))
|
||||||
|
node.replace_self(content)
|
||||||
|
|
||||||
|
|
||||||
|
def vytask_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||||
|
app = inliner.document.settings.env.app
|
||||||
|
base = app.config.vyos_phabricator_url
|
||||||
|
ref = base + str(text)
|
||||||
|
set_classes(options)
|
||||||
|
node = nodes.reference(
|
||||||
|
rawtext, utils.unescape(str(text)), refuri=ref, **options)
|
||||||
|
return [node], []
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||||
|
node = nodes.literal(text, text)
|
||||||
|
return [node], []
|
||||||
54
docs/_static/css/custom.css
vendored
54
docs/_static/css/custom.css
vendored
@ -1,3 +1,57 @@
|
|||||||
|
span.opcmd,
|
||||||
|
span.cfgcmd {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: transparent;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 100% !important;
|
||||||
|
max-width: 100%;
|
||||||
|
color: #000;
|
||||||
|
font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.opcmd-heading,
|
||||||
|
.cfgcmd-heading {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 6px 0;
|
||||||
|
font-size: 90%;
|
||||||
|
line-height: normal;
|
||||||
|
background: #e7f2fa;
|
||||||
|
color: #2980B9;
|
||||||
|
border-top: solid 3px #6ab0de;
|
||||||
|
border-top-width: 3px;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-color: rgb(106, 176, 222);
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.opcmd-body,
|
||||||
|
.cfgcmd-body {
|
||||||
|
margin: 6px 0;
|
||||||
|
padding-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.cfgcmd-heading .cmdlink:after,
|
||||||
|
.opcmd-heading .cmdlink:after {
|
||||||
|
content: "";
|
||||||
|
font-family: FontAwesome
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.cfgcmd-heading:not(:hover) .cmdlink,
|
||||||
|
.opcmd-heading:not(:hover) .cmdlink {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
a.cmdlink {
|
||||||
|
font-size: 80%;
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
.wy-nav-content {
|
.wy-nav-content {
|
||||||
max-width : none;
|
max-width : none;
|
||||||
}
|
}
|
||||||
|
|||||||
12
docs/appendix/cmd-index.rst
Normal file
12
docs/appendix/cmd-index.rst
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
.. cmd-index:
|
||||||
|
|
||||||
|
Operational Command Refercence
|
||||||
|
==============================
|
||||||
|
|
||||||
|
.. opcmdlist::
|
||||||
|
|
||||||
|
|
||||||
|
Configuration Command Refercence
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. cfgcmdlist::
|
||||||
23
docs/conf.py
23
docs/conf.py
@ -12,9 +12,9 @@
|
|||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
#
|
#
|
||||||
# import os
|
import os
|
||||||
# import sys
|
import sys
|
||||||
# sys.path.insert(0, os.path.abspath('.'))
|
sys.path.append(os.path.abspath("./_ext"))
|
||||||
|
|
||||||
from docutils import nodes, utils
|
from docutils import nodes, utils
|
||||||
from docutils.parsers.rst.roles import set_classes
|
from docutils.parsers.rst.roles import set_classes
|
||||||
@ -43,7 +43,9 @@ release = u'1.3.x (equuleus)'
|
|||||||
extensions = ['sphinx.ext.intersphinx',
|
extensions = ['sphinx.ext.intersphinx',
|
||||||
'sphinx.ext.todo',
|
'sphinx.ext.todo',
|
||||||
'sphinx.ext.ifconfig',
|
'sphinx.ext.ifconfig',
|
||||||
'sphinx.ext.graphviz']
|
'sphinx.ext.graphviz',
|
||||||
|
'vyos'
|
||||||
|
]
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
@ -136,6 +138,9 @@ latex_elements = {
|
|||||||
# Latex figure (float) alignment
|
# Latex figure (float) alignment
|
||||||
#
|
#
|
||||||
# 'figure_align': 'htbp',
|
# 'figure_align': 'htbp',
|
||||||
|
'preamble': r'''\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
|
||||||
|
\let\endchangemargin=\endlist''',
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
@ -183,10 +188,6 @@ def vytask_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
|||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_config_value(
|
pass
|
||||||
'vyos_phabricator_url',
|
#app.add_object_type('opcmd', 'opcmd')
|
||||||
'https://phabricator.vyos.net/', ''
|
#app.add_object_type('cfgcmd', 'cfgcmd')
|
||||||
)
|
|
||||||
app.add_role('vytask', vytask_role)
|
|
||||||
app.add_object_type('opcmd', 'opcmd')
|
|
||||||
app.add_object_type('cfgcmd', 'cfgcmd')
|
|
||||||
|
|||||||
@ -54,6 +54,7 @@ VyOS User Guide
|
|||||||
|
|
||||||
appendix/release-notes
|
appendix/release-notes
|
||||||
appendix/examples/index
|
appendix/examples/index
|
||||||
|
appendix/cmd-index
|
||||||
appendix/commandtree/index
|
appendix/commandtree/index
|
||||||
appendix/vyos-on-vmware
|
appendix/vyos-on-vmware
|
||||||
appendix/vyos-on-baremetal
|
appendix/vyos-on-baremetal
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user