diff --git a/Ho_Lok_Ue.db b/Ho_Lok_Ue.db
index e9d99d1..d1102e0 100644
Binary files a/Ho_Lok_Ue.db and b/Ho_Lok_Ue.db differ
diff --git "a/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py" "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py"
index a4d95ac..d7f5f23 100644
--- "a/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py"
+++ "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201.py"
@@ -1,8 +1,3 @@
-#================================================================
-# 《予我廣韻標音》
-# 使用《廣韻》作為漢字標讀音之依據。
-#================================================================
-import getopt
import os
import sqlite3
import sys
@@ -11,6 +6,7 @@
import settings
from mod_file_access import (
+ San_Sing_Han_Ji_Zu_Im_Piau,
close_excel_file,
get_cmd_input,
open_excel_file,
@@ -18,83 +14,92 @@
write_to_excel_file,
)
from mod_廣韻 import init_sing_bu_dict, init_un_bu_dict
-from p500_Import_Source_Sheet import San_Sing_Han_Ji_Tsh_Im_Piau
from p501_Kong_Un_Cha_Ji_Tian import Kong_Un_Piau_Im
from p502_TLPA_Cu_Im import Iong_TLPA_Cu_Im
-def main():
- # =========================================================="
- # 資料庫",
- # =========================================================="
- # 自 .env 檔案取得資料庫名稱
- DATABASE = settings.get_database_path()
- conn = sqlite3.connect(DATABASE)
- db_cursor = conn.cursor()
- print(f"DATABASE = {DATABASE}")
-
- # =========================================================================
- # (1) 取得需要注音的「檔案名稱」及其「目錄路徑」。
- # =========================================================================
- # 自命令列取得 Input 檔案名稱
- opts = get_cmd_input()
- CONVERT_FILE_NAME = opts["input"]
- print(f"CONVERT_FILE_NAME = {CONVERT_FILE_NAME}")
-
- # 取得檔案所屬之目錄路徑
- dir_path = opts["dir_path"]
-
- # 指定提供來源的【檔案】
- wb = open_excel_file(dir_path, CONVERT_FILE_NAME)
- if wb is None:
- print("無法開啟檔案,終止程式執行。")
- sys.exit()
-
- # =========================================================================
- # (2) 建置「漢字注音表」
- # 將存放在「工作表1」的「漢字」文章,製成「漢字注音表」以便填入注音。
- # =========================================================================
- # San_Sing_Han_Ji_Tsh_Im_Piau(CONVERT_FILE_NAME)
-
- # =========================================================================
- # (3) 在字典查注音,填入漢字注音表。
- # =========================================================================
- # Kong_Un_Piau_Im(CONVERT_FILE_NAME, db_cursor)
-
- # =========================================================================
- # (4) 將已注音之「漢字注音表」,製作成 HTML 格式之「注音/拼音/標音」網頁。
- # =========================================================================
-
- # 設定聲母及韻母之注音對照表
+def initialize_dicts(db_cursor):
+ """初始化聲母和韻母對照表字典"""
try:
sing_bu_dict = init_sing_bu_dict(db_cursor)
un_bu_dict = init_un_bu_dict(db_cursor)
+ print("字典初始化完成。")
+ except Exception as e:
+ print(f"字典初始化失敗:{e}")
+ sys.exit(1)
+ return sing_bu_dict, un_bu_dict
+
+
+def create_annotation_file(wb, db_cursor):
+ """建立注音表並進行查詢填寫"""
+ # 建立漢字注音表
+ San_Sing_Han_Ji_Zu_Im_Piau(wb.name)
+ # # 查詢注音並填寫表格
+ # Kong_Un_Piau_Im(wb.name, db_cursor)
+
+
+def export_to_html(wb):
+ """將已注音的漢字注音表導出為 HTML 格式"""
+ # 這裡可以使用已經填寫的漢字注音表進行轉換
+ print("將注音表轉換為 HTML 格式的功能可以在這裡實現。")
+
+
+def main():
+ #-------------------------------------------------------------------------
+ # 使用已打開且處於作用中的 Excel 工作簿
+ #-------------------------------------------------------------------------
+ # 取得專案根目錄。
+ try:
+ wb = xw.apps.active.books.active
except Exception as e:
- print(e)
- Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict)
-
- # ==========================================================
- # 檢查「缺字表」狀態
- # ==========================================================
- # 指定來源工作表
- source_sheet = wb.sheets["缺字表"]
- # 取得工作表內總列數
- end_row_no = (
- source_sheet.range("A" + str(source_sheet.cells.last_cell.row)).end("up").row
- )
- if end_row_no > 1:
- print(f"總計字典查不到注音的漢字共:{end_row_no}個。")
-
- # =========================================================================
- # (5) 依據《文章標題》另存新檔。
- # =========================================================================
- write_to_excel_file(wb)
- close_excel_file(wb)
-
- # ==========================================================
- # 關閉資料庫
- # ==========================================================
- conn.close()
+ print(f"發生錯誤: {e}")
+ print("無法找到作用中的 Excel 工作簿")
+ sys.exit(2)
+
+ # 獲取活頁簿的完整檔案路徑
+ file_path = wb.fullname
+ print(f"完整檔案路徑: {file_path}")
+
+ # 獲取活頁簿的檔案名稱(不包括路徑)
+ file_name = wb.name
+ print(f"檔案名稱: {file_name}")
+
+ # 資料庫連接
+ DATABASE = settings.get_database_path()
+ with sqlite3.connect(DATABASE) as conn:
+ db_cursor = conn.cursor()
+ print(f"DATABASE = {DATABASE}")
+
+ # # 取得命令列參數和檔案路徑
+ # opts = get_cmd_input()
+ # CONVERT_FILE_NAME = opts["input"]
+ # dir_path = opts["dir_path"]
+ # print(f"處理檔案: {CONVERT_FILE_NAME}")
+
+ # # 開啟指定的 Excel 檔案
+ # wb = open_excel_file(dir_path, CONVERT_FILE_NAME)
+ # if wb is None:
+ # print("無法開啟檔案,終止程式執行。")
+ # sys.exit()
+
+ # 初始化字典
+ sing_bu_dict, un_bu_dict = initialize_dicts(db_cursor)
+
+ # 創建漢字注音表並查詢注音
+ create_annotation_file(wb, db_cursor)
+
+ # 注音轉換處理
+ Iong_TLPA_Zu_Im(wb, sing_bu_dict, un_bu_dict)
+
+ # 檢查缺字表狀態
+ source_sheet = wb.sheets["缺字表"]
+ end_row_no = source_sheet.range("A" + str(source_sheet.cells.last_cell.row)).end("up").row
+ if end_row_no > 1:
+ print(f"總計字典查不到注音的漢字共:{end_row_no}個。")
+
+ # 儲存 Excel 檔案並關閉
+ write_to_excel_file(wb)
+ close_excel_file(wb)
if __name__ == "__main__":
- main()
\ No newline at end of file
+ main()
diff --git "a/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201_bak.py" "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201_bak.py"
new file mode 100644
index 0000000..f3ee106
--- /dev/null
+++ "b/a520_\350\243\275\344\275\234\346\263\250\351\237\263\347\266\262\351\240\201_bak.py"
@@ -0,0 +1,100 @@
+#================================================================
+# 《予我廣韻標音》
+# 使用《廣韻》作為漢字標讀音之依據。
+#================================================================
+import getopt
+import os
+import sqlite3
+import sys
+
+import xlwings as xw
+
+import settings
+from mod_file_access import (
+ close_excel_file,
+ get_cmd_input,
+ open_excel_file,
+ save_to_a_working_copy,
+ write_to_excel_file,
+)
+from mod_廣韻_v3 import init_sing_bu_dict, init_un_bu_dict
+from p500_Import_Source_Sheet import San_Sing_Han_Ji_Tsh_Im_Piau
+from p501_Kong_Un_Cha_Ji_Tian import Kong_Un_Piau_Im
+from p502_TLPA_Cu_Im import Iong_TLPA_Cu_Im
+
+
+def main():
+ # =========================================================="
+ # 資料庫",
+ # =========================================================="
+ # 自 .env 檔案取得資料庫名稱
+ DATABASE = settings.get_database_path()
+ conn = sqlite3.connect(DATABASE)
+ db_cursor = conn.cursor()
+ print(f"DATABASE = {DATABASE}")
+
+ # =========================================================================
+ # (1) 取得需要注音的「檔案名稱」及其「目錄路徑」。
+ # =========================================================================
+ # 自命令列取得 Input 檔案名稱
+ opts = get_cmd_input()
+ CONVERT_FILE_NAME = opts["input"]
+ print(f"CONVERT_FILE_NAME = {CONVERT_FILE_NAME}")
+
+ # 取得檔案所屬之目錄路徑
+ dir_path = opts["dir_path"]
+
+ # 指定提供來源的【檔案】
+ wb = open_excel_file(dir_path, CONVERT_FILE_NAME)
+ if wb is None:
+ print("無法開啟檔案,終止程式執行。")
+ sys.exit()
+
+ # =========================================================================
+ # (2) 建置「漢字注音表」
+ # 將存放在「工作表1」的「漢字」文章,製成「漢字注音表」以便填入注音。
+ # =========================================================================
+ # San_Sing_Han_Ji_Tsh_Im_Piau(CONVERT_FILE_NAME)
+
+ # =========================================================================
+ # (3) 在字典查注音,填入漢字注音表。
+ # =========================================================================
+ # Kong_Un_Piau_Im(CONVERT_FILE_NAME, db_cursor)
+
+ # =========================================================================
+ # (4) 將已注音之「漢字注音表」,製作成 HTML 格式之「注音/拼音/標音」網頁。
+ # =========================================================================
+
+ # 設定聲母及韻母之注音對照表
+ try:
+ sing_bu_dict = init_sing_bu_dict(db_cursor)
+ un_bu_dict = init_un_bu_dict(db_cursor)
+ except Exception as e:
+ print(e)
+ Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict)
+
+ # ==========================================================
+ # 檢查「缺字表」狀態
+ # ==========================================================
+ # 指定來源工作表
+ source_sheet = wb.sheets["缺字表"]
+ # 取得工作表內總列數
+ end_row_no = (
+ source_sheet.range("A" + str(source_sheet.cells.last_cell.row)).end("up").row
+ )
+ if end_row_no > 1:
+ print(f"總計字典查不到注音的漢字共:{end_row_no}個。")
+
+ # =========================================================================
+ # (5) 依據《文章標題》另存新檔。
+ # =========================================================================
+ write_to_excel_file(wb)
+ close_excel_file(wb)
+
+ # ==========================================================
+ # 關閉資料庫
+ # ==========================================================
+ conn.close()
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git "a/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py" "b/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py"
index c29e4f5..0eb7964 100644
--- "a/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py"
+++ "b/a703_\350\243\275\344\275\234\346\250\231\351\237\263\347\266\262\351\240\201.py"
@@ -37,8 +37,8 @@
sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格
# (2) A740: 將【漢字注音】工作表的內容,轉成 HTML 網頁檔案。
-# tng_sing_bang_iah(wb, '漢字注音', 'V3')
-tng_sing_bang_iah(wb, '十五音', 'V3')
+han_ji_piau_im_huat = get_named_value(wb, '標音方法')
+tng_sing_bang_iah(wb=wb, sheet_name='漢字注音', cell='V3', page_type='含頁頭')
# (3) A750: 將 Tai_Gi_Zu_Im_Bun.xlsx 檔案,依 env 工作表的設定,另存新檔到指定目錄。
try:
diff --git "a/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py" "b/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py"
index 5e80a04..eff6601 100644
--- "a/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py"
+++ "b/a704_\350\243\275\344\275\234\345\205\266\345\256\203\346\274\242\345\255\227\346\250\231\351\237\263.py"
@@ -4,9 +4,7 @@
import xlwings as xw
from mod_file_access import copy_excel_sheet, reset_han_ji_piau_im_cells
-from p704_漢字以十五音標注音 import zap_goo_im_piau_im
-
-# from p703_Kong_Un_Ca_Thak_Im import ca_han_ji_thak_im
+from p704_漢字以十五音標注音 import han_ji_piau_im
# (0) 取得專案根目錄。
# 使用已打開且處於作用中的 Excel 工作簿
@@ -26,20 +24,46 @@
print(f"檔案名稱: {file_name}")
# 顯示「已輸入之拼音字母及注音符號」
-named_range = wb.names['顯示注音輸入'] # 選擇名為 "顯示注音輸入" 的命名範圍# 選擇名為 "顯示注音輸入" 的命名範圍
+named_range = wb.names['顯示注音輸入']
named_range.refers_to_range.value = True
# (1) A720: 將 V3 儲存格內的漢字,逐個填入標音用方格。
-sheet = wb.sheets['漢字注音'] # 選擇工作表
-sheet.activate() # 將「漢字注音」工作表設為作用中工作表
-sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格
+sheet = wb.sheets['漢字注音']
+sheet.activate()
+sheet.range('A1').select()
# (2) 複製【漢字注音】工作表,並將【漢字注音】工作表已有漢字標清除(不含上列之【台語音標】)
piau_im_huat = wb.names['標音方法'].refers_to_range.value
copy_excel_sheet(wb, '漢字注音', piau_im_huat)
reset_han_ji_piau_im_cells(wb, piau_im_huat)
-zap_goo_im_piau_im(wb, sheet_name=piau_im_huat, cell='V3', hue_im="白話音")
+
+# 根據標音方法選擇對應參數
+if piau_im_huat == '十五音':
+ hue_im = "白話音"
+ module_name = 'mod_標音'
+ function_name = 'TLPA_Tng_Zap_Goo_Im'
+elif piau_im_huat == '白話字':
+ # 以下為待完成之虛擬程式碼
+ hue_im = "白話字"
+ module_name = 'mod_白話字'
+ function_name = 'bah_hoat_tng_im'
+elif piau_im_huat == '台羅拼音':
+ # 以下為待完成之虛擬程式碼
+ hue_im = "台羅拼音"
+ module_name = 'mod_台羅拼音'
+ function_name = 'tai_lo_pin_im'
+elif piau_im_huat == '閩拚方案':
+ # 以下為待完成之虛擬程式碼
+ hue_im = "閩拚方案"
+ module_name = 'mod_閩拚方案'
+ function_name = 'min_pian_han_im'
+else:
+ print(f"無法識別的標音方法:{piau_im_huat}")
+ sys.exit(1)
+
+# 呼叫 han_ji_piau_im 函數,並傳入動態參數
+han_ji_piau_im(wb, sheet_name=piau_im_huat, cell='V3', hue_im=hue_im, module_name=module_name, function_name=function_name)
# (3) A740: 將【漢字注音】工作表的內容,轉成 HTML 網頁檔案。
# tng_sing_bang_iah(wb, '漢字注音', 'V3')
@@ -48,22 +72,14 @@
try:
file_name = str(wb.names['TITLE'].refers_to_range.value).strip()
except KeyError:
- # print("未找到命名範圍 'TITLE',使用預設名稱")
- # file_name = "default_file_name.xlsx" # 提供一個預設檔案名稱
setting_sheet = wb.sheets["env"]
- file_name = str(
- setting_sheet.range("C4").value
- ).strip()
+ file_name = str(setting_sheet.range("C4").value).strip()
# 設定檔案輸出路徑,存於專案根目錄下的 output2 資料夾
output_path = wb.names['OUTPUT_PATH'].refers_to_range.value
new_file_path = os.path.join(
".\\{0}".format(output_path),
- f"【河洛話注音】{file_name}.xlsx")
+ f"【{piau_im_huat}】{file_name}.xlsx")
# 儲存新建立的工作簿
wb.save(new_file_path)
-
-# 保存 Excel 檔案
-# wb.close()
-
diff --git "a/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\345\215\201\344\272\224\351\237\263.html" "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\345\215\201\344\272\224\351\237\263.html"
new file mode 100644
index 0000000..2ad10d1
--- /dev/null
+++ "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\345\215\201\344\272\224\351\237\263.html"
@@ -0,0 +1,425 @@
+
+
+
+
+ 《歸去來辭》【河洛白話音】
+
+
+
+
+ 《歸去來辭》【河洛白話音】
+
+
+
+歸
+去
+來
+兮
+!
+田
+園
+將
+蕪
+胡
+不
+歸
+?
+既
+自
+以
+心
+為
+形
+役
+,
+奚
+惆
+悵
+而
+獨
+悲
+?
+悟
+已
+往
+之
+不
+諫
+,
+知
+來
+者
+之
+可
+追
+;
+實
+迷
+途
+其
+未
+遠
+,
+覺
+今
+是
+而
+昨
+非
+。
+舟
+遙
+遙
+以
+輕
+揚
+,
+風
+飄
+飄
+而
+吹
+衣
+。
+問
+征
+夫
+以
+前
+路
+,
+恨
+晨
+光
+之
+熹
+微
+。
+乃
+瞻
+衡
+宇
+,
+載
+欣
+載
+奔
+。
+僮
+仆
+歡
+迎
+,
+稚
+子
+候
+門
+。
+三
+徑
+就
+荒
+,
+松
+菊
+猶
+存
+。
+攜
+幼
+入
+室
+,
+有
+酒
+盈
+樽
+。
+引
+壺
+觴
+以
+自
+酌
+,
+眄
+庭
+柯
+以
+怡
+顏
+,
+倚
+南
+窗
+以
+寄
+傲
+,
+審
+容
+膝
+之
+易
+安
+。
+園
+日
+涉
+以
+成
+趣
+,
+門
+雖
+設
+而
+常
+關
+。
+策
+扶
+老
+以
+流
+憩
+,
+時
+矯
+首
+而
+遐
+觀
+。
+雲
+無
+心
+以
+出
+岫
+,
+鳥
+倦
+飛
+而
+知
+還
+。
+景
+翳
+翳
+以
+將
+入
+,
+撫
+孤
+松
+而
+盤
+桓
+。
+
+
+歸
+去
+來
+兮
+!
+請
+息
+交
+以
+絕
+遊
+。
+世
+與
+我
+而
+相
+遺
+,
+複
+駕
+言
+兮
+焉
+求
+?
+悅
+親
+戚
+之
+情
+話
+,
+樂
+琴
+書
+以
+消
+憂
+。
+農
+人
+告
+餘
+以
+春
+及
+,
+將
+有
+事
+乎
+西
+疇
+。
+或
+命
+巾
+車
+,
+或
+棹
+孤
+舟
+。
+既
+窈
+窕
+以
+尋
+壑
+,
+亦
+崎
+嶇
+而
+經
+丘
+。
+木
+欣
+欣
+以
+向
+榮
+,
+泉
+涓
+涓
+而
+始
+流
+。
+羨
+萬
+物
+之
+得
+時
+,
+感
+吾
+生
+之
+行
+休
+。
+
+
+已
+矣
+乎
+!
+寓
+形
+宇
+內
+複
+幾
+時
+,
+曷
+不
+委
+心
+任
+去
+留
+,
+胡
+為
+遑
+遑
+欲
+何
+之
+?
+富
+貴
+非
+吾
+願
+,
+帝
+鄉
+不
+可
+期
+。
+懷
+良
+辰
+以
+孤
+往
+,
+或
+植
+杖
+而
+耘
+耔
+,
+登
+東
+皋
+以
+舒
+嘯
+,
+臨
+清
+流
+而
+賦
+詩
+。
+聊
+乘
+化
+以
+歸
+盡
+,
+樂
+夫
+天
+命
+複
+奚
+疑
+。
+
+
+
+
+
\ No newline at end of file
diff --git "a/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\346\226\271\351\237\263\347\254\246\350\231\237.html" "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\346\226\271\351\237\263\347\254\246\350\231\237.html"
new file mode 100644
index 0000000..a595047
--- /dev/null
+++ "b/docs/\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221_\346\226\271\351\237\263\347\254\246\350\231\237.html"
@@ -0,0 +1,425 @@
+
+
+
+
+ 《歸去來辭》【河洛白話音】
+
+
+
+
+ 《歸去來辭》【河洛白話音】
+
+
+
+歸
+去
+來
+兮
+!
+田
+園
+將
+蕪
+胡
+不
+歸
+?
+既
+自
+以
+心
+為
+形
+役
+,
+奚
+惆
+悵
+而
+獨
+悲
+?
+悟
+已
+往
+之
+不
+諫
+,
+知
+來
+者
+之
+可
+追
+;
+實
+迷
+途
+其
+未
+遠
+,
+覺
+今
+是
+而
+昨
+非
+。
+舟
+遙
+遙
+以
+輕
+揚
+,
+風
+飄
+飄
+而
+吹
+衣
+。
+問
+征
+夫
+以
+前
+路
+,
+恨
+晨
+光
+之
+熹
+微
+。
+乃
+瞻
+衡
+宇
+,
+載
+欣
+載
+奔
+。
+僮
+仆
+歡
+迎
+,
+稚
+子
+候
+門
+。
+三
+徑
+就
+荒
+,
+松
+菊
+猶
+存
+。
+攜
+幼
+入
+室
+,
+有
+酒
+盈
+樽
+。
+引
+壺
+觴
+以
+自
+酌
+,
+眄
+庭
+柯
+以
+怡
+顏
+,
+倚
+南
+窗
+以
+寄
+傲
+,
+審
+容
+膝
+之
+易
+安
+。
+園
+日
+涉
+以
+成
+趣
+,
+門
+雖
+設
+而
+常
+關
+。
+策
+扶
+老
+以
+流
+憩
+,
+時
+矯
+首
+而
+遐
+觀
+。
+雲
+無
+心
+以
+出
+岫
+,
+鳥
+倦
+飛
+而
+知
+還
+。
+景
+翳
+翳
+以
+將
+入
+,
+撫
+孤
+松
+而
+盤
+桓
+。
+
+
+歸
+去
+來
+兮
+!
+請
+息
+交
+以
+絕
+遊
+。
+世
+與
+我
+而
+相
+遺
+,
+複
+駕
+言
+兮
+焉
+求
+?
+悅
+親
+戚
+之
+情
+話
+,
+樂
+琴
+書
+以
+消
+憂
+。
+農
+人
+告
+餘
+以
+春
+及
+,
+將
+有
+事
+乎
+西
+疇
+。
+或
+命
+巾
+車
+,
+或
+棹
+孤
+舟
+。
+既
+窈
+窕
+以
+尋
+壑
+,
+亦
+崎
+嶇
+而
+經
+丘
+。
+木
+欣
+欣
+以
+向
+榮
+,
+泉
+涓
+涓
+而
+始
+流
+。
+羨
+萬
+物
+之
+得
+時
+,
+感
+吾
+生
+之
+行
+休
+。
+
+
+已
+矣
+乎
+!
+寓
+形
+宇
+內
+複
+幾
+時
+,
+曷
+不
+委
+心
+任
+去
+留
+,
+胡
+為
+遑
+遑
+欲
+何
+之
+?
+富
+貴
+非
+吾
+願
+,
+帝
+鄉
+不
+可
+期
+。
+懷
+良
+辰
+以
+孤
+往
+,
+或
+植
+杖
+而
+耘
+耔
+,
+登
+東
+皋
+以
+舒
+嘯
+,
+臨
+清
+流
+而
+賦
+詩
+。
+聊
+乘
+化
+以
+歸
+盡
+,
+樂
+夫
+天
+命
+複
+奚
+疑
+。
+
+
+
+
+
\ No newline at end of file
diff --git a/mod_file_access.py b/mod_file_access.py
index 4ab86a7..fec1c55 100644
--- a/mod_file_access.py
+++ b/mod_file_access.py
@@ -336,4 +336,87 @@ def reset_han_ji_piau_im_cells(wb, sheet_name='漢字注音'):
# 計算要清除的行號,從 start_row_no 開始,依次遞增 4 行
current_row_no = start_row_no + i * row_step
# 清除指定範圍的內容
- sheet.range(f'D{current_row_no}:R{current_row_no}').clear_contents()
\ No newline at end of file
+ sheet.range(f'D{current_row_no}:R{current_row_no}').clear_contents()
+
+
+def San_Sing_Han_Ji_Zu_Im_Piau(wb):
+ # 指定來源工作表
+ source_sheet = wb.sheets["工作表1"]
+ source_sheet.select()
+
+ # 取得工作表內總列數
+ source_row_no = int(
+ source_sheet.range("A" + str(wb.sheets[0].cells.last_cell.row)).end("up").row
+ )
+ print(f"source_row_no = {source_row_no}")
+
+ # ==========================================================
+ # 備妥程式需使用之工作表
+ # ==========================================================
+ sheet_name_list = [
+ "缺字表",
+ "字庫表",
+ "漢字注音表",
+ ]
+ # -----------------------------------------------------
+ # 檢查工作表是否已存在
+ for sheet_name in sheet_name_list:
+ sheets = [sheet.name for sheet in wb.sheets] # 獲取所有工作表的名稱
+ if sheet_name in sheets:
+ sheet = wb.sheets[sheet_name]
+ try:
+ sheet.select()
+ sheet.clear()
+ continue
+ except Exception as e:
+ print(e)
+ else:
+ # CommandError 的 Exception 發生時,表工作表不存在
+ # 新增程式需使用之工作表
+ print(f"工作表 {sheet_name} 不存在,正在新增...")
+ wb.sheets.add(name=sheet_name)
+
+ # 選用「漢字注音表」
+ try:
+ han_ji_tsu_im_paiu = wb.sheets["漢字注音表"]
+ han_ji_tsu_im_paiu.select()
+ except Exception as e:
+ # 处理找不到 "漢字注音表" 工作表的异常
+ print(e)
+ print("找不到:〖漢字注音表〗工作表。")
+ return False
+
+ # ==========================================================
+ # (1)
+ # ==========================================================
+ # 自【工作表1】的每一列,讀入一個「段落」的漢字。然後將整個段
+ # 落拆成「單字」,存到【漢字注音表】;在【漢字注音表】的每個
+ # 儲存格,只存放一個「單字」。
+ # ==========================================================
+
+ # source_row_index = 1
+ # target_row_index = 1 # index for target sheet
+ # # for row in range(1, source_rows):
+ # while source_row_index <= source_row_no:
+ # # 自【工作表1】取得「一行漢字」
+ # tsit_hang_ji = str(source_sheet.range("A" + str(source_row_index)).value)
+ # hang_ji_str = tsit_hang_ji.strip()
+
+ # # 讀到空白行
+ # if hang_ji_str == "None":
+ # hang_ji_str = "\n"
+ # else:
+ # hang_ji_str = f"{tsit_hang_ji}\n"
+
+ # han_ji_range = convert_string_to_chars_list(hang_ji_str)
+
+ # # =========================================================
+ # # 讀到的整段文字,以「單字」形式寫入【漢字注音表】。
+ # # =========================================================
+ # han_ji_tsu_im_paiu.range("A" + str(target_row_index)).options(
+ # transpose=True
+ # ).value = han_ji_range
+
+ # ji_soo = len(han_ji_range)
+ # target_row_index += ji_soo
+ # source_row_index += 1
diff --git "a/mod_\345\273\243\351\237\273_v3.py" "b/mod_\345\273\243\351\237\273_v3.py"
new file mode 100644
index 0000000..b8124b0
--- /dev/null
+++ "b/mod_\345\273\243\351\237\273_v3.py"
@@ -0,0 +1,425 @@
+import re
+import sqlite3
+
+
+def connect_to_db_by_context_manager_decorator(db_path):
+ def connect_to_db(func):
+ def wrapper(*args, **kwargs):
+ # 創建數據庫連接
+ conn = sqlite3.connect(db_path)
+
+ # 創建一個游標
+ cursor = conn.cursor()
+
+ # 執行函數
+ result = func(cursor, *args, **kwargs)
+
+ # 關閉數據庫連接
+ conn.close()
+
+ return result
+
+ return wrapper
+
+ return connect_to_db
+
+
+def connect_to_db(db_path):
+ # 創建數據庫連接
+ conn = sqlite3.connect(db_path)
+
+ # 創建一個游標
+ cursor = conn.cursor()
+
+ return conn, cursor
+
+
+def connect_to_db2(db_path):
+ # 創建數據庫連接
+ conn = sqlite3.connect(db_path)
+
+ # 創建一個游標
+ cursor = conn.cursor() # noqa: F841
+
+ return conn
+
+
+def close_db_connection(conn):
+ # 關閉數據庫連接
+ conn.close()
+
+
+#===============================================================================
+# 查音雅俗通十五音聲母對照表
+#===============================================================================
+def cha_siann_bu_tui_ciau_piau(cursor):
+ # SQL 查詢語句
+ query = """
+ SELECT 識別號,
+ 聲母碼,
+ 聲母國際音標,
+ 白話字聲母,
+ 閩拼聲母,
+ 台羅聲母,
+ 方音聲母,
+ 十五音聲母
+ FROM 聲母對照表;
+ """
+
+ # 執行 SQL 查詢
+ cursor.execute(query)
+
+ # 獲取查詢結果
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ fields = [
+ '識別號', '聲母碼', '聲母國際音標', '白話字聲母', '閩拼聲母', '台羅聲母',
+ '方音聲母', '十五音聲母',
+ ]
+ dict_results = [dict(zip(fields, result)) for result in results]
+
+ # 回傳字典列表
+ return dict_results
+
+
+"""
+查詢雅俗通十五音韻母對照表
+"""
+def cha_un_bu_tui_ciau_piau(cursor):
+ # SQL 查詢語句
+ query = """
+ SELECT 識別號,
+ 韻母碼,
+ 韻母國際音標,
+ 白話字韻母,
+ 閩拼韻母,
+ 台羅韻母,
+ 方音韻母,
+ 十五音韻母,
+ 舒促聲,
+ 十五音序
+ FROM 韻母對照表;
+ """
+
+ # 執行 SQL 查詢
+ cursor.execute(query)
+
+ # 獲取查詢結果
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ fields = [
+ '識別號', '韻母碼', '韻母國際音標', '白話字韻母', '閩拼韻母', '台羅韻母',
+ '方音韻母', '十五音韻母', '舒促聲', '十五音序'
+ ]
+ dict_results = [dict(zip(fields, result)) for result in results]
+
+ # 回傳字典列表
+ return dict_results
+
+
+"""
+使用 `小韻檢視` 查詢某小韻之切語及標音
+"""
+def cha_siau_un_piau_im(cursor, han_ji):
+ """
+ 根據漢字查詢其讀音資訊。
+
+ :param cursor: 數據庫游標
+ :param han_zi: 欲查詢的漢字
+ :return: 包含讀音資訊的字典列表
+ """
+ query = """
+ SELECT 小韻字, 小韻切語, 小韻標音
+ FROM 小韻檢視
+ WHERE 小韻字 = ?;
+ """
+ cursor.execute(query, (han_ji,))
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ fields = ['小韻字', '小韻切語', '小韻標音']
+ return [dict(zip(fields, result)) for result in results]
+
+"""
+查詢某漢字的 `小韻` 資料
+"""
+def han_ji_cha_siau_un(cursor, han_ji):
+ # SQL 查詢語句
+ query = """
+ SELECT *
+ FROM 小韻檢視
+ WHERE 小韻字 = ?;
+ """
+
+ # 執行 SQL 查詢
+ cursor.execute(query, (han_ji,))
+
+ # 獲取查詢結果
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ fields = [
+ '小韻識別號', '上字表識別號', '下字表識別號',
+ '小韻字', '小韻切語', '小韻標音', '小韻目次', '小韻字序號', '小韻字集', '字數',
+ '廣韻聲母', '七聲類', '發音部位', '清濁', '發送收',
+ '聲母碼', '聲母國際音標', '白話字聲母', '閩拼聲母', '台羅聲母', '方音聲母','十五音聲母',
+ '廣韻韻母', '目次', '攝', '韻系', '韻目', '調', '呼', '等', '韻母', '等呼', '下字標音',
+ '韻母碼', '韻母國際音標', '白話字韻母', '閩拼韻母', '台羅韻母', '方音韻母', '十五音韻母',
+ ]
+
+ dict_results = [dict(zip(fields, result)) for result in results]
+
+ # 回傳字典列表
+ return dict_results
+
+"""
+用 `漢字` 查詢《廣韻》的標音
+"""
+def han_ji_cha_piau_im(cursor, han_ji):
+ """
+ 根據漢字查詢其讀音資訊。 若資料紀錄在`常用率`欄位儲存值為空值(NULL)
+ ,則將其視為 0人值,因此可排在查詢結果的最後。
+
+ :param cursor: 數據庫游標
+ :param han_ji: 欲查詢的漢字
+ :return: 包含讀音資訊的字典列表
+
+ SELECT *
+ FROM 漢字檢視
+ WHERE 字 = ?
+ ORDER BY CASE WHEN 常用率 IS NULL THEN 1 ELSE 0 END, 常用率 DESC;
+ """
+
+ query = """
+ SELECT *
+ FROM 漢字檢視
+ WHERE 字 = ?
+ ORDER BY COALESCE(常用率, 0) DESC;
+ """
+ cursor.execute(query, (han_ji,))
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ fields = [
+ '漢字識別號', '字', '同音字序', '切語', '漢字標音', '常用率', '字義',
+ '小韻識別號', '上字識別號', '下字識別號', '小韻字', '小韻切語', '小韻標音', '小韻目次', '小韻字序號',
+ '廣韻聲母', '七聲類', '發音部位', '清濁', '發送收',
+ '聲母碼', '聲母國際音標', '白話字聲母', '閩拼聲母', '台羅聲母', '方音聲母', '十五音聲母',
+ '廣韻韻母', '目次', '攝', '韻系', '韻目', '調', '呼', '等', '等呼',
+ '韻母碼', '韻母國際音標', '白話字韻母', '閩拼韻母', '台羅韻母', '方音韻母', '十五音韻母',
+ ]
+ return [dict(zip(fields, result)) for result in results]
+
+
+def query_table_by_field(cursor, table_name, fields, query_field, keyword):
+ # 執行 SQL 查詢
+ cursor.execute(f"SELECT * FROM {table_name} WHERE {query_field} LIKE ?", ('%' + keyword + '%',))
+
+ # 獲取查詢結果
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ dict_results = [dict(zip(fields, result)) for result in results]
+
+ # 回傳字典列表
+ return dict_results
+
+
+def cha_ciat_gu_siong_ji(cursor, siong_ji):
+ table_name = "切語上字表"
+ fields = [
+ '識別號', '廣韻聲母識別號', '七聲類', '發音部位', '聲母', '清濁', '發送收',
+ '聲母拼音碼', '切語上字集', '備註',
+ ]
+ query_field = "切語上字集"
+ return query_table_by_field(cursor, table_name, fields, query_field, siong_ji)
+
+
+def cha_ciat_gu_ha_ji(cursor, ha_ji):
+ table_name = "切語下字表"
+ fields = [
+ '識別號', '廣韻韻母識別號', '韻系列號', '韻系行號',
+ '韻目索引', '目次識別號', '目次',
+ '攝', '韻系', '韻目', '調', '呼', '等', '韻母',
+ '切語下字集', '等呼', '韻母拼音碼', '備註',
+ ]
+ query_field = "切語下字集"
+ return query_table_by_field(cursor, table_name, fields, query_field, ha_ji)
+
+
+def query_table_by_id(cursor, table_name, fields, id):
+ # 執行 SQL 查詢
+ cursor.execute(f"SELECT * FROM {table_name} WHERE 識別號 = ?", (id,))
+
+ # 獲取查詢結果
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ dict_results = [dict(zip(fields, result)) for result in results]
+
+ # 回傳字典列表
+ return dict_results
+
+
+# =========================================================
+# 判斷調號
+# =========================================================
+def piau_tiau_ho(ji_tian_piau_im):
+ tiau_ho_list = {
+ '清平': 1,
+ '清上': 2,
+ '清去': 3,
+ '清入': 4,
+ '濁平': 5,
+ '濁上': 2,
+ '濁去': 7,
+ '濁入': 8,
+ }
+ siong_ji_cing_tok = ji_tian_piau_im['清濁']
+ cing_tok = siong_ji_cing_tok[-1]
+ sing_tiau = ji_tian_piau_im['調']
+ try:
+ su_sing_pat_tiau = tiau_ho_list[ f"{cing_tok}{sing_tiau}" ]
+ except KeyError:
+ print(f"無法判漢字:{ji_tian_piau_im['字']}的 [{ji_tian_piau_im['聲母碼']}{ji_tian_piau_im['韻母碼']}] 調號!")
+ su_sing_pat_tiau = 0
+ return su_sing_pat_tiau
+
+
+def init_sing_bu_dict(cursor):
+ # 執行 SQL 查詢
+ cursor.execute("SELECT * FROM 聲母對照表")
+
+ # 獲取所有資料
+ rows = cursor.fetchall()
+
+ # 初始化字典
+ sing_bu_dict = {}
+
+ # 從查詢結果中提取資料並將其整理成一個字典
+ for row in rows:
+ sing_bu_dict[row[1]] = {
+ 'code': row[1],
+ 'ipa': row[2],
+ 'poj': row[3],
+ 'bp': row[4],
+ 'tl': row[5],
+ 'tps': row[6],
+ 'sni': row[7],
+ }
+
+ return sing_bu_dict
+
+
+def init_un_bu_dict(cursor):
+ # 執行 SQL 查詢
+ cursor.execute("SELECT * FROM 韻母對照表")
+
+ # 獲取所有資料
+ rows = cursor.fetchall()
+
+ # 初始化字典
+ un_bu_dict = {}
+
+ # 從查詢結果中提取資料並將其整理成一個字典
+ for row in rows:
+ un_bu_dict[row[1]] = {
+ 'code': row[1],
+ 'ipa': row[2],
+ 'poj': row[3],
+ 'bp': row[4],
+ 'tl': row[5],
+ 'tps': row[6],
+ 'sni': row[7],
+ 'sni_su_ciok_sing': row[8],
+ 'sni_su_ho': int(row[9]),
+ }
+
+ return un_bu_dict
+
+
+# ==========================================================
+# 自漢字的「注音碼」,分析出:聲母、韻母、調號
+# ==========================================================
+def split_cu_im(cu_im):
+ sing_bu_pattern = re.compile(r"(b|ch|c|g|h|j|kh|k|l|m|ng|n|ph|p|s|th|t|Ø)")
+ result = []
+
+ sing_bu = sing_bu_pattern.match(cu_im).group()
+ un_bu = cu_im[len(sing_bu) : len(cu_im) - 1]
+ tiau = cu_im[len(cu_im) - 1]
+
+ result += [sing_bu]
+ result += [un_bu]
+ result += [tiau]
+ return result
+
+
+if __name__ == "__main__":
+ # sing_bu_dict = init_sing_bu_dict()
+ # sing_code = 'c'
+
+ # sing_bu_tl = sing_bu_dict[sing_code]['tl']
+ # assert sing_bu_tl == 'tsh', "轉換錯誤!"
+
+ # sing_bu_ipa = sing_bu_dict[sing_code]['ipa']
+ # assert sing_bu_ipa == 'ʦʰ', "轉換錯誤!"
+
+ # sing_bu_poj = sing_bu_dict[sing_code]['poj']
+ # assert sing_bu_poj == 'chh', "轉換錯誤!"
+
+ # sing_bu_bp = sing_bu_dict[sing_code]['bp']
+ # assert sing_bu_bp == 'c', "轉換錯誤!"
+
+ # sing_bu_tps = sing_bu_dict[sing_code]['tps']
+ # assert sing_bu_tps == 'ㄘ', "轉換錯誤!"
+
+ # sing_bu_sni = sing_bu_dict[sing_code]['sni']
+ # assert sing_bu_sni == '出', "轉換錯誤!"
+
+ # #--------------------------------------------------
+ # un_bu_dict = init_un_bu_dict()
+ # un_code = 'ee'
+
+ # un_bu_tl = un_bu_dict[un_code]['tl']
+ # assert un_bu_tl == 'ee', "轉換錯誤!"
+
+ # un_bu_ipa = un_bu_dict[un_code]['ipa']
+ # assert un_bu_ipa == 'ɛ', "轉換錯誤!"
+
+ # un_bu_poj = un_bu_dict[un_code]['poj']
+ # assert un_bu_poj == 'e', "轉換錯誤!"
+
+ # un_bu_bp = un_bu_dict[un_code]['bp']
+ # assert un_bu_bp == 'e', "轉換錯誤!"
+
+ # un_bu_tps = un_bu_dict[un_code]['tps']
+ # assert un_bu_tps == 'ㄝ', "轉換錯誤!"
+
+ # un_bu_sni = un_bu_dict[un_code]['sni']
+ # assert un_bu_sni == '嘉', "轉換錯誤!"
+
+ #--------------------------------------------------
+ # 受[siu2]
+ han_ji_piau_im = 'siu2'
+ result = split_cu_im(han_ji_piau_im)
+ print(result)
+ assert result == ['s', 'iu', '2'], "轉換錯誤!"
+ # assert result == ['s', 'iu', '3'], "轉換錯誤!"
+
+ # 衣 [Øi1]
+ han_ji_piau_im = 'Øi1'
+ result = split_cu_im(han_ji_piau_im)
+ assert result == ['Ø', 'i', '1'], "轉換錯誤!"
+
+ # 州 [ciu1]
+ han_ji_piau_im = 'ciu1'
+ result = split_cu_im(han_ji_piau_im)
+ assert result == ['c', 'iu', '1'], "轉換錯誤!"
+
+ # 此 [chu2]
+ han_ji_piau_im = 'chi2'
+ result = split_cu_im(han_ji_piau_im)
+ assert result == ['ch', 'i', '2'], "轉換錯誤!"
\ No newline at end of file
diff --git "a/mod_\345\273\243\351\237\273_v5.py" "b/mod_\345\273\243\351\237\273_v5.py"
new file mode 100644
index 0000000..eb83af1
--- /dev/null
+++ "b/mod_\345\273\243\351\237\273_v5.py"
@@ -0,0 +1,372 @@
+# v5 版
+import re
+import sqlite3
+
+
+def connect_to_db_by_context_manager_decorator(db_path):
+ def connect_to_db(func):
+ def wrapper(*args, **kwargs):
+ # 創建數據庫連接
+ conn = sqlite3.connect(db_path)
+
+ # 創建一個游標
+ cursor = conn.cursor()
+
+ # 執行函數
+ result = func(cursor, *args, **kwargs)
+
+ # 關閉數據庫連接
+ conn.close()
+
+ return result
+
+ return wrapper
+
+ return connect_to_db
+
+
+def connect_to_db(db_path):
+ # 創建數據庫連接
+ conn = sqlite3.connect(db_path)
+
+ # 創建一個游標
+ cursor = conn.cursor()
+
+ return conn, cursor
+
+
+def connect_to_db2(db_path):
+ # 創建數據庫連接
+ conn = sqlite3.connect(db_path)
+
+ # 創建一個游標
+ cursor = conn.cursor() # noqa: F841
+
+ return conn
+
+
+def close_db_connection(conn):
+ # 關閉數據庫連接
+ conn.close()
+
+
+"""
+用 `漢字` 查詢《廣韻》的標音
+"""
+def han_ji_ca_piau_im(cursor, han_ji):
+ """
+ 根據漢字查詢其讀音資訊。 若資料紀錄在`台羅聲調`欄位儲存值為空值(NULL)
+ ,則將其視為 0,因此可排在查詢結果的最後。
+
+ :param cursor: 數據庫游標
+ :param han_ji: 欲查詢的漢字
+ :return: 包含讀音資訊的字典列表
+
+ SELECT *
+ FROM 廣韻漢字庫
+ WHERE 漢字 = ?
+ ORDER BY COALESCE(台羅聲調, 0) DESC;
+ """
+
+ query = """
+ SELECT *
+ FROM 廣韻漢字庫
+ WHERE 漢字 = ?
+ ORDER BY COALESCE(常用度, 0) DESC;
+ """
+ cursor.execute(query, (han_ji,))
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ fields = [
+ '字號', '漢字', '標音', '常用度', '上字', '下字', '上字號', '聲母', '聲母標音', '七聲類',
+ '清濁', '發送收', '下字號', '韻母', '韻母標音', '韻目列號', '攝', '調', '目次',
+ '韻目', '等呼', '等', '呼', '廣韻調名', '台羅聲調', '字義識別號'
+ ]
+ return [dict(zip(fields, result)) for result in results]
+
+
+def ca_siann_bu_piau_im(cursor, siann_bu):
+ """
+ 根據聲母標音查詢其國際音標聲母和方音聲母。
+
+ :param cursor: 數據庫游標
+ :param siann_bu: 欲查詢的聲母標音(台語音標)
+ :return: 包含國際音標聲母和方音聲母的字典列表
+
+ SELECT 國際音標聲母, 方音聲母
+ FROM 聲母對照表
+ WHERE 台語音標聲母 = ?;
+ """
+
+ query = """
+ SELECT 國際音標聲母, 方音聲母
+ FROM 聲母對照表
+ WHERE 台語音標聲母 = ?;
+ """
+ cursor.execute(query, (siann_bu,))
+ results = cursor.fetchall()
+
+ fields = ['國際音標聲母', '方音聲母']
+ return [dict(zip(fields, result)) for result in results]
+
+
+def ca_un_bu_piau_im(cursor, un_bu):
+ """
+ 根據韻母標音查詢其國際音標韻母和方音韻母。
+
+ :param cursor: 數據庫游標
+ :param un_bu: 欲查詢的韻母標音(台語音標)
+ :return: 包含國際音標韻母和方音韻母的字典列表
+
+ SELECT 國際音標韻母, 方音韻母
+ FROM 韻母對照表
+ WHERE 台語音標韻母 = ?;
+ """
+
+ query = """
+ SELECT 國際音標韻母, 方音韻母
+ FROM 韻母對照表
+ WHERE 台語音標韻母 = ?;
+ """
+ cursor.execute(query, (un_bu,))
+ results = cursor.fetchall()
+
+ fields = ['國際音標韻母', '方音韻母']
+ return [dict(zip(fields, result)) for result in results]
+
+
+def huan_ciat_ca_piau_im(cursor, siong_ji, ha_ji):
+ """
+ 根據反切上字和下字查詢符合條件的所有漢字及其讀音資訊。
+
+ :param cursor: 數據庫游標
+ :param siong_ji: 反切上字
+ :param ha_ji: 反切下字
+ :return: 包含讀音資訊的字典列表
+
+ SELECT *
+ FROM 廣韻漢字庫
+ WHERE 上字 = ? AND 下字 = ?;
+ """
+
+ query = """
+ SELECT *
+ FROM 廣韻漢字庫
+ WHERE 上字 = ? AND 下字 = ?;
+ """
+ cursor.execute(query, (siong_ji, ha_ji))
+ results = cursor.fetchall()
+
+ # 將結果轉換為字典列表
+ fields = [
+ '字號', '漢字', '標音', '上字', '下字', '上字號', '聲母', '聲母標音', '七聲類',
+ '清濁', '發送收', '下字號', '韻母', '韻母標音', '韻目列號', '攝', '調', '目次',
+ '韻目', '等呼', '等', '呼', '廣韻調名', '台羅聲調', '字義識別號'
+ ]
+ return [dict(zip(fields, result)) for result in results]
+
+
+def TL_Tng_Zu_Im(siann_bu, un_bu, siann_tiau, cursor):
+ """
+ 根據傳入的台語音標聲母、韻母、聲調,轉換成對應的方音符號
+ :param siann_bu: 聲母 (台語音標)
+ :param un_bu: 韻母 (台語音標)
+ :param siann_tiau: 聲調 (台語音標中的數字)
+ :param cursor: 數據庫游標
+ :return: 包含方音符號的字典
+ """
+
+ # 查詢聲母表,將台語音標的聲母轉換成方音符號
+ cursor.execute("SELECT 方音聲母 FROM 聲母對照表 WHERE 台語音標聲母 = ?", (siann_bu,))
+ siann_bu_result = cursor.fetchone()
+ if siann_bu_result:
+ zu_im_siann_bu = siann_bu_result[0] # 取得方音符號
+ else:
+ zu_im_siann_bu = '' # 無聲母的情況
+
+ # 查詢韻母表,將台語音標的韻母轉換成方音符號
+ # cursor.execute("SELECT 方音符號 FROM 韻母表 WHERE 台語音標 = ?", (un_bu,))
+ cursor.execute("SELECT 方音韻母 FROM 韻母對照表 WHERE 台語音標韻母 = ?", (un_bu,))
+ un_bu_result = cursor.fetchone()
+ if un_bu_result:
+ zu_im_un_bu = un_bu_result[0] # 取得方音符號
+ else:
+ zu_im_un_bu = ''
+
+ # 查詢聲調表,將台語音標的聲調轉換成方音符號
+ cursor.execute("SELECT 方音符號 FROM 聲調表 WHERE 台羅八聲調 = ?", (siann_tiau,))
+ siann_tiau_result = cursor.fetchone()
+ if siann_tiau_result:
+ zu_im_siann_tiau = siann_tiau_result[0] # 取得方音符號
+ else:
+ zu_im_siann_tiau = ''
+
+ #=======================================================================
+ # 【聲母】校調
+ #
+ # 齒間音【聲母】:ㄗ、ㄘ、ㄙ、ㆡ,若其後所接【韻母】之第一個符號亦為:ㄧ、ㆪ時,須變改
+ # 為:ㄐ、ㄑ、ㄒ、ㆢ。
+ #-----------------------------------------------------------------------
+ # 參考 RIME 輸入法如下規則:
+ # - xform/ㄗ(ㄧ|ㆪ)/ㄐ$1/
+ # - xform/ㄘ(ㄧ|ㆪ)/ㄑ$1/
+ # - xform/ㄙ(ㄧ|ㆪ)/ㄒ$1/
+ # - xform/ㆡ(ㄧ|ㆪ)/ㆢ$1/
+ #=======================================================================
+
+ # 比對聲母是否為 ㄗ、ㄘ、ㄙ、ㆡ,且韻母的第一個符號是 ㄧ 或 ㆪ
+ if siann_bu == 'z' and (un_bu[0] == 'i' or un_bu == 'inn'):
+ zu_im_siann_bu = 'ㄐ'
+ elif siann_bu == 'c' and (un_bu[0] == 'i' or un_bu == 'inn'):
+ zu_im_siann_bu = 'ㄑ'
+ elif siann_bu == 's' and (un_bu[0] == 'i' or un_bu == 'inn'):
+ zu_im_siann_bu = 'ㄒ'
+ elif siann_bu == 'j' and (un_bu[0] == 'i' or un_bu == 'inn'):
+ zu_im_siann_bu = 'ㆢ'
+
+ return {
+ '注音符號': f"{zu_im_siann_bu}{zu_im_un_bu}{zu_im_siann_tiau}",
+ '聲母': zu_im_siann_bu,
+ '韻母': zu_im_un_bu,
+ '聲調': zu_im_siann_tiau
+ }
+
+
+
+def Kong_Un_Tng_Tai_Loo(廣韻調名):
+ """
+ 將【廣韻調名】轉換成【台羅聲調】號
+ 清平(1)、清上(2)、清去(3)、清入(4)
+ 濁平(5)、濁上(6)、濁去(7)、濁入(8)
+
+ :param 廣韻調名: 廣韻的調名
+ :return: 對應的台羅聲調號
+ """
+ 調名對照 = {
+ "清平": 1,
+ "清上": 2,
+ "清去": 3,
+ "清入": 4,
+ "濁平": 5,
+ "濁上": 6,
+ "濁去": 7,
+ "濁入": 8
+ }
+ return 調名對照.get(廣韻調名, None)
+
+
+def Cu_Hong_Im_Hu_Ho(tai_lo_tiau_ho):
+ """
+ 取方音符號:將【台羅調號】轉換成【方音符號調號】
+ :param tai_lo_tiau_ho: 台羅調號
+ :return: 對應的方音符號調號
+ """
+ 方音符號調號 = {
+ 1: '',
+ 2: 'ˋ',
+ 3: '˪',
+ 4: '',
+ 5: 'ˊ',
+ 6: 'ˋ',
+ 7: '˫',
+ 8: '˙'
+ }
+ return 方音符號調號.get(tai_lo_tiau_ho, None)
+
+
+# ==========================================================
+# 自「台語音標+」,分析出:聲母、韻母、聲調
+# ----------------------------------------------------------
+# 【台羅音標】到【台語音標】的轉換規則
+# tai_loo_to_tai_gi_mapping = {
+# 'tsh': 'c',
+# 'ts': 'z'
+# }
+# for tai_loo, tai_gi in tai_loo_to_tai_gi_mapping.items():
+# tai_gi_im = tai_gi_im.replace(tai_loo, tai_gi)
+# ==========================================================
+def split_zu_im(zu_im):
+ # 聲母相容性轉換處理(將 tsh 轉換為 c;將 ts 轉換為 z)
+ if zu_im.startswith("tsh"):
+ zu_im = zu_im.replace("tsh", "c", 1) # 將 tsh, ch 轉換為 c
+ elif zu_im.startswith("ts"):
+ zu_im = zu_im.replace("ts", "z", 1) # 將 ts, c 轉換為 z
+
+ # 定義聲母的正規表示式,包括常見的聲母,並加入 Ø 表示無聲母
+ siann_bu_pattern = re.compile(r"(b|c|z|g|h|j|kh|k|l|m(?!\d)|ng(?!\d)|n|ph|p|s|th|t|Ø)")
+
+ # 韻母為 m 或 ng 這種情況的正規表示式 (m\d 或 ng\d)
+ un_bu_as_m_or_ng_pattern = re.compile(r"(m|ng)\d")
+
+ result = []
+
+ # 首先檢查是否是 m 或 ng 當作韻母的特殊情況
+ if un_bu_as_m_or_ng_pattern.match(zu_im):
+ siann_bu = "" # 沒有聲母
+ un_bu = zu_im[:-1] # 韻母是 m 或 ng
+ tiau = zu_im[-1] # 聲調是最後一個字符
+ else:
+ # 使用正規表示式來匹配聲母,包括 Ø 符號
+ siann_bu_match = siann_bu_pattern.match(zu_im)
+ if siann_bu_match:
+ siann_bu = siann_bu_match.group() # 找到聲母或無聲母(Ø)
+ # 如果聲母是 Ø,將其轉換為空字串,並確保不影響 un_bu
+ if siann_bu == "Ø":
+ siann_bu = ""
+ un_bu = zu_im[1:-1] # 跳過 Ø 從第二個字符開始取韻母
+ else:
+ un_bu = zu_im[len(siann_bu):-1] # 正常處理韻母部分
+ else:
+ siann_bu = "" # 沒有匹配到聲母,聲母為空字串
+ un_bu = zu_im[:-1] # 韻母是剩下的部分,去掉最後的聲調
+
+ tiau = zu_im[-1] # 最後一個字符是聲調
+
+ result += [siann_bu]
+ result += [un_bu]
+ result += [tiau]
+ return result
+
+# def split_zu_im(zu_im):
+# # 聲母相容性轉換處理(將 tsh 轉換為 c;將 ts 轉換為 z)
+# # zu_im = zu_im.replace("tsh", "c") # 將 tsh 轉換為 c
+# # zu_im = zu_im.replace("ts", "z") # 將 ts 轉換為 z
+# if zu_im.startswith("tsh") or zu_im.startswith("ch"):
+# zu_im = zu_im.replace("tsh", "c", 1).replace("ch", "c", 1) # 將 tsh, ch 轉換為 c
+# elif zu_im.startswith("ts") or zu_im.startswith("c"):
+# zu_im = zu_im.replace("ts", "z", 1).replace("c", "z", 1) # 將 ts, c 轉換為 z
+
+# # 定義聲母的正規表示式,包括常見的聲母,但不包括 m 和 ng
+# siann_bu_pattern = re.compile(r"(b|c|z|g|h|j|kh|k|l|m(?!\d)|ng(?!\d)|n|ph|p|s|th|t|Ø)")
+
+# # 韻母為 m 或 ng 這種情況的正規表示式 (m\d 或 ng\d)
+# un_bu_as_m_or_ng_pattern = re.compile(r"(m|ng)\d")
+
+# result = []
+
+# # 首先檢查是否是 m 或 ng 當作韻母的特殊情況
+# if un_bu_as_m_or_ng_pattern.match(zu_im):
+# siann_bu = "" # 沒有聲母
+# un_bu = zu_im[:-1] # 韻母是 m 或 ng
+# tiau = zu_im[-1] # 聲調是最後一個字符
+# else:
+# # 使用正規表示式來匹配聲母
+# siann_bu_match = siann_bu_pattern.match(zu_im)
+# if siann_bu_match:
+# siann_bu = siann_bu_match.group() # 找到聲母
+# un_bu = zu_im[len(siann_bu):-1] # 韻母部分
+# else:
+# siann_bu = "" # 沒有匹配到聲母,聲母為空字串
+# un_bu = zu_im[:-1] # 韻母是剩下的部分,去掉最後的聲調
+
+# tiau = zu_im[-1] # 最後一個字符是聲調
+
+# result += [siann_bu]
+# result += [un_bu]
+# result += [tiau]
+# return result
+
+def dict_to_str(zu_im_hu_ho):
+ return f"{zu_im_hu_ho['聲母']}{zu_im_hu_ho['韻母']}{zu_im_hu_ho['聲調']}"
+
diff --git "a/mod_\346\250\231\351\237\263.py" "b/mod_\346\250\231\351\237\263.py"
index b53502f..0164138 100644
--- "a/mod_\346\250\231\351\237\263.py"
+++ "b/mod_\346\250\231\351\237\263.py"
@@ -1,4 +1,18 @@
import re
+import sqlite3
+
+
+# =========================================================
+# 判斷是否為標點符號的輔助函數
+# =========================================================
+def is_punctuation(char):
+ # 如果 char 是 None,直接返回 False
+ if char is None:
+ return False
+
+ # 可以根據需要擴充此列表以判斷各種標點符號
+ punctuation_marks = ",。!?;:、()「」『』《》……"
+ return char in punctuation_marks
# =========================================================
@@ -198,3 +212,76 @@ def TLPA_Tng_Zap_Goo_Im(siann_bu, un_bu, siann_tiau, cursor):
'韻母': zu_im_un_bu,
'聲調': zu_im_siann_tiau
}
+
+
+def dict_to_str(zu_im_hu_ho):
+ return f"{zu_im_hu_ho['聲母']}{zu_im_hu_ho['韻母']}{zu_im_hu_ho['聲調']}"
+
+
+def init_piau_im_dict(han_ji_khoo):
+ if han_ji_khoo == "河洛話":
+ db_name = 'Ho_Lok_Ue.db'
+ else:
+ db_name = 'Kong_Un.db'
+
+ conn = sqlite3.connect(db_name)
+ cursor = conn.cursor()
+
+ Sing_Bu_Dict = init_sing_bu_dict(cursor)
+ Un_Bu_Dict = init_un_bu_dict(cursor)
+
+ conn.close()
+
+ return Sing_Bu_Dict, Un_Bu_Dict
+
+
+def init_sing_bu_dict(cursor):
+ # 執行 SQL 查詢
+ cursor.execute("SELECT * FROM 聲母對照表")
+
+ # 獲取所有資料
+ rows = cursor.fetchall()
+
+ # 初始化字典
+ sing_bu_dict = {}
+
+ # 從查詢結果中提取資料並將其整理成一個字典
+ for row in rows:
+ sing_bu_dict[row[1]] = {
+ '國際音標': row[1],
+ '台語音標': row[2],
+ '台羅音標': row[3],
+ '白話字': row[4],
+ '閩拼方案': row[5],
+ '方音符號': row[6],
+ '十五音': row[7],
+ }
+
+ return sing_bu_dict
+
+
+def init_un_bu_dict(cursor):
+ # 執行 SQL 查詢
+ cursor.execute("SELECT * FROM 韻母對照表")
+
+ # 獲取所有資料
+ rows = cursor.fetchall()
+
+ # 初始化字典
+ un_bu_dict = {}
+
+ # 從查詢結果中提取資料並將其整理成一個字典
+ for row in rows:
+ un_bu_dict[row[1]] = {
+ '國際音標': row[1],
+ '台語音標': row[2],
+ '台羅音標': row[3],
+ '白話字': row[4],
+ '閩拼方案': row[5],
+ '方音符號': row[6],
+ '十五音': row[7],
+ '十五音舒促聲': row[8],
+ '十五音序': int(row[9]),
+ }
+
+ return un_bu_dict
\ No newline at end of file
diff --git "a/output6/\343\200\220\345\215\201\344\272\224\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" "b/output6/\343\200\220\345\215\201\344\272\224\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx"
new file mode 100644
index 0000000..53b3b4f
Binary files /dev/null and "b/output6/\343\200\220\345\215\201\344\272\224\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" differ
diff --git "a/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx"
index f0bd50e..7701f5c 100644
Binary files "a/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" and "b/output6/\343\200\220\346\262\263\346\264\233\350\251\261\346\263\250\351\237\263\343\200\221\343\200\212\346\255\270\345\216\273\344\276\206\350\276\255\343\200\213\343\200\220\346\262\263\346\264\233\347\231\275\350\251\261\351\237\263\343\200\221.xlsx" differ
diff --git a/p502_TLPA_Cu_Im.py b/p502_TLPA_Cu_Im.py
index c702969..56ce83e 100644
--- a/p502_TLPA_Cu_Im.py
+++ b/p502_TLPA_Cu_Im.py
@@ -6,7 +6,7 @@
import xlwings as xw
from mod_file_access import open_excel_file
-from mod_廣韻 import init_sing_bu_dict, init_un_bu_dict
+from mod_廣韻_v3 import init_sing_bu_dict, init_un_bu_dict
# ==========================================================
# 設定輸出使用的注音方法
@@ -64,7 +64,7 @@
# un_bu_dict = cu_im.init_un_bu_dict()
# except Exception as e:
# print(e)
-
+
#================================================================
# 雅俗通十五音(SNI:Nga-Siok-Thong)
#================================================================
@@ -83,7 +83,7 @@ def SNI_piau_im(sing_bu, un_bu, tiau_ho):
5: "五",
7: "七",
8: "八",
-}
+}
#================================================================
# 方音符號注音(TPS)
@@ -156,7 +156,7 @@ def POJ_piau_im(sing_bu, un_bu, tiau_ho):
siann = ""
un = Un_Bu_Dict[un_bu]["poj"]
piau_im = f"{siann}{un}"
-
+
# 韻母為複元音
# pattern1 = r"(oai|oan|oah|oeh|ee|ei)"
pattern1 = r"(oai|oan|oah|oeh)"
@@ -233,13 +233,13 @@ def TL_piau_im(sing_bu, un_bu, tiau_ho):
# piau_im = piau_im.replace(found, un_str)
return piau_im
-
+
#================================================================
# 閩拼(BP)
#
# 【調號標示規則】
# 當一個音節有多個字母時,調號得標示在響度最大的字母上面(通常在韻腹)。由規則可以判定確切的字母:
-#
+#
# - 響度優先順序: a > oo > (e = o) > (i = u)〈低元音 > 高元音 > 無擦通音 > 擦音 > 塞音〉
# - 二合字母 iu 及 ui ,調號都標在後一個字母上;因為前一個字母是介音。
# - m 作韻腹時則標於字母 m 上。
@@ -332,7 +332,7 @@ def get_sheet_ready_to_work(wb, sheet_name_list):
# =========================================================
def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict, un_bu_dict):
write_buffer = ""
-
+
source_index = 1 # index for source sheet
target_index = 1 # index for target sheet
@@ -387,7 +387,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict
target_sheet.range("A" + str(target_index)).value = html_str
target_index += 1
source_index += 1
-
+
write_buffer += (html_str + "\n")
continue
@@ -404,7 +404,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict
target_sheet.range("A" + str(target_index)).value = han_ji
target_index += 1
source_index += 1
-
+
write_buffer += (han_ji + "\n")
continue
@@ -420,7 +420,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict
target_sheet.range("A" + str(target_index)).value = ruby_tag
target_index += 1
source_index += 1
-
+
write_buffer += (ruby_tag + "\n")
continue
@@ -485,7 +485,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict
ruby_tag = f" {han_ji}<{rt_tag}>{piau_im}{rt_tag}>"
target_sheet.range("A" + str(target_index)).value = ruby_tag
-
+
write_buffer += (ruby_tag + "\n")
# =========================================================
@@ -501,7 +501,7 @@ def build_web_page(wb, target_sheet, cu_im_huat, div_class, rt_tag, sing_bu_dict
html_str = ""
target_sheet.range("A" + str(target_index)).value = html_str
- write_buffer += html_str
+ write_buffer += html_str
# 返回網頁輸出暫存區
return write_buffer
@@ -539,7 +539,7 @@ def create_html_file(output_path, content, title='您的標題'):
print(f"\n輸出網頁檔案:{output_path}")
-def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
+def Iong_TLPA_Zu_Im(wb, sing_bu_dict, un_bu_dict):
global source_sheet # 宣告 source_sheet 為全域變數
global source_sheet_name # 宣告 source_sheet_name 為全域變數
global end_of_source_row # 宣告 end_of_source_row 為全域變數
@@ -603,7 +603,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
# 輸出到網頁檔案
create_html_file(output_path, html_content, web_page_title)
-
+
print(f"【{cu_im_piau_e_mia}】網頁製作完畢!")
if __name__ == "__main__":
@@ -632,8 +632,8 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
sing_bu = "s"
un_bu = "i"
tiau_ho = 5
-
- piau_im = TPS_piau_im(sing_bu, un_bu, tiau_ho)
+
+ piau_im = TPS_piau_im(sing_bu, un_bu, tiau_ho)
print("測試方音符號注音:")
print(f"han_ji = {han_ji}")
print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}")
@@ -643,7 +643,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
#=====================================================================
# 雅俗通十五
#=====================================================================
- piau_im = SNI_piau_im(sing_bu, un_bu, tiau_ho)
+ piau_im = SNI_piau_im(sing_bu, un_bu, tiau_ho)
print("\n測試雅俗通十五音注音:")
print(f"han_ji = {han_ji}")
print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}")
@@ -658,7 +658,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
un_bu = "i"
tiau_ho = 7
- piau_im = BP_piau_im(sing_bu, un_bu, tiau_ho)
+ piau_im = BP_piau_im(sing_bu, un_bu, tiau_ho)
print("\n測試閩拼注音:")
print(f"han_ji = {han_ji}")
print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}")
@@ -673,7 +673,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
un_bu = "uan"
tiau_ho = 2
- piau_im = POJ_piau_im(sing_bu, un_bu, tiau_ho)
+ piau_im = POJ_piau_im(sing_bu, un_bu, tiau_ho)
print("\n測試白話字注音:")
print(f"han_ji = {han_ji}")
print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}")
@@ -689,7 +689,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
un_bu = "uan"
tiau_ho = 2
- piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho)
+ piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho)
print("\n測試白話字注音:")
print(f"han_ji = {han_ji}")
print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}")
@@ -701,7 +701,7 @@ def Iong_TLPA_Cu_Im(wb, sing_bu_dict, un_bu_dict):
un_bu = "oo"
tiau_ho = 5
- piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho)
+ piau_im = TL_piau_im(sing_bu, un_bu, tiau_ho)
print("\n測試白話字注音:")
print(f"han_ji = {han_ji}")
print(f"sing_bu = {sing_bu}, un_bu = {un_bu}, tiau_ho = {tiau_ho}")
diff --git "a/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py" "b/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py"
index 98c9721..7dce686 100644
--- "a/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py"
+++ "b/p704_\346\274\242\345\255\227\344\273\245\345\215\201\344\272\224\351\237\263\346\250\231\346\263\250\351\237\263.py"
@@ -7,7 +7,7 @@
# 十五音標注音
-def zap_goo_im_piau_im(wb, sheet_name='十五音', cell='V3', hue_im="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_標音', function_name='TLPA_Tng_Zap_Goo_Im'):
+def han_ji_piau_im(wb, sheet_name='十五音', cell='V3', hue_im="白話音", han_ji_khoo="河洛話", db_name='Ho_Lok_Ue.db', module_name='mod_標音', function_name='TLPA_Tng_Zap_Goo_Im'):
named_range = wb.names['顯示注音輸入']
named_range.refers_to_range.value = True
@@ -36,7 +36,8 @@ def process_cell(row, col, char):
cell_value = sheet.range((row, col)).value
if not is_valid_han_ji(cell_value):
- print(f"({row}, {col_name}) = 無效漢字或標音缺失")
+ # print(f"({row}, {col_name}) = 無效漢字或標音缺失")
+ print(f"({row}, {col_name}) = {cell_value}")
return
lo_ma_im_piau = sheet.range((row - 1, col)).value
@@ -53,13 +54,15 @@ def process_cell(row, col, char):
print(f"【台語音標】資料格式錯誤於({row - 1}, {col_name}): {e}")
while index < total_length:
+ sheet.range((row, 1)).select()
for col in range(start, end):
if index >= total_length:
break
char = v3_value[index]
if char == "\n":
index += 1
- continue # 忽略換行符號
+ row += 4
+ break # 跳出內部 for 迴圈,繼續處理下一列
process_cell(row, col, char)
index += 1 # 處理下一個漢字
diff --git a/p730_Tng_Sing_Bang_Iah.py b/p730_Tng_Sing_Bang_Iah.py
index 00fe5ba..2059803 100644
--- a/p730_Tng_Sing_Bang_Iah.py
+++ b/p730_Tng_Sing_Bang_Iah.py
@@ -1,10 +1,90 @@
# Tng_Sing_Bang_Iah.py (轉成網頁)
# 用途:將【漢字注音】工作表中的漢字、台語音標及台語注音符號,轉成 HTML 網頁格式。
import os
+import sqlite3
import xlwings as xw
from mod_file_access import get_named_value
+from mod_標音 import (
+ init_piau_im_dict,
+ init_sing_bu_dict,
+ init_un_bu_dict,
+ is_punctuation,
+ split_zu_im,
+)
+
+# ==========================================================
+# 注音法設定和共用變數
+# ==========================================================
+zu_im_huat_list = {
+ "SNI": ["fifteen_yin", "rt", "十五音切語"],
+ "TPS": ["Piau_Im", "rt", "方音符號注音"],
+ "POJ": ["pin_yin", "rt", "白話字拼音"],
+ "TL": ["pin_yin", "rt", "台羅拼音"],
+ "BP": ["pin_yin", "rt", "閩拼標音"],
+ "TLPA_Plus": ["pin_yin", "rt", "台羅改良式"],
+ "DBL": ["Siang_Pai", "rtc", "雙排注音"],
+}
+
+TONE_MARKS = {
+ "十五音": {
+ 1: "一",
+ 2: "二",
+ 3: "三",
+ 4: "四",
+ 5: "五",
+ 7: "七",
+ 8: "八"
+ },
+ "方音符號": {
+ 1: "",
+ 2: "ˋ",
+ 3: "˪",
+ 4: "",
+ 5: "ˊ",
+ 7: "˫",
+ 8: "\u02D9"
+ },
+ "閩拼方案": {
+ 1: "\u0304",
+ 2: "\u0341",
+ 3: "\u030C",
+ 5: "\u0300",
+ 6: "\u0302",
+ 7: "\u0304",
+ 8: "\u0341"
+ },
+ "台羅拼音": {
+ 1: "",
+ 2: "\u0301",
+ 3: "\u0300",
+ 4: "",
+ 5: "\u0302",
+ 6: "\u030C",
+ 7: "\u0304",
+ 8: "\u030D"
+ }
+}
+
+
+# def choose_piau_im_method(zu_im_huat, sing_bu, un_bu, tiau_ho):
+# """選擇並執行對應的注音方法"""
+# if zu_im_huat == "SNI":
+# return SNI_piau_im(sing_bu, un_bu, tiau_ho)
+# elif zu_im_huat == "POJ":
+# return POJ_piau_im(sing_bu, un_bu, tiau_ho)
+# elif zu_im_huat == "TL":
+# return TL_piau_im(sing_bu, un_bu, tiau_ho)
+# elif zu_im_huat == "BP":
+# return BP_piau_im(sing_bu, un_bu, tiau_ho)
+# elif zu_im_huat == "TPS":
+# return TPS_piau_im(sing_bu, un_bu, tiau_ho)
+# elif zu_im_huat == "TLPA_Plus":
+# siann = Sing_Bu_Dict[sing_bu]["code"] or ""
+# un = Un_Bu_Dict[un_bu]["code"]
+# return f"{siann}{un}{tiau_ho}"
+# return ""
def create_html_file(output_path, content, title='您的標題'):
@@ -55,23 +135,10 @@ def put_picture(wb, source_sheet_name):
return html_str
-# =========================================================
-# 判斷是否為標點符號的輔助函數
-# =========================================================
-def is_punctuation(char):
- # 如果 char 是 None,直接返回 False
- if char is None:
- return False
-
- # 可以根據需要擴充此列表以判斷各種標點符號
- punctuation_marks = ",。!?;:、()「」『』《》……"
- return char in punctuation_marks
-
-
# =========================================================
# 依據指定的【注音方法】,輸出含 Ruby Tags 之 HTML 網頁
# =========================================================
-def build_web_page(wb, sheet, source_chars, total_length, page_type='含頁頭'):
+def build_web_page(wb, sheet, source_chars, total_length, page_type='含頁頭', piau_im_huat='方音符號'):
write_buffer = ""
# =========================================================
@@ -126,28 +193,42 @@ def build_web_page(wb, sheet, source_chars, total_length, page_type='含頁頭')
# 在 Console 顯示目前處理的漢字,以便使用者可知目前進度
print(f"({row}, {col_name}) = {han_ji}")
else:
+ # 取得漢字的【台語音標】
lo_ma_im_piau = sheet.range((row - 1, col)).value # 取得漢字的台語音標
- zu_im_hu_ho = sheet.range((row + 1, col)).value # 取得漢字的台語注音符號
-
- # 處理拼音或注音是 None 的情況
+ # 當儲存格寫入之資料為 None 情況時之處理作法:給予空字串
lo_ma_im_piau = lo_ma_im_piau if lo_ma_im_piau is not None else ""
- zu_im_hu_ho = zu_im_hu_ho if zu_im_hu_ho is not None else ""
+
+ # zu_im_hu_ho = sheet.range((row + 1, col)).value # 取得漢字的台語注音符號
+ zu_im_list = split_zu_im(lo_ma_im_piau)
+ if zu_im_list[0] == "" or zu_im_list[0] == None:
+ sian_bu = "Ø"
+ else:
+ sian_bu = zu_im_list[0]
+ sian_bu = Sing_Bu_Dict[sian_bu][piau_im_huat]
+ un_bu = Un_Bu_Dict[zu_im_list[1]][piau_im_huat]
+ if piau_im_huat == "方音符號":
+ tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])]
+ elif piau_im_huat == "十五音":
+ tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])]
+ elif piau_im_huat == "閩拼方案":
+ tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])]
+ elif piau_im_huat == "台羅拼音" or piau_im_huat == "白話字":
+ tiau_ho = TONE_MARKS[piau_im_huat][int(zu_im_list[2])]
+ else:
+ tiau_ho = zu_im_list[2]
+
+ if piau_im_huat == "十五音":
+ han_ji_piau_im = f'{un_bu}{tiau_ho}{sian_bu}'
+ else:
+ han_ji_piau_im = f'{sian_bu}{un_bu}{tiau_ho}'
# 在 Console 顯示目前處理的漢字,以便使用者可知目前進度
- print(f"({row}, {col_name}) = {han_ji} [{lo_ma_im_piau}] 【{zu_im_hu_ho}】")
+ print(f"({row}, {col_name}) = {han_ji} [{lo_ma_im_piau}] 【{han_ji_piau_im}】")
# =========================================================
# 將已注音之漢字加入【漢字注音表】
# =========================================================
- # ruby_tag = f"""
- #
- # {han_ji}
- #
- #
- #
- #
- #
- # """
- ruby_tag = f"{han_ji}\n"
+ ruby_tag = f"{han_ji}\n"
+
write_buffer += ruby_tag
index += 1
else:
@@ -171,13 +252,24 @@ def tng_sing_bang_iah(wb, sheet_name='漢字注音', cell='V3', page_type='含
global source_sheet # 宣告 source_sheet 為全域變數
global source_sheet_name # 宣告 source_sheet_name 為全域變數
global total_length # 宣告 end_of_source_row 為全域變數
+ global Sing_Bu_Dict, Un_Bu_Dict
+ # -------------------------------------------------------------------------
+ # 連接指定資料庫
+ # -------------------------------------------------------------------------
+ han_ji_khoo = get_named_value(wb, '漢字庫', '河洛話')
+ Sing_Bu_Dict, Un_Bu_Dict = init_piau_im_dict(han_ji_khoo)
+
+ # -------------------------------------------------------------------------
# 選擇指定的工作表
+ # -------------------------------------------------------------------------
sheet = wb.sheets[sheet_name] # 選擇工作表
sheet.activate() # 將「漢字注音」工作表設為作用中工作表
sheet.range('A1').select() # 將 A1 儲存格設為作用儲存格
source_sheet_name = sheet.name
+ han_ji_piau_im_huat = wb.names['標音方法'].refers_to_range.value
+
# -----------------------------------------------------
# 產生 HTML 網頁用文字檔
# -----------------------------------------------------
@@ -189,7 +281,7 @@ def tng_sing_bang_iah(wb, sheet_name='漢字注音', cell='V3', page_type='含
siann_lui = get_named_value(wb, '語音類型', '文讀音')
output_dir = 'docs'
# output_file = f"{title}_{siann_lui}.html"
- output_file = f"{title}.html"
+ output_file = f"{title}_{han_ji_piau_im_huat}.html"
output_path = os.path.join(output_dir, output_file)
# 開啟文字檔,準備寫入網頁內容
@@ -205,7 +297,9 @@ def tng_sing_bang_iah(wb, sheet_name='漢字注音', cell='V3', page_type='含
# 自「漢字注音表」,製作各種注音法之 HTML 網頁
# ==========================================================
print(f"開始製作【漢字注音】網頁!")
- html_content = build_web_page(wb, sheet, source_chars, total_length, page_type)
+ html_content = build_web_page(
+ wb, sheet, source_chars, total_length, page_type, han_ji_piau_im_huat
+ )
# 輸出到網頁檔案
create_html_file(output_path, html_content, web_page_title)