A JavaScript library for the Qieyun phonological system
Browser:
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
Node.js:
$ npm install qieyun
> import * as Qieyun from 'qieyun';
See here.
A JavaScript library for the Qieyun phonological system
Home Page: https://nk2028.shn.hk/qieyun-js/
License: Creative Commons Zero v1.0 Universal
A JavaScript library for the Qieyun phonological system
Browser:
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
Node.js:
$ npm install qieyun
> import * as Qieyun from 'qieyun';
See here.
測試版 Qieyun.js v0.15 推導器現已上線!
👉 https://syimyuzya.github.io/qieyun-autoderiver/ 👈
目前已更新可供試用的推導方案:切韻拼音、unt 擬音、王力擬音、推導普通話、不通話(🌿)、白一平轉寫、有女羅馬字
舊版方案不兼容,需更新後才可使用,更動詳見:https://github.com/nk2028/qieyun-js/releases/tag/v0.15.0-beta.1
v0.15 的開發計劃,始於今年切韻新韻圖再次更新的更加規整的音韻地位表示法。
其實之前 v0.14 的開發也是相同的原因,但由於當時未能更新推導器,就始終未能完成測試與發佈。這次 v0.15 開發,終於實現了推導器更新,即將開始 beta 測試。之前的 v0.14 則將直接跳過。
npm i qieyun@beta
安裝試用其他一些相關套件(如輸入法、切拼轉音韻地位等工具),將在 v0.15 發佈後更新
推導方案 → /modules/____.html
表達式 → /modules/___.html
資料 → /modules/__.html
適配分析體系 → /modules/______.html
音韻地位 → /classes/____.html
音韻地位.屬於→ /classes/____.html#__-6
之前在 #29 裡提過一下,雖然沒採用,但放在這裡待討論。
#29 原本在 音韻地位.constructor
中加上了這樣的代碼(當時未考慮 constructor
):
Object.getOwnPropertyNames(Object.getPrototypeOf(this)).forEach(function (this: Record<string, CallableFunction>, key) {
typeof this[key] === 'function' && (this[key] = this[key].bind(this));
}, this);
其作用是將 音韻地位
的 屬於
、判斷
等方法在構造時立即 bind。
這樣會使這些方法的用法與 Python 相仿,但符不符合 JS 中對「對象方法」的期望行為呢?
(而且印象中除了 Python 外,別的語言(無論動態靜態)幾乎都沒有這種「隱式 bind」的用法(討論見此)
@graphemecluster 已經公開了推導器 0.2 版的 PR 及相關功能的 issue,對推導方案做了新的擴展:可以動態依用戶所調整的選項值,來決定顯示或不顯示某些選項。
這個目前超出 Qieyun.推導方案.建立
的處理能力,而該 API 本來就是為了給推導器與 qieyun-examples 兩方共同使用的,因此 Qieyun.js 也需要配合它改動一下。
但實際改動之前,有些要點要先考慮一下。
先看一下新版推導器下,推導方案的增強之處。參照原 issue 所給的演示代碼,實測並讀了下相關代碼之後,總結如下:
[選項名, 預設值(及可選值列表), 條件]
,增加一個第三項(boolean 型)作為該選項的出現條件。方案(null, null, 當前選項)
為參數重新調用一次,並顯示新的選項列表。
方案(null, null, <一個特殊構造的「空」對象>)
形式調用,以獲取預設值。選項
參數裡(就好像它完全不存在一樣)我當時看到示例代碼時提出了反正都要重新調用一次推導方案,與其僅僅調整一個「可見性」,不如直接依用戶選項構造個新的選項列表返回,且這樣功能還更強,並給了代碼例。(甚至之後還想到能利用它做到更有趣的效果2333
也說是說,「選項出現條件」這個增加的部分,其實完全被另一個(無論有意還是無意引入的)更強大的功能給架空了😂
另外,除了推導器外,也會有在 Node 下用 qieyun-examples 調用推導方案的情況,它的 API 也需要考慮一下。比如這樣一例:在 qieyun-examples 下,如果我調用了 方案(地位, 字頭, { ...部分選項 })
只給了一部分選項,按 Qieyun.js 0.13 的做法,其餘未指定的選項應當填入預設值,但由於方案可以依條件任意返回選項列表,一些選項「預設值」也可能變成動態的。所以傳入選項進行推導時,要調用兩次方案代碼,第一次獲取未指定選項的預設值,第二次實際推導。
Qieyun.推導方案
API 該怎麼辦根據以上的分析,需要在以下方案中做一下選擇:
(當前選項: Record<string, unknown>) => boolean
作為出現條件)個人看法是方案②比較好些。
目前在 dev-0.14 分支 進行中~
移除 推導方案
API
音韻地位
體系調整
音韻地位
「導入/驗證」功能(代替原本的 適配分析體系.v2ext
與 音韻地位.驗證
)音韻地位.正則地位
功能(作用是過濾掉非正則地位,代替原 適配分析體系.v2
)正則地位
中發現的設計問題,重新設計「分析體系相混」的解決方案適配分析體系
(v0.14 起將任意音韻地位
的 基礎驗證
、屬於
、判斷
(推遲至 v0.15)資料
增強
Beta 測試:
代碼在 dev-0.13
分支(目前尚未成形,還需要不少更動) Edit: 代碼已經基本穩定,正在試更新幾套推導方案測試效果 Edit: 將在準備工作完成後發佈
(預計發佈:2022-04-23 24)
音韻地位
限制
呼
和 重紐
可在任意場合非 null
(當然過於離譜的地位即使創建了也可能在下述「適配分析體系」過程中被拒掉(適配分析體系
,暫時不打算支持用戶任意調節各種選項,以免貿然搞出另一個 DSL 和 Lisp 解釋器來x)音韻地位
屬性分離為獨立模塊發佈前準備:
Beta 修正(beta.1--5 略):
Edit: 新版發佈後,原 v1 音韻地位體系會成為非公開的,並在 qieyun-examples 升級完成後停止支持並移除。
其他相關工作(僅列出,不在此追蹤進度):
(Present in 0.13.1 & 0.13.2, temporarily reverted in 0.13.3)
0.13.1 和 0.13.2 雖然加入了 default export,但它的 index.d.ts 在 submodule 方面似乎出了很大問題。
於是導致在 TypeScript 項目中:
import { 資料 } from 'qieyun'
(似乎所有 submodule 都無法引入)import { query音韻地位 } from 'qieyun'
不會報錯(本來應該是 Qieyun.資料
中的)0.13.3 暫時把入口從 entry.ts 改回了 index.ts。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.