diff --git a/README.md b/README.md
index 3ef26b3..6033980 100644
--- a/README.md
+++ b/README.md
@@ -387,6 +387,10 @@ Ctrl + Shift + ` 切換OBS開始串流和停止串流時可處理的程序(這
Ctrl + Alt + i 顯示IP現狀訊息方塊
+Ctrl + Alt + pageup : 在新的分頁開啟CTP圖文對照前一頁以供檢視 20240920
+
+Ctrl + Alt + pagedown : 在新的分頁開啟CTP圖文對照下一頁以供檢視
+
Ctrl + Shift + o 執行《看典古籍》OCR API ,執行 GetOCRResult 方法。(須將token存成「OCRAPItoken.txt」檔置於「我的文件\\CtextTempFiles」下,並在程式碼中覆寫本人帳號/郵箱。)
Ctrl + Shift + w 關閉 Chrome 網頁視窗
@@ -711,11 +715,16 @@ Ctrl + Delete : 將插入點所在位置之後的文字一律清除(Ctrl + z
Alt + 滑鼠左鍵 : 更新最後的備份頁文本
-Ctrl+ 滑鼠左鍵:在插入點後分行分段(原為切換RichTextBox用)
+Ctrl + 滑鼠左鍵:在插入點後分行分段(原為切換RichTextBox用)
+
+Ctrl + 滑鼠右鍵:切換RichTextBox用
+
+Ctrl + Alt + 滑鼠左鍵:將插入點後的分行分段清除
-Ctrl+ 滑鼠右鍵:切換RichTextBox用
+Ctrl + Alt + = : 以選取文字檢索CTP中阮元刻《十三經注疏》本《周易正義》。便於擷取《易》學資料用。20240920
+> 選取字串將複製至剪貼簿備用。
-Ctrl+ Alt + 滑鼠左鍵:將插入點後的分行分段清除
+> https://ctext.org/library.pl?if=gb&res=83519&by_collection=127
滑鼠點二下,執行 Ctrl + + , 將插入點所在之前的文本貼到 Ctext 網頁 [簡單修改模式] 文字方塊中,並會重設以插入點位置為頁面結束位國(同Ctrl + -(數字鍵盤))
diff --git a/TextForCtextPortable.zip b/TextForCtextPortable.zip
index 6ed4c19..00d2eaa 100644
Binary files a/TextForCtextPortable.zip and b/TextForCtextPortable.zip differ
diff --git a/WindowsFormsApp1/Browser.cs b/WindowsFormsApp1/Browser.cs
index c3662d5..d8641a1 100644
--- a/WindowsFormsApp1/Browser.cs
+++ b/WindowsFormsApp1/Browser.cs
@@ -5451,7 +5451,7 @@ internal static bool OCR_GJcool_AutoRecognizeVertical(string downloadImgFullName
#endregion
- if (ActiveForm1.TopMost) ActiveForm1.TopMost = false;
+ ActiveForm1.TopMost = false;
//點數(算力值、算力配额)不足逕用「快速體驗」執行
if (!OCR_GJcool_AccountChanged && waitGJcoolPoint || (!OCR_GJcool_AccountChanged && waitGJcoolPoint && DateTime.Now.Subtract(gjCoolPointLess150When) < gjCoolPointEnoughTimespan))
{
@@ -5792,7 +5792,7 @@ internal static bool OCR_GJcool_AutoRecognizeVertical(string downloadImgFullName
//Thread.Sleep(3200);
//等待「選擇檔案」控制項出現,最多等timeSpanSecs秒;
//為免tab鍵數不同,而須手動操作,以免表單遮住畫面:
- if (ActiveForm1.TopMost) ActiveForm1.TopMost = false;
+ ActiveForm1.TopMost = false;
Clipboard.Clear();
DateTime begin = DateTime.Now; const int timeSpanSecs = 30;
TimeSpan timeSpan = new TimeSpan();
@@ -8057,6 +8057,24 @@ string standardizedText(ref string text)
return true;
}
///
+ /// 改變CTP圖文對照網址的 Page 參數以供翻頁
+ /// 20240920 Copilot大菩薩:更改 URL 参数以翻页:https://sl.bing.net/jZV8afaj85Q
+ ///
+ /// 要改變的網址
+ /// Page參數要成的數值
+ /// 傳回改動後的網址
+ public static string ChangePageParameter(string url, int newPageNumber)
+ {
+ var uri = new Uri(url);
+ var query = System.Web.HttpUtility.ParseQueryString(uri.Query);
+ query.Set("page", newPageNumber.ToString());
+ var uriBuilder = new UriBuilder(uri)
+ {
+ Query = query.ToString()
+ };
+ return uriBuilder.ToString();
+ }
+ ///
/// 作為「《漢籍全文資料庫》檢索易學關鍵字」的欲檢索關鍵字瀏覽清單索引(已檢索瀏覽之位置)記錄用。在textBox2中輸入「lx」(list index clear(x=叉=清除))以歸零
///
internal static int ListIndex_Hanchi_SearchingKeywordsYijing = 0;
@@ -8072,12 +8090,91 @@ internal static bool Hanchi_CTP_SearchingKeywordsYijing()
{
if (driver == null) return true;
- string title;
+ string title = null;
+
+ #region 檢查title creedit_with_Copilot大菩薩: C# 比對字串中的特定子字串: https://sl.bing.net/dy0lfJJXE72
+ //檢查title 如果不包含指定的條件,則傳回false
+ bool checkTitle(string titleToCheck)
+ {
+ string pattern = "漢籍全文|中國哲學書電子化計劃|Chinese Text Project";
+ return Regex.IsMatch(title, pattern);
+ //string[] keywords = { "漢籍全文", "中國哲學書電子化計劃", "Chinese Text Project" };
+ //var foundKeywords = keywords.Where(keyword => title.Contains(keyword));
+ }
+
+ void forEachTabChectTitle()
+ {
+ //《漢籍全文資料庫》網頁介面
+ foreach (var item in driver.WindowHandles)
+ {
+ driver.SwitchTo().Window(item);
+ try
+ {
+ if (driver.Title.Contains("漢籍全文")) break;
+ }
+ catch (Exception exx)
+ {
+ switch (exx.HResult)
+ {
+ case -2146233088:
+ if (exx.Message.StartsWith("unknown error\nfrom no such execution context:"))//unknown error
+ //from no such execution context: frame does not have execution context
+ // (Session info: chrome = 128.0.6613.138)
+ continue;
+ break;
+ default:
+ Console.WriteLine(exx.HResult + exx.Message);
+ Form1.MessageBoxShowOKExclamationDefaultDesktopOnly(exx.HResult + exx.Message);
+ break;
+ }
+ }
+ }
+ if (!driver.Title.Contains("漢籍全文"))
+ {
+ title = string.Empty;
+ foreach (var item in driver.WindowHandles)
+ {
+ try
+ {
+ if (driver.SwitchTo().Window(item).Url.StartsWith("https://ctext.org/wiki.pl?if="))//https://ctext.org/wiki.pl?if=gb&res=、https://ctext.org/wiki.pl?if=en&res=
+ { title = driver.Title; break; }
+ }
+ catch (Exception exx)
+ {
+ switch (exx.HResult)
+ {
+ case -2146233088:
+ if (exx.Message.StartsWith("unknown error\nfrom no such execution context:"))//unknown error
+ //from no such execution context: frame does not have execution context
+ // (Session info: chrome = 128.0.6613.138)
+ continue;
+ break;
+ default:
+ Console.WriteLine(exx.HResult + exx.Message);
+ Form1.MessageBoxShowOKExclamationDefaultDesktopOnly(exx.HResult + exx.Message);
+ break;
+ }
+ }
+
+ }
+ }
+ }
+
+ #endregion
+
+
+
try
{
//不要切到Chrome瀏覽器!可以在等結果的時候做別的工作。20240915
//driver.SwitchTo().Window(driver.CurrentWindowHandle);
title = driver.Title;//避免誤關出錯
+ if (!checkTitle(title)) forEachTabChectTitle();
+ if (title.IsNullOrEmpty())
+ {
+ Form1.MessageBoxShowOKExclamationDefaultDesktopOnly("請開啟《漢籍全文資料庫》網頁檢索介面,再開始操作");
+ return true;
+ }
}
catch (Exception ex)
{
@@ -8096,65 +8193,11 @@ internal static bool Hanchi_CTP_SearchingKeywordsYijing()
}
break;
default:
-
- //《漢籍全文資料庫》網頁介面
- foreach (var item in driver.WindowHandles)
+ forEachTabChectTitle();
+ if (title.IsNullOrEmpty())
{
- driver.SwitchTo().Window(item);
- try
- {
- if (driver.Title.Contains("漢籍全文")) break;
- }
- catch (Exception exx)
- {
- switch (exx.HResult)
- {
- case -2146233088:
- if (exx.Message.StartsWith("unknown error\nfrom no such execution context:"))//unknown error
- //from no such execution context: frame does not have execution context
- // (Session info: chrome = 128.0.6613.138)
- continue;
- break;
- default:
- Console.WriteLine(exx.HResult + exx.Message);
- Form1.MessageBoxShowOKExclamationDefaultDesktopOnly(exx.HResult + exx.Message);
- break;
- }
- }
- }
- if (!driver.Title.Contains("漢籍全文"))
- {
- title = string.Empty;
- foreach (var item in driver.WindowHandles)
- {
- try
- {
- if (driver.SwitchTo().Window(item).Url.StartsWith("https://ctext.org/wiki.pl?if="))//https://ctext.org/wiki.pl?if=gb&res=、https://ctext.org/wiki.pl?if=en&res=
- { title = driver.Title; break; }
- }
- catch (Exception exx)
- {
- switch (exx.HResult)
- {
- case -2146233088:
- if (exx.Message.StartsWith("unknown error\nfrom no such execution context:"))//unknown error
- //from no such execution context: frame does not have execution context
- // (Session info: chrome = 128.0.6613.138)
- continue;
- break;
- default:
- Console.WriteLine(exx.HResult + exx.Message);
- Form1.MessageBoxShowOKExclamationDefaultDesktopOnly(exx.HResult + exx.Message);
- break;
- }
- }
-
- }
- if (title == string.Empty)
- {
- Form1.MessageBoxShowOKExclamationDefaultDesktopOnly("請開啟《漢籍全文資料庫》網頁檢索介面,再開始操作");
- return true;
- }
+ Form1.MessageBoxShowOKExclamationDefaultDesktopOnly("請開啟《漢籍全文資料庫》網頁檢索介面,再開始操作");
+ return true;
}
break;
}
@@ -8166,9 +8209,9 @@ internal static bool Hanchi_CTP_SearchingKeywordsYijing()
"咸恆","老陰", "老陽", "少陰", "少陽","十翼","四象","兩儀",
"无妄", "彖", "象曰", "象傳", "象日", "象云","小象", "筮",
"初九","九二","九三","九四","九五","上九","初六","六二","六三","六四","六五","上六","用九","用六", "繇辭","繇詞",
- "隨時之義","庖有魚","包有魚","精義入神","豶豕","童牛","承之羞","雷在天上","錫馬", "蕃庶","晝日","三接","懲忿","窒欲","敬以直內","義以方外","迷後得主","利西南","品物咸章","天下大行","益動而", "日進無疆","頻巽","豚魚","頻復", "懲窒","閑邪","存誠","乾乾","悔吝","憧憧", "類萬物","柔順利貞","比之匪人","貞厲","履貞","履道坦坦","貞吉","悔亡","時義","健順", "內健而外順", "內健外順", "外順而內健", "外順內健","敦復","直方","開物成務","窮神知化", "夕惕","惕若","研幾極深","極深研幾","一陰一陽","允升","木上有水","勞民勸相","索而得","我有好爵","言有序","有聖人之道四","長子帥師","弟子輿尸","無悶","日用而不知","之道鮮","原始反終", "寂然不動", "感而遂通","朋從", "朋盍", "容民畜眾","有過則改","見善則遷",
+ "隨時之義","庖有魚","包有魚","精義入神","豶豕","童牛","承之羞","雷在天上","錫馬", "蕃庶","晝日","三接","懲忿","窒欲","敬以直內","義以方外","迷後得主","利西南","品物咸章","天下大行","益動而", "日進無疆","頻巽","豚魚","頻復", "懲窒","閑邪","存誠","乾乾","悔吝","憧憧", "類萬物","柔順利貞","比之匪人","貞厲","履貞","履道坦坦","貞吉","悔亡","時義","健順", "內健而外順", "內健外順", "外順而內健", "外順內健","敦復","直方","開物成務","窮神知化", "夕惕","惕若","研幾極深","極深研幾","一陰一陽","允升","木上有水","勞民勸相","索而得","我有好爵","言有序","有聖人之道四","長子帥師","弟子輿尸","無悶","日用而不知","之道鮮","原始反終", "寂然不動", "感而遂通","朋從", "朋盍", "容民畜眾","有過則改","見善則遷","養正","養賢","知臨","臨大君", "默而成之","黙而成之","不言而信", "存乎德行","通天下之志","履正", "繼之者善", "仁者見之", "知者見之", "智者見之",
"象義",
- "伏羲","伏𦏁","庖𦏁","宓𦏁","伏犧","庖犧"};
+ "伏羲","伏𦏁","庖羲","庖𦏁","宓𦏁","宓羲","宓犧","伏犧","庖犧"};
//異體字處理(只用在《中國哲學書電子化計劃》,因為《漢籍全文資料庫》已俱。)
if (title.EndsWith("中國哲學書電子化計劃") || title.EndsWith("Chinese Text Project"))
@@ -8261,11 +8304,13 @@ internal static bool Hanchi_CTP_SearchingKeywordsYijing()
driver.Navigate().Back();
returnValue = false;
}
- else//有結果-中國哲學書電子化計劃
+ else//檢索有結果-中國哲學書電子化計劃
{
returnValue = true; Clipboard.SetText(keyword); ActiveForm1.KeyinTextmodeSwitcher();
//有文本的文字框
//Thread.Sleep(800);
+ ActiveForm1.TopMost = false;
+ driver.SwitchTo().Window(driver.CurrentWindowHandle);
if (new StringInfo(keyword).LengthInTextElements > 1)
FindPageAndPaste2Find(driver, keyword);
else
@@ -8273,11 +8318,13 @@ internal static bool Hanchi_CTP_SearchingKeywordsYijing()
}//ActiveForm1.HideToNICo(); }
}
- else//有結果-中國哲學書電子化計劃
+ else//檢索有結果-中國哲學書電子化計劃
{
returnValue = true; Clipboard.SetText(keyword); ActiveForm1.KeyinTextmodeSwitcher();
//有文本的文字框
//Thread.Sleep(800);
+ ActiveForm1.TopMost = false;
+ driver.SwitchTo().Window(driver.CurrentWindowHandle);
if (new StringInfo(keyword).LengthInTextElements > 1)
FindPageAndPaste2Find(driver, keyword);
else
diff --git a/WindowsFormsApp1/CnText.cs b/WindowsFormsApp1/CnText.cs
index bb6a8fa..cbdd475 100644
--- a/WindowsFormsApp1/CnText.cs
+++ b/WindowsFormsApp1/CnText.cs
@@ -1025,16 +1025,64 @@ public static void Spaces2Braces(ref string text)
string result = Regex.Replace(text, pattern, replacement);
if (result != text) { text = result; }
}
+ ///
+ /// 縮排字級計算:計算分段符號後的全形空格數量
+ /// 20240920 creedit_with_Copilot大菩薩:計算段落符號後的全形空格數量:https://sl.bing.net/f3ufxPqngjc
+ ///
+ /// 要計算的文本
+ ///
+ public static int IndentCounter(string strToCount)
+ {
+ int count = 0;
+ //string pattern = @"\r\n "; // 使用正則表達式匹配 "\r\n" 後面接的全形空格
+ string pattern = Environment.NewLine + @" "; // 使用正則表達式匹配 "\r\n" 後面接的全形空格
+ foreach (Match match in Regex.Matches(strToCount, pattern))
+ {
+ count++;
+ }
+ return count;
+ }
+ ///
+ /// 縮排字級計算:計算分段符號後的全形空格數量
+ /// 20240920 creedit_with_Copilot大菩薩:計算段落符號後的全形空格數量:https://sl.bing.net/f3ufxPqngjc
+ ///
+ /// 要計算的文本
+ ///
+ /// 傳回與縮排等量的全形空格字串
+ public static string IndentCounter(string strToCount, out int count)
+ {
+ count = 0;
+ int s = strToCount.IndexOf(Environment.NewLine);
+ if (s == -1) return string.Empty;
+ s += Environment.NewLine.Length;
+ if (s + 1 >= strToCount.Length) return string.Empty;
+ while (s + 1 < strToCount.Length && strToCount.Substring(s + count, 1) == " ")
+ count++;
+ return new string(' ', count); // 根據計算出的全形空格數量生成等長的空格字串
+ //int spaceCount = 0;
+ //string pattern = @"\r\n "; // 使用正則表達式匹配 "\r\n" 後面接的全形空格
+ //string pattern = Environment.NewLine + @" "; // 使用正則表達式匹配 "\r\n" 後面接的全形空格
+ //foreach (Match match in Regex.Matches(strToCount, pattern))
+ //{
+ // count++;
+ // spaceCount += match.Value.Length - 2; // 減去 "\r\n" 的長度,只計算全形空格的數量
+ //}
+ //return new string(' ', spaceCount); // 根據計算出的全形空格數量生成等長的空格字串
+
+ }
+
///
/// 20240808(臺灣父親節)creedit with Copilot大菩薩:《古籍酷》自動標點完成的文本重新插入分段符號
///
///
- ///
+ ///
///
- public static string RestoreParagraphs(string originalText,ref string punctuatedText)
+ public static string RestoreParagraphs(string originalText, ref string punctuatedText)
//public static string RestoreParagraphs(ref string originalText, ref string punctuatedText)
{
+ //記下縮排的字數
+ int indentCount = 0; string indentStr = IndentCounter(originalText, out indentCount);
// Define a set of punctuation marks to ignore
HashSet punctuationMarks = new HashSet { '。', ',', ';', ':', '、', '?', '!', '《', '》', '「', '」', '『', '』' };
@@ -1119,7 +1167,8 @@ int FindAdjustedPosition(string text, int pos, string before, string after)
if (afterSubTextWithoutPunctuation.Contains(after))
{
//異常檢查:
- if (afterSubTextWithoutPunctuation != after) Debugger.Break();
+ if (afterSubTextWithoutPunctuation != after)
+ if (!afterSubTextWithoutPunctuation.EndsWith(after)) Debugger.Break();
return adjustedPos;
}
else
@@ -1158,20 +1207,25 @@ int FindAdjustedPosition(string text, int pos, string before, string after)
string before = originalText.Substring(start, index - start);
string after = originalText.Substring(index + newLine.Length, end - index - newLine.Length);
- //if (char.IsHighSurrogate(before.LastOrDefault()))
- // before = originalText.Substring(start, index - start + 1);
- if (char.IsLowSurrogate(before.FirstOrDefault()))
- {
- Debugger.Break();
- before = originalText.Substring(start - 1, index - start);
- }
- if (char.IsHighSurrogate(after.LastOrDefault()))
- {
- Debugger.Break();
- after = originalText.Substring(index + newLine.Length, end - index - newLine.Length + 1);
- }
- //if (char.IsLowSurrogate(after.FirstOrDefault()))
- // after = originalText.Substring(index + newLine.Length, end - index - newLine.Length);
+ #region surrogate判斷調適:會干擾後面的判斷,須再審測(已經測試,不可用!)20240920
+
+
+ ////if (char.IsHighSurrogate(before.LastOrDefault()))
+ //// before = originalText.Substring(start, index - start + 1);
+ //if (char.IsLowSurrogate(before.FirstOrDefault()))
+ //{
+ // Debugger.Break();
+ // before = originalText.Substring(start - 1, index - start);
+ //}
+ //if (char.IsHighSurrogate(after.LastOrDefault()))
+ //{
+ // Debugger.Break();
+ // after = originalText.Substring(index + newLine.Length, end - index - newLine.Length + 1);
+ //}
+ ////if (char.IsLowSurrogate(after.FirstOrDefault()))
+ //// after = originalText.Substring(index + newLine.Length, end - index - newLine.Length);
+
+ #endregion
// Ensure 'before' and 'after' do not include newline characters
while (before.Contains('\r') || before.Contains('\n'))
@@ -1203,14 +1257,39 @@ int FindAdjustedPosition(string text, int pos, string before, string after)
//因為在子函式方法中,若沒有找到時會將標點符號清除再與原未標點之文本作比對,若原文本已略有標點,則會干擾比對結果,不如兩造一律均清除,則簡單有效 20240808
if (adjustedPos != -1)
{
- punctuatedText = punctuatedText.Insert(adjustedPos, newLine);
- offset += newLine.Length;
+ //punctuatedText = punctuatedText.Insert(adjustedPos, newLine);
+ //offset += newLine.Length;
+ //以下改在迴圈後再處理--仍在這裡試看看:成功了!20240920
+ punctuatedText = punctuatedText.Insert(
+ punctuationMarks.Contains(punctuatedText[adjustedPos]) ?
+ ++adjustedPos : adjustedPos
+ , newLine + indentStr);
+ offset += newLine.Length + indentCount;
+
}
}
if (Form1.CountWordsinDomain("\r", originalText)
!= Form1.CountWordsinDomain("\n", punctuatedText))
Debugger.Break();
+
+ //if (indentCount > 0)
+ //{
+ // FormalizeText(ref punctuatedText);
+ // punctuatedText = punctuatedText.Replace(Environment.NewLine, Environment.NewLine + indentStr);
+ //}
+
+ if (punctuatedText.IndexOf(":") > -1) punctuatedText = punctuatedText.Replace(":", "");//《古籍酷》自動標點的問題 20240920
+ if (originalText.StartsWith(" ") && !punctuatedText.StartsWith(" "))
+ {
+ int s = 0;
+ while (s < originalText.Length && originalText.Substring(s, 1) == " ")
+ {
+ s++;
+ }
+ punctuatedText = originalText.Substring(0, s) + punctuatedText;//亦《古籍酷》自動標點的問題 20240920
+ }
+
return punctuatedText;
}
diff --git a/WindowsFormsApp1/Form1.cs b/WindowsFormsApp1/Form1.cs
index bbdda92..179e821 100644
--- a/WindowsFormsApp1/Form1.cs
+++ b/WindowsFormsApp1/Form1.cs
@@ -67,6 +67,7 @@ public partial class Form1 : Form
internal string dropBoxPathIncldBackSlash;
internal string MydocumentsPathIncldBackSlash;
readonly System.Drawing.Point textBox4Location; readonly Size textBox4Size;
+ readonly System.Drawing.Font textBox4FontDefault;
private readonly Color textBox2BackColorDefault;
private readonly Color FormBackColorDefault;
readonly Size textBox1SizeToForm;
@@ -207,6 +208,7 @@ public Form1()
textBox1FontDefaultSize = textBox1.Font.Size;
textBox4Location = textBox4.Location;
textBox4Size = textBox4.Size;
+ textBox4FontDefault = textBox4.Font;
textBox1SizeToForm = new Size(this.Width - textBox1.Width, this.Height - textBox1.Height);
MydocumentsPathIncldBackSlash = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\";
dropBoxPathIncldBackSlash = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\Dropbox\";
@@ -1983,11 +1985,99 @@ private void textBox1_KeyDown(object sender, KeyEventArgs e)
#region 同時按下 Ctrl + Alt
+
+ if (e.Control && e.Alt)
+ {
+ if (e.KeyCode == Keys.Oemplus)
+ {
+ //Ctrl + Alt + = : 以選取文字檢索CTP中阮元刻《十三經注疏》本《周易正義》。便於擷取《易》學資料用。20240920
+ //if (textBox1.SelectionLength == 0) return;
+ e.Handled = true;
+ overtypeModeSelectedTextSetting(ref textBox1);
+ string url = "https://ctext.org/wiki.pl?if=gb&res=315747&searchu=" + textBox1.SelectedText;
+ textBox1.Copy();
+ switch (browsrOPMode)
+ {
+ case BrowserOPMode.appActivateByName:
+ Process.Start(url);
+ break;
+ case BrowserOPMode.seleniumNew:
+ br.LastValidWindow = driver.CurrentWindowHandle;
+ br.openNewTabWindow();
+ br.GoToUrlandActivate(url);
+ break;
+ case BrowserOPMode.seleniumGet:
+ break;
+ default:
+ break;
+ }
+ return;
+ }
+
+ #region Ctrl + Alt + pageup Ctrl + Alt + pagedown
+ if (e.KeyCode == Keys.PageUp || e.KeyCode == Keys.PageDown)
+ {//Ctrl + Alt + pageup : 在新的分頁開啟CTP圖文對照前一頁以供檢視 20240920
+ //Ctrl + Alt + pagedown : 在新的分頁開啟CTP圖文對照下一頁以供檢視
+ if (browsrOPMode != BrowserOPMode.seleniumNew) return;
+ string url = null;
+ try
+ {
+ url = br.driver.Url;
+ }
+ catch (Exception ex)
+ {
+ switch (ex.HResult)
+ {
+ case -2146233088:
+ if (ex.Message.StartsWith("no such window: target window already closed"))//no such window: target window already closed
+ //from unknown error: web view not found
+ // (Session info: chrome = 129.0.6668.59)
+ try
+ {
+ br.driver.SwitchTo().Window(br.LastValidWindow);
+ url = br.driver.Url;
+ }
+ catch (Exception exx)
+ {
+ Console.WriteLine(exx.HResult + exx.Message);
+ Form1.MessageBoxShowOKExclamationDefaultDesktopOnly(exx.HResult + exx.Message);
+ return;
+ }
+ break;
+ default:
+ Console.WriteLine(ex.HResult + ex.Message);
+ Form1.MessageBoxShowOKExclamationDefaultDesktopOnly(ex.HResult + ex.Message);
+ return;
+ }
+
+ }
+ if (url == null) return;
+ if (!IsValidUrl_ImageTextComparisonPage(url)) return;
+
+ e.Handled = true;
+ int page = GetPageNumFromUrl(url);
+ if (e.KeyCode == Keys.PageUp)
+ page--;
+ else
+ page++;
+ url = br.ChangePageParameter(url, page);
+ br.LastValidWindow = br.driver.CurrentWindowHandle;
+ br.openNewTabWindow();
+ br.GoToUrlandActivate(url, true);
+ return;
+
+ }//以上 Ctrl + Alt + pageup : 在新的分頁開啟CTP圖文對照前一頁以供檢視 20240920
+ //Ctrl + Alt + pagedown : 在新的分頁開啟CTP圖文對照下一頁以供檢視
+ #endregion
+
+ }
+
if ((m & Keys.Control) == Keys.Control
&& (m & Keys.Alt) == Keys.Alt)//https://zhidao.baidu.com/question/628222381668604284.html
{//https://bbs.csdn.net/topics/350010591
if (e.KeyCode == Keys.G || e.KeyCode == Keys.Packet)
{ e.Handled = true; return; }
+
}
//Alt + Shift + s : 所有小注文都不換行。這個和我所使用的小小輸入法繁簡轉換快捷鍵有衝突,故須先停用小小輸入法才有作用。感恩感恩 南無阿彌陀佛
@@ -2002,6 +2092,7 @@ private void textBox1_KeyDown(object sender, KeyEventArgs e)
{ e.Handled = true; notes_a_line_all(false, true); return; }
*/
if (e.Control && e.Alt && e.KeyCode == Keys.S)//chatGPT 202230107
+ //ctrl + alt + s 標題下之小注文才不換行( 會與小小輸入法預設的繁簡轉換鍵衝突,使用時請先關閉輸入法。其他快捷鍵若無作用,也多係因有較其優先之如此系統快速鍵已指定的緣故) 20230108
{ e.Handled = true; notes_a_line_all(false, true); return; }
//以上三種皆可Alt + Shift + s : 所有小注文都不換行。
@@ -8670,7 +8761,7 @@ private void Form1_KeyDown(object sender, KeyEventArgs e)
if (url != textBox3.Text) textBox3.Text = url;
string input = br.Div_generic_IncludePathAndEndPageNum.GetAttribute("textContent");//"線上圖書館 -> 松煙小錄 -> 松煙小錄三 /117 ";
int stopPageNum = ExtractNumberAfterSlash(input);
- CheckBlankPagesBeforeOCR(url, int.Parse(br.Page_textbox.GetAttribute("defaultValue")), stopPageNum);
+ CheckBlankPagesBeforeOCR_NextPage(url, int.Parse(br.Page_textbox.GetAttribute("defaultValue")), stopPageNum);
return;
}
@@ -9624,7 +9715,7 @@ private bool toOCR(br.OCRSiteTitle ocrSiteTitle, bool justDownloadImage = false)
TopMost = false;
- br.ActiveForm1 = this;
+ //br.ActiveForm1 = this;
try
{
@@ -9764,8 +9855,10 @@ private bool toOCR(br.OCRSiteTitle ocrSiteTitle, bool justDownloadImage = false)
break;
//《古籍酷》
case br.OCRSiteTitle.GJcool:
- br.ActiveForm1 = this;
- br.ActiveForm1.TopMost = false;
+ //br.ActiveForm1 = this;
+ //br.ActiveForm1.TopMost = false;
+ //br.ActiveForm1 = this;
+ TopMost = false;
//try
//{
br.driver.SwitchTo().Window(currentWindowHndl);
@@ -10184,7 +10277,7 @@ static int ExtractNumberAfterSlash(string input)
/// 啟始頁碼
/// 結束頁碼
///
- internal static bool CheckBlankPagesBeforeOCR(string url, int startPageNum, int stopPageNum)
+ internal static bool CheckBlankPagesBeforeOCR_NextPage(string url, int startPageNum, int stopPageNum)
{
if (!Form1.IsValidUrl_ImageTextComparisonPage(url)) return false;
if (br.driver == null) return false;
@@ -11643,9 +11736,12 @@ private void textBox4_Enter(object sender, EventArgs e)
private void textBox4SizeLarger()
{
textBox4.Location = new Point(button1.Location.X, textBox4Location.Y);
- textBox4.Size = new Size(textBox2.Size.Width + textBox2.Size.Width +
- textBox3.Width + textBox4Size.Width, textBox4Size.Height);
+ int width = textBox2.Size.Width + textBox2.Size.Width + textBox3.Width + textBox4Size.Width;
+ textBox4.Size = new Size(
+ (width < (Width - width - 50)) ? (Width - 50) : width
+ , textBox4Size.Height);
textBox4.ScrollBars = ScrollBars.Horizontal;
+ if (textBox4.Font != textBox4FontDefault) textBox4.Font = textBox4FontDefault;
}
private void textBox4_KeyDown(object sender, KeyEventArgs e)
diff --git a/WordVBA/Docs.bas b/WordVBA/Docs.bas
index 00ebf93..9eb8e7a 100644
--- a/WordVBA/Docs.bas
+++ b/WordVBA/Docs.bas
@@ -263,7 +263,7 @@ Sub
Dim i As Integer
For i = 9312 To 9331
With Selection.Range.Find
- .Replacement.Font.Name = "Arial Unicode MS"
+ .Replacement.font.Name = "Arial Unicode MS"
.Execute VBA.ChrW(i), , , , , , , wdFindContinue, , VBA.ChrW(i), wdReplaceAll
End With
Next i
@@ -494,12 +494,12 @@ With ActiveDocument
'
Do Until Selection.End = e - 1
Selection.MoveRight
- If Selection.Next.Font.Size > 12 Then 'ؿw]12r
+ If Selection.Next.font.Size > 12 Then 'ؿw]12r
Selection.MoveRight
- Do Until Selection.Next.Font.Size = 12
+ Do Until Selection.Next.font.Size = 12
Selection.MoveRight , , wdExtend
Loop
- If MsgBox("O_nYp10r?", vbQuestion + vbOKCancel) = vbOK Then Selection.Font.Size = 10
+ If MsgBox("O_nYp10r?", vbQuestion + vbOKCancel) = vbOK Then Selection.font.Size = 10
End If
Loop
End With
@@ -656,12 +656,12 @@ Const x As String = "ahysy
For Each p In d.Paragraphs
If InStr(p.Range, x) Then flg = True
If Not flg Then
- p.Range.Font.Hidden = True
+ p.Range.font.Hidden = True
Else
prngTxt = p.Range.text
s = InStr(prngTxt, " ")
If VBA.Len(VBA.Mid(prngTxt, s + 1)) < 5 Then
- p.Range.Font.Hidden = True
+ p.Range.font.Hidden = True
End If
End If
Next p
@@ -675,7 +675,7 @@ Dim d As Document
Set d = ActiveDocument
Dim p As Paragraph, s As Byte, prngTxt As String, msgResult As Integer
For Each p In d.Paragraphs
- If Not p.Range.Font.Hidden Then
+ If Not p.Range.font.Hidden Then
prngTxt = p.Range.text
s = InStr(prngTxt, VBA.Chr(32))
If VBA.Len(VBA.Mid(prngTxt, s + 1)) > 4 Then
@@ -719,7 +719,7 @@ If Not Selection.Range.TextRetrievalMode.IncludeHiddenText Then
Else
Set pSelRng = Selection.Range
For Each p In pSelRng.Paragraphs
- If Not p.Range.Font.Hidden Then 'prepare to delete
+ If Not p.Range.font.Hidden Then 'prepare to delete
'p.Range.Cut
x = p.Range.text
p.Range.Delete
@@ -761,7 +761,7 @@ Next myStyle
If Not doNotAdd Then
Set myStyle = d.Styles.Add(styleHprAn, wdStyleTypeCharacter)
With myStyle
- With .Font
+ With .font
.NameFarEast = "з"
.Color = 12611584
.Size = 11
@@ -780,7 +780,7 @@ If Not doNotAdd Then
Set myStyle = d.Styles.Add(styleShengDiao, wdStyleTypeCharacter) 'https://docs.microsoft.com/zh-tw/office/vba/api/word.wdstyletype
With myStyle
.BaseStyle = d.Styles(styleHprAn)
- With .Font
+ With .font
.NameFarEast = "з"
.Name = "з"
.position = 3
@@ -1022,13 +1022,33 @@ pasteAnyway:
' Docs.ChangeFontOfSurrogatePairs_Range "HanaMinA", d.Range(selection.Paragraphs(1).Range.start, d.Range.End), CJK_Compatibility_Ideographs
'https://en.wikipedia.org/wiki/CJK_Compatibility_Ideographs_Supplement
Dim rngChangeFontName As Range
- Set rngChangeFontName = d.Range(Selection.Paragraphs(1).Range.start, d.Range.End)
- Docs.ChangeFontOfSurrogatePairs_Range "HanaMinA", rngChangeFontName, CJK_Compatibility_Ideographs_Supplement
+ 'Set rngChangeFontName = d.Range(Selection.Paragraphs(1).Range.start, d.Range.End)
+ Set rngChangeFontName = d.Range(rngMark.start, d.Range.End)
+ Dim fontName As String '20240920 creedit_with_Copilotj:https://sl.bing.net/9KC0PtODtI
+ fontName = "-2"
+ If Fonts.IsFontInstalled(fontName) Then
+ 'MsgBox fontName & " ww˦btΤC"
+ Else 'MsgBox fontName & " w˦btΤC"
+ fontName = "HanaMinA"
+ If Fonts.IsFontInstalled("HanaMinA") Then
+ ElseIf Fonts.IsFontInstalled("TH-Tshyn-P2") Then
+ fontName = "TH-Tshyn-P2"
+ Else
+ fontName = vbNullString
+ End If
+ End If
+ If Not fontName = vbNullString Then
+ 'Docs.ChangeFontOfSurrogatePairs_Range "HanaMinA", rngChangeFontName, CJK_Compatibility_Ideographs_Supplement
+ Docs.ChangeFontOfSurrogatePairs_Range fontName, rngChangeFontName, CJK_Compatibility_Ideographs_Supplement
+ End If
+
Rem XRr
'HanaMinB٤䴩GH᪺
- Docs.ChangeFontOfSurrogatePairs_Range "HanaMinB", rngChangeFontName, CJK_Unified_Ideographs_Extension_E
- Docs.ChangeFontOfSurrogatePairs_Range "HanaMinB", rngChangeFontName, CJK_Unified_Ideographs_Extension_F
+ fontName = "HanaMinB"
+ Docs.ChangeFontOfSurrogatePairs_Range fontName, rngChangeFontName, CJK_Unified_Ideographs_Extension_E
+ Docs.ChangeFontOfSurrogatePairs_Range fontName, rngChangeFontName, CJK_Unified_Ideographs_Extension_F
returnVaule = True
+
Else 'we
GoSub refres
SystemSetup.playSound 1.294
@@ -1060,7 +1080,7 @@ refres:
'If flgPaste Then'յLêiR
'ܷsKW奻
rng.SetRange endDocOld, endDocOld
- Do Until rng.Font.ColorIndex = wdRed Or rng.End = d.Range.End - 1
+ Do Until rng.font.ColorIndex = wdRed Or rng.End = d.Range.End - 1
rng.Move
Loop
e = rng.End
@@ -1123,10 +1143,10 @@ Sub marking
.ClearFormatting
.ClearAllFuzzyOptions
.ClearHitHighlight
- With .Replacement
- .Font.ColorIndex = fontColor 'wdRed
- .Highlight = True
- End With
+' With .Replacement '{b wdReplaceAll ƪkF
+' .font.ColorIndex = fontColor 'wdRed
+' .Highlight = True
+' End With
For Each e In arr 'MCӭnѪr
' If e = "jl" Then Stop 'just for test
@@ -1240,7 +1260,7 @@ checkPhrases: '
Rem ɥiѮįաA]_ӤGSO[I file:///H:\ڪݵw\Ѯvݤu@\1ۤ奻\DMHwBI\}TI|NO.docx
.HighlightColorIndex = defaultHighlightColorIndex
- .Font.ColorIndex = fontColor
+ If .font.ColorIndex = wdAuto Then .font.ColorIndex = fontColor
End With
Else 'yyˬdL
If rng.HighlightColorIndex = defaultHighlightColorIndex Then
@@ -1248,7 +1268,7 @@ checkPhrases: '
' .Select 'just for test
.HighlightColorIndex = wdNoHighlight
- .Font.ColorIndex = wdAuto
+ .font.ColorIndex = wdAuto
End With
End If
End If
@@ -1257,7 +1277,7 @@ checkPhrases: '
If rng.HighlightColorIndex = defaultHighlightColorIndex Then
With rng
.HighlightColorIndex = wdNoHighlight
- .Font.ColorIndex = wdAuto
+ .font.ColorIndex = wdAuto
End With
End If
End If
@@ -1270,7 +1290,7 @@ checkPhrases: '
If rng.HighlightColorIndex = defaultHighlightColorIndex Then
With rng
.HighlightColorIndex = wdNoHighlight
- .Font.ColorIndex = wdAuto
+ .font.ColorIndex = wdAuto
End With
End If
End If
@@ -1294,7 +1314,7 @@ checkPhrases: '
Rem YgHU|49DLLIsW~AogS|FAiO VBEsĶG 20240920
With rng
.HighlightColorIndex = defaultHighlightColorIndex
- .Font.ColorIndex = fontColor
+ If .font.ColorIndex = wdAuto Then .font.ColorIndex = fontColor
End With
Loop
' .Execute e, , , , , , True, wdFindStop, True, e, Replace:=wdReplaceAll 'btWs榡Ƥrɷ|F
@@ -1414,7 +1434,7 @@ pc = d2.Paragraphs.Count
If pi = 0 Then pi = 1
For pi = pi To pc
Set p = d2.Paragraphs(pi)
- If p.Range.Font.NameFarEast <> "з" And p.Range.HighlightColorIndex = 0 Then
+ If p.Range.font.NameFarEast <> "з" And p.Range.HighlightColorIndex = 0 Then
px = p.Range
x = VBA.Trim(VBA.Left(px, Len(px) - 1)) 'hqŸ
If Len(x) > 2 Then
@@ -1751,7 +1771,7 @@ Sub ChangeFontOfSurrogatePairs_ActiveDocument(fontName As String, Optional whatC
' Change the font name to HanaMinB
' Change the font name to fontName
End Select
- If change Then rng.Font.Name = fontName '"HanaMinB"
+ If change Then rng.font.Name = fontName '"HanaMinB"
End If
End If
End If
@@ -1819,7 +1839,7 @@ Sub ChangeFontOfSurrogatePairs_Range(fontName As String, rngtoChange As Range, O
' Change the font name to HanaMinB
' Change the font name to fontName
End Select
- If change Then rng.Font.Name = fontName '"HanaMinB"
+ If change Then rng.font.Name = fontName '"HanaMinB"
End If
End If
' End If
@@ -1830,7 +1850,7 @@ End Sub
Sub ChangeCharacterFontName(character As String, fontName As String, d As Document, Optional fontNameFarEast As String)
With d.Range
With .Find
- With .Replacement.Font
+ With .Replacement.font
.Name = fontName
.NameFarEast = fontNameFarEast
End With
@@ -1842,8 +1862,8 @@ End Sub
Sub ChangeCharacterFontNameAccordingSelection()
Dim fontName As String, fontNameFarEast As String
With Selection
- fontName = .Font.Name
- fontNameFarEast = .Font.NameFarEast
+ fontName = .font.Name
+ fontNameFarEast = .font.NameFarEast
ChangeCharacterFontName .text, fontName, .Document, fontNameFarEast
End With
End Sub
@@ -1854,10 +1874,10 @@ Sub FindMissingCharacters() '
Set Doc = ActiveDocument
'wqsөMзrX
- Dim nmf As Font
- Set nmf = Doc.Styles("Normal").Font
- Dim kff As Font
- Set kff = Doc.Styles("q").Font
+ Dim nmf As font
+ Set nmf = Doc.Styles("Normal").font
+ Dim kff As font
+ Set kff = Doc.Styles("q").font
Dim p As Paragraph
Dim r As Range
@@ -1878,9 +1898,9 @@ Sub FindMissingCharacters() '
Or (AscW(VBA.Left(C, 1)) >= &H2B820 And AscW(VBA.Left(C, 1)) <= &H2CEAF) _
Or (AscW(VBA.Left(C, 1)) >= &HF900 And AscW(VBA.Left(C, 1)) <= &HFAFF) _
Or (AscW(VBA.Left(C, 1)) >= &H2F800 And AscW(VBA.Left(C, 1)) <= &H2FA1F) Then 'ǫSXIAw~AݧgIIIIIIII
- If Not r.Font.Name = nmf.Name And Not r.Font.Name = kff.Name Then 'BΤzbIIII
+ If Not r.font.Name = nmf.Name And Not r.font.Name = kff.Name Then 'BΤzbIIII
' pGrŤbsөμзrAhNrאּHanaMinB
- r.Font.Name = "HanaMinB"
+ r.font.Name = "HanaMinB"
End If
End If
End If
diff --git a/WordVBA/Fonts.bas b/WordVBA/Fonts.bas
new file mode 100644
index 0000000..88c0eb3
--- /dev/null
+++ b/WordVBA/Fonts.bas
@@ -0,0 +1,23 @@
+Attribute VB_Name = "Fonts"
+Option Explicit
+
+Rem DީҦPrާ@
+
+Rem 20240920 CopilotjġGhttps://sl.bing.net/bfIsi0Ehd48 Word VBA rˬd
+Function IsFontInstalled(fontName As String) As Boolean
+ Dim font As Variant
+ Dim fontInstalled As Boolean
+ fontInstalled = False
+
+ ' MҦww˪r
+ For Each font In word.Application.FontNames
+ If font = fontName Then
+ fontInstalled = True
+ Exit For
+ End If
+ Next font
+
+ IsFontInstalled = fontInstalled
+End Function
+
+