Repository Analysis

Kozea/WeasyPrint

The awesome document factory

10.6 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of Kozea/WeasyPrint, a Python project with 9,380 GitHub stars. SynthScan v2.0 examined 79,172 lines of code across 174 source files, recording 987 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 10.6 places this repository in the Low 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).

10.6
Adjusted Score
10.6
Raw Score
100%
Time Factor
2026-07-13
Last Push
9.4K
Stars
Python
Language
79.2K
Lines of Code
174
Files
987
Pattern Hits
2026-07-14
Scan Date
0.07
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

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

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 13MEDIUM 11LOW 963

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 987 distinct pattern matches across 14 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 Identifiers639 hits · 397 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py107def assert_different_renderings(request, *args, **kwargs):CODE
LOWtests/test_pdf.py383def test_relative_links_no_height():STRING
LOWtests/test_pdf.py393def test_relative_links_missing_base():STRING
LOWtests/test_pdf.py403def test_relative_links_missing_base_link():STRING
LOWtests/test_pdf.py416def test_relative_links_internal():STRING
LOWtests/test_pdf.py433def test_relative_links_anchors():STRING
LOWtests/test_pdf.py449def test_relative_links_different_base():STRING
LOWtests/test_pdf.py457def test_relative_links_same_base():STRING
LOWtests/test_pdf.py488def test_anchor_multiple_pages():STRING
LOWtests/test_pdf.py530def test_embed_images_from_pages():STRING
LOWtests/test_pdf.py569def test_embedded_files_attachments(tmp_path):STRING
LOWtests/test_pdf.py636def test_attachments_data_with_anchor():STRING
LOWtests/test_pdf.py675def test_attachments_none_empty():STRING
LOWtests/test_pdf.py723def test_default_rdf_metadata():STRING
LOWtests/test_pdf.py758def test_pdf_tags_inline_table():STRING
LOWtests/test_pdf.py766def test_pdf_tags_split_table_with_caption():STRING
LOWtests/test_pdf.py785def test_svg_gradient_color_ops_before_path():STRING
LOWtests/test_fonts.py26def test_font_face_harfbuzz_face_lifetime():CODE
LOWtests/test_fonts.py67def test_ligatures_word_space():CODE
LOWtests/test_fonts.py107def test_kerning_ligature_deactivate():CODE
LOWtests/test_fonts.py134def test_font_face_descriptors():CODE
LOWtests/test_html.py338def test_parse_integer_invalid(string):STRING
LOWtests/test_html.py359def test_parse_non_negative_integer(string, expected):STRING
LOWtests/test_html.py374def test_parse_non_negative_integer_invalid(string):STRING
LOWtests/test_html.py392def test_parse_dimension_value(string, expected):STRING
LOWtests/test_html.py411def test_parse_dimension_value_invalid(string):STRING
LOWtests/test_html.py448def test_map_to_pixel_length_invalid(string):STRING
LOWtests/test_html.py466def test_map_to_dimension_property(string, expected):STRING
LOWtests/test_html.py485def test_map_to_dimension_property_invalid(string):STRING
LOWtests/test_html.py502def test_map_to_dimension_property_ignoring_zero(string, expected):STRING
LOWtests/test_html.py524def test_map_to_dimension_property_ignoring_zero_invalid(string):STRING
LOWtests/test_text.py326def test_text_align_justify_all():CODE
LOWtests/test_text.py406def test_text_align_not_enough_space():CODE
LOWtests/test_text.py421def test_text_align_justify_no_space():CODE
LOWtests/test_text.py478def test_text_align_justify_no_break_between_children():CODE
LOWtests/test_text.py1044def test_overflow_wrap_trailing_space(wrap, text, body_width, expected_width):CODE
LOWtests/test_text.py1061def test_overflow_wrap_no_break_on_space():CODE
LOWtests/test_text.py1077def test_line_break_before_trailing_space():CODE
LOWtests/test_text.py89def test_line_breaking_trailing_inline_width():STRING
LOWtests/test_text.py164def test_text_font_size_very_small():STRING
LOWtests/test_text.py438def test_text_align_justify_text_indent():STRING
LOWtests/test_text.py638def test_text_indent_multipage(indent):STRING
LOWtests/test_text.py916def test_hyphenate_limit_chars(css, result):STRING
LOWtests/test_text.py935def test_hyphenate_limit_chars_punctuation(css):STRING
LOWtests/test_text.py992def test_wrap_overflow_word_break(span_css, expected_lines):STRING
LOWtests/test_text.py1090def test_line_break_before_nested_trailing_space():STRING
LOWtests/test_text.py1335def test_text_transform_lang_uppercase(lang, lowercase, uppercase):STRING
LOWtests/test_text.py1355def test_text_transform_lang_lowercase(lang, uppercase, lowercase):STRING
LOWtests/test_text.py1387def test_text_transform_capitalize(original, transformed, lang_code):STRING
LOWtests/test_text.py1394def test_text_floating_pre_line():STRING
LOWtests/test_text.py1480def test_first_letter_line_height():STRING
LOWtests/test_text.py1499def test_first_letter_text_transform():STRING
LOWtests/test_text.py1547def test_first_line_line_height():STRING
LOWtests/test_text.py1566def test_first_line_text_transform():STRING
LOWtests/test_text.py1616def test_first_line_first_letter():STRING
LOWtests/test_api.py252def test_css_base_url_as_path():CODE
LOWtests/test_api.py615def test_bad_pdf_custom_metadata():STRING
LOWtests/test_api.py623def test_partial_pdf_custom_metadata():STRING
LOWtests/test_api.py640def test_output_intent_device_cmyk():STRING
LOWtests/test_api.py706def test_no_redirect_fail_on_error():STRING
579 more matches not shown…
Deep Nesting205 hits · 202 pts
SeverityFileLineSnippetContext
LOWtests/testing_utils.py108CODE
LOWtests/testing_utils.py142CODE
LOWtests/testing_utils.py111CODE
LOWtests/test_api.py1294CODE
LOWtests/layout/test_table.py2349CODE
LOWtests/layout/test_table.py2403CODE
LOWtests/layout/test_page.py1137CODE
LOWtests/layout/test_inline.py147CODE
LOWweasyprint/html.py224CODE
LOWweasyprint/html.py339CODE
LOWweasyprint/anchors.py30CODE
LOWweasyprint/images.py287CODE
LOWweasyprint/images.py259CODE
LOWweasyprint/images.py679CODE
LOWweasyprint/stacking.py69CODE
LOWweasyprint/urls.py140CODE
LOWweasyprint/urls.py180CODE
LOWweasyprint/urls.py293CODE
LOWweasyprint/__main__.py57CODE
LOWweasyprint/svg/defs.py284CODE
LOWweasyprint/svg/defs.py444CODE
LOWweasyprint/svg/__init__.py455CODE
LOWweasyprint/svg/__init__.py616CODE
LOWweasyprint/svg/__init__.py727CODE
LOWweasyprint/svg/__init__.py804CODE
LOWweasyprint/svg/css.py13CODE
LOWweasyprint/svg/css.py68CODE
LOWweasyprint/svg/bounding_box.py68CODE
LOWweasyprint/svg/utils.py27CODE
LOWweasyprint/svg/utils.py149CODE
LOWweasyprint/svg/utils.py166CODE
LOWweasyprint/svg/text.py25CODE
LOWweasyprint/svg/path.py16CODE
LOWweasyprint/css/counters.py23CODE
LOWweasyprint/css/counters.py44CODE
LOWweasyprint/css/counters.py103CODE
LOWweasyprint/css/functions.py126CODE
LOWweasyprint/css/functions.py176CODE
LOWweasyprint/css/functions.py23CODE
LOWweasyprint/css/targets.py184CODE
LOWweasyprint/css/units.py58CODE
LOWweasyprint/css/__init__.py265CODE
LOWweasyprint/css/__init__.py284CODE
LOWweasyprint/css/__init__.py332CODE
LOWweasyprint/css/__init__.py589CODE
LOWweasyprint/css/__init__.py654CODE
LOWweasyprint/css/__init__.py723CODE
LOWweasyprint/css/__init__.py778CODE
LOWweasyprint/css/__init__.py796CODE
LOWweasyprint/css/__init__.py1366CODE
LOWweasyprint/css/__init__.py1483CODE
LOWweasyprint/css/__init__.py62CODE
LOWweasyprint/css/__init__.py163CODE
LOWweasyprint/css/__init__.py204CODE
LOWweasyprint/css/__init__.py1104CODE
LOWweasyprint/css/__init__.py1147CODE
LOWweasyprint/css/tokens.py159CODE
LOWweasyprint/css/tokens.py187CODE
LOWweasyprint/css/tokens.py236CODE
LOWweasyprint/css/tokens.py337CODE
145 more matches not shown…
Cross-File Repetition13 hits · 65 pts
SeverityFileLineSnippetContext
HIGHtests/test_api.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_image.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_transform.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_overflow.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_list.py0__________ __________ __________ __________ __________ __________ __________ __________ __________ __________STRING
HIGHtests/draw/test_background.py0__________ __________ __________ __________ __________ __________ __________ __________ __________ __________STRING
HIGHtests/draw/svg/test_gradients.py0__________ __________ __________ __________ __________ __________ __________ __________ __________ __________STRING
HIGHtests/draw/svg/test_transform.py0_rrrrrrr_ _rr___rr_ _rr___rr_ _rr___rr_ _rrrrrrr_ _rrrrrrr_ _________ _________ _________STRING
HIGHtests/draw/svg/test_units.py0_rrrrrrr_ _rr___rr_ _rr___rr_ _rr___rr_ _rrrrrrr_ _rrrrrrr_ _________ _________ _________STRING
HIGHtests/draw/svg/test_shapes.py0_rrrrrrr_ _rr___rr_ _rr___rr_ _rr___rr_ _rrrrrrr_ _rrrrrrr_ _________ _________ _________STRING
HIGHtests/draw/svg/test_transform.py0<style> @page { size: 9px } svg { display: block } </style> <svg width="9px" height="9px" xmlns="http://www.w3.org/2000/STRING
HIGHtests/draw/svg/test_shapes.py0<style> @page { size: 9px } svg { display: block } </style> <svg width="9px" height="9px" xmlns="http://www.w3.org/2000/STRING
HIGHtests/draw/svg/test_clip.py0<style> @page { size: 9px } svg { display: block } </style> <svg width="9px" height="9px" xmlns="http://www.w3.org/2000/STRING
Fake / Example Data61 hits · 61 pts
SeverityFileLineSnippetContext
LOWtests/test_text.py522 <body><strong>Lorem ipsum dolor<em>sit amet</em></strong>''')CODE
LOWtests/test_text.py510 'Lorem ipsum dolor<em>sit amet</em>',STRING
LOWtests/test_text.py511 'Lorem ipsum <em>dolorsit</em> amet',STRING
LOWtests/test_text.py512 'Lorem ipsum <em></em>dolorsit amet',STRING
LOWtests/test_text.py513 'Lorem ipsum<em> </em>dolorsit amet',STRING
LOWtests/test_text.py514 'Lorem ipsum<em> dolorsit</em> amet',STRING
LOWtests/test_text.py515 'Lorem ipsum <em>dolorsit </em>amet',STRING
LOWtests/test_boxes.py225 ('p', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py724 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py731 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py777 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py784 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py804 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py811 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py830 <p lang="fr"><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py837 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py856 <p lang="fr_CH"><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py863 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py882 <p lang="fr_CH_alt"><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py889 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py917 <p>lorem ipsumCODE
LOWtests/test_boxes.py1239 <p>lorem ipsum dolorCODE
LOWtests/layout/test_block.py369 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py370 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py390 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py392 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py412 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py414 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py435 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py438 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py461 <p>Lorem ipsumCODE
LOWtests/layout/test_block.py464 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py490 <p>Lorem ipsumCODE
LOWtests/layout/test_block.py493 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py517 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py519 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py537 <p>Lorem ipsumCODE
LOWtests/layout/test_block.py556 <p>Lorem ipsumCODE
LOWtests/layout/test_inline_block.py20 Ipsum dolor sit amet,CODE
LOWtests/layout/test_inline.py493 <p><em>Lorem Ipsum</em>is very <strong>coool</strong></p>CODE
LOWtests/layout/test_inline.py505 assert text == 'Lorem Ipsumis very coool'STRING
LOWtests/layout/test_inline.py544 <pre>Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_inline.py544 <pre>Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_inline.py566 <p>Lorem ipsum dolor sit amet,<br>CODE
LOWtests/layout/test_inline.py566 <p>Lorem ipsum dolor sit amet,<br>CODE
LOWtests/layout/test_column.py25 Ipsum dolor sit amet,CODE
LOWtests/layout/test_column.py56 Ipsum dolor sit amet,CODE
LOWtests/layout/test_float.py311 Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_float.py311 Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_float.py323 assert get_float_width(1000000) == len('Lorem ipsum dolor sit amet,') * 16STRING
LOWtests/layout/test_float.py323 assert get_float_width(1000000) == len('Lorem ipsum dolor sit amet,') * 16STRING
LOWtests/layout/test_flex.py808 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py808 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py813 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py813 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py832 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py832 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py835 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py835 Lorem ipsum dolor sit ametCODE
LOWtests/draw/test_before_after.py36 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>STRING
1 more matches not shown…
Self-Referential Comments9 hits · 27 pts
SeverityFileLineSnippetContext
MEDIUMweasyprint/images.py655 # Define the coordinates of the starting and ending pointsCOMMENT
MEDIUMweasyprint/images.py684 # Define the center of the gradientCOMMENT
MEDIUMweasyprint/images.py750 # Define the coordinates of the gradient circlesCOMMENT
MEDIUMweasyprint/layout/preferred.py456 # Create the gridCOMMENT
MEDIUMweasyprint/layout/preferred.py475 # Define the total horizontal border spacingCOMMENT
MEDIUMweasyprint/layout/preferred.py515 # Define the intermediate content widthsCOMMENT
MEDIUMweasyprint/layout/column.py50 # Define the number of columns and their widthsCOMMENT
MEDIUMweasyprint/text/fonts.py137 # Create a pattern that matches font name.COMMENT
MEDIUMweasyprint/formatting_structure/boxes.py121 # Create a new instance without calling __init__: parameters areCOMMENT
Verbosity Indicators10 hits · 21 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/page.py761 # Step 1: page based back-referencesCOMMENT
LOWweasyprint/layout/page.py771 # Step 2: local countersCOMMENT
LOWweasyprint/layout/page.py790 # Step 3: targeted countersCOMMENT
LOWweasyprint/text/line_break.py479 # Step 5: Try to break word if it's too long for the lineCOMMENT
LOWweasyprint/text/fonts.py269 # Step 1: getting the default, we rely on Pango for this.COMMENT
LOWweasyprint/text/fonts.py270 # Step 2: @font-face font-variant, done in fonts.add_font_face.COMMENT
LOWweasyprint/text/fonts.py271 # Step 3: @font-face font-feature-settings, done in fonts.add_font_face.COMMENT
LOWweasyprint/text/fonts.py273 # Step 4: font-variant and OpenType features.COMMENT
LOWweasyprint/text/fonts.py318 # Step 5: incompatible non-OpenType features, already handled by Pango.COMMENT
LOWweasyprint/text/fonts.py320 # Step 6: font-feature-settings.COMMENT
Excessive Try-Catch Wrapping15 hits · 18 pts
SeverityFileLineSnippetContext
LOWtests/testing_utils.py115 except Exception: # pragma: no coverCODE
LOWweasyprint/html.py331 except Exception as exception: # pragma: no coverCODE
LOWweasyprint/document.py132 except Exception:CODE
MEDIUMweasyprint/document.py127def __del__(self):CODE
LOWweasyprint/images.py305 except Exception as svg_exception:CODE
LOWweasyprint/images.py311 except Exception as raster_exception:CODE
LOWweasyprint/images.py319 except Exception:CODE
LOWweasyprint/urls.py399 except Exception: # pragma: no coverCODE
LOWweasyprint/urls.py444 except Exception as exception:CODE
MEDIUMweasyprint/urls.py396def close(self):CODE
LOWweasyprint/svg/defs.py23 except Exception:CODE
LOWweasyprint/css/__init__.py1261 except Exception:CODE
LOWweasyprint/pdf/fonts.py156 except Exception as exception:CODE
LOWweasyprint/text/fonts.py172 except Exception as exception:CODE
LOWweasyprint/text/fonts.py189 except Exception as exc:CODE
Structural Annotation Overuse8 hits · 16 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/page.py761 # Step 1: page based back-referencesCOMMENT
LOWweasyprint/layout/page.py771 # Step 2: local countersCOMMENT
LOWweasyprint/layout/page.py790 # Step 3: targeted countersCOMMENT
LOWweasyprint/text/line_break.py479 # Step 5: Try to break word if it's too long for the lineCOMMENT
LOWweasyprint/text/fonts.py269 # Step 1: getting the default, we rely on Pango for this.COMMENT
LOWweasyprint/text/fonts.py273 # Step 4: font-variant and OpenType features.COMMENT
LOWweasyprint/text/fonts.py318 # Step 5: incompatible non-OpenType features, already handled by Pango.COMMENT
LOWweasyprint/text/fonts.py320 # Step 6: font-feature-settings.COMMENT
Over-Commented Block13 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/test_pdf.py81 ''').write_pdf()COMMENT
LOWtests/layout/test_table.py2921def test_inline_table_baseline(vertical_align, table_position_y):COMMENT
LOWtests/layout/test_position.py281 assert (p1.position_x, p1.position_y) == (0, 0)COMMENT
LOWweasyprint/__init__.py21#: command-line.COMMENT
LOWweasyprint/__init__.py41#: :param bool pdf_tags:COMMENT
LOWweasyprint/document.py41 #: ``'bottom'`` and ``'left'`` as keys, and values in CSS pixels.COMMENT
LOWweasyprint/document.py61 #: The anchor might be defined in another page,COMMENT
LOWweasyprint/css/__init__.py61 """Convenience function to get the computed styles for an element."""COMMENT
LOWweasyprint/layout/preferred.py381 # "The line breaking behavior of a replaced elementCOMMENT
LOWweasyprint/layout/column.py81COMMENT
LOWweasyprint/pdf/metadata.py41 #: Extracted from the ``<meta name=author>`` elements in HTMLCOMMENT
LOWweasyprint/pdf/metadata.py61 #: Extracted from the ``<meta name=dcterms.created>`` element in HTMLCOMMENT
LOWweasyprint/pdf/anchors.py281def add_annotations(links, matrix, document, pdf, page, annot_files, compress):COMMENT
AI Structural Patterns8 hits · 8 pts
SeverityFileLineSnippetContext
LOWweasyprint/__init__.py158CODE
LOWweasyprint/__init__.py287CODE
LOWweasyprint/__init__.py347CODE
LOWweasyprint/urls.py180CODE
LOWweasyprint/css/__init__.py1854CODE
LOWweasyprint/layout/block.py18CODE
LOWweasyprint/pdf/metadata.py32CODE
LOWweasyprint/text/fonts.py258CODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/float.py172 # Assign locals to avoid slow attribute lookups.COMMENT
LOWweasyprint/layout/table.py370 # Set baseline to lowest bottom content edge.COMMENT
LOWweasyprint/pdf/tags.py275 # Check if it is already been referenced before.COMMENT
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/table.py583 # If the height property has a bigger value, just add blank spaceCOMMENT
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWweasyprint/__init__.py88__all__ = [CODE
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWweasyprint/__init__.py380CODE