當 CoppeliaSim 4.2.0 與 4.1.0 的功能有部分差異時, 而官方的技術手冊 只列出 4.2.0 版本的內容, 這個時候, 使用者可以從 CoppeliaSim 原始碼倉儲 中 checkout 出 4.1.0 版的手冊內容. 只不過 offline 搜尋使用 Java 技術. 就目前瀏覽器沒有辦法執行 .class 檔案的用戶來說, 確實很不方便.
可惜已經不再使用 PHP
假如時間倒轉十五年, 只要在 PHP 伺服器中, 配置 corzoogle 這個程式庫, 問題就解決了, 採用的是動態搜尋的方式, 根據使用者輸入的關鍵字, 可直接列出相關的網頁連結. 當年大約幾百個容量不大的 html 檔案系統, 搜尋速度算是頗快, 但是壞處是必須在 PHP server 上運行, 因為目前已經不再使用 PHP, 此舉只能作罷.
採用 Python index 關鍵字
由於 CoppeliaSim 技術手冊 中的 html 總數超過 1000 個, 不同版本間有部分的函式用法會有所更動, 因此目前只能先 git checkout 出各版本內容後, 自行利用 Github Pages 配置在網站上.
因為預計採用的 Javascript search 必須要先將所有網頁的關鍵字取出, 這個部分可以採用 Python 完成:
generate_index.py
import bs4 import os import re def walkDir(rootFolderPath): count = 0 search_content = [] def visible(element): if element.parent.name in ['style', 'script', '[document]', 'head', 'title']: return False elif re.match('', str(element.encode('utf-8'))): return False return True for root, dirs, files in os.walk(rootFolderPath): for filename in files: #print(os.path.join(root, filename)) count += 1 #for dirname in dirs: #print(os.path.join(root, dirname)) # read content of os.path.join(root, filename) file fullFileName = os.path.join(root, filename) extension = os.path.splitext(filename)[1] if extension == ".htm": with open(fullFileName, encoding="utf-8") as f: pageContent = f.readlines() soup = bs4.BeautifulSoup(" ".join(pageContent), "lxml") search_content.append({"title": filename, "text": " ".join(filter(visible, soup.findAll(text=True))), "url": fullFileName}) # GENERATE js file with open("tipuesearch_content.js", "w", encoding="utf-8") as f: f.write("var tipuesearch = {\"pages\": " + str(search_content) + "};") print("done") walkDir(".")
接著則是修改 web_bar.html 內容, 將原先的 offline Java 搜尋連結, 改為採用 Javascript 表單進行關鍵字搜尋:
web_bar.html 修改部分:
repoUser manual search (tree|offline, online), forum search
建立 kmol_search.html 搜尋網頁:
CoppeliaSim keyword search:
最後的修改則是要指定搜尋內容開擋的 frame, 內定可直接在 wb_cont 中開啟, 若需要單頁額外搜尋內容則可自行在其他 tab 中開啟, 修改的 tipuesearch.js 部分為:
if (set.newWindow) { tipue_search_w = ' target="_blank"'; } else { tipue_search_w = ' target="wb_cont"'; }
表示若啟動時, newWindow 設為 true, 則搜尋頁面連結會在獨立 tab 中開啟, 否則會將網頁開啟在 wb_cont 框架中.
根據上述流程所完成的 CoppeliaSim 4.1.0 helpFiles 位於: https://mde.tw/copsim410
No comments:
Post a Comment