Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions src/sphinxnotes/data/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,7 @@ def extra_context(cls) -> ExtraContextRegistry:
def setup(app: Sphinx):
meta.pre_setup(app)

from . import render
from .examples import datadomain

render.setup(app)
datadomain.setup(app)
from . import poc
poc.setup(app)

return meta.post_setup(app)
4 changes: 2 additions & 2 deletions src/sphinxnotes/data/meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
from __future__ import annotations
from importlib import metadata

__project__ = 'sphinxnotes-dataview'
__project__ = 'sphinxnotes-data'
__author__ = 'Shengyu Zhang'
__desc__ = 'Create and view data in Sphinx documentation'

try:
__version__ = metadata.version('sphinxnotes-dataview')
__version__ = metadata.version('sphinxnotes-data')
except metadata.PackageNotFoundError:
__version__ = 'unknown'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
"""
sphinxnotes.data.examples.datadomain
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Allow user define, validate, and render data in pure markup and Jinja template.

All directives and roles are added to a domain to prevent naming conflicts.
sphinxnotes.data.poc
~~~~~~~~~~~~~~~~~~~~

:copyright: Copyright 2025~2026 by the Shengyu Zhang.
:license: BSD, see LICENSE for details.

POC (Proof of Concept) of the "sphinxnotes.data.render" extension.

This extension provides directives and roles for user to define, validate, and
render data.

All directives and roles are added to a "data" domain to prevent naming conflicts.
"""

from __future__ import annotations
Expand All @@ -18,9 +21,10 @@
from sphinx.util.docutils import SphinxDirective, CustomReSTDispatcher
from sphinx.domains import Domain

from ..data import RawData, Field, Schema
from ..render import Phase, Template, BaseDataDefineDirective, BaseDataDefineRole
from ..utils.freestyle import FreeStyleDirective, FreeStyleOptionSpec
from . import meta
from .data import RawData, Field, Schema
from .render import Phase, Template, BaseDataDefineDirective, BaseDataDefineRole
from .utils.freestyle import FreeStyleDirective, FreeStyleOptionSpec

if TYPE_CHECKING:
from sphinx.application import Sphinx
Expand Down Expand Up @@ -196,5 +200,11 @@ def _install_dispatcher(app: Sphinx, docname: str, source: list[str]) -> None:


def setup(app: Sphinx):
if __name__.startswith(meta.__project__.replace('-', '.')):
app.setup_extension('sphinxnotes.data.render')
else:
# For debug, see also :file:`docs/conf.py`.
app.setup_extension('data.render')

app.add_domain(DataDomain)
app.connect('source-read', _install_dispatcher)
17 changes: 16 additions & 1 deletion src/sphinxnotes/data/render/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
"""
sphinxnotes.data.render
~~~~~~~~~~~~~~~~~~~~~~~

:copyright: Copyright 2026 by the Shengyu Zhang.
:license: BSD, see LICENSE for details.

Sphinx extension entry point.
"""

from __future__ import annotations
from typing import TYPE_CHECKING

from .. import meta
from .render import (
Phase,
Template,
Expand Down Expand Up @@ -42,9 +53,13 @@
]


def setup(app: Sphinx) -> None:
def setup(app: Sphinx):
meta.pre_setup(app)

from . import pipeline, extractx, template

pipeline.setup(app)
extractx.setup(app)
template.setup(app)

return meta.post_setup(app)
15 changes: 14 additions & 1 deletion src/sphinxnotes/data/render/ctxnodes.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, override
from pprint import pformat

from docutils import nodes
Expand Down Expand Up @@ -235,3 +235,16 @@ def hook_markup_text(self, hook: MarkupTextHook) -> None:

def hook_rendered_nodes(self, hook: RenderedNodesHook) -> None:
self._rendered_nodes_hooks.append(hook)


"""Methods override from parent."""

@override
def copy(self) -> Any:
# NOTE: pending_node is no supposed to be copy as it does not make sense.
#
# For example: ablog extension may copy this node.
if self.inline:
return nodes.Text('')
else:
return nodes.paragraph()