#!/usr/bin/env python3 """Validate the machine-checkable book authoring contract.""" from __future__ import annotations import argparse import json import re import subprocess import sys from collections import Counter from pathlib import Path from typing import Any, Iterable from summary import chapter_paths CJK = r"\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff" ASCII_WORD = r"A-Za-z0-9" MISSING_SPACE_RE = re.compile( rf"(?<=[{CJK}])(?=[{ASCII_WORD}])|(?<=[{ASCII_WORD}])(?=[{CJK}])" ) EXTRA_SPACE_RE = re.compile( rf"(?:[{CJK}] {{2,}}[{ASCII_WORD}]|[{ASCII_WORD}] {{2,}}[{CJK}])" ) PLACEHOLDER_RE = re.compile( r"(?:TBD|TODO|FIXME|XXX|待补充|待填|\{\{[^{}]+\}\})", re.IGNORECASE ) SLOT_RE = re.compile(r"^$") SLOT_RAW_RE = re.compile(r"") CHECKER_FORBID_RE = re.compile( r"^$" ) CHECKER_FORBID_PREFIX = "", index) if end == -1: index = len(line) continue in_comment = False index = end + 3 continue if line.startswith("