"""Fixed English text for the Chinese labels in the PL9 reader volume. Two sources of Chinese reach the reader: labels hard-coded in ``pl9_reader_export.render_pl9_parity_markdown`` and short texts the engine modules write in Chinese (dosha summaries, Jaimini karaka roles, method notes, aspect names). Both are listed here. Templated engine texts are matched with regular expressions; everything else is an exact phrase. Rules for entries: no Chinese in a value, and every number in the Chinese text appears in the English text in the same order, so the two editions carry the same numbers (tests/test_report_english_edition.py checks both). """ from __future__ import annotations import re _PHRASES: dict[str, str] = { # ── chapter and section headings ── "## 出生资料与图盘": "## Birth Data and Charts", "## 行星、星宿与宫位解释": "## Planets, Nakshatras and Houses", "## 强度、关系与 Ashtakavarga 技术页": "## Strength, Relationships and Ashtakavarga", "## 标准 Dasha 表格页": "## Standard Dasha Tables", "## 原版 Dasha 日期表(同案 PL9 数据)": "## Original Dasha Date Tables (same chart)", "## 原版 Dasha 日期表": "## Original Dasha Date Tables", "## Saturn 与 KP 支持页": "## Saturn and KP", "## 年度图盘与 Tajika": "## Annual Charts and Tajika", "## Bhavesh、Dosha 与 Yoga 解释页": "## Bhavesh, Dosha and Yoga", "## 大运解释": "## Dasha Interpretation", "出生资料补充": "Birth Particulars (supplement)", "Birth Chart 行星原始位置": "Birth Chart Planetary Positions", "行星主星与状态": "Planet Lords and Dignity", "Sudarshan Chakra 资料": "Sudarshan Chakra", "Upagraha / Sub-Planets 点位": "Upagraha / Sub-Planet Positions", "特殊上升与派生点补充": "Special Lagnas and Points (supplement)", "敏感点与特殊落点": "Sensitive Points and Special Placements", "本命与分盘北印度图盘": "Natal and Divisional Charts (North Indian)", "分盘对出生时间敏感,原始计算供核对,不单独增加结论的确定性。": "Divisional charts are sensitive to birth time. The raw calculations are here for checking and do not by themselves make a conclusion more certain.", " 数值位置表": " Position Table", "Shadbala / Bhava Bala 摘要": "Shadbala / Bhava Bala Summary", "Avastha 行星状态": "Avastha Planetary States", "Bhava Bala 十二宫力量": "Bhava Bala Strength of the Twelve Houses", "Planetary Friendship 矩阵源数据": "Planetary Friendship Matrix", "相位矩阵": "Aspect Matrix", "Jaimini Karaka、Arudha Pada 与特殊 Lagna": "Jaimini Karakas, Arudha Padas and Special Lagnas", "Ashtakavarga 完整宫位分数": "Ashtakavarga Full House Scores", "Vimsopaka / Pushkara / Vargottama 辅助强度": "Vimsopaka / Pushkara / Vargottama Supporting Strength", "Ashtakavarga Pinda 与 Shodhya/Yoga Pinda 数值表。": "Ashtakavarga Pinda and Shodhya / Yoga Pinda values.", "Ashtakavarga Shodhya / Yoga Pinda 原始值": "Ashtakavarga Shodhya / Yoga Pinda Raw Values", "Chakra 图阵页": "Chakra Diagrams", "以下表格保留同一命盘原版报告中的完整可见日期和星座边界,便于逐项读取与校对。": "The tables below keep every visible date and sign boundary from the original report for this chart, for line-by-line reading and checking.", "KP 原版细格": "KP Original Detail Grid", "Varshaphala 基础资料与年度行星表": "Varshaphala Basics and Annual Planet Table", "Varshaphala 年度结果解释": "Varshaphala Annual Results", "Annual Dasha 结果解释": "Annual Dasha Results", "Mudda / Patyayini 年度 Dasha 表": "Mudda / Patyayini Annual Dasha Table", "Patyayini / Patyamsha ending-date 表": "Patyayini / Patyamsha Ending-Date Table", "Tajika Yoga Presence 对照表": "Tajika Yoga Presence Comparison", "Tajika Yoga Presence 表": "Tajika Yoga Presence Table", "Sahams 点位表": "Saham Positions", "公开 Panchavargiya 数值复核边界": "Public Panchavargiya Value Check", "年度特殊点": "Annual Special Points", "Tripataki Chakra 年盘落点": "Tripataki Chakra Annual Placements", "年度月返照图盘数据": "Monthly Returns within the Year", "生命周期年度返照图盘数据": "Lifetime Annual Return Charts", "出生地八年年度总览": "Eight-Year Overview (birthplace)", "现居地八年年度总览": "Eight-Year Overview (current residence)", "年度北印度图盘": "Annual Charts (North Indian)", " 年度 Varshaphala / Tajika 细项": " Annual Varshaphala / Tajika Details", "年度行星资料": "Annual Planet Data", "Annual Dasha 阶段表": "Annual Dasha Periods", "年度行星扩展字段": "Annual Planet Extras", "年度锚点": "Annual Anchors", "年度行星资料": "Annual Planet Data", "年度结果": "Annual Results", "宫主(Bhavesh)落宫解释": "House Lords (Bhavesh) by Placement", "Bhavesh 宫主逐宫解释": "Bhavesh House by House", "Dosha 逐项事实与解释": "Dosha Facts and Notes", "传统辅助建议": "Traditional Supportive Practices", # ── table headers ── "| 行星 | 星座主 | 星宿主 | 分主 | 分分主 | 尊贵状态 | 力量比 |": "| Planet | Sign lord | Star lord | Sub lord | Sub-sub lord | Dignity | Strength ratio |", "星座主、星宿主、分主、分分主:这颗行星所在星座、星宿与 KP 细分各自的主星。力量比:六维力量与所需力量之比,1 以上为达标。": "Sign lord, star lord, sub lord and sub-sub lord: the rulers of the planet's sign, nakshatra and KP subdivisions. Strength ratio: Shadbala against the required strength; 1 or above meets it.", "| 对象 | 落座 | 落座度数 | 黄经 | 整宫宫位 |": "| Body | Sign | Degree in sign | Longitude | Whole-sign house |", "| House | Sign | Lord | Score | 关键因素 |": "| House | Sign | Lord | Score | Key factors |", "| 合计 | - |": "| Total | - |", "| 序号 | 主运 | 起始 | 结束 | 年数 |": "| No. | Mahadasha | Start | End | Years |", "| Vimshottari AD | 主运 | 子运 | 起始 | 结束 |": "| Vimshottari AD | Mahadasha | Antardasha | Start | End |", "| Vimshottari PD | 主运 | 子运 | 次子运 | 起始 | 结束 |": "| Vimshottari PD | Mahadasha | Antardasha | Pratyantardasha | Start | End |", "| 序号 | 主星/星座 | 起始 | 结束 | 年数 |": "| No. | Lord / sign | Start | End | Years |", "| AD/child | 主层 | 子层 | 起始 | 结束 |": "| AD/child | Main period | Sub-period | Start | End |", "| 主运 | 起始年龄 | 子段 | 起始 | 结束 |": "| Mahadasha | Starting age | Sub-period | Start | End |", "| 项目 | 锚点 | 年度主题 |": "| Item | Anchor | Theme of the year |", "| 阶段 | 主星 | 年盘宫位 | 日期边界 | 主题 |": "| Period | Lord | Annual house | Date range | Theme |", "| balance profile | 主星 | 开始 | 结束 | 边界口径 |": "| Balance | Lord | Start | End | Boundary basis |", "| 主层 | 子层 | 边界 | 边界语义 |": "| Main period | Sub-period | Boundary | Boundary meaning |", "| Yoga | 结果 | 形成行星 | 相位运动(入相/分离) |": "| Yoga | Result | Forming planets | Motion (applying / separating) |", "| Saham | 星座 | 星座内度数 |": "| Saham | Sign | Degree in sign |", "| 项目 | 结果 |": "| Item | Result |", "| 月份 | 本地时刻 | 年盘上升 | 上升度数 | 行星黄经(度) |": "| Month | Local time | Annual ascendant | Ascendant degree | Planet longitudes (deg) |", "| 年龄 | 年份 | 年返时刻 | 上升 | 上升度数 | 行星黄经(度) |": "| Age | Year | Return time | Ascendant | Ascendant degree | Planet longitudes (deg) |", "| 年份 | 年龄 | 年返时刻 | 年盘上升 |": "| Year | Age | Return time | Annual ascendant |", "| 项目 | 数值 |": "| Item | Value |", "| 行星 | 星座 | 落座度数 | 黄经 |": "| Planet | Sign | Degree in sign | Longitude |", "| 点位 | 星座 | 落座度数 | 黄经 | 守护星 |": "| Point | Sign | Degree in sign | Longitude | Ruler |", "| 月份 | 本地时刻 | 年盘上升 | 上升度数 |": "| Month | Local time | Annual ascendant | Ascendant degree |", "| 对象 | 建议 | 宝石/次数 |": "| For | Suggestion | Gem / count |", "| 公开复核状态 |": "| Public check status |", "| 覆盖行星 |": "| Planets covered |", "| 已匹配分量 |": "| Components matched |", "| 已匹配总分 |": "| Totals matched |", "| 可直接用于公式升级 |": "| Usable for formula upgrade |", "| 年返上升 |": "| Annual ascendant |", # ── labelled lines ── "- 姓名:": "- Name: ", "- 出生:": "- Born: ", "- 计算口径:": "- Calculation settings: ", "- Shadbala 方法:": "- Shadbala method: ", "- 外部边界:": "- Method note: ", "- 方法:": "- Method: ", "- BAV 校验:": "- BAV check: ", "- 当前阶段:": "- Current phase: ", "- 是否 active:": "- Active: ", "- 摘要:": "- Summary: ", "- 年返上升:": "- Annual ascendant: ", # ── birth-parameter row labels ── "| 出生日期 |": "| Birth date |", "| 出生时间 |": "| Birth time |", "| 出生星期 |": "| Weekday |", "| 出生地点 |": "| Birthplace |", "| 城市 |": "| City |", "| 省州 |": "| State / province |", "| 国家 |": "| Country |", "| 纬度 |": "| Latitude |", "| 经度 |": "| Longitude |", "| 时区 |": "| Time zone |", "| 岁差名称 |": "| Ayanamsa name |", "| 岁差值 |": "| Ayanamsa value |", "| 岁差 |": "| Ayanamsa |", "| 交点模式 |": "| Node mode |", "| 宫位系统 |": "| House system |", "| 综合性质 |": "| Overall quality |", "| 吉性要素数量 |": "| Auspicious elements |", "| 要素总数 |": "| Total elements |", # ── annual labels and values ── "Muntha 所在星座的守护星(当前本地口径)": "Ruler of the Muntha sign (current local method)", # BUG-1215: narayana_legacy_label.LEGACY_NOTE_ZH "旧算法(从上升起、一律顺行),待替换为 Sanjay Rath 版": "Legacy algorithm (starts from the Lagna, always zodiacal); to be replaced by Sanjay Rath's version", "- 算法:": "- Algorithm: ", # BUG-1218: narayana_legacy_label rath_report_lines_zh "Sanjay Rath 版(并列参考,未进打分与时间轴结论;按原书 p.43 正文(第七轮裁定)):": "Sanjay Rath version (shown alongside for reference; not used in scoring or timing conclusions; book p.43 text, round-7 ruling): ", "Sanjay Rath 版(并列参考,未进打分与时间轴结论;按原书 p.43 正文(第七轮裁定))": "Sanjay Rath version (shown alongside for reference; not used in scoring or timing conclusions; book p.43 text, round-7 ruling)", ",宫主 ": ", lord ", "起运宫未定,": "start sign undecided, ", "- 并列:": "- Alongside: ", "- 顺序:": "- Order: ", "起运宫 ": "start sign ", ";当前大运 ": "; running MD ", "- 当前大运 ": "- Running MD ", "按 Table 10": "Table 10 order", "土星在起运宫:顺行(Table 11)": "Saturn in the start sign: zodiacal (Table 11)", "计都在起运宫:反向(Table 12)": "Ketu in the start sign: reversed (Table 12)", "PyJHora 兼容:计都优先": "PyJHora-compatible: Ketu takes precedence", "占据星数": "occupants", "木星 / 水星 / 宫主三角色": "Jupiter / Mercury / lord roles", "占据星尊贵": "occupant dignity", "星座性质": "modality", "宫主星座内度数": "lord's degree in sign", "宫主落奇偶相反星座": "lord in a sign of opposite parity", "大运年数": "dasha years", "| Rath MD | 星座 | 宫主 | 起始年龄 | 结束年龄 | 基本年数 | 修正 | 最终 |": "| Rath MD | Sign | Lord | Start age | End age | Base years | Adjustment | Final |", "未决": "undecided", "| Rath AD | 星座 | 起始年龄 | 结束年龄 |": "| Rath AD | Sign | Start age | End age |", " 的子运:比较 ": " sub-periods: compare ", # BUG-1225: narayana_legacy_label._ad_direction_lines_zh (AD direction + book divergence) "- 子运方向:": "- AD direction: ", "按子运起点星座奇偶(Table 13)": "by the odd/even of the AD start sign (Table 13)", "大运星座有土星:一律顺行(Table 11)": "Saturn in the MD sign: always zodiacal (Table 11)", "大运星座有计都:反向(Table 14)": "Ketu in the MD sign: reversed (Table 14)", "(书内分歧,未采用:": " (book divergence, not applied: ", "p.47(J.S. 1.1.34)看大运星座奇偶": "p.47 (J.S. 1.1.34) by the odd/even of the MD sign", "J.S. 2.4.31–32 看大运星座或其宫主所落星座": "J.S. 2.4.31-32 by the MD sign or the sign its lord occupies", " → 顺行;": " -> zodiacal; ", " → 逆行;": " -> reverse; ", " → 顺行)": " -> zodiacal)", " → 逆行)": " -> reverse)", ",顺行": ", zodiacal", ",逆行": ", reverse", ",12 等分": ", twelve equal parts", # BUG-1214: tajika_year_lord.selection_basis_text (zh) → its en twin. "年盘不全,暂用 Muntha 主星": "Annual chart incomplete; Muntha sign lord used for now", # BUG-1223: tajika_year_lord.blocked_text (no stand-in year lord). "年主暂无法确定(年盘缺太阳或月亮位置)": "Year lord cannot be determined yet (the annual chart lacks the Sun or Moon position)", "年主暂无法确定(年盘缺行星位置,五分力量无法计算)": "Year lord cannot be determined yet (planet positions are missing from the annual chart, so the five-fold strength cannot be computed)", "年主暂无法确定(五类候选星都不在年盘上)": "Year lord cannot be determined yet (none of the five candidates is in the annual chart)", "年主暂无法确定(年盘无法计算)": "Year lord cannot be determined yet (the annual chart could not be computed)", "年主暂无法确定(缺少 Muntha 星座)": "Year lord cannot be determined yet (the Muntha sign is missing)", "年主暂无法确定(年盘数据不全)": "Year lord cannot be determined yet (the annual chart data are incomplete)", "(Panchavargiya 为本地近似计算)": " (Panchavargiya is a local approximation)", # BUG-1217: tajika_year_lord.ENGINE_NOTE["tajika_native_five_fold"] "(按 Tajika 五分力量)": " (by Tajika five-fold strength)", "(Panchavargiya 取 PyJHora 外部参照)": " (Panchavargiya from the PyJHora reference engine)", "两种计算口径给出的年主不同,暂不合并": "The two methods give different year lords; not merged", "(两者不同)": " (they differ)", "太阳返照": "Solar return", "另一口径": "Other method", "入相": "applying", "分离": "separating", # ── public status words (renderer helpers) ── "由生命周期图盘页承接": "carried by the lifetime chart pages", "外部回放待校对": "external replay pending", "外部行为参考": "reference rule", "参数敏感": "parameter-sensitive", "需补资料": "needs more data", "已生成": "generated", "已核验": "verified", "需校对": "to be checked", "不适用": "not applicable", "已形成": "formed", "未形成": "not formed", "待补充": "pending", "证据口径": "Evidence basis", "证据标签": "Evidence basis", "源数据未提供宝石或次数": "No gem or repetition count supplied", "一致": "match", "参考": "reference", "未列": "not listed", # ── engine texts (fixed) ── "Shadbala六重力量(absolute Virupas; precise Sthana/Dig/Kala/Drik; bounded BPHS Chesta)": "Shadbala six-fold strength, in Virupas, combining Sthana, Dig, Kala, Drik and BPHS Chesta", "Chesta remains cross-engine method-conflicted; totals inherit that boundary.": "Chesta Bala depends on the calculation method, so compare totals within the same method.", "Shadbala六重力量": "Shadbala six-fold strength", "Ashtakavarga八分法(BPHS/PVR书例校准v2.1)": "Ashtakavarga eight-fold method (calibrated to BPHS / PVR book examples, v2.1)", "吉(Subha)": "Auspicious (Subha)", "中(Mixed)": "Mixed", "凶(Asubha)": "Inauspicious (Asubha)", "无Kaal Sarp Dosha": "No Kaal Sarp Dosha", "无Mangal Dosha(Mars不在煞宫)": "No Mangal Dosha (Mars is not in a dosha house)", "无Pitra Dosha明显迹象": "No clear sign of Pitra Dosha", "Rahu位置未知,无法判断Kaal Sarp Dosha": "Rahu's position is unknown; Kaal Sarp Dosha cannot be judged", "Sun位置未知,无法判断Pitra Dosha": "The Sun's position is unknown; Pitra Dosha cannot be judged", "Moon星座未知,无法判断Sade Sati": "The Moon's sign is unknown; Sade Sati cannot be judged", "Mars在自身星座,部分缓和": "Mars in its own sign, partly mitigated", "Mars擢升,完全解除": "Mars exalted, fully cancelled", # Jaimini karakas (scripts/jaimini.py KARAKA_CN / KARAKA_DOMAINS) "灵魂星AK": "Atmakaraka AK", "事业星AmK": "Amatyakaraka AmK", "兄弟星BK": "Bhratrikaraka BK", "母亲星MK": "Matrikaraka MK", "子女星PK": "Putrakaraka PK", "障碍星GK": "Gnatikaraka GK", "配偶星DK": "Darakaraka DK", "父亲星PiK": "Pitrukaraka PiK", "灵魂使命、核心自我、人生最高目标": "Soul purpose, core self, highest aim in life", "事业方向、主要谋士、权力代理": "Career direction, chief adviser, agent of power", "兄弟姐妹、勇气、冒险精神": "Siblings, courage, spirit of adventure", "母亲、家庭根基、情感安全感": "Mother, family roots, emotional security", "子女、创造力、学生、智能成果": "Children, creativity, students, intellectual output", "竞争对手、疾病、障碍、转化力量": "Rivals, illness, obstacles, transforming force", "配偶特质、伴侣关系、婚姻质量": "Spouse's nature, partnership, quality of marriage", "父亲、祖先业力、传统传承": "Father, ancestral karma, tradition", # planets and signs, if any Chinese form slipped through a table cell "北交点/罗睺": "Rahu", "南交点/计都": "Ketu", "北交点": "Rahu", "南交点": "Ketu", } PHRASES_EN: list[tuple[str, str]] = sorted(_PHRASES.items(), key=lambda item: len(item[0]), reverse=True) # Templated engine texts. Applied before the phrase table. REGEX_EN: list[tuple[re.Pattern[str], str]] = [ # scripts/tajika_year_lord.py selection_basis_text (BUG-1214) (re.compile(r"五类候选中只有([A-Za-z]+)以吉相位照年盘上升,取为年主"), r"Of the five candidates only \1 casts a benefic aspect on the annual Lagna, so it is the year lord"), (re.compile(r"没有候选以吉相位照年盘上升;只有([A-Za-z]+)以凶相位照上升,取为年主"), r"No candidate casts a benefic aspect on the annual Lagna; only \1 casts a malefic one, so it is the year lord"), (re.compile(r"没有候选以吉相位照年盘上升;([A-Za-z、]+)以凶相位照上升,取其中 Panchavargiya 最强的([A-Za-z]+)"), lambda m: (f"No candidate casts a benefic aspect on the annual Lagna; {m.group(1).replace('、', ', ')} cast a malefic one; " f"the strongest by Panchavargiya, {m.group(2)}, is the year lord")), (re.compile(r"([A-Za-z、]+)以吉相位照年盘上升,取其中 Panchavargiya 最强的([A-Za-z]+)"), lambda m: (f"{m.group(1).replace('、', ', ')} cast a benefic aspect on the annual Lagna; " f"the strongest by Panchavargiya, {m.group(2)}, is the year lord")), (re.compile(r"五类候选都不照年盘上升,取全体 Panchavargiya 最强的([A-Za-z]+)"), r"None of the five candidates aspects the annual Lagna; the strongest of all by Panchavargiya, \1, is the year lord"), # BUG-1227 Rath dual-lord basis on the reference report (round-7 option A). (re.compile(r"- 双主星 ([A-Za-z]+):"), r"- Co-lords \1: "), (re.compile(r"两主分落别的星座,按七级比较所落星座,第 (\d+) 级取 ([A-Za-z]+)"), r"The two lords occupy different signs, compared on the seven strength levels; level \1 takes \2"), (re.compile(r"两主都在本宫,年数 12;身份按同宫经度,只倒算计都,取 ([A-Za-z]+)"), r"Both lords are in the sign, so the period is 12 years; identity is by same-sign degree, and only Ketu is reversed; takes \1"), (re.compile(r"两主同在另一宫,年数数到该宫;身份按同宫经度,只倒算计都,取 ([A-Za-z]+)"), r"Both lords share another sign, so the years are counted to it; identity is by same-sign degree, and only Ketu is reversed; takes \1"), (re.compile(r"一主在天蝎或水瓶本宫,取在外面的那颗;火星在白羊、土星在摩羯不算本宫,取 ([A-Za-z]+)"), r"One lord is in Scorpio or Aquarius itself, so the lord outside it is taken; Mars in Aries and Saturn in Capricorn do not count as that own sign; takes \1"), (re.compile(r"两主所落星座七级全平,取年数较多的一颗,取 ([A-Za-z]+)"), r"The occupied signs tie on all seven levels, so the lord giving more years is taken; takes \1"), (re.compile(r"双主星判定遇到循环,返回未决"), "Dual-lord resolution hit a cycle and stays undecided"), # BUG-1218 Rath Narayana report lines (re.compile(r"(第 (\d) 级:([^)]+))"), r" (level \1: \2)"), (re.compile(r"(第 (\d) 级)"), r" (level \1)"), (re.compile(r" 与 ([^,]+),较强 ([^(]+)"), r" and \1; stronger \2"), (re.compile(r",从宫主 (\S+) 所在 (\S+) 起"), r", from the sign of its lord \1, \2"), # scripts/pl9_reader_export.py: f"第{house}宫主:{lord}" (re.compile(r"第(\d+)宫主:"), r"Lord of house \1: "), # scripts/aspects.py / jyotish_engine.py: f"{n}宫相位" (re.compile(r"(\d+)宫相位"), r"\1th-house aspect"), # scripts/yogas_doshas.py Mangal Dosha summary (re.compile(r"(无|有)Mangal Dosha——Mars在(\d+)宫([A-Za-z]+),严重程度:([A-Za-z_]+)"), lambda m: f"{'No' if m.group(1) == '无' else 'Has'} Mangal Dosha: Mars in house {m.group(2)} {m.group(3)}, severity: {m.group(4)}"), # Kaal Sarp summaries (re.compile(r"完全Kaal Sarp Dosha——所有(\d+)颗行星在Rahu\((\d+)\)—Ketu轴线之间"), r"Full Kaal Sarp Dosha: all \1 planets between the Rahu (\2)–Ketu axis"), (re.compile(r"部分Kaal Sarp Dosha——(\d+)/(\d+)颗行星在轴线之间"), r"Partial Kaal Sarp Dosha: \1/\2 planets between the axis"), # Pitra Dosha indicators (re.compile(r"([A-Za-z]+)\((\d+)宫\)克Sun\((\d+)宫\)"), r"\1 (house \2) afflicts the Sun (house \3)"), (re.compile(r"Sun\((\d+)宫\)与Rahu\((\d+)宫\)合相/相邻"), r"Sun (house \1) conjunct or next to Rahu (house \2)"), (re.compile(r"有Pitra Dosha迹象:"), "Signs of Pitra Dosha: "), # Sade Sati framework summary (re.compile(r"Sade Sati阶段框架:上升期=([A-Za-z]+),高峰期=([A-Za-z]+)(最困难),下降期=([A-Za-z]+);需结合Saturn实际位置判断是否在进行中"), r"Sade Sati phases: rising = \1, peak = \2 (hardest), setting = \3; whether it is under way depends on Saturn's actual position"), # Yoga strength words left over when a rule has no strength_en: whole table cells only. (re.compile(r"(?<=\| )中强(?= \|)"), "Moderately strong"), (re.compile(r"(?<=\| )中弱(?= \|)"), "Moderately weak"), (re.compile(r"(?<=\| )强(?= \|)"), "Strong"), (re.compile(r"(?<=\| )中(?= \|)"), "Moderate"), (re.compile(r"(?<=\| )弱(?= \|)"), "Weak"), ]