# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement

FONT = "Tahoma"       # 泰文/拉丁
CN_FONT = "宋体"      # 中文
L_TH = "th-TH"
L_CN = "zh-CN"

doc = Document()

# Normal 样式：三种脚本各配字体
style = doc.styles["Normal"]
style.font.name = FONT
style.font.size = Pt(12)
rpr = style.element.get_or_add_rPr()
rf = rpr.find(qn("w:rFonts"))
if rf is None:
    rf = OxmlElement("w:rFonts")
    rpr.append(rf)
rf.set(qn("w:ascii"), FONT)
rf.set(qn("w:hAnsi"), FONT)
rf.set(qn("w:eastAsia"), CN_FONT)
rf.set(qn("w:cs"), FONT)


def set_fonts(run):
    r = run._element.get_or_add_rPr()
    f = r.find(qn("w:rFonts"))
    if f is None:
        f = OxmlElement("w:rFonts")
        r.append(f)
    f.set(qn("w:ascii"), FONT)
    f.set(qn("w:hAnsi"), FONT)
    f.set(qn("w:eastAsia"), CN_FONT)
    f.set(qn("w:cs"), FONT)


def set_lang(run, lang):
    r = run._element.get_or_add_rPr()
    l = r.find(qn("w:lang"))
    if l is None:
        l = OxmlElement("w:lang")
        r.append(l)
    l.set(qn("w:val"), lang)
    l.set(qn("w:eastAsia"), lang)
    l.set(qn("w:cs"), lang)


def para(segments, size=12, bold=False, indent=0, space_after=6, space_before=0, align=None):
    """segments: list of (text, lang)"""
    p = doc.add_paragraph()
    for text, lang in segments:
        run = p.add_run(text)
        run.bold = bold
        run.font.size = Pt(size)
        set_fonts(run)
        set_lang(run, lang)
    if indent:
        p.paragraph_format.left_indent = Pt(indent)
    p.paragraph_format.space_after = Pt(space_after)
    p.paragraph_format.space_before = Pt(space_before)
    if align:
        p.alignment = align
    return p


def cn(t):
    return (t, L_CN)


def th(t):
    return (t, L_TH)


def heading(text, level=1):
    if level == 1:
        p = para([cn(text)], size=15, bold=True, space_before=14, space_after=6)
    else:
        p = para([cn(text)], size=13, bold=True, space_before=10, space_after=4)
    return p


def label(text):
    """中文标签行"""
    return para([cn(text)], size=12, bold=True, space_after=2)


# ============ 标题 ============
para([cn("《การใช้ภาษาไทยในการติดต่อสื่อสาร》读书笔记")], size=18, bold=True,
     align=WD_ALIGN_PARAGRAPH.CENTER, space_after=2)
para([cn("—— 要点归纳与关键句型 / 例句（附注释与参考译文）")], size=12, bold=False,
     align=WD_ALIGN_PARAGRAPH.CENTER, space_after=14)

# ============ 一、要点归纳 ============
heading("一、要点归纳", 1)

heading("（一）选词建议（ข้อแนะนำในการเลือกใช้คำ）", 2)
para([cn("1. "), th("用词准确、贴切"), cn("：注意一词多义和形近义近词（如 "), th("ซ่อมแซม / ปฏิสังขรณ์"), cn("、"), th("แน่นหนา / หนาแน่น"), cn("）。")], indent=18)
para([cn("2. "), th("用词合乎语法规范"), cn("：皇室用语（"), th("ราชาศัพท์"), cn("）、量词（"), th("ลักษณนาม"), cn("）等按规则使用。")], indent=18)
para([cn("3. "), th("使用当代通用词"), cn("：不用新造词、过时词、粗俗词、生僻词及自造缩略语。")], indent=18)
para([cn("4. "), th("多用泰语本族词"), cn("：除非泰语确无对应词，否则不混用外来语。")], indent=18)
para([cn("5. "), th("善用工具书"), cn("：词典（"), th("พจนานุกรม"), cn("）、辞书（"), th("ปทานุกรม"), cn("）、百科全书（"), th("สารานุกรม"), cn("）。")], indent=18)

