Writing Custom Parser Plugins
A doc2dash parser plugin has three jobs:
- Detect whether it can parse a directory and extract an appropriate name for the docset.
- Parse a directory and tell doc2dash about all entries that should be indexed.
- Patch files such that Dash can generate per-file tables of contents.
For that, it must implement the Parser
protocol:
Parser
Bases: Protocol
A doc2dash documentation parser.
Attributes:
Name | Type | Description |
---|---|---|
name |
str
|
The name of this parser. Used in user-facing output. |
Source code in src/doc2dash/parsers/types.py
detect(path)
staticmethod
__init__(source)
Initialize parser.
If this parser’s detect()
static method indicates that source
belongs to it, doc2dash instantiates it as parser_type(path)
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source |
Path
|
The path to the documentation that will be parsed. |
required |
Source code in src/doc2dash/parsers/types.py
parse()
Parse the path that this parser was initialized with and yield
a
ParserEntry
for each
entry it finds.
Returns:
Type | Description |
---|---|
Generator[ParserEntry, None, None]
|
A generator that yields |
Source code in src/doc2dash/parsers/types.py
Patcher
Bases: Protocol
A callable that patches the file that it belongs to and returns whether it did.
Source code in src/doc2dash/parsers/types.py
__call__(name, type, anchor, ref)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
name |
str
|
name of the entry |
required |
type |
EntryType
|
the type of the entry |
required |
anchor |
str
|
the place to add ref |
required |
ref |
str
|
the reference to add before anchor |
required |
Returns:
Type | Description |
---|---|
bool
|
Whether it found the anchor and did anything. |
Source code in src/doc2dash/parsers/types.py
ParserEntry
A symbol to be indexed, as found by Parser
’s parse()
method.
Source code in src/doc2dash/parsers/types.py
name: str
instance-attribute
The full display name of the index entry.
type: EntryType
instance-attribute
The type of the entry.
path: str
instance-attribute
Full path including anchor (#
). E.g. api.rst#print
EntryType
Bases: Enum
Possible types for entries.
Pick from https://kapeli.com/docsets#supportedentrytypes.
Source code in src/doc2dash/parsers/types.py
To use your custom parser, you have to invoke doc2dash with the --parser
option and specify the importable path to it.
Example
Often, it’s the easiest to get started by looking at existing parsers. Conveniently, doc2dash ships one:
The intersphinx parser uses a machine-readable format to extract the necessary metadata.