# SPDX-FileCopyrightText: Copyright © 2026 BBC
#
# SPDX-License-Identifier: BSD-3-Clause
from .validationCodes import ValidationCode
from .validationLogger import ValidationLogger
from .validationResult import ERROR, WARN, SKIP
[docs]
class ValidationPassChecker():
_check_codes: list[ValidationCode] = []
[docs]
@classmethod
def failuresAndWarningsAndSkips(
cls,
log: ValidationLogger) -> tuple[int, int, int]:
fails = [
v for v in log
if v.code in cls._check_codes
and v.status == ERROR
]
warns = [
v for v in log
if v.code in cls._check_codes
and v.status == WARN
]
skips = [
v for v in log
if v.code in cls._check_codes
and v.status == SKIP
]
return len(fails), len(warns), len(skips)
[docs]
class XmlPassChecker(ValidationPassChecker):
_check_codes: list[ValidationCode] = [
ValidationCode.preParse_nullBytes,
ValidationCode.preParse_encoding,
ValidationCode.preParse_byteOrderMark,
ValidationCode.preParse_byteOrderMark_corrupt,
ValidationCode.xml_parse,
ValidationCode.xml_id_unique,
ValidationCode.xml_id_unqualified,
]
[docs]
class TtmlPassChecker(ValidationPassChecker):
_check_codes: list[ValidationCode] = [
ValidationCode.xml_root_element,
ValidationCode.xml_tt_namespace,
ValidationCode.ttml_idref_element_applicability,
ValidationCode.ttml_idref_empty,
ValidationCode.ttml_idref_too_many,
ValidationCode.ttml_parameter_cellResolution,
ValidationCode.ttml_document_timing,
ValidationCode.ttml_element_body,
ValidationCode.ttml_element_br,
ValidationCode.ttml_element_head,
ValidationCode.ttml_element_layout,
ValidationCode.ttml_element_region,
ValidationCode.ttml_element_style,
ValidationCode.ttml_element_styling,
ValidationCode.ttml_metadata_copyright,
ValidationCode.ttml_metadata_role,
ValidationCode.ttml_layout_region_association,
ValidationCode.ttml_styling,
ValidationCode.ttml_styling_reference,
ValidationCode.ttml_styling_referential_chained,
ValidationCode.ttml_styling_attribute_applicability,
]
[docs]
class DaptPassChecker(ValidationPassChecker):
_check_codes: list[ValidationCode] = [
ValidationCode.xml_xsd,
ValidationCode.xml_encoding_decl,
ValidationCode.xml_entity_decl,
ValidationCode.xml_document_validity,
ValidationCode.xml_dtd,
ValidationCode.xml_prune, # should never be errors
ValidationCode.ttml_metadata_actor_reference,
ValidationCode.ebuttd_parameter_timeBase,
ValidationCode.ttml_parameter_contentProfiles,
ValidationCode.dapt_timing_attribute_constraint,
ValidationCode.dapt_document_validity,
ValidationCode.dapt_timing_framerate,
ValidationCode.dapt_timing_origin_timecode,
ValidationCode.dapt_timing_segment_overlap,
ValidationCode.dapt_timing_start_of_programme_timecode,
ValidationCode.dapt_timing_tickrate,
ValidationCode.dapt_timing_timecode_offset,
ValidationCode.dapt_timing_timecontainer,
ValidationCode.ttml_timing_attribute_syntax,
ValidationCode.dapt_lang_audio,
ValidationCode.dapt_lang_root,
ValidationCode.dapt_metadata_desctype_validity,
ValidationCode.dapt_metadata_content_descriptor,
ValidationCode.dapt_metadata_represents,
ValidationCode.dapt_metadata_scriptRepresents,
]
[docs]
class EbuttdPassChecker(ValidationPassChecker):
_check_codes: list[ValidationCode] = [
ValidationCode.xml_xsd,
ValidationCode.ttml_attribute_styling_attribute,
ValidationCode.ebuttd_parameter_timeBase,
ValidationCode.ebuttd_p_xml_id_constraint,
ValidationCode.ebuttd_empty_body_constraint,
ValidationCode.ebuttd_empty_div_constraint,
ValidationCode.ebuttd_head_element_constraint,
ValidationCode.ebuttd_layout_element_constraint,
ValidationCode.ebuttd_multiRowAlign,
ValidationCode.ebuttd_nested_div_constraint,
ValidationCode.ebuttd_nested_span_constraint,
ValidationCode.ebuttd_nested_timing_constraint,
ValidationCode.ebuttd_overlapping_region_constraint,
ValidationCode.ebuttd_region_element_constraint,
ValidationCode.ebuttd_region_attributes_constraint,
ValidationCode.ebuttd_region_position_constraint,
ValidationCode.ebuttd_style_element_constraint,
ValidationCode.ebuttd_inline_styling_constraint,
ValidationCode.ebuttd_styling_element_constraint,
ValidationCode.ebuttd_timing_attribute_constraint,
ValidationCode.imsc_parameter_activeArea,
]
[docs]
class BbcPassChecker(ValidationPassChecker):
_check_codes: list[ValidationCode] = [
ValidationCode.bbc_block_backgroundColor_constraint,
ValidationCode.bbc_region_attributes_constraint,
ValidationCode.bbc_region_backgroundColor_constraint,
ValidationCode.bbc_region_overflow_constraint,
ValidationCode.bbc_region_position_constraint,
ValidationCode.bbc_text_backgroundColor_constraint,
ValidationCode.bbc_text_color_constraint,
ValidationCode.bbc_text_fillLineGap_constraint,
ValidationCode.bbc_text_fontFamily_constraint,
ValidationCode.bbc_text_fontSize_constraint,
ValidationCode.bbc_text_fontStyle_constraint,
ValidationCode.bbc_text_lineHeight_constraint,
ValidationCode.bbc_text_linePadding_constraint,
ValidationCode.bbc_text_multiRowAlign_constraint,
ValidationCode.bbc_text_span_constraint,
ValidationCode.bbc_timing_gaps,
ValidationCode.bbc_timing_minimum_subtitles,
ValidationCode.bbc_timing_segment_overlap,
]