heading("（二）造句建议（ข้อแนะนำในการใช้ประโยค）", 2)
para([cn("1. "), th("合乎语法"), cn("：不缺词、不多词、语序正确。")], indent=18)
para([cn("2. "), th("简洁"), cn("：删除重复和多余的词语。")], indent=18)
para([cn("3. "), th("清晰"), cn("：避免歧义。")], indent=18)
para([cn("4. "), th("通顺优美（สละสลวย）"), cn("：原文这几页未拍到，据引言所列五个特征归纳。")], indent=18)
para([cn("5. "), th("连贯"), cn("：句子之间要有逻辑关系，可借助连词连接。")], indent=18)

# ============ 二、关键句型与例句 ============
heading("二、关键句型与例句（附注释与参考译文）", 1)

# 例1
heading("例1 · 用词准确：摆脱英语直译的「容易……做」结构", 2)
para([cn("反例："), th("ผู้เขียนบทความควรใช้ภาษาที่ถูกต้องตามหลักไวยากรณ์และง่ายต่อการทำความเข้าใจ")], indent=18)
para([cn("参考译文：文章作者应当使用合乎语法、容易理解的语言。")], indent=18)
para([cn("注释："), th("ง่ายต่อการ"), cn(" 是照搬英语 “easy to” 的说法，泰语应改用 "), th("เข้าใจง่าย"), cn("。")], indent=18)
para([cn("正例："), th("ผู้เขียนบทความควรใช้ภาษาที่ถูกต้องตามหลักไวยากรณ์และเข้าใจง่าย")], indent=18)
para([cn("参考译文：文章作者应当使用合乎语法、容易理解的语言。")], indent=18)

# 例2
heading("例2 · 近义词辨析：ซ่อมแซม / ปฏิสังขรณ์", 2)
para([cn("两词都有“修缮、使完善”的意思，但搭配对象不同：")], indent=18)
para([th("ซ่อมแซม"), cn(" —— 修缮，用于器物；")], indent=36)
para([th("ปฏิสังขรณ์"), cn(" —— 修缮，用于寺庙、宫殿等重要场所。")], indent=36)

# 例3
heading("例3 · 近义词辨析：แน่นหนา / หนาแน่น", 2)
para([cn("两词字形相同、只是前后颠倒，意义不同：")], indent=18)
para([th("แน่นหนา"), cn(" —— 牢固，用于门窗；")], indent=36)
para([th("หนาแน่น"), cn(" —— 密集、拥挤，用于人群。")], indent=36)

# 例4
heading("例4 · 造句合乎语法：删去多余的「ควร」", 2)
para([cn("反例："), th("ถ้าแม้นว่าประชาชนทุกคนควรรู้จักรักษาความสะอาด กรุงเทพฯ คงจะไม่สกปรกอย่างนี้")], indent=18)
para([cn("参考译文：如果每个公民都「应该」懂得保持清洁，曼谷大概就不会这么脏了。")], indent=18)
para([cn("注释："), th("ถ้าแม้นว่า"), cn(" 表示条件，"), th("ควร"), cn(" 表示建议，两者并用导致句子读不通，应删去 "), th("ควร"), cn("。")], indent=18)
para([cn("正例："), th("ถ้าแม้นว่าประชาชนทุกคนรู้จักรักษาความสะอาด กรุงเทพฯ คงจะไม่สกปรกเช่นนี้")], indent=18)
para([cn("参考译文：如果每个公民都懂得保持清洁，曼谷大概就不会这么脏了。")], indent=18)

