Add ability to remove directives

This commit is contained in:
Jared Dillard
2025-05-18 17:15:21 -07:00
parent 1c7c381c6d
commit dc7fa4e122
3 changed files with 68 additions and 0 deletions
+2
View File
@@ -58,6 +58,7 @@ def build_finished(app: Sphinx, exception):
"llms_txt_full_max_size": app.config.llms_txt_full_max_size,
"llms_txt_directives": app.config.llms_txt_directives,
"llms_txt_exclude": app.config.llms_txt_exclude,
"llms_txt_rm_directives": app.config.llms_txt_rm_directives,
"html_baseurl": getattr(app.config, "html_baseurl", ""),
}
_manager.set_config(config)
@@ -86,6 +87,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value("llms_txt_title", None, "env")
app.add_config_value("llms_txt_summary", None, "env")
app.add_config_value("llms_txt_exclude", [], "env")
app.add_config_value("llms_txt_rm_directives", False, "env")
# Connect to Sphinx events
app.connect("doctree-resolved", doctree_resolved)
+25
View File
@@ -50,8 +50,33 @@ class DocumentProcessor:
# Then process path directives (image, figure, etc.)
content = self._process_path_directives(content, source_path)
# Remove directives if configured to do so
if self.config.get("llms_txt_rm_directives", False):
content = self._remove_directives(content)
return content
def _remove_directives(self, content: str) -> str:
"""Remove directives from content.
Args:
content: The source content from which to remove directives
Returns:
Content with all directives removed
"""
# Match any directive pattern (starting with .. followed by ::)
directive_pattern = re.compile(r'^\s*\.\.\s+[\w\-]+::.*?$(?:\n\s+.*?$)*',
re.MULTILINE | re.DOTALL)
# Replace all directives with an empty string
processed_content = directive_pattern.sub('', content)
# Clean up any consecutive blank lines that might result from directive removal
processed_content = re.sub(r'\n{3,}', '\n\n', processed_content)
return processed_content
def _extract_relative_document_path(
self, source_path: Path
) -> Tuple[Optional[str], Optional[str], Optional[List[str]]]: