diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..e15ae57 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,26 @@ +name: Publish + +on: + release: + types: [created] + +jobs: + publish-npm: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 14 + registry-url: https://registry.npmjs.org/ + - name: Install Node.js packages + run: npm ci + - name: Build + run: ./build.sh + - name: Test + run: npm test + - name: Publish + run: npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.npm_token}} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..1d68795 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,23 @@ +name: Test + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 14 + - name: Install Node.js packages + run: npm ci + - name: Build + run: ./build.sh + - name: Test + run: npm test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bb0dfba --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/node_modules +/cache +/index.js diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..e7b149f --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +/build.sh diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/README.md b/README.md new file mode 100644 index 0000000..40cdfe6 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# qieyun-examples-node [![](https://github.com/nk2028/qieyun-examples-node/workflows/Test/badge.svg)](https://github.com/nk2028/qieyun-examples-node/actions?query=workflow%3A%22Test%22) + +## Install + +```sh +npm install qieyun-examples-node@0.0.1 +``` + +## Usage + +```javascript +> const Qieyun = require('qieyun'); +> const QieyunExamples = require('./index.js'); +> let sr = Qieyun.query漢字('少')[0].小韻號; +> let p = Qieyun.get音韻地位(sr); +``` + +從小韻號推導: + +```javascript +> QieyunExamples.baxter(sr); +'syewX' +> QieyunExamples.putonghua(sr); +'shao3' +``` + +從音韻地位推導: + +```javascript +> QieyunExamples.kyonh(p); +'sjeux' +> QieyunExamples.unt(p); +'ɕjɛw˦˦˥' +> QieyunExamples.dv9(p); +'siouˊ' +``` diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..e6abca0 --- /dev/null +++ b/build.sh @@ -0,0 +1,19 @@ +#!/bin/sh +mkdir -p cache +cd cache +curl -LsSZ --remote-name-all https://cdn.jsdelivr.net/gh/nk2028/qieyun-examples@20201003/{kyonh.js,baxter.js,unt.js,putonghua.js,dv9.js} +echo " +function kyonh(音韻地位) { `cat kyonh.js` } +function baxter(小韻號) { `cat baxter.js` } +function unt(音韻地位) { `cat unt.js` } +function putonghua(小韻號) { `cat putonghua.js` } +function dv9(音韻地位) { `cat dv9.js` } +const QieyunExamples = { + kyonh: kyonh, + baxter: baxter, + unt: unt, + putonghua: putonghua, + dv9: dv9 +}; +try { module.exports = exports = QieyunExamples; } catch (e) {} +" > ../index.js diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b95945d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,66 @@ +{ + "name": "qieyun-examples-node", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "qieyun": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/qieyun/-/qieyun-0.7.4.tgz", + "integrity": "sha512-krWCOeLSnE/8oCWJ9+a29COshgupKoXKVmqbLkWizSxF4CftycDWKGYQQajDilW0jiTD57H02nY60nwxfAFIuA==" + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8c329bc --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "qieyun-examples-node", + "version": "0.0.1", + "description": "Qieyun examples (Node.js version)", + "main": "index.js", + "scripts": { + "test": "node test/main.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/nk2028/qieyun-examples-node.git" + }, + "keywords": [ + "qieyun" + ], + "author": "Ngiox Khyen 2028 Project", + "license": "CC0-1.0", + "bugs": { + "url": "https://github.com/nk2028/qieyun-examples-node/issues" + }, + "homepage": "https://github.com/nk2028/qieyun-examples-node#readme", + "dependencies": { + "qieyun": "^0.7.4" + }, + "devDependencies": { + "chai": "^4.2.0" + } +} diff --git a/test/main.js b/test/main.js new file mode 100644 index 0000000..a5054bc --- /dev/null +++ b/test/main.js @@ -0,0 +1,18 @@ +'use strict'; + +const chai = require('chai'); +const should = chai.should(); + +const Qieyun = require('qieyun'); +const QieyunExamples = require('../index.js'); + +let sr = Qieyun.query漢字('少')[0].小韻號; + +QieyunExamples.baxter(sr).should.equal('syewX'); +QieyunExamples.putonghua(sr).should.equal('shao3'); + +let p = Qieyun.get音韻地位(sr); + +QieyunExamples.kyonh(p).should.equal('sjeux'); +QieyunExamples.unt(p).should.equal('ɕjɛw˦˦˥'); +QieyunExamples.dv9(p).should.equal('siouˊ');