Source code for rstobj.directives.codeblock
# -*- coding: utf-8 -*-
"""
code block related directives.
"""
import attr
from .base import Directive
from ..base import RstObj
[docs]@attr.s
class Code(RstObj):
"""
Pure text code Snippet.
"""
text: str = attr.ib(default=None)
meta_not_none_fields = ("text",)
[docs]@attr.s
class CodeBlockEmpty(Directive):
"""
Example::
code = "your code ..."
cb = CodeBlockEmpty.from_string(code)
cb.render()
Output::
::
your code ...
"""
code = attr.ib(
default=None,
validator=attr.validators.instance_of(Code)
) # type: Code
meta_not_none_fields = ("code",)
[docs] @classmethod
def from_string(cls, text: str):
"""
Construct CodeBlock from string.
"""
return cls(code=Code(text=text))
[docs]@attr.s
class CodeBlockBase(CodeBlockEmpty):
"""
Base class for language specified code block.
"""
meta_lang: str = ""
[docs] class LangOptions(object):
"""
Full list can be found here https://pygments.org/docs/lexers/
"""
empty = ""
python = "python"
ruby = "ruby"
r = "r"
perl = "perl"
c = "c"
cpp = "cpp"
html = "html"
css = "css"
javascript = "javascript"
sql = "sql"
scala = "scala"
make = "make"
bash = "bash"
lua = "lua"
restructuredText = "ReST"
markdown = "md"
@property
def template_name(self):
return "{}.{}.rst".format(self.__module__, "CodeBlockBase")
code_block_doc_string = """
:param code: :class:`Code`.
Example::
code = "your code ..."
cb = CodeBlockLanguageName.from_string(code)
cb.render()
Output::
.. code-block: {}
your code ...
""".strip()
[docs]@attr.s
class CodeBlock(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.empty
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockPython(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.python
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockRuby(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.ruby
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockR(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.r
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockPerl(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.perl
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockC(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.c
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockCPP(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.cpp
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockHTML(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.html
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockCSS(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.css
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockJavaScript(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.javascript
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockSQL(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.sql
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockScala(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.scala
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockMake(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.make
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockBash(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.bash
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockLua(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.lua
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockRst(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.restructuredText
__doc__ = code_block_doc_string.format(meta_lang)
[docs]@attr.s
class CodeBlockMarkdown(CodeBlockBase):
meta_lang = CodeBlockBase.LangOptions.markdown
__doc__ = code_block_doc_string.format(meta_lang)