Repository Analysis

oomol-lab/pdf-craft

PDF craft can convert PDF files into various other formats. This project will focus on processing PDF files of scanned books.

30.4 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of oomol-lab/pdf-craft, a Python project with 6,231 GitHub stars. SynthScan v2.0 examined 27,687 lines of code across 228 source files, recording 688 pattern matches distributed across 10 syntactic categories. The overall adjusted score of 30.4 places this repository in the Strong AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

30.4
Adjusted Score
30.4
Raw Score
100%
Time Factor
2026-08-27
Last Push
6.2K
Stars
Python
Language
27.7K
Lines of Code
228
Files
688
Pattern Hits
2026-08-29
Scan Date
0.12
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 28MEDIUM 18LOW 642

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 688 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers294 hits · 317 pts
SeverityFileLineSnippetContext
LOWpdf_craft_tool/runtime.py48def create_ocr_config_from_env(mode: OCRMode | None = None) -> OCRConfig:CODE
LOWpdf_craft_tool/cli.py405def _resolve_translation_profiles(translation: dict[str, Any] | None, output_root: Path) -> dict[str, Any] | None:CODE
LOWpdf_craft_tool/smoke/runner.py406def _xml_translation_transformer(run: SmokeRun, run_path: Path) -> ChapterXMLTransformer | None:CODE
LOWtests/test_parser.py66 def test_html_comment_removal(self):CODE
LOWtests/test_parser.py71 def test_processing_instruction_removal(self):CODE
LOWtests/test_parser.py76 def test_cdata_section_removal(self):CODE
LOWtests/test_parser.py86 def test_gfm_tagfilter_script(self):CODE
LOWtests/test_parser.py96 def test_gfm_tagfilter_iframe(self):CODE
LOWtests/test_parser.py130 def test_allowed_url_protocol_https(self):CODE
LOWtests/test_parser.py139 def test_allowed_url_protocol_http(self):CODE
LOWtests/test_parser.py148 def test_allowed_url_protocol_mailto(self):CODE
LOWtests/test_parser.py157 def test_allowed_relative_url(self):CODE
LOWtests/test_parser.py166 def test_disallowed_url_protocol_javascript(self):CODE
LOWtests/test_parser.py176 def test_disallowed_url_protocol_data(self):CODE
LOWtests/test_parser.py43 def test_inline_tag_with_text(self):CODE
LOWtests/test_parser.py119 def test_disallowed_attributes_filtered(self):CODE
LOWtests/test_parser.py188 def test_disallowed_tag_escaped(self):CODE
LOWtests/test_parser.py196 def test_disallowed_tag_with_allowed_child(self):CODE
LOWtests/test_parser.py235 def test_blockquote_with_cite(self):CODE
LOWtests/test_parser.py263 def test_multiple_tags_in_sequence(self):CODE
LOWtests/test_parser.py299 def test_html_entities_in_attributes(self):CODE
LOWtests/test_parser.py340 def test_mixed_content_complex(self):CODE
LOWtests/test_parser.py352 def test_incomplete_tag_treated_as_text(self):CODE
LOWtests/test_parser.py357 def test_video_tag_with_attributes(self):CODE
LOWtests/test_parser.py385 def test_multiple_attributes_filtering(self):CODE
LOWtests/test_parser.py401 def test_case_insensitive_tag_names(self):CODE
LOWtests/test_parser.py433 def test_single_quoted_attributes(self):CODE
LOWtests/test_llm_loop.py8 def test_retries_with_typed_protocol_and_bounded_history(self):CODE
LOWtests/test_llm_loop.py35 def test_preserves_initial_messages_when_history_is_cropped(self):CODE
LOWtests/test_llm_loop.py57 def test_reset_history_discards_previous_retry_messages_but_keeps_initial(self):CODE
LOWtests/test_llm_loop.py78 def test_max_attempts_is_total_requests_and_transport_errors_propagate(self):CODE
LOWtests/test_llm_loop.py104 def test_protocol_callback_exceptions_propagate(self):CODE
LOWtests/test_jointer.py550 def test_single_dollar_inline_formula(self):CODE
LOWtests/test_jointer.py560 def test_double_dollar_formula(self):CODE
LOWtests/test_jointer.py570 def test_parenthesis_inline_formula(self):CODE
LOWtests/test_jointer.py580 def test_bracket_display_formula(self):CODE
LOWtests/test_jointer.py19 def test_equation_with_bracket_notation(self):CODE
LOWtests/test_jointer.py35 def test_equation_with_double_dollar(self):CODE
LOWtests/test_jointer.py51 def test_equation_with_parenthesis_notation(self):CODE
LOWtests/test_jointer.py67 def test_equation_with_single_dollar(self):CODE
LOWtests/test_jointer.py83 def test_equation_without_title(self):CODE
LOWtests/test_jointer.py99 def test_equation_without_caption(self):CODE
LOWtests/test_jointer.py133 def test_equation_with_existing_title(self):CODE
LOWtests/test_jointer.py149 def test_equation_with_existing_caption(self):CODE
LOWtests/test_jointer.py165 def test_equation_empty_content(self):CODE
LOWtests/test_jointer.py181 def test_equation_no_latex_found(self):CODE
LOWtests/test_jointer.py201 def test_table_with_title_and_caption(self):CODE
LOWtests/test_jointer.py233 def test_table_without_caption(self):CODE
LOWtests/test_jointer.py265 def test_table_with_attributes(self):CODE
LOWtests/test_jointer.py310 def test_table_case_insensitive(self):CODE
LOWtests/test_jointer.py326 def test_table_with_existing_title(self):CODE
LOWtests/test_jointer.py342 def test_table_with_existing_caption(self):CODE
LOWtests/test_jointer.py374 def test_table_no_table_found(self):CODE
LOWtests/test_jointer.py392 def test_table_internal_title_and_caption_still_normalized(self):CODE
LOWtests/test_jointer.py414 def test_adjacent_title_paragraph_is_attached_to_table(self):CODE
LOWtests/test_jointer.py441 def test_adjacent_note_paragraph_is_attached_to_table_caption(self):CODE
LOWtests/test_jointer.py463 def test_adjacent_footnote_paragraph_is_attached_to_table_caption(self):CODE
LOWtests/test_jointer.py485 def test_numeric_leading_body_text_is_not_attached_to_table_caption(self):CODE
LOWtests/test_jointer.py514 def test_normal_following_paragraph_is_not_attached_to_table_caption(self):CODE
LOWtests/test_jointer.py647 def test_complex_latex_content(self):CODE
234 more matches not shown…
Unused Imports221 hits · 202 pts
SeverityFileLineSnippetContext
LOWpdf_craft_tool/smoke/__init__.py3CODE
LOWpdf_craft_tool/smoke/__init__.py3CODE
LOWpdf_craft_tool/smoke/__init__.py3CODE
LOWpdf_craft/__init__.py1CODE
LOWpdf_craft/__init__.py1CODE
LOWpdf_craft/__init__.py1CODE
LOWpdf_craft/__init__.py3CODE
LOWpdf_craft/__init__.py3CODE
LOWpdf_craft/__init__.py3CODE
LOWpdf_craft/__init__.py3CODE
LOWpdf_craft/__init__.py3CODE
LOWpdf_craft/__init__.py3CODE
LOWpdf_craft/__init__.py11CODE
LOWpdf_craft/__init__.py12CODE
LOWpdf_craft/__init__.py12CODE
LOWpdf_craft/__init__.py12CODE
LOWpdf_craft/__init__.py13CODE
LOWpdf_craft/__init__.py14CODE
LOWpdf_craft/__init__.py14CODE
LOWpdf_craft/__init__.py14CODE
LOWpdf_craft/__init__.py14CODE
LOWpdf_craft/__init__.py14CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py15CODE
LOWpdf_craft/__init__.py26CODE
LOWpdf_craft/__init__.py27CODE
LOWpdf_craft/__init__.py27CODE
LOWpdf_craft/__init__.py27CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py28CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py40CODE
LOWpdf_craft/__init__.py51CODE
LOWpdf_craft/__init__.py51CODE
LOWpdf_craft/__init__.py52CODE
LOWpdf_craft/__init__.py53CODE
LOWpdf_craft/__init__.py53CODE
LOWpdf_craft/pipeline/__init__.py1CODE
161 more matches not shown…
Magic Placeholder Names28 hits · 140 pts
SeverityFileLineSnippetContext
HIGHREADME_zh-CN.md69 api_key="your-api-key",CODE
HIGHREADME_zh-CN.md100 api_key="your-api-key",CODE
HIGHREADME_zh-CN.md161 key="your-api-key",CODE
HIGHREADME.md69 api_key="your-api-key",CODE
HIGHREADME.md96 api_key="your-api-key",CODE
HIGHREADME.md154 key="your-api-key",CODE
HIGHformat.template.json2 "key": "<YOUR_API_KEY>",CODE
HIGHformat.template.json2 "key": "<YOUR_API_KEY>",CODE
HIGHdocs/changelog/v1.0.9.md55 key="your-api-key",CODE
HIGHdocs/changelog/v1.0.10.md86 key="your-api-key",CODE
HIGHdocs/zh-CN/API_REFERENCE.md310 key="your-api-key",CODE
HIGHdocs/zh-CN/API_REFERENCE.md354 key="your-api-key",CODE
HIGHdocs/zh-CN/API_REFERENCE.md442 key="your-api-key",CODE
HIGHdocs/zh-CN/PDF_TRANSLATION.md33 api_key="your-api-key",CODE
HIGHdocs/zh-CN/EPUB_TRANSLATION.md16 key="your-api-key",CODE
HIGHdocs/zh-CN/EPUB_TRANSLATION.md86 key="your-api-key",CODE
HIGHdocs/zh-CN/EPUB_TRANSLATION.md102 key="your-api-key",CODE
HIGHdocs/zh-CN/EPUB_TRANSLATION.md109 key="your-api-key",CODE
HIGHdocs/zh-CN/EPUB_TRANSLATION.md176 key="your-api-key",CODE
HIGHdocs/zh-CN/OCR_BACKENDS.md163 api_key="your-api-key",CODE
HIGHdocs/zh-CN/OCR_BACKENDS.md177 api_key="your-api-key",CODE
HIGHdocs/zh-CN/OCR_BACKENDS.md216 api_key="your-api-key",CODE
HIGHdocs/en/PDF_TRANSLATION.md24 api_key="your-api-key",CODE
HIGHdocs/en/EPUB_TRANSLATION.md15 key="your-api-key",CODE
HIGHdocs/en/EPUB_TRANSLATION.md78 key="your-api-key",CODE
HIGHdocs/en/EPUB_TRANSLATION.md122 key="your-api-key", url="https://example.com/v1",CODE
HIGHdocs/en/EPUB_TRANSLATION.md126 key="your-api-key", url="https://example.com/v1",CODE
HIGHdocs/en/OCR_BACKENDS.md44 api_key="your-api-key",CODE
Deep Nesting65 hits · 65 pts
SeverityFileLineSnippetContext
LOWpdf_craft/expression.py23CODE
LOWpdf_craft/expression.py36CODE
LOWpdf_craft/expression.py51CODE
LOWpdf_craft/expression.py68CODE
LOWpdf_craft/pipeline/pdf/pipeline.py165CODE
LOWpdf_craft/pipeline/pdf/pipeline.py143CODE
LOWpdf_craft/pipeline/pdf/patcher.py69CODE
LOWpdf_craft/pipeline/epub/translation/translator.py42CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py93CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py368CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py430CODE
LOWpdf_craft/pipeline/epub/adapter/zip.py28CODE
LOWpdf_craft/pipeline/epub/adapter/spines.py10CODE
LOWpdf_craft/pipeline/epub/adapter/math.py56CODE
LOWpdf_craft/renderer/epub/render.py43CODE
LOWpdf_craft/renderer/epub/render.py119CODE
LOWpdf_craft/renderer/epub/render.py188CODE
LOWpdf_craft/renderer/epub/render.py266CODE
LOWpdf_craft/renderer/epub/render.py299CODE
LOWpdf_craft/llm/runtime.py93CODE
LOWpdf_craft/llm/runtime.py105CODE
LOWpdf_craft/markdown/paragraph/render.py63CODE
LOWpdf_craft/markdown/paragraph/render.py77CODE
LOWpdf_craft/markdown/paragraph/parser.py8CODE
LOWpdf_craft/markdown/paragraph/parser.py280CODE
LOWpdf_craft/markdown/paragraph/parser.py372CODE
LOWpdf_craft/markdown/paragraph/parser.py396CODE
LOWpdf_craft/markdown/render/layouts.py159CODE
LOW…ft/transformer/xml_translator/segment/block_segment.py67CODE
LOW…t/transformer/xml_translator/segment/inline_segment.py39CODE
LOW…t/transformer/xml_translator/segment/inline_segment.py189CODE
LOW…t/transformer/xml_translator/segment/inline_segment.py325CODE
LOWpdf_craft/transformer/xml_translator/xml/xml_like.py235CODE
LOWpdf_craft/transformer/xml_translator/xml/xml_like.py106CODE
LOWpdf_craft/transformer/xml_translator/xml/xml_like.py146CODE
LOW…f_craft/transformer/xml_translator/xml/self_closing.py116CODE
LOW…aft/transformer/xml_translator/xml/friendly/decoder.py23CODE
LOW…raft/transformer/xml_translator/xml/friendly/parser.py49CODE
LOW…sformer/xml_translator/xml_translator/stream_mapper.py29CODE
LOW…sformer/xml_translator/xml_translator/stream_mapper.py194CODE
LOW…ransformer/xml_translator/xml_translator/translator.py95CODE
LOW…transformer/xml_translator/xml_translator/submitter.py300CODE
LOW…transformer/xml_translator/xml_translator/submitter.py212CODE
LOW…aft/transformer/xml_translator/xml_translator/score.py99CODE
LOW…ransformer/xml_translator/xml_translator/validation.py95CODE
LOW…ransformer/xml_translator/xml_translator/validation.py268CODE
LOW…ransformer/xml_translator/xml_translator/validation.py281CODE
LOW…ransformer/xml_translator/xml_translator/validation.py296CODE
LOW…ransformer/xml_translator/xml_translator/validation.py344CODE
LOWpdf_craft/transformer/xml_translator/serial/chunk.py46CODE
LOWpdf_craft/pdf/handler.py62CODE
LOWpdf_craft/pdf/ngrams.py1CODE
LOWpdf_craft/pdf/page_extractor.py167CODE
LOWpdf_craft/pdf/ocr.py66CODE
LOWpdf_craft/extractor/toc/toc_levels.py64CODE
LOWpdf_craft/extractor/chapter/chapter.py302CODE
LOWpdf_craft/extractor/chapter/chapter.py445CODE
LOWpdf_craft/extractor/chapter/generation.py45CODE
LOWpdf_craft/extractor/chapter/generation.py90CODE
LOWpdf_craft/extractor/chapter/jointer.py178CODE
5 more matches not shown…
Decorative Section Separators16 hits · 48 pts
SeverityFileLineSnippetContext
MEDIUMpdf_craft/markdown/paragraph/tags.py61# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py63# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py84# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py86# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py101# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py103# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py193# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py195# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py214# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py216# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py229# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py231# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py453# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py455# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py530# ============================================================================COMMENT
MEDIUMpdf_craft/markdown/paragraph/tags.py532# ============================================================================COMMENT
Excessive Try-Catch Wrapping29 hits · 31 pts
SeverityFileLineSnippetContext
LOWtest.py26except Exception as e:CODE
LOWpdf_craft_tool/smoke/runner.py80 except Exception:CODE
LOWpdf_craft_tool/smoke/runner.py161 except Exception as error: # preserve the full failure report for manual inspectionCODE
LOWpdf_craft_tool/smoke/runner.py242 except Exception as error:CODE
LOWpdf_craft_tool/smoke/checks.py219 except Exception as error:CODE
LOWpdf_craft/pipeline/epub/translation/xml_interrupter.py157 except Exception:CODE
LOWpdf_craft/pipeline/epub/translation/translator.py183 except Exception:CODE
MEDIUMpdf_craft/pipeline/epub/translation/translator.py180def _get_version() -> str:CODE
LOWpdf_craft/pipeline/epub/adapter/zip.py15 except Exception:CODE
LOWpdf_craft/renderer/epub/latex_to_text.py9 except Exception:CODE
LOWpdf_craft/llm/guaranteed.py78 except Exception as error:CODE
LOWpdf_craft/llm/runtime.py137 except Exception as error:CODE
LOWpdf_craft/transformer/xml_translator/xml/xml_like.py76 except Exception as error:CODE
LOWpdf_craft/pdf/handler.py129 except Exception as error:CODE
LOWpdf_craft/pdf/handler.py140 except Exception as error:CODE
MEDIUMpdf_craft/pdf/handler.py62def metadata(self) -> PDFDocumentMetadata:CODE
LOWpdf_craft/pdf/page_ref.py23 except Exception as error:CODE
LOWpdf_craft/pdf/page_ref.py51 except Exception as error:CODE
LOWpdf_craft/pdf/page_ref.py107 except Exception as error:CODE
LOWpdf_craft/pdf/page_extractor.py218 except Exception as error:CODE
LOWpdf_craft/extractor/toc/llm_analyser.py336 except Exception as e:CODE
LOWpdf_craft/extractor/toc/llm_analyser.py506 except Exception as e:CODE
LOWpdf_craft/extractor/toc/llm_analyser.py603 except Exception as error:CODE
LOWpdf_craft/extractor/chapter/chapter.py293 except Exception as e:CODE
LOWpdf_craft/extractor/chapter/reader.py21 except Exception as e:CODE
LOWpdf_craft/common/asset.py31 except Exception as e:CODE
LOWpdf_craft/common/xml.py24 except Exception as error:CODE
LOWpdf_craft/common/xml.py37 except Exception as err:CODE
LOWpdf_craft/common/reader.py40 except Exception as e:CODE
Modern Structural Boilerplate19 hits · 19 pts
SeverityFileLineSnippetContext
LOWpdf_craft_tool/smoke/__init__.py5__all__ = ["SmokeRun", "expand_matrix", "run_smoke"]CODE
LOWpdf_craft/pipeline/__init__.py3__all__ = ["PDFPatcher", "PDFTranslationPipeline"]CODE
LOWpdf_craft/pipeline/pdf/__init__.py5__all__ = [CODE
LOWpdf_craft/pipeline/epub/__init__.py5__all__ = ["translate", "translate_epub"]CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py178def _update_ncx_toc(root: Element, toc_list: list[Toc]) -> None:CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py208def _update_nav_point_content(nav_point: Element, toc: Toc, ns: str | None, play_order: int) -> None:CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py324def _update_nav_toc(root: Element, toc_list: list[Toc]) -> None:CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py342def _update_nav_lis(ol: Element, toc_list: list[Toc], ns: str | None) -> None:CODE
LOWpdf_craft/pipeline/epub/adapter/toc.py368def _update_nav_li_content(li: Element, toc: Toc, ns: str | None) -> None:CODE
LOWpdf_craft/renderer/__init__.py5__all__ = ["EpubRenderer", "MarkdownRenderer"]CODE
LOWpdf_craft/renderer/markdown/__init__.py4__all__ = ["MarkdownRenderer"]CODE
LOWpdf_craft/renderer/epub/__init__.py4__all__ = ["EpubRenderer"]CODE
LOWpdf_craft/llm/__init__.py8__all__ = ["LLM", "LLMContext", "LLMRuntime", "Message", "MessageRole", "runtime_for",CODE
LOWpdf_craft/transformer/__init__.py7__all__ = ["ChapterTransformer", "ChapterXMLTransformer", "ChapterPackageTransformer", "PackageTransformer", "FillFailedCODE
LOWpdf_craft/transformer/xml_translator/__init__.py4__all__ = ["FillFailedEvent", "SubmitKind", "TranslationTask", "XMLTranslator", "TranslationEvent", "TranslationEventKinCODE
LOWpdf_craft/extractor/__init__.py4__all__ = ["PDFExtractor"]CODE
LOWpdf_craft/extractor/toc/analysing.py20logger = logging.getLogger(__name__)CODE
LOWpdf_craft/extractor/pdf/__init__.py4__all__ = ["PDFExtractor"]CODE
LOWpdf_craft/document/__init__.py4__all__ = ["DocumentPackage", "SourceLocation", "source_location"]CODE
Redundant / Tautological Comments7 hits · 10 pts
SeverityFileLineSnippetContext
LOWpdf_craft/markdown/paragraph/parser.py125 # Check if it's a closing tagCOMMENT
LOWpdf_craft/markdown/paragraph/parser.py147 # Check if this tag should be filtered by GFM tagfilterCOMMENT
LOWpdf_craft/markdown/paragraph/parser.py152 # Check if tag is in whitelistCOMMENT
LOWpdf_craft/markdown/paragraph/parser.py170 # Check if this tag should be filtered by GFM tagfilterCOMMENT
LOWpdf_craft/markdown/paragraph/parser.py175 # Check if this tag should be ignored (removed but children preserved)COMMENT
LOWpdf_craft/markdown/paragraph/parser.py194 # Check if tag is in whitelistCOMMENT
LOWpdf_craft/markdown/paragraph/parser.py383 # Check if attribute is allowed for this tagCOMMENT
AI Structural Patterns5 hits · 5 pts
SeverityFileLineSnippetContext
LOWpdf_craft/craft.py192CODE
LOWpdf_craft/pipeline/epub/translation/translator.py42CODE
LOW…ransformer/xml_translator/xml_translator/translator.py58CODE
LOW…ransformer/xml_translator/xml_translator/translator.py95CODE
LOWpdf_craft/pdf/ocr.py66CODE
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOWpdf_craft/pipeline/epub/translation/xml_interrupter.py101 block_depth=find_block_depth(parent_stack),COMMENT
LOWpdf_craft/transformer/xml_translator/xml/xml_like.py41# attribute, including ones that should remain unprefixed (e.g., <link type="text/css">).COMMENT
LOW…transformer/xml_translator/xml_translator/submitter.py301 # 需要翻译的文字会被嵌套到两种不同的结构中。COMMENT
LOWpdf_craft/extractor/toc/text.py1import reCOMMENT