| """ |
| Site Configuration Helper |
| |
| Handles site-specific configurations and detection. |
| """ |
|
|
| from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator |
|
|
| from ....config.logfire_config import get_logger |
|
|
| logger = get_logger(__name__) |
|
|
|
|
| class SiteConfig: |
| """Helper class for site-specific configurations.""" |
|
|
| |
| CODE_BLOCK_SELECTORS = [ |
| |
| ".milkdown-code-block pre", |
| |
| ".monaco-editor .view-lines", |
| |
| ".cm-editor .cm-content", |
| ".cm-line", |
| |
| "pre[class*='language-']", |
| "code[class*='language-']", |
| ".prism-code", |
| |
| "pre code.hljs", |
| ".hljs", |
| |
| ".shiki", |
| "div[class*='language-'] pre", |
| ".astro-code", |
| |
| "pre code", |
| ".code-block", |
| ".codeblock", |
| ".highlight pre", |
| ] |
|
|
| @staticmethod |
| def is_documentation_site(url: str) -> bool: |
| """ |
| Check if URL is likely a documentation site that needs special handling. |
| |
| Args: |
| url: URL to check |
| |
| Returns: |
| True if URL appears to be a documentation site |
| """ |
| doc_patterns = [ |
| "docs.", |
| "documentation.", |
| "/docs/", |
| "/documentation/", |
| "readthedocs", |
| "gitbook", |
| "docusaurus", |
| "vitepress", |
| "docsify", |
| "mkdocs", |
| ] |
|
|
| url_lower = url.lower() |
| return any(pattern in url_lower for pattern in doc_patterns) |
|
|
| @staticmethod |
| def get_markdown_generator(): |
| """ |
| Get markdown generator that preserves code blocks. |
| |
| Returns: |
| Configured markdown generator |
| """ |
| return DefaultMarkdownGenerator( |
| content_source="html", |
| options={ |
| "mark_code": True, |
| "handle_code_in_pre": True, |
| "body_width": 0, |
| "skip_internal_links": True, |
| "include_raw_html": False, |
| "escape": False, |
| "decode_unicode": True, |
| "strip_empty_lines": False, |
| "preserve_code_formatting": True, |
| "code_language_callback": lambda el: el.get("class", "").replace("language-", "") if el else "", |
| }, |
| ) |
|
|