# 例5
heading("例5 · 造句合乎语法：纠正语序", 2)
para([cn("反例："), th("เราจะทำอย่างไรจึงจะชักชวนประชาชนมาเลือกตั้งลงคะแนนเสียงในวันอาทิตย์นี้ให้ได้มากที่สุด")], indent=18)
para([cn("参考译文：我们要怎么做，才能在这个星期天号召最多的民众来「选举投票」？")], indent=18)
para([cn("注释：应先投票（"), th("ลงคะแนนเสียง"), cn("）再选出代表（"), th("เลือกตั้ง"), cn("），原句语序颠倒。")], indent=18)
para([cn("正例："), th("เราจะทำอย่างไรจึงจะชักชวนประชาชนมาลงคะแนนเสียงเลือกตั้งในวันอาทิตย์นี้ให้ได้มากที่สุด")], indent=18)
para([cn("参考译文：我们要怎么做，才能在这个星期天号召最多的民众来投票选举？")], indent=18)

# 例6
heading("例6 · 造句简洁：删去多余的「ทำการ」「ประสบความ」", 2)
para([cn("反例："), th("ข้าพเจ้าทำการศึกษาค้นคว้าเกี่ยวกับการปลูกยูคาลิปตัสมากว่า ๒๐ ปี แต่ก็ยังไม่ประสบความสำเร็จ")], indent=18)
para([cn("参考译文：我从事桉树种植方面的研究已有二十多年，但还未取得成功。")], indent=18)
para([cn("注释："), th("ทำการ"), cn("、"), th("ประสบความ"), cn(" 属于多余词，删去后意思反而更清楚。")], indent=18)
para([cn("正例："), th("ข้าพเจ้าศึกษาค้นคว้าเกี่ยวกับการปลูกยูคาลิปตัสมากว่า ๒๐ ปี แต่ก็ยังไม่สำเร็จ")], indent=18)
para([cn("参考译文：我研究桉树种植已有二十多年，但还未成功。")], indent=18)

# 例7
heading("例7 · 造句清晰：消除歧义", 2)
para([cn("反例："), th("สหรัฐอเมริกานำเข้าสินค้าไทยเท่ากับการสั่งซื้อจากสหภาพยุโรป")], indent=18)
para([cn("参考译文：美国进口泰国商品的量，等于从欧盟采购的量。")], indent=18)
para([cn("注释：本句可作两种理解——「美国进口泰国商品＝美国从欧盟采购商品」，或「美国进口泰国商品＝欧盟从泰国采购商品」，故应改写以消除歧义。")], indent=18)
para([cn("正例："), th("สหรัฐอเมริกาและสหภาพยุโรปนำเข้าสินค้าไทยเท่ากัน")], indent=18)
para([cn("参考译文：美国和欧盟进口泰国商品的数量相同。")], indent=18)

# 例8
heading("例8 · 造句连贯：用连词表明逻辑关系", 2)
para([cn("原句（两句无关联）："), th("เกิดเพลิงไหม้ที่โรงเรียนเมื่อคืนนี้ ผู้อำนวยการโรงเรียนไปกรุงเทพฯ")], indent=18)
para([cn("参考译文：昨晚学校发生火灾，校长去了曼谷。")], indent=18)
para([cn("注释：两句之间没有关联，读者难以整合意思；可借助连词表明转折或因果关系。")], indent=18)
para([cn("转折："), th("เกิดเพลิงไหม้ที่โรงเรียนเมื่อคืนนี้ แต่ผู้อำนวยการโรงเรียนไปกรุงเทพฯ")], indent=18)
para([cn("参考译文：昨晚学校发生火灾，但校长却去了曼谷。")], indent=18)
para([cn("因果："), th("เกิดเพลิงไหม้ที่โรงเรียนเมื่อคืนนี้ ผู้อำนวยการโรงเรียนจึงไปกรุงเทพฯ เพื่อรายงานเหตุการณ์")], indent=18)
para([cn("参考译文：昨晚学校发生火灾，所以校长去了曼谷汇报情况。")], indent=18)

out = "/home/mi/.openclaw/workspace/tha_ocr/读书笔记_การใช้ภาษาไทย.docx"
doc.save(out)
print("SAVED:", out)
