├── .editorconfig ├── .gitignore ├── .jshintrc ├── .npmignore ├── LICENSE ├── README.md ├── demo ├── index.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.png │ ├── index.html │ ├── normalize-opentype.css │ ├── stylesheet.css │ ├── typeset.css │ └── typeset.gif └── source │ ├── favicon.png │ ├── index.html │ ├── normalize-opentype.css │ ├── stylesheet.css │ ├── typeset.css │ └── typeset.gif ├── package-lock.json ├── package.json ├── src ├── cmd.js ├── eachTextNode.js ├── hangingPunctuation.js ├── hyphenate.js ├── hypher-patterns │ ├── be.js │ ├── bn.js │ ├── ca.js │ ├── cs.js │ ├── da.js │ ├── de.js │ ├── el-monoton.js │ ├── el-polyton.js │ ├── en-gb.js │ ├── en-us.js │ ├── es.js │ ├── fi.js │ ├── fr.js │ ├── grc.js │ ├── gu.js │ ├── hi.js │ ├── hu.js │ ├── hy.js │ ├── is.js │ ├── it.js │ ├── kn.js │ ├── la.js │ ├── lt.js │ ├── lv.js │ ├── ml.js │ ├── nb-no.js │ ├── nl.js │ ├── or.js │ ├── pa.js │ ├── pl.js │ ├── pt.js │ ├── ru.js │ ├── sk.js │ ├── sl.js │ ├── sv.js │ ├── ta.js │ ├── te.js │ ├── tr.js │ └── uk.js ├── index.js ├── ligatures.js ├── punctuation.js ├── quotes.js ├── smallCaps.js └── spaces.js ├── test ├── .prettierrc ├── hangingPunctuationSpec.js ├── ligaturesSpec.js ├── punctuationSpec.js ├── quotesSpec.js ├── spacesSpec.js └── typesetSpec.js └── webpack.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | 11 | # Matches multiple files with brace expansion notation 12 | # Set default charset 13 | [*.{js}] 14 | charset = utf-8 15 | indent_style = space 16 | indent_size = 2 17 | 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *$py.class 2 | *.bridgesupport 3 | *.cover 4 | *.css.map 5 | *.egg 6 | *.egg-info/ 7 | *.gem 8 | *.lcov 9 | *.log 10 | *.log 11 | *.manifest 12 | *.mo 13 | *.pid 14 | *.pid.lock 15 | *.pot 16 | *.py,cover 17 | *.py[cod] 18 | *.rbc 19 | *.sage.py 20 | *.sass.map 21 | *.scss.map 22 | *.seed 23 | *.so 24 | *.spec 25 | *.tgz 26 | *.tsbuildinfo 27 | .DS_Store 28 | .Python 29 | .bundle/ 30 | .byebug_history 31 | .cache 32 | .cache/ 33 | .coverage 34 | .coverage.* 35 | .dat* 36 | .dmypy.json 37 | .docusaurus 38 | .dynamodb/ 39 | .eggs/ 40 | .env 41 | .env.development.local 42 | .env.local 43 | .env.production.local 44 | .env.test.local 45 | .eslintcache 46 | .fusebox/ 47 | .grunt 48 | .hypothesis/ 49 | .installed.cfg 50 | .ipynb_checkpoints 51 | .jekyll-cache/ 52 | .jekyll-metadata 53 | .lock-wscript 54 | .mypy_cache/ 55 | .next 56 | .node_repl_history 57 | .nox/ 58 | .npm 59 | .nuxt 60 | .nyc_output 61 | .parcel-cache 62 | .pdm.toml 63 | .pnp.* 64 | .pnpm-debug.log* 65 | .pybuilder/ 66 | .pyre/ 67 | .pytest_cache/ 68 | .pytype/ 69 | .repl_history 70 | .ropeproject 71 | .rpt2_cache/ 72 | .rts2_cache_cjs/ 73 | .rts2_cache_es/ 74 | .rts2_cache_umd/ 75 | .rvmrc 76 | .sass-cache/ 77 | .scrapy 78 | .serverless/ 79 | .spyderproject 80 | .spyproject 81 | .stylelintcache 82 | .temp 83 | .tern-port 84 | .tox/ 85 | .venv 86 | .vscode-test 87 | .vuepress/dist 88 | .webassets-cache 89 | .yarn-integrity 90 | .yarn/build-state.yml 91 | .yarn/cache 92 | .yarn/install-state.gz 93 | .yarn/unplugged 94 | /.bundle/ 95 | /.config 96 | /.yardoc/ 97 | /InstalledFiles 98 | /_yardoc/ 99 | /coverage/ 100 | /doc/ 101 | /lib/bundler/man/ 102 | /pkg/ 103 | /rdoc/ 104 | /site 105 | /spec/examples.txt 106 | /spec/reports/ 107 | /test/tmp/ 108 | /test/version_tmp/ 109 | /tmp/ 110 | /vendor/bundle 111 | ENV/ 112 | MANIFEST 113 | Thumbs.db 114 | __pycache__/ 115 | __pypackages__/ 116 | _site/ 117 | bower_components 118 | build-iPhoneOS/ 119 | build-iPhoneSimulator/ 120 | build/ 121 | build/Release 122 | celerybeat-schedule 123 | celerybeat.pid 124 | cover/ 125 | coverage 126 | coverage.xml 127 | cython_debug/ 128 | db.sqlite3 129 | db.sqlite3-journal 130 | develop-eggs/ 131 | dist 132 | dist/ 133 | dmypy.json 134 | docs/_build/ 135 | downloads/ 136 | eggs/ 137 | env.bak/ 138 | env/ 139 | htmlcov/ 140 | instance/ 141 | ipython_config.py 142 | jspm_packages/ 143 | lerna-debug.log* 144 | lib-cov 145 | lib/ 146 | lib64/ 147 | local_settings.py 148 | logs 149 | node_modules/ 150 | nosetests.xml 151 | npm-debug.log* 152 | out 153 | package-lock.json 154 | parts/ 155 | pids 156 | pip-delete-this-directory.txt 157 | pip-log.txt 158 | profile_default/ 159 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 160 | sdist/ 161 | share/python-wheels/ 162 | target/ 163 | var/ 164 | vendor/ 165 | venv.bak/ 166 | venv/ 167 | web_modules/ 168 | wheels/ 169 | yarn-debug.log* 170 | yarn-error.log* -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 6 3 | } 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /demo 2 | /test 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | CC0 1.0 Universal 2 | 3 | Statement of Purpose 4 | 5 | The laws of most jurisdictions throughout the world automatically confer 6 | exclusive Copyright and Related Rights (defined below) upon the creator and 7 | subsequent owner(s) (each and all, an "owner") of an original work of 8 | authorship and/or a database (each, a "Work"). 9 | 10 | Certain owners wish to permanently relinquish those rights to a Work for the 11 | purpose of contributing to a commons of creative, cultural and scientific 12 | works ("Commons") that the public can reliably and without fear of later 13 | claims of infringement build upon, modify, incorporate in other works, reuse 14 | and redistribute as freely as possible in any form whatsoever and for any 15 | purposes, including without limitation commercial purposes. These owners may 16 | contribute to the Commons to promote the ideal of a free culture and the 17 | further production of creative, cultural and scientific works, or to gain 18 | reputation or greater distribution for their Work in part through the use and 19 | efforts of others. 20 | 21 | For these and/or other purposes and motivations, and without any expectation 22 | of additional consideration or compensation, the person associating CC0 with a 23 | Work (the "Affirmer"), to the extent that he or she is an owner of Copyright 24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work 25 | and publicly distribute the Work under its terms, with knowledge of his or her 26 | Copyright and Related Rights in the Work and the meaning and intended legal 27 | effect of CC0 on those rights. 28 | 29 | 1. Copyright and Related Rights. A Work made available under CC0 may be 30 | protected by copyright and related or neighboring rights ("Copyright and 31 | Related Rights"). Copyright and Related Rights include, but are not limited 32 | to, the following: 33 | 34 | i. the right to reproduce, adapt, distribute, perform, display, communicate, 35 | and translate a Work; 36 | 37 | ii. moral rights retained by the original author(s) and/or performer(s); 38 | 39 | iii. publicity and privacy rights pertaining to a person's image or likeness 40 | depicted in a Work; 41 | 42 | iv. rights protecting against unfair competition in regards to a Work, 43 | subject to the limitations in paragraph 4(a), below; 44 | 45 | v. rights protecting the extraction, dissemination, use and reuse of data in 46 | a Work; 47 | 48 | vi. database rights (such as those arising under Directive 96/9/EC of the 49 | European Parliament and of the Council of 11 March 1996 on the legal 50 | protection of databases, and under any national implementation thereof, 51 | including any amended or successor version of such directive); and 52 | 53 | vii. other similar, equivalent or corresponding rights throughout the world 54 | based on applicable law or treaty, and any national implementations thereof. 55 | 56 | 2. Waiver. To the greatest extent permitted by, but not in contravention of, 57 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and 58 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright 59 | and Related Rights and associated claims and causes of action, whether now 60 | known or unknown (including existing as well as future claims and causes of 61 | action), in the Work (i) in all territories worldwide, (ii) for the maximum 62 | duration provided by applicable law or treaty (including future time 63 | extensions), (iii) in any current or future medium and for any number of 64 | copies, and (iv) for any purpose whatsoever, including without limitation 65 | commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes 66 | the Waiver for the benefit of each member of the public at large and to the 67 | detriment of Affirmer's heirs and successors, fully intending that such Waiver 68 | shall not be subject to revocation, rescission, cancellation, termination, or 69 | any other legal or equitable action to disrupt the quiet enjoyment of the Work 70 | by the public as contemplated by Affirmer's express Statement of Purpose. 71 | 72 | 3. Public License Fallback. Should any part of the Waiver for any reason be 73 | judged legally invalid or ineffective under applicable law, then the Waiver 74 | shall be preserved to the maximum extent permitted taking into account 75 | Affirmer's express Statement of Purpose. In addition, to the extent the Waiver 76 | is so judged Affirmer hereby grants to each affected person a royalty-free, 77 | non transferable, non sublicensable, non exclusive, irrevocable and 78 | unconditional license to exercise Affirmer's Copyright and Related Rights in 79 | the Work (i) in all territories worldwide, (ii) for the maximum duration 80 | provided by applicable law or treaty (including future time extensions), (iii) 81 | in any current or future medium and for any number of copies, and (iv) for any 82 | purpose whatsoever, including without limitation commercial, advertising or 83 | promotional purposes (the "License"). The License shall be deemed effective as 84 | of the date CC0 was applied by Affirmer to the Work. Should any part of the 85 | License for any reason be judged legally invalid or ineffective under 86 | applicable law, such partial invalidity or ineffectiveness shall not 87 | invalidate the remainder of the License, and in such case Affirmer hereby 88 | affirms that he or she will not (i) exercise any of his or her remaining 89 | Copyright and Related Rights in the Work or (ii) assert any associated claims 90 | and causes of action with respect to the Work, in either case contrary to 91 | Affirmer's express Statement of Purpose. 92 | 93 | 4. Limitations and Disclaimers. 94 | 95 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 96 | surrendered, licensed or otherwise affected by this document. 97 | 98 | b. Affirmer offers the Work as-is and makes no representations or warranties 99 | of any kind concerning the Work, express, implied, statutory or otherwise, 100 | including without limitation warranties of title, merchantability, fitness 101 | for a particular purpose, non infringement, or the absence of latent or 102 | other defects, accuracy, or the present or absence of errors, whether or not 103 | discoverable, all to the greatest extent permissible under applicable law. 104 | 105 | c. Affirmer disclaims responsibility for clearing rights of other persons 106 | that may apply to the Work or any use thereof, including without limitation 107 | any person's Copyright and Related Rights in the Work. Further, Affirmer 108 | disclaims responsibility for obtaining any necessary consents, permissions 109 | or other rights required for any use of the Work. 110 | 111 | d. Affirmer understands and acknowledges that Creative Commons is not a 112 | party to this document and has no duty or obligation with respect to this 113 | CC0 or use of the Work. 114 | 115 | For more information, please see 116 | 117 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Typeset 2 | 3 | Typeset is an HTML pre-processor for web typography which provides typographic features used traditionally in fine printing which remain unavailable to browser layout engines. Typeset's processing brings the following to your webpages: 4 | 5 | - [Hanging punctuation](https://en.wikipedia.org/wiki/Hanging_punctuation) 6 | - [Ligatures](https://en.wikipedia.org/wiki/Orthographic_ligature) 7 | - [Optical margin alignment](https://en.wikipedia.org/wiki/Optical_margin_alignment) 8 | - [Punctuation substitution](src/punctuation.js) 9 | - [Small caps](https://en.wikipedia.org/wiki/Small_caps) 10 | - [Soft hyphen insertion](https://en.wikipedia.org/wiki/Soft_hyphen) 11 | 12 | Typeset does not require any client-side JavaScript and uses less than a kilobyte of CSS. Processed HTML & CSS works in Internet Explorer 5 and without any CSS. Typeset can be used manually or as a plugin for [Grunt](https://github.com/mobinni/grunt-typeset) and [gulp](https://github.com/lucasconstantino/gulp-typeset). 13 | 14 | 15 | 16 | --- 17 | 18 | ## Getting Started 19 | 20 | ### Install 21 | 22 | ```shell 23 | $ npm i typeset 24 | ``` 25 | 26 | ### Usage 27 | 28 | ```js 29 | const typeset = require('typeset'); 30 | let html = '

"Hello," said the fox.

'; 31 | let output = typeset(html); 32 | ``` 33 | 34 | ### CSS 35 | Then tweak the CSS to match the metrics of your font and include it on your page. 36 | 37 | ```css 38 | /* 39 | Small Capitals 40 | https://en.wikipedia.org/wiki/Small_caps 41 | */ 42 | 43 | .small-caps {font-variant: small-caps;} 44 | 45 | /* 46 | Optical margin alignment for particular letters 47 | https://en.wikipedia.org/wiki/Optical_margin_alignment 48 | */ 49 | 50 | .pull-T, .pull-V, .pull-W, .pull-Y {margin-left: -0.07em} 51 | .push-T, .push-V, .push-W, .push-Y {margin-right: 0.07em} 52 | 53 | .pull-O, .pull-C, .pull-o, .pull-c {margin-left: -0.04em} 54 | .push-O, .push-C, .push-o, .push-c {margin-right: 0.04em} 55 | 56 | .pull-A {margin-left: -0.03em} 57 | .push-A {margin-right: 0.03em} 58 | 59 | /* 60 | Quotation mark 61 | https://en.wikipedia.org/wiki/Quotation_mark 62 | */ 63 | 64 | /* Single quotation marks (') */ 65 | .pull-single{margin-left:-.27em} 66 | .push-single{margin-right:.27em} 67 | 68 | .pull-double, .push-double, 69 | .pull-single, .push-single {display: inline-block} 70 | 71 | /* Double quotation marks (") */ 72 | .pull-double{margin-left:-.46em} 73 | .push-double{margin-right:.46em} 74 | ``` 75 | 76 | --- 77 | 78 | ### Options 79 | 80 | You can pass an options object to influence how your HTML is typeset: 81 | 82 | ```js 83 | const options = { 84 | ignore: '.skip, #anything, .which-matches', // string of CSS selector(s) to ignore 85 | only: '#only-typeset, .these-elements', // string of CSS selector(s) to exclusively apply typeset to 86 | disable: ['hyphenate'] // array of typeset feature(s) to disable 87 | }; 88 | ``` 89 | 90 | #### Features 91 | The following features may be disabled: 92 | 93 | - `hyphenate` 94 | - `hangingPunctuation` 95 | - `ligatures` 96 | - `punctuation` 97 | - `quotes` 98 | - `smallCaps` 99 | - `spaces` 100 | 101 | --- 102 | 103 | ## CLI Usage 104 | 105 | ```shell 106 | $ npm i -g typeset 107 | ``` 108 | 109 | ```shell 110 | Usage: typeset-js [options] [ []] 111 | 112 | Options: 113 | 114 | -h, --help output usage information 115 | -V, --version output the version number 116 | -i, --ignore string of CSS selector(s) to ignore 117 | -O, --only string of CSS selector(s) to exclusively apply typeset to 118 | --disable, string of typeset feature(s) to disable, separated by commas 119 | ``` 120 | 121 | --- 122 | 123 | ### Examples: 124 | 125 | Compile a file and print it to stdout: 126 | ```shell 127 | $ typeset-js inputFile.html 128 | ``` 129 | 130 | To create an output file, just add a second argument: 131 | ```shell 132 | $ typeset-js inputFile.html outputFile.html 133 | ``` 134 | 135 | Use the `--ignore` option to ignore specific CSS selectors: 136 | ```shell 137 | $ typeset-js inputFile.html outputFile.html --ignore ".some-class, h3" 138 | ``` 139 | 140 | Use the `--disable` option to disable typeset features: 141 | ```shell 142 | $ typeset-js inputFile.html outputFile.html --disable "hyphenate,ligatures" 143 | ``` 144 | 145 | CLI redirections: 146 | ```shell 147 | $ cat index.html | typeset-js > outputFile.html 148 | ``` 149 | 150 | --- 151 | 152 | ## Plugins 153 | 154 | - [Grunt](https://github.com/mobinni/grunt-typeset) 155 | - [gulp](https://github.com/lucasconstantino/gulp-typeset). 156 | 157 | --- 158 | 159 | ## Support 160 | 161 | If you don't find the answer to your problem in our docs, or have a suggestion for improvements, submit your question [here](https://github.com/davidmerfield/Typeset/issues). 162 | 163 | --- 164 | 165 | ## License 166 | 167 | This software is dedicated to the public domain and licensed under Creative Commons Zero. 168 | See the [LICENSE](LICENSE) file for details. 169 | 170 | --- 171 | 172 | ## To Do: 173 | 174 | - [Language options & support](https://github.com/davidmerfield/Typeset/issues/25) 175 | - [Widows & orphans](https://github.com/davidmerfield/Typeset/issues/34). 176 | - Incorporate features from [Normalize Opentype](http://kennethormandy.com/journal/normalize-opentype-css) -------------------------------------------------------------------------------- /demo/index.js: -------------------------------------------------------------------------------- 1 | const typeset = require('../src/index.js'); 2 | const fs = require('fs-extra'); 3 | const cheerio = require('cheerio'); 4 | const hljs = require('highlight.js'); 5 | const path = require('path'); 6 | const CleanCSS = require('clean-css'); 7 | const UglifyJS = require('uglify-js'); 8 | 9 | const SOURCE = path.join(__dirname, 'source'); 10 | const PUBLIC = path.join(__dirname, 'public'); 11 | 12 | function build() { 13 | // Copy library across 14 | fs.emptyDirSync(PUBLIC); 15 | 16 | const sourceFiles = fs.readdirSync(SOURCE); 17 | 18 | sourceFiles.forEach(function (name) { 19 | if (name[0] === '.') return; 20 | 21 | const from = path.join(SOURCE, name); 22 | const to = path.join(PUBLIC, name); 23 | 24 | if (path.extname(name) === '.css') return compressCss(from, to); 25 | 26 | if (path.extname(name) === '.js') return compressJs(from, to); 27 | 28 | if (name === 'index.html') return buildIndex(from, to); 29 | 30 | fs.copySync(from, to); 31 | }); 32 | } 33 | 34 | function compressJs(from, to) { 35 | let file = fs.readFileSync(from, 'utf-8'); 36 | file = UglifyJS.minify(file).code; 37 | fs.writeFileSync(to, file); 38 | } 39 | 40 | function compressCss(from, to) { 41 | let file = fs.readFileSync(from, 'utf-8'); 42 | file = new CleanCSS({}).minify(file).styles; 43 | fs.writeFileSync(to, file); 44 | } 45 | 46 | function buildIndex(from, to) { 47 | let html = fs.readFileSync(from, 'utf-8'); 48 | const $ = cheerio.load(html, { decodeEntities: false }); 49 | 50 | $('#tab-after').html($('#tab-before').html()); 51 | 52 | $('pre code').each(function () { 53 | const newHTML = hljs.highlight('js', $(this).html()).value; 54 | $(this).attr('class', 'hljs'); 55 | $(this).html(newHTML); 56 | }); 57 | 58 | html = typeset($.html(), { ignore: '#tab-before, pre', disable: 'ligatures' }); 59 | 60 | fs.writeFileSync(to, html); 61 | } 62 | 63 | build(); 64 | fs.watch(path.join(__dirname, 'source'), function () { 65 | console.log('Building site...'); 66 | build(); 67 | }); 68 | -------------------------------------------------------------------------------- /demo/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typeset-demo", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "typeset-demo", 8 | "license": "CC0", 9 | "dependencies": { 10 | "cheerio": "^0.22.0", 11 | "clean-css": "^4.2.3", 12 | "fs-extra": "^8.1.0", 13 | "highlight": "^0.2.3", 14 | "highlight.js": "^9.18.5", 15 | "html-minifier": "^4.0.0", 16 | "jquery": "^3.6.0", 17 | "uglify-js": "^3.17.2" 18 | } 19 | }, 20 | "node_modules/boolbase": { 21 | "version": "1.0.0", 22 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 23 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" 24 | }, 25 | "node_modules/camel-case": { 26 | "version": "3.0.0", 27 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", 28 | "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", 29 | "dependencies": { 30 | "no-case": "^2.2.0", 31 | "upper-case": "^1.1.1" 32 | } 33 | }, 34 | "node_modules/cheerio": { 35 | "version": "0.22.0", 36 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", 37 | "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", 38 | "dependencies": { 39 | "css-select": "~1.2.0", 40 | "dom-serializer": "~0.1.0", 41 | "entities": "~1.1.1", 42 | "htmlparser2": "^3.9.1", 43 | "lodash.assignin": "^4.0.9", 44 | "lodash.bind": "^4.1.4", 45 | "lodash.defaults": "^4.0.1", 46 | "lodash.filter": "^4.4.0", 47 | "lodash.flatten": "^4.2.0", 48 | "lodash.foreach": "^4.3.0", 49 | "lodash.map": "^4.4.0", 50 | "lodash.merge": "^4.4.0", 51 | "lodash.pick": "^4.2.1", 52 | "lodash.reduce": "^4.4.0", 53 | "lodash.reject": "^4.4.0", 54 | "lodash.some": "^4.4.0" 55 | }, 56 | "engines": { 57 | "node": ">= 0.6" 58 | } 59 | }, 60 | "node_modules/clean-css": { 61 | "version": "4.2.4", 62 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", 63 | "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", 64 | "dependencies": { 65 | "source-map": "~0.6.0" 66 | }, 67 | "engines": { 68 | "node": ">= 4.0" 69 | } 70 | }, 71 | "node_modules/commander": { 72 | "version": "2.20.3", 73 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 74 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 75 | }, 76 | "node_modules/css-select": { 77 | "version": "1.2.0", 78 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 79 | "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", 80 | "dependencies": { 81 | "boolbase": "~1.0.0", 82 | "css-what": "2.1", 83 | "domutils": "1.5.1", 84 | "nth-check": "~1.0.1" 85 | } 86 | }, 87 | "node_modules/css-what": { 88 | "version": "2.1.3", 89 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", 90 | "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", 91 | "engines": { 92 | "node": "*" 93 | } 94 | }, 95 | "node_modules/dom-serializer": { 96 | "version": "0.1.1", 97 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", 98 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", 99 | "dependencies": { 100 | "domelementtype": "^1.3.0", 101 | "entities": "^1.1.1" 102 | } 103 | }, 104 | "node_modules/domelementtype": { 105 | "version": "1.3.1", 106 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 107 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" 108 | }, 109 | "node_modules/domhandler": { 110 | "version": "2.4.2", 111 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 112 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 113 | "dependencies": { 114 | "domelementtype": "1" 115 | } 116 | }, 117 | "node_modules/domutils": { 118 | "version": "1.5.1", 119 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 120 | "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", 121 | "dependencies": { 122 | "dom-serializer": "0", 123 | "domelementtype": "1" 124 | } 125 | }, 126 | "node_modules/entities": { 127 | "version": "1.1.2", 128 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 129 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" 130 | }, 131 | "node_modules/fs-extra": { 132 | "version": "8.1.0", 133 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 134 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 135 | "dependencies": { 136 | "graceful-fs": "^4.2.0", 137 | "jsonfile": "^4.0.0", 138 | "universalify": "^0.1.0" 139 | }, 140 | "engines": { 141 | "node": ">=6 <7 || >=8" 142 | } 143 | }, 144 | "node_modules/graceful-fs": { 145 | "version": "4.2.11", 146 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 147 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 148 | }, 149 | "node_modules/he": { 150 | "version": "1.2.0", 151 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 152 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 153 | "bin": { 154 | "he": "bin/he" 155 | } 156 | }, 157 | "node_modules/highlight": { 158 | "version": "0.2.4", 159 | "resolved": "https://registry.npmjs.org/highlight/-/highlight-0.2.4.tgz", 160 | "integrity": "sha512-TEcWU6BolpDYIaVD91KmaYe/kRZwOmQlLWZGO8DK+Cs555+7mawk2KUnF/dBwcLnrvlCDk/xC+BXfz7Zva+Jfg==", 161 | "deprecated": "Not maintained anymore" 162 | }, 163 | "node_modules/highlight.js": { 164 | "version": "9.18.5", 165 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", 166 | "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", 167 | "deprecated": "Support has ended for 9.x series. Upgrade to @latest", 168 | "hasInstallScript": true, 169 | "engines": { 170 | "node": "*" 171 | } 172 | }, 173 | "node_modules/html-minifier": { 174 | "version": "4.0.0", 175 | "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", 176 | "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", 177 | "dependencies": { 178 | "camel-case": "^3.0.0", 179 | "clean-css": "^4.2.1", 180 | "commander": "^2.19.0", 181 | "he": "^1.2.0", 182 | "param-case": "^2.1.1", 183 | "relateurl": "^0.2.7", 184 | "uglify-js": "^3.5.1" 185 | }, 186 | "bin": { 187 | "html-minifier": "cli.js" 188 | }, 189 | "engines": { 190 | "node": ">=6" 191 | } 192 | }, 193 | "node_modules/htmlparser2": { 194 | "version": "3.10.1", 195 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", 196 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", 197 | "dependencies": { 198 | "domelementtype": "^1.3.1", 199 | "domhandler": "^2.3.0", 200 | "domutils": "^1.5.1", 201 | "entities": "^1.1.1", 202 | "inherits": "^2.0.1", 203 | "readable-stream": "^3.1.1" 204 | } 205 | }, 206 | "node_modules/inherits": { 207 | "version": "2.0.4", 208 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 209 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 210 | }, 211 | "node_modules/jquery": { 212 | "version": "3.7.0", 213 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", 214 | "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==" 215 | }, 216 | "node_modules/jsonfile": { 217 | "version": "4.0.0", 218 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 219 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 220 | "optionalDependencies": { 221 | "graceful-fs": "^4.1.6" 222 | } 223 | }, 224 | "node_modules/lodash.assignin": { 225 | "version": "4.2.0", 226 | "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", 227 | "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==" 228 | }, 229 | "node_modules/lodash.bind": { 230 | "version": "4.2.1", 231 | "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", 232 | "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==" 233 | }, 234 | "node_modules/lodash.defaults": { 235 | "version": "4.2.0", 236 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", 237 | "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" 238 | }, 239 | "node_modules/lodash.filter": { 240 | "version": "4.6.0", 241 | "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", 242 | "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==" 243 | }, 244 | "node_modules/lodash.flatten": { 245 | "version": "4.4.0", 246 | "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", 247 | "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" 248 | }, 249 | "node_modules/lodash.foreach": { 250 | "version": "4.5.0", 251 | "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", 252 | "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" 253 | }, 254 | "node_modules/lodash.map": { 255 | "version": "4.6.0", 256 | "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", 257 | "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" 258 | }, 259 | "node_modules/lodash.merge": { 260 | "version": "4.6.2", 261 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 262 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 263 | }, 264 | "node_modules/lodash.pick": { 265 | "version": "4.4.0", 266 | "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", 267 | "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==" 268 | }, 269 | "node_modules/lodash.reduce": { 270 | "version": "4.6.0", 271 | "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", 272 | "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==" 273 | }, 274 | "node_modules/lodash.reject": { 275 | "version": "4.6.0", 276 | "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", 277 | "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==" 278 | }, 279 | "node_modules/lodash.some": { 280 | "version": "4.6.0", 281 | "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", 282 | "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==" 283 | }, 284 | "node_modules/lower-case": { 285 | "version": "1.1.4", 286 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 287 | "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" 288 | }, 289 | "node_modules/no-case": { 290 | "version": "2.3.2", 291 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", 292 | "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", 293 | "dependencies": { 294 | "lower-case": "^1.1.1" 295 | } 296 | }, 297 | "node_modules/nth-check": { 298 | "version": "1.0.2", 299 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 300 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 301 | "dependencies": { 302 | "boolbase": "~1.0.0" 303 | } 304 | }, 305 | "node_modules/param-case": { 306 | "version": "2.1.1", 307 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", 308 | "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", 309 | "dependencies": { 310 | "no-case": "^2.2.0" 311 | } 312 | }, 313 | "node_modules/readable-stream": { 314 | "version": "3.6.2", 315 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 316 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 317 | "dependencies": { 318 | "inherits": "^2.0.3", 319 | "string_decoder": "^1.1.1", 320 | "util-deprecate": "^1.0.1" 321 | }, 322 | "engines": { 323 | "node": ">= 6" 324 | } 325 | }, 326 | "node_modules/relateurl": { 327 | "version": "0.2.7", 328 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 329 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", 330 | "engines": { 331 | "node": ">= 0.10" 332 | } 333 | }, 334 | "node_modules/safe-buffer": { 335 | "version": "5.2.1", 336 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 337 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 338 | "funding": [ 339 | { 340 | "type": "github", 341 | "url": "https://github.com/sponsors/feross" 342 | }, 343 | { 344 | "type": "patreon", 345 | "url": "https://www.patreon.com/feross" 346 | }, 347 | { 348 | "type": "consulting", 349 | "url": "https://feross.org/support" 350 | } 351 | ] 352 | }, 353 | "node_modules/source-map": { 354 | "version": "0.6.1", 355 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 356 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 357 | "engines": { 358 | "node": ">=0.10.0" 359 | } 360 | }, 361 | "node_modules/string_decoder": { 362 | "version": "1.3.0", 363 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 364 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 365 | "dependencies": { 366 | "safe-buffer": "~5.2.0" 367 | } 368 | }, 369 | "node_modules/uglify-js": { 370 | "version": "3.17.4", 371 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", 372 | "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", 373 | "bin": { 374 | "uglifyjs": "bin/uglifyjs" 375 | }, 376 | "engines": { 377 | "node": ">=0.8.0" 378 | } 379 | }, 380 | "node_modules/universalify": { 381 | "version": "0.1.2", 382 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 383 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 384 | "engines": { 385 | "node": ">= 4.0.0" 386 | } 387 | }, 388 | "node_modules/upper-case": { 389 | "version": "1.1.3", 390 | "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 391 | "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" 392 | }, 393 | "node_modules/util-deprecate": { 394 | "version": "1.0.2", 395 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 396 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 397 | } 398 | } 399 | } 400 | -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typeset-demo", 3 | "author": "David Merfield", 4 | "license": "CC0", 5 | "dependencies": { 6 | "cheerio": "^0.22.0", 7 | "clean-css": "^4.2.3", 8 | "fs-extra": "^8.1.0", 9 | "highlight": "^0.2.3", 10 | "highlight.js": "^9.18.5", 11 | "html-minifier": "^4.0.0", 12 | "jquery": "^3.6.0", 13 | "uglify-js": "^3.17.2" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /demo/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidmerfield/Typeset/268e26da3b3be60fd1aa486f51d02e718dc7a212/demo/public/favicon.png -------------------------------------------------------------------------------- /demo/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Typeset - An HTML pre-processor for web typography 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
43 |
44 |

Typeset

45 |

Typeset is an HTML pre-proces­sor for web ty­pog­ra­phy which pro­vides ty­po­graphic fea­tures used 46 | tra­di­tion­ally in fine print­ing which re­main un­avail­able to browser lay­out en­gines. Typeset’s 47 | pro­cess­ing brings the fol­low­ing to your web­pages: 48 |

49 |
    50 |
  • Hanging punc­tu­a­tion
  • 51 |
  • Ligatures
  • 52 |
  • Optical mar­gin align­ment
  • 53 |
  • Punctuation sub­sti­tu­tion
  • 54 |
  • Small caps
  • 55 |
  • Soft hy­phen in­ser­tion
  • 56 |
57 | 58 | Get the code on GitHub   → 59 | 60 |

How?

61 |

Typeset does not re­quire any client-side JavaScript and uses less than a kilo­byte of CSS. Processed HTML & 62 | CSS works in Internet Explorer 5 and with­out any CSS.

63 | 64 |

Typeset can be used man­u­ally or as a plu­gin for Grunt and gulp. 65 |

66 |

67 |

npm i typeset
68 |

69 |

Usage

70 |
const typeset = require('typeset');
 71 | let html = '<p>"Hello," said the fox.</p>';
 72 | 
 73 | let output = typeset(html);
74 |

Then tweak Typeset.css to match the met­rics of your font and in­clude it on your 75 | page. 76 |

77 |

Options

78 |

Typeset ac­cepts an op­tional sec­ond ar­gu­ment con­tain­ing con­fig­u­ra­tion:

79 | 80 |

ig­nore <string> - Typeset will not process el­e­ments match­ing this CSS se­lec­tor.

81 | 82 |
Example:
83 |
typeset(html, { ignore: '.skip' });
84 | 85 |

only <string> - Typeset will only process el­e­ments match­ing this CSS se­lec­tor.

86 |
Example:
87 |
typeset(html, { only: '.typeset' });
88 | 89 |

dis­able <array> - List of Typeset fea­tures to dis­able. The fol­low­ing fea­tures may be 90 | dis­abled:

91 |
    92 |
  • quotes
  • 93 |
  • hyphenate
  • 94 |
  • ligatures
  • 95 |
  • smallCaps
  • 96 |
  • punctuation
  • 97 |
  • hangingPunctuation
  • 98 |
  • spaces
  • 99 |
100 | 101 |
Example:
102 |
typeset(html, { disable: ['hyphenate'] });
103 | 104 | 105 | 106 | 107 |

CLI

108 |
npm install -g typeset
109 |

Compiles a file to std­out:

110 |
typeset-js input.html
111 |

Pass an out­put file as a sec­ond ar­gu­ment:

112 |
typeset-js input.html output.html
113 |

Use the --ignore op­tion to ig­nore spe­cific CSS se­lec­tors: 114 |

115 |
typeset-js input.html output.html --ignore ".skip"
116 |

About

117 |

This pro­ject started as a col­lec­tion of li­braries I gath­ered for Blot. Typeset still runs there in pro­duc­tion. This was made pos­si­ble by the work of 118 | Bram Stein, Daniel Haim, and Dr. Drang. This page is set in the 119 | Plex fam­ily by Mike Abbink. Thanks to Matthew Butterick and Chris Coyier for their help and feed­back. 120 |

121 |

License

122 |

This soft­ware is ded­i­cated to the pub­lic do­main and li­censed un­der CC0. 123 |

124 |
125 |
126 |
127 |

Typeset

128 |
129 | Before 130 | After 131 |
132 |
133 | 143 |
144 |

Yjarni Sigurðardóttir spoke to the EFF from Iceland yes­ter­day: Light of my life, fire of my florins — my 145 | sin, my soul. The tip of the tongue tak­ing a trip to 118° 19′ 43.5″.” 146 |

147 |

She’s faster than a 120′ 4″ whale.” Piña co­ladas were widely con­sumed in Götterdämmerung from 148 | 1880–1912. For the low price of $20 / year from Exhibits A–E… Then the du­plex came for­ward. 149 | Thrice the tower, he mounted the round gun­rest, awaking’ HTML. He can print a fixed num­ber of dots in a 150 | square inch (for in­stance, 600 × 600).” 151 |

152 |
153 |
154 |
155 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /demo/public/normalize-opentype.css: -------------------------------------------------------------------------------- 1 | /*! normalize-opentype.css v0.2.4 | MIT License | kennethormandy.com/journal/normalize-opentype-css */::-moz-selection{color:inherit;text-shadow:inherit;background-color:#accef7}::selection{color:inherit;text-shadow:inherit;background-color:#accef7}body,html,table{-webkit-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0;-moz-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0;font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0}h1,h2,h3{-webkit-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"1;-moz-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"1;font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"1}abbr{text-transform:uppercase;-webkit-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"smcp"1,"c2sc"1;-moz-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"smcp"1,"c2sc"1;font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"smcp"1,"c2sc"1}time{-webkit-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0;-moz-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0;font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0}code,kbd,pre,samp{-webkit-font-feature-settings:"kern"0,"liga"0,"calt"1,"dlig"0,"pnum"0,"tnum"1,"onum"0,"lnum"1,"zero"1;-moz-font-feature-settings:"kern"0,"liga"0,"calt"1,"dlig"0,"pnum"0,"tnum"1,"onum"0,"lnum"1,"zero"1;font-feature-settings:"kern"0,"liga"0,"calt"1,"dlig"0,"pnum"0,"tnum"1,"onum"0,"lnum"1,"zero"1}sup{-webkit-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0,"sups"1;-moz-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0,"sups"1;font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0,"sups"1}sub{-webkit-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0,"subs"1;-moz-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0,"subs"1;font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"1,"lnum"0,"dlig"0,"subs"1}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=number],input[type=range],input[type=tel],input[type=week]{-webkit-font-feature-settings:"kern"0,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"0,"lnum"1,"zero"0;-moz-font-feature-settings:"kern"0,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"0,"lnum"1,"zero"0;font-feature-settings:"kern"0,"liga"1,"calt"1,"pnum"1,"tnum"0,"onum"0,"lnum"1,"zero"0}caption,tbody{-webkit-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"0,"tnum"1,"onum"0,"lnum"1,"zero"1;-moz-font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"0,"tnum"1,"onum"0,"lnum"1,"zero"1;font-feature-settings:"kern"1,"liga"1,"calt"1,"pnum"0,"tnum"1,"onum"0,"lnum"1,"zero"1} -------------------------------------------------------------------------------- /demo/public/stylesheet.css: -------------------------------------------------------------------------------- 1 | html{font-size:18px;margin:0;padding:0}body{font-family:"IBM Plex Sans",sans-serif;line-height:1.615;display:flex;margin:0;padding:0;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;-ms-overflow-style:scrollbar;flex-wrap:wrap}article{display:block;margin:0 auto}pre{font-size:16px;background-color:rgba(0,0,0,.05)}code{font-family:"IBM Plex Mono",monospace}a{color:#00f}pre{padding:1em 1.4em}.button{display:inline-block;text-decoration:none;border:1px solid;border-radius:2em;height:46px;line-height:44px;font-size:1rem;padding:0 1.2rem;margin-top:2rem;margin-bottom:1rem}@media (min-width:992px){.button{margin-top:4rem;margin-bottom:6rem;padding:0 1.2rem;line-height:54px;height:56px}}blockquote{font-family:Georgia,Times,Times New Roman,serif;font-size:1rem;font-weight:400;line-height:1.615;padding:1rem;margin:0;border:1px solid;border-top:0 solid;width:100%;position:relative}blockquote:after,blockquote:before{content:"";display:block;width:1rem;height:calc(100% - 2rem);background-color:rgba(0,0,255,.1);position:absolute;top:1rem;bottom:0;z-index:-1}blockquote:before{border-right:1px solid #00f;left:0}blockquote:after{border-left:1px solid #00f;right:0}blockquote p:last-child{margin-bottom:0}a[href^="#tab-"]{display:inline-block;margin-bottom:-1px;padding:0;padding:.5em 1.4em;text-decoration:underline;color:#00f;border:1px solid transparent}.demo{display:block}@media (max-width:992px){.demo{order:-1}}a[href^="#tab-"][data-active=true]{text-decoration:none;color:inherit;border:1px solid;border-bottom:1px solid #fff}.demo p:first-child{margin-top:0}h1,h2{font-weight:400}h2{font-size:1rem;margin:2em 0 1em}.tabs{display:flex;padding-bottom:0!important}.tabs>*{max-width:12.5em;flex-basis:50% 0 0}.tabs a{cursor:pointer;text-decoration:none}.tabs a[data-active=false]{color:#999}.tabs,h1,h2{font-size:1rem;margin:0;padding:1em 0;border-bottom:1px solid}*,::after,::before{box-sizing:border-box}@media (min-width:992px){body>*{width:50%;padding:1.4em 2.8em 10em;flex-shrink:0}}@media (max-width:992px){html{padding:1rem}body>*{width:100%;flex-shrink:0}}ul{list-style:inside}li,ul{margin:0;padding:0;padding-left:1.2em}li{padding-left:1em}ul ul{margin-bottom:.5rem;padding-top:1rem}h5{font-size:13px;font-weight:700;margin:1rem 0 .25rem;text-transform:uppercase;color:grey}h5+pre{margin-top:0}pre{background-color:#f6f8fa}.hljs{display:block;overflow-x:auto;color:#333}.hljs-comment,.hljs-quote{font-style:italic;color:#998}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#d73a49}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#032f62}.hljs-section,.hljs-selector-id,.hljs-title{font-weight:700;color:#900}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{font-weight:700;color:#458}.hljs-attribute,.hljs-name,.hljs-tag{font-weight:400;color:navy}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#005cc5}.hljs-meta{font-weight:700;color:#999}.hljs-deletion{background-color:#fdd}.hljs-addition{background-color:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.d-none{display:none}@media (min-width:992px){.d-md-none{display:none}.d-md-block{display:block}} -------------------------------------------------------------------------------- /demo/public/typeset.css: -------------------------------------------------------------------------------- 1 | .small-caps{font-variant:small-caps}.pull-double{margin-left:-.46em}.push-double{margin-right:.46em}.pull-single{margin-left:-.27em}.push-single{margin-right:.27em}.pull-double,.pull-single,.push-double,.push-single{display:inline-block}.pull-T,.pull-V,.pull-W,.pull-Y{margin-left:-.07em}.push-T,.push-V,.push-W,.push-Y{margin-right:.07em}.pull-C,.pull-O,.pull-c,.pull-o{margin-left:-.04em}.push-C,.push-O,.push-c,.push-o{margin-right:.04em}.pull-A{margin-left:-.03em}.push-A{margin-right:.03em} -------------------------------------------------------------------------------- /demo/public/typeset.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidmerfield/Typeset/268e26da3b3be60fd1aa486f51d02e718dc7a212/demo/public/typeset.gif -------------------------------------------------------------------------------- /demo/source/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidmerfield/Typeset/268e26da3b3be60fd1aa486f51d02e718dc7a212/demo/source/favicon.png -------------------------------------------------------------------------------- /demo/source/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Typeset - An HTML pre-processor for web typography 26 | 28 | 29 | 30 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 |

Typeset

48 |

Typeset is an HTML pre-processor for web typography which provides typographic features used 49 | traditionally in fine printing which remain unavailable to browser layout engines. Typeset's 50 | processing brings the following to your webpages: 51 |

52 |
    53 |
  • Hanging punctuation
  • 54 |
  • Ligatures
  • 55 |
  • Optical margin alignment
  • 56 |
  • Punctuation substitution
  • 57 |
  • Small caps
  • 58 |
  • Soft hyphen insertion
  • 59 |
60 | 61 | Get the code on GitHub   → 62 | 63 |

How?

64 |

Typeset does not require any client-side JavaScript and uses less than a kilobyte of CSS. Processed HTML & 65 | CSS works in Internet Explorer 5 and without any CSS.

66 | 67 |

Typeset can be used manually or as a plugin for Grunt and gulp. 70 |

71 |

72 |

npm i typeset
73 |

74 |

Usage

75 |
const typeset = require('typeset');
 76 | let html = '

"Hello," said the fox.

'; 77 | 78 | let output = typeset(html);
79 |

Then tweak Typeset.css to match the metrics of your font and include it on your 80 | page. 81 |

82 |

Options

83 |

Typeset accepts an optional second argument containing configuration:

84 | 85 |

ignore <string> - Typeset will not process elements matching this CSS selector.

86 | 87 |
Example:
88 |
typeset(html, { ignore: '.skip' });
89 | 90 |

only <string> - Typeset will only process elements matching this CSS selector.

91 |
Example:
92 |
typeset(html, { only: '.typeset' });
93 | 94 |

disable <array> - List of Typeset features to disable. The following features may be 95 | disabled:

96 |
    97 |
  • quotes
  • 98 |
  • hyphenate
  • 99 |
  • ligatures
  • 100 |
  • smallCaps
  • 101 |
  • punctuation
  • 102 |
  • hangingPunctuation
  • 103 |
  • spaces
  • 104 |
105 | 106 |
Example:
107 |
typeset(html, { disable: ['hyphenate'] });
108 | 109 | 110 | 111 | 112 |

CLI

113 |
npm install -g typeset
114 |

Compiles a file to stdout:

115 |
typeset-js input.html
116 |

Pass an output file as a second argument:

117 |
typeset-js input.html output.html
118 |

Use the --ignore option to ignore specific CSS selectors: 119 |

120 |
typeset-js input.html output.html --ignore ".skip"
121 |

About

122 |

This project started as a collection of libraries I gathered for Blot. Typeset still runs there in production. This was made possible by the work of 124 | Bram Stein, Daniel Haim, and Dr. Drang. This page is set in the 127 | Plex family by Mike Abbink. Thanks to Matthew Butterick and Chris Coyier for their help and feedback. 131 |

132 |

License

133 |

This software is dedicated to the public domain and licensed under CC0. 135 |

136 |
137 |
138 |
139 |

Typeset

140 |
141 | Before 142 | After 143 |
144 |
145 | 155 |
156 |

Yjarni Sigurðardóttir spoke to the EFF from Iceland 157 | yes­ter­day: Light of my life, fire 158 | of my florins — my sin, my soul. The tip of the tongue tak­ing a trip to 118° 19′ 43.5″.”

159 | 160 |

She’s faster than a 120′ 4″ whale.” Piña co­ladas were widely 161 | con­sumed in Götterdämmerung from 1880–1912. For the low price of $20 / year from 162 | Ex­hi­bits A–E… Then the du­plex came for­ward. 163 | Thrice the tower, he mounted the round gun­rest, awaking’ HTML. 165 | He can print a fixed num­ber of dots in a square inch (for in­stance, 600 × 600).”

166 |
167 |
168 |
169 | 187 | 188 | 189 | -------------------------------------------------------------------------------- /demo/source/normalize-opentype.css: -------------------------------------------------------------------------------- 1 | /*! normalize-opentype.css v0.2.4 | MIT License | kennethormandy.com/journal/normalize-opentype-css */ 2 | 3 | ::-moz-selection { 4 | color: inherit; 5 | text-shadow: inherit; 6 | background-color: #ACCEF7; 7 | } 8 | 9 | ::selection { 10 | color: inherit; 11 | text-shadow: inherit; 12 | background-color: #ACCEF7; 13 | } 14 | 15 | html, 16 | body, 17 | table { 18 | -webkit-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0; 19 | -moz-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0; 20 | font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0; 21 | } 22 | 23 | h1, 24 | h2, 25 | h3 { 26 | -webkit-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"1; 27 | -moz-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"1; 28 | font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"1; 29 | } 30 | 31 | abbr { 32 | text-transform: uppercase; 33 | -webkit-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "smcp"1, "c2sc"1; 34 | -moz-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "smcp"1, "c2sc"1; 35 | font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "smcp"1, "c2sc"1; 36 | } 37 | 38 | time { 39 | -webkit-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0; 40 | -moz-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0; 41 | font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0; 42 | } 43 | 44 | pre, 45 | kbd, 46 | samp, 47 | code { 48 | -webkit-font-feature-settings: "kern"0, "liga"0, "calt"1, "dlig"0, "pnum"0, "tnum"1, "onum"0, "lnum"1, "zero"1; 49 | -moz-font-feature-settings: "kern"0, "liga"0, "calt"1, "dlig"0, "pnum"0, "tnum"1, "onum"0, "lnum"1, "zero"1; 50 | font-feature-settings: "kern"0, "liga"0, "calt"1, "dlig"0, "pnum"0, "tnum"1, "onum"0, "lnum"1, "zero"1; 51 | } 52 | 53 | sup { 54 | -webkit-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0, "sups"1; 55 | -moz-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0, "sups"1; 56 | font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0, "sups"1; 57 | } 58 | 59 | sub { 60 | -webkit-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0, "subs"1; 61 | -moz-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0, "subs"1; 62 | font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"1, "lnum"0, "dlig"0, "subs"1; 63 | } 64 | 65 | input[type="color"], 66 | input[type="date"], 67 | input[type="datetime"], 68 | input[type="datetime-local"], 69 | input[type="number"], 70 | input[type="range"], 71 | input[type="tel"], 72 | input[type="week"] { 73 | -webkit-font-feature-settings: "kern"0, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"0, "lnum"1, "zero"0; 74 | -moz-font-feature-settings: "kern"0, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"0, "lnum"1, "zero"0; 75 | font-feature-settings: "kern"0, "liga"1, "calt"1, "pnum"1, "tnum"0, "onum"0, "lnum"1, "zero"0; 76 | } 77 | 78 | tbody, 79 | caption { 80 | -webkit-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"0, "tnum"1, "onum"0, "lnum"1, "zero"1; 81 | -moz-font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"0, "tnum"1, "onum"0, "lnum"1, "zero"1; 82 | font-feature-settings: "kern"1, "liga"1, "calt"1, "pnum"0, "tnum"1, "onum"0, "lnum"1, "zero"1; 83 | } 84 | -------------------------------------------------------------------------------- /demo/source/stylesheet.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-size: 18px; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | body { 8 | font-family: "IBM Plex Sans", sans-serif; 9 | line-height: 1.615; 10 | display: flex; 11 | margin: 0; 12 | padding: 0; 13 | 14 | text-size-adjust: 100%; 15 | -ms-text-size-adjust: 100%; 16 | -webkit-text-size-adjust: 100%; 17 | 18 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 19 | 20 | -ms-overflow-style: scrollbar; 21 | flex-wrap: wrap; 22 | } 23 | 24 | article { 25 | display: block; 26 | margin: 0 auto; 27 | } 28 | 29 | pre { 30 | font-size: 16px; 31 | background-color: rgba(0, 0, 0, 0.05); 32 | } 33 | 34 | code { 35 | font-family: "IBM Plex Mono", monospace; 36 | } 37 | 38 | a { 39 | color: blue; 40 | } 41 | 42 | pre { 43 | padding: 1em 1.4em; 44 | } 45 | 46 | .button { 47 | display: inline-block; 48 | text-decoration: none; 49 | border: 1px solid; 50 | border-radius: 2em; 51 | height: 46px; 52 | line-height: 44px; 53 | font-size: 1rem; 54 | padding: 0 1.2rem; 55 | margin-top: 2rem; 56 | margin-bottom: 1rem; 57 | } 58 | 59 | @media (min-width: 992px) { 60 | .button { 61 | margin-top: 4rem; 62 | margin-bottom: 6rem; 63 | padding: 0 1.2rem; 64 | line-height: 54px; 65 | height: 56px; 66 | } 67 | } 68 | 69 | blockquote { 70 | font-family: Georgia, Times, Times New Roman, serif; 71 | font-size: 1rem; 72 | font-weight: normal; 73 | line-height: 1.615; 74 | padding: 1rem; 75 | margin: 0; 76 | border: 1px solid; 77 | border-top: 0px solid; 78 | width: 100%; 79 | position: relative; 80 | } 81 | 82 | blockquote:before, 83 | blockquote:after { 84 | content: ""; 85 | display: block; 86 | width: 1rem; 87 | height: calc(100% - 2rem); 88 | background-color: rgba(0, 0, 255, 0.1); 89 | position: absolute; 90 | top: 1rem; 91 | bottom: 0; 92 | z-index: -1; 93 | } 94 | 95 | blockquote:before { 96 | border-right: 1px solid blue; 97 | left: 0; 98 | } 99 | blockquote:after { 100 | border-left: 1px solid blue; 101 | right: 0; 102 | } 103 | 104 | blockquote p:last-child { 105 | margin-bottom: 0; 106 | } 107 | 108 | a[href^="#tab-"] { 109 | display: inline-block; 110 | margin-bottom: -1px; 111 | padding: 0; 112 | padding: 0.5em 1.4em; 113 | text-decoration: underline; 114 | color: blue; 115 | border: 1px solid transparent; 116 | } 117 | 118 | .demo { 119 | display: block; 120 | } 121 | 122 | @media (max-width: 992px) { 123 | .demo { 124 | order: -1; 125 | } 126 | } 127 | 128 | a[href^="#tab-"][data-active="true"] { 129 | text-decoration: none; 130 | color: inherit; 131 | border: 1px solid; 132 | border-bottom: 1px solid #fff; 133 | } 134 | 135 | .demo p:first-child { 136 | margin-top: 0; 137 | } 138 | 139 | h1, 140 | h2 { 141 | font-weight: 400; 142 | } 143 | 144 | h2 { 145 | font-size: 1rem; 146 | margin: 2em 0 1em; 147 | } 148 | 149 | .tabs { 150 | display: flex; 151 | padding-bottom: 0 !important; 152 | } 153 | 154 | .tabs > * { 155 | max-width: 12.5em; 156 | flex-basis: 50% 0 0; 157 | } 158 | 159 | .tabs a { 160 | cursor: pointer; 161 | text-decoration: none; 162 | } 163 | .tabs a[data-active="false"] { 164 | color: #999; 165 | } 166 | h1, 167 | h2, 168 | .tabs { 169 | font-size: 1rem; 170 | margin: 0; 171 | padding: 1em 0; 172 | border-bottom: 1px solid; 173 | } 174 | 175 | *, 176 | *::before, 177 | *::after { 178 | box-sizing: border-box; 179 | } 180 | 181 | @media (min-width: 992px) { 182 | body > * { 183 | width: 50%; 184 | padding: 1.4em 2.8em 10em; 185 | flex-shrink: 0; 186 | } 187 | } 188 | 189 | @media (max-width: 992px) { 190 | html { 191 | padding: 1rem; 192 | } 193 | 194 | body > * { 195 | width: 100%; 196 | flex-shrink: 0; 197 | } 198 | } 199 | 200 | ul { 201 | list-style: inside; 202 | } 203 | 204 | ul, 205 | li { 206 | margin: 0; 207 | padding: 0; 208 | padding-left: 1.2em; 209 | } 210 | 211 | li { 212 | padding-left: 1em; 213 | } 214 | 215 | ul ul { 216 | margin-bottom: 0.5rem; 217 | padding-top: 1rem; 218 | } 219 | 220 | h5 { 221 | font-size: 13px; 222 | font-weight: bold; 223 | margin: 1rem 0 0.25rem; 224 | text-transform: uppercase; 225 | color: grey; 226 | } 227 | 228 | h5 + pre { 229 | margin-top: 0; 230 | } 231 | 232 | pre { 233 | background-color: #f6f8fa; 234 | } 235 | 236 | .hljs { 237 | display: block; 238 | overflow-x: auto; 239 | color: #333; 240 | } 241 | 242 | .hljs-comment, 243 | .hljs-quote { 244 | font-style: italic; 245 | color: #998; 246 | } 247 | 248 | .hljs-keyword, 249 | .hljs-selector-tag, 250 | .hljs-subst { 251 | color: #d73a49; 252 | } 253 | 254 | .hljs-number, 255 | .hljs-literal, 256 | .hljs-variable, 257 | .hljs-template-variable, 258 | .hljs-tag .hljs-attr { 259 | color: #008080; 260 | } 261 | 262 | .hljs-string, 263 | .hljs-doctag { 264 | color: #032f62; 265 | } 266 | 267 | .hljs-title, 268 | .hljs-section, 269 | .hljs-selector-id { 270 | font-weight: bold; 271 | color: #900; 272 | } 273 | 274 | .hljs-subst { 275 | font-weight: normal; 276 | } 277 | 278 | .hljs-type, 279 | .hljs-class .hljs-title { 280 | font-weight: bold; 281 | color: #458; 282 | } 283 | 284 | .hljs-tag, 285 | .hljs-name, 286 | .hljs-attribute { 287 | font-weight: normal; 288 | color: #000080; 289 | } 290 | 291 | .hljs-regexp, 292 | .hljs-link { 293 | color: #009926; 294 | } 295 | 296 | .hljs-symbol, 297 | .hljs-bullet { 298 | color: #990073; 299 | } 300 | 301 | .hljs-built_in, 302 | .hljs-builtin-name { 303 | color: #005cc5; 304 | } 305 | 306 | .hljs-meta { 307 | font-weight: bold; 308 | color: #999; 309 | } 310 | 311 | .hljs-deletion { 312 | background-color: #fdd; 313 | } 314 | 315 | .hljs-addition { 316 | background-color: #dfd; 317 | } 318 | 319 | .hljs-emphasis { 320 | font-style: italic; 321 | } 322 | 323 | .hljs-strong { 324 | font-weight: bold; 325 | } 326 | 327 | .d-none { 328 | display: none; 329 | } 330 | 331 | @media (min-width: 992px) { 332 | .d-md-none { 333 | display: none; 334 | } 335 | .d-md-block { 336 | display: block; 337 | } 338 | } 339 | -------------------------------------------------------------------------------- /demo/source/typeset.css: -------------------------------------------------------------------------------- 1 | /* Small caps */ 2 | .small-caps { 3 | font-variant: small-caps; 4 | } 5 | 6 | /* Double quote (") marks */ 7 | .pull-double { 8 | margin-left: -.46em; 9 | } 10 | 11 | .push-double { 12 | margin-right: .46em; 13 | } 14 | 15 | /* Single quote (') marks */ 16 | .pull-single { 17 | margin-left: -.27em; 18 | } 19 | 20 | .push-single { 21 | margin-right: .27em; 22 | } 23 | 24 | /* Mid-paragraph push/pull spans */ 25 | .pull-double, 26 | .push-double, 27 | .pull-single, 28 | .push-single { 29 | display: inline-block; 30 | } 31 | 32 | /* Optical margin alignment for particular letters */ 33 | .pull-T, 34 | .pull-V, 35 | .pull-W, 36 | .pull-Y { 37 | margin-left: -.07em; 38 | } 39 | 40 | .push-T, 41 | .push-V, 42 | .push-W, 43 | .push-Y { 44 | margin-right: .07em; 45 | } 46 | 47 | .pull-O, 48 | .pull-C, 49 | .pull-o, 50 | .pull-c { 51 | margin-left: -.04em; 52 | } 53 | 54 | .push-O, 55 | .push-C, 56 | .push-o, 57 | .push-c { 58 | margin-right: .04em; 59 | } 60 | 61 | .pull-A { 62 | margin-left: -.03em; 63 | } 64 | 65 | .push-A { 66 | margin-right: .03em; 67 | } 68 | -------------------------------------------------------------------------------- /demo/source/typeset.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidmerfield/Typeset/268e26da3b3be60fd1aa486f51d02e718dc7a212/demo/source/typeset.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typeset", 3 | "version": "0.3.6", 4 | "description": "Typesetting for the web", 5 | "keywords": [ 6 | "typeset", 7 | "typography", 8 | "hyphenation", 9 | "ligatures", 10 | "optical margin alignment", 11 | "small caps" 12 | ], 13 | "homepage": "https://github.com/davidmerfield/Typeset.js", 14 | "bugs": { 15 | "url": "https://github.com/davidmerfield/Typeset.js/issues" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/davidmerfield/Typeset.js.git" 20 | }, 21 | "license": "MIT", 22 | "author": "David Merfield", 23 | "contributors": [ 24 | "Daniel Haim (https://danielhaim.com)" 25 | ], 26 | "main": "src/index.js", 27 | "bin": { 28 | "typeset-js": "src/cmd.js" 29 | }, 30 | "scripts": { 31 | "build": "npm run clean && npm run build-dev && npm run build-prod", 32 | "build-dev": "./node_modules/webpack/bin/webpack.js", 33 | "build-prod": "PROD=1 ./node_modules/webpack/bin/webpack.js", 34 | "clean": "rm -rf build/", 35 | "jshint": "jshint ./src", 36 | "test": "mocha -u bdd -R spec -t 500 --recursive", 37 | "watch": "mocha test -u bdd -R spec -t 500 --recursive --watch || true", 38 | "release": "npm version patch && npm run build && git add package.json package-lock.json build/ && git commit -m 'Bump version and build package for release' && git push" 39 | }, 40 | "dependencies": { 41 | "cheerio": "^0.22.0", 42 | "commander": "^6.2.1", 43 | "html-entities": "^1.4.0", 44 | "html-minifier": "^4.0.0", 45 | "hypher": "^0.2.5", 46 | "jsdom": "^22.1.0", 47 | "minimist": "^1.2.6", 48 | "xmlserializer": "^0.6.1" 49 | }, 50 | "devDependencies": { 51 | "chai": "^4.3.6", 52 | "jshint": "^2.13.5", 53 | "mocha": "^8.4.0", 54 | "terser-webpack-plugin": "^5.3.6", 55 | "webpack": "^5.74.0", 56 | "webpack-cli": "^5.1.4" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/cmd.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const fs = require("fs"); 4 | const program = require("commander"); 5 | const typeset = require("./index.js"); 6 | 7 | // Convert comma-separated string into an array of strings 8 | function parseCommaSeparatedString(val) { 9 | return val.split(",").map((s) => s.trim()); 10 | } 11 | 12 | // Define the Command Line Interface (CLI) options 13 | program 14 | .version(require("../package.json").version) 15 | .usage("[options] [ []]") 16 | .option( 17 | "-i, --ignore ", 18 | "CSS selector(s) to ignore", 19 | parseCommaSeparatedString 20 | ) 21 | .option( 22 | "-O, --only ", 23 | "CSS selector(s) to exclusively apply typeset to", 24 | parseCommaSeparatedString 25 | ) 26 | .option( 27 | "--disable ", 28 | "Typeset feature(s) to disable (comma-separated)", 29 | parseCommaSeparatedString 30 | ) 31 | .parse(process.argv); 32 | 33 | const inputFile = program.args[0] || null; 34 | const outputFile = program.args[1] || null; 35 | 36 | const options = { 37 | ignore: program.ignore || "", 38 | only: program.only || "", 39 | disable: program.disable || [], 40 | }; 41 | 42 | if (inputFile) { 43 | fs.readFile(inputFile, (err, data) => { 44 | if (err) throw err; 45 | 46 | const outputHTML = typeset(data, options); 47 | 48 | if (outputFile) { 49 | fs.writeFile(outputFile, outputHTML, (err) => { 50 | if (err) throw err; 51 | process.exit(0); 52 | }); 53 | } else { 54 | // Print output to stdout by default 55 | console.log(outputHTML); 56 | process.exit(0); 57 | } 58 | }); 59 | } 60 | 61 | process.stdin.resume(); 62 | process.stdin.setEncoding("utf8"); 63 | 64 | // Process input from stdin 65 | process.stdin.on("data", (data) => { 66 | process.stdout.write(typeset(data, options)); 67 | }); 68 | 69 | process.stdin.on("end", () => { 70 | process.exit(0); 71 | }); 72 | -------------------------------------------------------------------------------- /src/eachTextNode.js: -------------------------------------------------------------------------------- 1 | // Import necessary libraries based on the environment 2 | let cheerio; 3 | let jquery; 4 | let escape; 5 | 6 | if (typeof ENV !== "undefined" && ENV.browser) { 7 | jquery = require("jquery"); 8 | escape = (text) => 9 | text.replace(/&/g, "&").replace(//g, ">"); 10 | } else { 11 | cheerio = require("cheerio"); 12 | } 13 | 14 | // Define selectors to ignore by default 15 | const DEFAULT_IGNORE_SELECTORS = 16 | 'head, code, pre, script, style, img, br, hr, [class^="pull-"], [class^="push-"], .small-caps'; 17 | 18 | // Main function to process HTML and apply modifications 19 | module.exports = (html, doThis, options) => { 20 | let ignore = DEFAULT_IGNORE_SELECTORS; 21 | const only = (jquery && html) || (options && options.only) || ":root"; 22 | 23 | if (options && options.ignore) ignore += ", " + options.ignore; 24 | 25 | // Load the appropriate library (cheerio or jquery) 26 | const $ = 27 | jquery || 28 | cheerio.load(html, { 29 | decodeEntities: false, 30 | }); 31 | 32 | // Apply the specified function to each text node 33 | const processedText = $(only).each(function () { 34 | findTextNodes(this); 35 | }); 36 | 37 | // Recursive function to find and process text nodes 38 | function findTextNodes(node) { 39 | if ($(node).is(ignore)) return false; 40 | 41 | $(node) 42 | .contents() 43 | .each(function () { 44 | const childNode = this; 45 | 46 | if (childNode.nodeType === 3) { 47 | let text = escape ? escape(childNode.data) : childNode.data; 48 | 49 | text = text.replace(/'/g, "'"); 50 | text = text.replace(/"/g, '"'); 51 | 52 | childNode.data = text; 53 | 54 | $(childNode).replaceWith(doThis(text, childNode, $)); 55 | } else { 56 | findTextNodes(childNode); 57 | } 58 | }); 59 | } 60 | 61 | // Return the modified HTML 62 | return (jquery && processedText[0]) || $.html(); 63 | }; 64 | -------------------------------------------------------------------------------- /src/hangingPunctuation.js: -------------------------------------------------------------------------------- 1 | function pull(className, content) { 2 | return '' + (content || "") + ""; 3 | } 4 | 5 | function push(className, content) { 6 | return '' + (content || "") + ""; 7 | } 8 | 9 | const doubleWidth = [ 10 | """, 11 | '"', 12 | "“", 13 | "„", 14 | "”", 15 | "“", 16 | "“", 17 | "“", 18 | "“", 19 | "”", 20 | "”", 21 | "”", 22 | "”", 23 | "„", 24 | "„", 25 | "„", 26 | ]; 27 | 28 | const singleWidth = ["'", "′", "'", "‘", "’", "‘", "’"]; 29 | 30 | const diacriticMap = { 31 | A: /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g, 32 | C: /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g, 33 | O: /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g, 34 | T: /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g, 35 | V: /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g, 36 | W: /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g, 37 | Y: /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g, 38 | c: /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g, 39 | o: /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g, 40 | v: /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g, 41 | w: /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g, 42 | }; 43 | 44 | const alignMe = "CcOoYTAVvWw".split(""); 45 | 46 | module.exports = (text, node, $) => { 47 | if (text.length < 2) return text; 48 | 49 | const words = text.split(" ").join(" ").split(" "); 50 | 51 | for (const i in words) { 52 | for (const b in singleWidth) { 53 | const punctuation = singleWidth[b]; 54 | if (words[i].startsWith(punctuation)) { 55 | let insert = pull("single", punctuation); 56 | if (words[i - 1]) { 57 | words[i - 1] = words[i - 1] + push("single"); 58 | } else if (hasAdjacentText($, node)) { 59 | insert = push("single") + insert; 60 | } 61 | words[i] = insert + words[i].slice(punctuation.length); 62 | } 63 | } 64 | 65 | for (const c in doubleWidth) { 66 | const punctuation = doubleWidth[c]; 67 | if (words[i].startsWith(punctuation)) { 68 | let insert = pull("double", punctuation); 69 | if (words[i - 1]) { 70 | words[i - 1] = words[i - 1] + push("double"); 71 | } else if (hasAdjacentText($, node)) { 72 | insert = push("double") + insert; 73 | } 74 | words[i] = insert + words[i].slice(punctuation.length); 75 | } 76 | } 77 | } 78 | 79 | text = words.join(" "); 80 | 81 | return text; 82 | }; 83 | 84 | function hasAdjacentText($, node) { 85 | if (node.prev && node.prev.children && node.prev.children.length) { 86 | const lastChild = node.prev.children.slice(-1)[0]; 87 | if (lastChild && lastChild.type === "text") { 88 | return true; 89 | } 90 | } 91 | 92 | if (!$(node).parent() || !$(node).parent().length) return false; 93 | 94 | const parentPrev = $(node).parent()[0].prev; 95 | 96 | if (parentPrev && parentPrev.type === "text" && parentPrev.data.trim()) { 97 | return true; 98 | } 99 | 100 | return false; 101 | } -------------------------------------------------------------------------------- /src/hyphenate.js: -------------------------------------------------------------------------------- 1 | // User auto language detection if no option 2 | // specified https://github.com/richtr/guessLanguage.js 3 | const Hypher = require("hypher"); 4 | const englishHyphenationPatterns = require("./hypher-patterns/en-us"); // Assuming this is the correct path 5 | const hypher = new Hypher(englishHyphenationPatterns); 6 | 7 | // Hyphenates non-capitalized words in a text 8 | module.exports = (text) => { 9 | const words = text.split(" "); 10 | 11 | for (let i = 0; i < words.length; i++) { 12 | const word = words[i]; 13 | 14 | // Skip words that start with an uppercase letter 15 | if (word.charAt(0).toUpperCase() === word.charAt(0)) { 16 | continue; 17 | } 18 | 19 | words[i] = hypher.hyphenateText(word); 20 | } 21 | 22 | return words.join(" "); 23 | }; 24 | -------------------------------------------------------------------------------- /src/hypher-patterns/be.js: -------------------------------------------------------------------------------- 1 | // Created by Olexandr Zhydenko ((olexandr.zhydenko (at) gmail.com) 2 | // 3 | // Based on the file: hyph_be_BY.dic 4 | // Created by: Alex Buloichik 5 | // Corrected by: Liasovich Sviatlana 6 | // License: LGPL 7 | module.exports = { 8 | id: "be", 9 | leftmin: 2, 10 | rightmin: 2, 11 | patterns: { 12 | 3: "а1аа1еа1ёа1іа1оа1уа1ыа1эа1юа1яе1ае1ее1ёе1іе1ое1уе1ые1эе1юе1яё1аё1её1ёё1іё1оё1уё1ыё1эё1юё1яі1аі1еі1ёі1іі1оі1уі1ыі1эі1юі1яо1ао1ео1ёо1іо1оо1уо1ыо1эо1юо1яу1ау1еу1ёу1іу1оу1уу1ыу1эу1юу1яы1аы1еы1ёы1іы1оы1уы1ыы1эы1юы1яэ1аэ1еэ1ёэ1іэ1оэ1уэ1ыэ1ээ1юэ1яю1аю1ею1ёю1ію1ою1ую1ыю1эю1юю1яя1ая1ея1ёя1ія1оя1уя1ыя1эя1юя1я_б88б__в88в__г88г__ґ88ґ__д88д__ж88ж__з88з__й88й__к88к__л88л__м88м__н88н__п88п__р88р__с88с__т88т__ў88ў__ф88ф__х88х__ц88ц__ч88ч__ш88ш__ь88ь__а88а__е88е__ё88ё__і88і__о88о__у88у__ы88ы__э88э__ю88ю__я88я_б1бв1вг1гґ1ґд1дж1жз1зй1йк1кл1лм1мн1нп1пр1рс1ст1тў1ўф1фх1хц1цч1чш1шь1ьб8ьв8ьг8ьґ8ьд8ьж8ьз8ьй8ьк8ьл8ьм8ьн8ьп8ьр8ьс8ьт8ьў8ьф8ьх8ьц8ьч8ьш8ьь8ьд8зд8ж", 13 | 4: "1б8а1б8е1б8ё1б8і1б8о1б8у1б8ы1б8э1б8ю1б8я1в8а1в8е1в8ё1в8і1в8о1в8у1в8ы1в8э1в8ю1в8я1г8а1г8е1г8ё1г8і1г8о1г8у1г8ы1г8э1г8ю1г8я1ґ8а1ґ8е1ґ8ё1ґ8і1ґ8о1ґ8у1ґ8ы1ґ8э1ґ8ю1ґ8я1д8а1д8е1д8ё1д8і1д8о1д8у1д8ы1д8э1д8ю1д8я1ж8а1ж8е1ж8ё1ж8і1ж8о1ж8у1ж8ы1ж8э1ж8ю1ж8я1з8а1з8е1з8ё1з8і1з8о1з8у1з8ы1з8э1з8ю1з8я1й8а1й8е1й8ё1й8і1й8о1й8у1й8ы1й8э1й8ю1й8я1к8а1к8е1к8ё1к8і1к8о1к8у1к8ы1к8э1к8ю1к8я1л8а1л8е1л8ё1л8і1л8о1л8у1л8ы1л8э1л8ю1л8я1м8а1м8е1м8ё1м8і1м8о1м8у1м8ы1м8э1м8ю1м8я1н8а1н8е1н8ё1н8і1н8о1н8у1н8ы1н8э1н8ю1н8я1п8а1п8е1п8ё1п8і1п8о1п8у1п8ы1п8э1п8ю1п8я1р8а1р8е1р8ё1р8і1р8о1р8у1р8ы1р8э1р8ю1р8я1с8а1с8е1с8ё1с8і1с8о1с8у1с8ы1с8э1с8ю1с8я1т8а1т8е1т8ё1т8і1т8о1т8у1т8ы1т8э1т8ю1т8я1ў8а1ў8е1ў8ё1ў8і1ў8о1ў8у1ў8ы1ў8э1ў8ю1ў8я1ф8а1ф8е1ф8ё1ф8і1ф8о1ф8у1ф8ы1ф8э1ф8ю1ф8я1х8а1х8е1х8ё1х8і1х8о1х8у1х8ы1х8э1х8ю1х8я1ц8а1ц8е1ц8ё1ц8і1ц8о1ц8у1ц8ы1ц8э1ц8ю1ц8я1ч8а1ч8е1ч8ё1ч8і1ч8о1ч8у1ч8ы1ч8э1ч8ю1ч8я1ш8а1ш8е1ш8ё1ш8і1ш8о1ш8у1ш8ы1ш8э1ш8ю1ш8я1ь8а1ь8е1ь8ё1ь8і1ь8о1ь8у1ь8ы1ь8э1ь8ю1ь8я_бб88бб__бв88бв__бг88бг__бґ88бґ__бд88бд__бж88бж__бз88бз__бй88бй__бк88бк__бл88бл__бм88бм__бн88бн__бп88бп__бр88бр__бс88бс__бт88бт__бў88бў__бф88бф__бх88бх__бц88бц__бч88бч__бш88бш__бь88бь__б'8_б’8_вб88вб__вв88вв__вг88вг__вґ88вґ__вд88вд__вж88вж__вз88вз__вй88вй__вк88вк__вл88вл__вм88вм__вн88вн__вп88вп__вр88вр__вс88вс__вт88вт__вў88вў__вф88вф__вх88вх__вц88вц__вч88вч__вш88вш__вь88вь__в'8_в’8_гб88гб__гв88гв__гг88гг__гґ88гґ__гд88гд__гж88гж__гз88гз__гй88гй__гк88гк__гл88гл__гм88гм__гн88гн__гп88гп__гр88гр__гс88гс__гт88гт__гў88гў__гф88гф__гх88гх__гц88гц__гч88гч__гш88гш__гь88гь__г'8_г’8_ґб88ґб__ґв88ґв__ґг88ґг__ґґ88ґґ__ґд88ґд__ґж88ґж__ґз88ґз__ґй88ґй__ґк88ґк__ґл88ґл__ґм88ґм__ґн88ґн__ґп88ґп__ґр88ґр__ґс88ґс__ґт88ґт__ґў88ґў__ґф88ґф__ґх88ґх__ґц88ґц__ґч88ґч__ґш88ґш__ґь88ґь__ґ'8_ґ’8_дб88дб__дв88дв__дг88дг__дґ88дґ__дд88дд__дж88дж__дз88дз__дй88дй__дк88дк__дл88дл__дм88дм__дн88дн__дп88дп__др88др__дс88дс__дт88дт__дў88дў__дф88дф__дх88дх__дц88дц__дч88дч__дш88дш__дь88дь__д'8_д’8_жб88жб__жв88жв__жг88жг__жґ88жґ__жд88жд__жж88жж__жз88жз__жй88жй__жк88жк__жл88жл__жм88жм__жн88жн__жп88жп__жр88жр__жс88жс__жт88жт__жў88жў__жф88жф__жх88жх__жц88жц__жч88жч__жш88жш__жь88жь__ж'8_ж’8_зб88зб__зв88зв__зг88зг__зґ88зґ__зд88зд__зж88зж__зз88зз__зй88зй__зк88зк__зл88зл__зм88зм__зн88зн__зп88зп__зр88зр__зс88зс__зт88зт__зў88зў__зф88зф__зх88зх__зц88зц__зч88зч__зш88зш__зь88зь__з'8_з’8_йб88йб__йв88йв__йг88йг__йґ88йґ__йд88йд__йж88йж__йз88йз__йй88йй__йк88йк__йл88йл__йм88йм__йн88йн__йп88йп__йр88йр__йс88йс__йт88йт__йў88йў__йф88йф__йх88йх__йц88йц__йч88йч__йш88йш__йь88йь__й'8_й’8_кб88кб__кв88кв__кг88кг__кґ88кґ__кд88кд__кж88кж__кз88кз__кй88кй__кк88кк__кл88кл__км88км__кн88кн__кп88кп__кр88кр__кс88кс__кт88кт__кў88кў__кф88кф__кх88кх__кц88кц__кч88кч__кш88кш__кь88кь__к'8_к’8_лб88лб__лв88лв__лг88лг__лґ88лґ__лд88лд__лж88лж__лз88лз__лй88лй__лк88лк__лл88лл__лм88лм__лн88лн__лп88лп__лр88лр__лс88лс__лт88лт__лў88лў__лф88лф__лх88лх__лц88лц__лч88лч__лш88лш__ль88ль__л'8_л’8_мб88мб__мв88мв__мг88мг__мґ88мґ__мд88мд__мж88мж__мз88мз__мй88мй__мк88мк__мл88мл__мм88мм__мн88мн__мп88мп__мр88мр__мс88мс__мт88мт__мў88мў__мф88мф__мх88мх__мц88мц__мч88мч__мш88мш__мь88мь__м'8_м’8_нб88нб__нв88нв__нг88нг__нґ88нґ__нд88нд__нж88нж__нз88нз__нй88нй__нк88нк__нл88нл__нм88нм__нн88нн__нп88нп__нр88нр__нс88нс__нт88нт__нў88нў__нф88нф__нх88нх__нц88нц__нч88нч__нш88нш__нь88нь__н'8_н’8_пб88пб__пв88пв__пг88пг__пґ88пґ__пд88пд__пж88пж__пз88пз__пй88пй__пк88пк__пл88пл__пм88пм__пн88пн__пп88пп__пр88пр__пс88пс__пт88пт__пў88пў__пф88пф__пх88пх__пц88пц__пч88пч__пш88пш__пь88пь__п'8_п’8_рб88рб__рв88рв__рг88рг__рґ88рґ__рд88рд__рж88рж__рз88рз__рй88рй__рк88рк__рл88рл__рм88рм__рн88рн__рп88рп__рр88рр__рс88рс__рт88рт__рў88рў__рф88рф__рх88рх__рц88рц__рч88рч__рш88рш__рь88рь__р'8_р’8_сб88сб__св88св__сг88сг__сґ88сґ__сд88сд__сж88сж__сз88сз__сй88сй__ск88ск__сл88сл__см88см__сн88сн__сп88сп__ср88ср__сс88сс__ст88ст__сў88сў__сф88сф__сх88сх__сц88сц__сч88сч__сш88сш__сь88сь__с'8_с’8_тб88тб__тв88тв__тг88тг__тґ88тґ__тд88тд__тж88тж__тз88тз__тй88тй__тк88тк__тл88тл__тм88тм__тн88тн__тп88тп__тр88тр__тс88тс__тт88тт__тў88тў__тф88тф__тх88тх__тц88тц__тч88тч__тш88тш__ть88ть__т'8_т’8_ўб88ўб__ўв88ўв__ўг88ўг__ўґ88ўґ__ўд88ўд__ўж88ўж__ўз88ўз__ўй88ўй__ўк88ўк__ўл88ўл__ўм88ўм__ўн88ўн__ўп88ўп__ўр88ўр__ўс88ўс__ўт88ўт__ўў88ўў__ўф88ўф__ўх88ўх__ўц88ўц__ўч88ўч__ўш88ўш__ўь88ўь__ў'8_ў’8_фб88фб__фв88фв__фг88фг__фґ88фґ__фд88фд__фж88фж__фз88фз__фй88фй__фк88фк__фл88фл__фм88фм__фн88фн__фп88фп__фр88фр__фс88фс__фт88фт__фў88фў__фф88фф__фх88фх__фц88фц__фч88фч__фш88фш__фь88фь__ф'8_ф’8_хб88хб__хв88хв__хг88хг__хґ88хґ__хд88хд__хж88хж__хз88хз__хй88хй__хк88хк__хл88хл__хм88хм__хн88хн__хп88хп__хр88хр__хс88хс__хт88хт__хў88хў__хф88хф__хх88хх__хц88хц__хч88хч__хш88хш__хь88хь__х'8_х’8_цб88цб__цв88цв__цг88цг__цґ88цґ__цд88цд__цж88цж__цз88цз__цй88цй__цк88цк__цл88цл__цм88цм__цн88цн__цп88цп__цр88цр__цс88цс__цт88цт__цў88цў__цф88цф__цх88цх__цц88цц__цч88цч__цш88цш__ць88ць__ц'8_ц’8_чб88чб__чв88чв__чг88чг__чґ88чґ__чд88чд__чж88чж__чз88чз__чй88чй__чк88чк__чл88чл__чм88чм__чн88чн__чп88чп__чр88чр__чс88чс__чт88чт__чў88чў__чф88чф__чх88чх__чц88чц__чч88чч__чш88чш__чь88чь__ч'8_ч’8_шб88шб__шв88шв__шг88шг__шґ88шґ__шд88шд__шж88шж__шз88шз__шй88шй__шк88шк__шл88шл__шм88шм__шн88шн__шп88шп__шр88шр__шс88шс__шт88шт__шў88шў__шф88шф__шх88шх__шц88шц__шч88шч__шш88шш__шь88шь__ш'8_ш’8_ьб88ьб__ьв88ьв__ьг88ьг__ьґ88ьґ__ьд88ьд__ьж88ьж__ьз88ьз__ьй88ьй__ьк88ьк__ьл88ьл__ьм88ьм__ьн88ьн__ьп88ьп__ьр88ьр__ьс88ьс__ьт88ьт__ьў88ьў__ьф88ьф__ьх88ьх__ьц88ьц__ьч88ьч__ьш88ьш__ьь88ьь__ь'8_ь’8б8'1б8’1в8'1в8’1г8'1г8’1ґ8'1ґ8’1д8'1д8’1ж8'1ж8’1з8'1з8’1й8'1й8’1к8'1к8’1л8'1л8’1м8'1м8’1н8'1н8’1п8'1п8’1р8'1р8’1с8'1с8’1т8'1т8’1ў8'1ў8’1ф8'1ф8’1х8'1х8’1ц8'1ц8’1ч8'1ч8’1ш8'1ш8’1ь8'1ь8’1б8а3б8у3б8о3б8е3б8ё3б8ы3б8э3б8і3в8а3в8у3в8о3в8е3в8ё3в8ы3в8э3в8і3г8а3г8у3г8о3г8е3г8ё3г8ы3г8э3г8і3ґ8а3ґ8у3ґ8о3ґ8е3ґ8ё3ґ8ы3ґ8э3ґ8і3д8а3д8у3д8о3д8е3д8ё3д8ы3д8э3д8і3ж8а3ж8у3ж8о3ж8е3ж8ё3ж8ы3ж8э3ж8і3з8а3з8у3з8о3з8е3з8ё3з8ы3з8э3з8і3к8а3к8у3к8о3к8е3к8ё3к8ы3к8э3к8і3л8а3л8у3л8о3л8е3л8ё3л8ы3л8э3л8і3м8а3м8у3м8о3м8е3м8ё3м8ы3м8э3м8і3н8а3н8у3н8о3н8е3н8ё3н8ы3н8э3н8і3п8а3п8у3п8о3п8е3п8ё3п8ы3п8э3п8і3р8а3р8у3р8о3р8е3р8ё3р8ы3р8э3р8і3с8а3с8у3с8о3с8е3с8ё3с8ы3с8э3с8і3т8а3т8у3т8о3т8е3т8ё3т8ы3т8э3т8і3ф8а3ф8у3ф8о3ф8е3ф8ё3ф8ы3ф8э3ф8і3х8а3х8у3х8о3х8е3х8ё3х8ы3х8э3х8і3ц8а3ц8у3ц8о3ц8е3ц8ё3ц8ы3ц8э3ц8і3ч8а3ч8у3ч8о3ч8е3ч8ё3ч8ы3ч8э3ч8і3ш8а3ш8у3ш8о3ш8е3ш8ё3ш8ы3ш8э3ш8і3а8й1о8й1е8й1і8й1э8й1ю8й1я8й1ё8й1ы8й1а8ў1о8ў1е8ў1і8ў1э8ў1ю8ў1я8ў1ё8ў1ы8ў1б8'1б8’1в8'1в8’1г8'1г8’1ґ8'1ґ8’1д8'1д8’1ж8'1ж8’1з8'1з8’1к8'1к8’1л8'1л8’1м8'1м8’1н8'1н8’1п8'1п8’1р8'1р8’1с8'1с8’1т8'1т8’1ф8'1ф8’1х8'1х8’1ц8'1ц8’1ч8'1ч8’1ш8'1ш8’1б8ь1в8ь1г8ь1ґ8ь1д8ь1ж8ь1з8ь1к8ь1л8ь1м8ь1н8ь1п8ь1р8ь1с8ь1т8ь1ф8ь1х8ь1ц8ь1ч8ь1ш8ь1", 14 | 5: "_ад1б_ад1в_ад1г_ад1ґ_ад1д_ад1ж_ад1з_ад1к_ад1л_ад1м_ад1н_ад1п_ад1р_ад1с_ад1т_ад1ф_ад1х_ад1ц_ад1ч_ад1ш_аб1б_аб1в_аб1г_аб1ґ_аб1д_аб1ж_аб1з_аб1к_аб1л_аб1м_аб1н_аб1п_аб1р_аб1с_аб1т_аб1ф_аб1х_аб1ц_аб1ч_аб1ш_уз1б_уз1в_уз1г_уз1ґ_уз1д_уз1ж_уз1з_уз1к_уз1л_уз1м_уз1н_уз1п_уз1р_уз1с_уз1т_уз1ф_уз1х_уз1ц_уз1ч_уз1ш_ус1б_ус1в_ус1г_ус1ґ_ус1д_ус1ж_ус1з_ус1к_ус1л_ус1м_ус1н_ус1п_ус1р_ус1с_ус1т_ус1ф_ус1х_ус1ц_ус1ч_ус1ш8льш_8сць_8дзь_", 15 | 6: "_над1б_над1в_над1г_над1ґ_над1д_над1ж_над1з_над1к_над1л_над1м_над1н_над1п_над1р_над1с_над1т_над1ф_над1х_над1ц_над1ч_над1ш_пад1б_пад1в_пад1г_пад1ґ_пад1д_пад1ж_пад1з_пад1к_пад1л_пад1м_пад1н_пад1п_пад1р_пад1с_пад1т_пад1ф_пад1х_пад1ц_пад1ч_пад1ш_раз1б_раз1в_раз1г_раз1ґ_раз1д_раз1ж_раз1з_раз1к_раз1л_раз1м_раз1н_раз1п_раз1р_раз1с_раз1т_раз1ф_раз1х_раз1ц_раз1ч_раз1ш_рас1б_рас1в_рас1г_рас1ґ_рас1д_рас1ж_рас1з_рас1к_рас1л_рас1м_рас1н_рас1п_рас1р_рас1с_рас1т_рас1ф_рас1х_рас1ц_рас1ч_рас1ш_роз1б_роз1в_роз1г_роз1ґ_роз1д_роз1ж_роз1з_роз1к_роз1л_роз1м_роз1н_роз1п_роз1р_роз1с_роз1т_роз1ф_роз1х_роз1ц_роз1ч_роз1ш_бяз1б_бяз1в_бяз1г_бяз1ґ_бяз1д_бяз1ж_бяз1з_бяз1к_бяз1л_бяз1м_бяз1н_бяз1п_бяз1р_бяз1с_бяз1т_бяз1ф_бяз1х_бяз1ц_бяз1ч_бяз1ш_без1б_без1в_без1г_без1ґ_без1д_без1ж_без1з_без1к_без1л_без1м_без1н_без1п_без1р_без1с_без1т_без1ф_без1х_без1ц_без1ч_без1ш_бяс1б_бяс1в_бяс1г_бяс1ґ_бяс1д_бяс1ж_бяс1з_бяс1к_бяс1л_бяс1м_бяс1н_бяс1п_бяс1р_бяс1с_бяс1т_бяс1ф_бяс1х_бяс1ц_бяс1ч_бяс1ш_бес1б_бес1в_бес1г_бес1ґ_бес1д_бес1ж_бес1з_бес1к_бес1л_бес1м_бес1н_бес1п_бес1р_бес1с_бес1т_бес1ф_бес1х_бес1ц_бес1ч_бес1ш_рос1б_рос1в_рос1г_рос1ґ_рос1д_рос1ж_рос1з_рос1к_рос1л_рос1м_рос1н_рос1п_рос1р_рос1с_рос1т_рос1ф_рос1х_рос1ц_рос1ч_рос1швё8рст", 16 | 7: "_праз1б_праз1в_праз1г_праз1ґ_праз1д_праз1ж_праз1з_праз1к_праз1л_праз1м_праз1н_праз1п_праз1р_праз1с_праз1т_праз1ф_праз1х_праз1ц_праз1ч_праз1ш_ад8зінтэ8мбр__дву8х3_шма8т1", 17 | 8: "_перад1б_перад1в_перад1г_перад1ґ_перад1д_перад1ж_перад1з_перад1к_перад1л_перад1м_перад1н_перад1п_перад1р_перад1с_перад1т_перад1ф_перад1х_перад1ц_перад1ч_перад1ш_цераз1б_цераз1в_цераз1г_цераз1ґ_цераз1д_цераз1ж_цераз1з_цераз1к_цераз1л_цераз1м_цераз1н_цераз1п_цераз1р_цераз1с_цераз1т_цераз1ф_цераз1х_цераз1ц_цераз1ч_цераз1ш_церас1б_церас1в_церас1г_церас1ґ_церас1д_церас1ж_церас1з_церас1к_церас1л_церас1м_церас1н_церас1п_церас1р_церас1с_церас1т_церас1ф_церас1х_церас1ц_церас1ч_церас1шна1д8вор", 18 | 9: "за1п8люшч_па1д8зял_па1д8зелраз1г8лядраз1г8ледзло1ў8жыв_па1д8зяк_вы1к8люч", 19 | 10: "віда1з8мянвіда1з8менза3ц8вярдз_па3г8лядз", 20 | 12: "слова1ў8тваркрова3ў8твар" 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /src/hypher-patterns/bn.js: -------------------------------------------------------------------------------- 1 | // For questions about the Bengali hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "bn", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "অ1আ1ই1ঈ1উ1ঊ1ঋ1এ1ঐ1ঔ1ি1া1ী1ু1ৃ1ে1ো1ৌ1ৗ1্2ঃ1ং11ক1গ1খ1ঘ1ঙ1চ1ছ1জ1ঝ1ঞ1ট1ঠ1ড1ঢ1ণ1ত1থ1দ1ধ1ন1প1ফ1ব1ভ1ম1য1র1ল1শ1ষ1স1হ", 9 | 3: "2ঃ12ং1" 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /src/hypher-patterns/ca.js: -------------------------------------------------------------------------------- 1 | // For questions about the Catalan hyphenation patterns 2 | // ask Jordi Rosell (jroselln at gmail dot com) 3 | module.exports = { 4 | id: "ca", 5 | leftmin: 3, 6 | rightmin: 3, 7 | patterns: { 8 | 3: "u1í1ba1bi1bo1bu1ca1ce1ci1co1cu1da1de1di1do3du1fa1fe1fi1fo1fu1ga1ge1gi1go1gu1ha1he1hi1ho1hu1ja1je1ji1jo1ju1la1le1li1lo1lu1ma1me1mi1mo1mu1na1ne3ni1no1nu1pa3pe3pi3po1pu1qu1ra1re1ri1ro1ru1sa1se1si1so1su1ta1te1ti1to1tu1va1ve1vi1vo1vu1xa1xe1xi1xo1xu1za1ze1zi1zo1zu1bé1bí1bó1bú1bà1bè1bò1cé1cí1có1cú1cà1cè1cò1ço1ça1çu1çó1çú1çà1çò1dé1dí1dó1dú1dà1dè1dò1fé1fí1fó1fú1fà1fè1fò1gé1gí1gó1gú1gà1gè1gò1gü1hé1hí1hó1hú1hà1hè1hò1jé1jí1jó1jú1jà1jè1jò1lé1lí1ló1lú1là1lè1lò1mé1mí1mó1mú1mà1mè1mò1né1ní1nó1nú1nà1nè1nò1pé1pí1pó1pú1pà1pè1pò1qü1ré1rí1ró1rú1rà1rè1rò1sé1sí1só1sú1sà1sè1sò1té1tí1tó1tú1tà1tè1tò1vé1ví1vó1vú1và1vè1vò1xé1xí1xó1xú1xà1xè1xò1zé1zí1zó1zú1zà1zè1zò3prü1òü1èü1àü1úü1óü1íü1éü1oü1eü1aï1iï1òï1èï1àï1úï1óï1íï1éï1oï1eï1aò1üò1ïò1oò1eò1aè1üè1ïè1oè1eè1aà1üà1ïà1oà1eà1aú1üú1ïú1oú1eú1aó1üó1ïó1oó1eó1aí1üí1ïí1oí1eí1aé1üé1ïé1oé1eé1au1üu1ïu1òu1èu1àu1úu1ó1beu1éo1üo1ïo1òo1èo1ào1úo1óo1ío1éi1üi1ïi1òi1èi1ài1úi1ói1íi1ée1üe1ïe1òe1èe1àe1úe1óe1íe1éa1üa1ïa1òa1èa1àa1úa1óa1ía1éu1ou1eu1ao1oo1eo1ai1oi1ei1ae1oe1ee1aa1oa1ea1a", 9 | 4: "gü2ép2se_i2ò_u2è_u2ògu2agu2egu2igu2oqu2aqu2equ2iqu2ogu2égu2ígu2ógu2àgu2ègu2òqu2équ2íqu2óqu2àqu2èqu2ògü2e_i2ègü2ígü2ègü2iqü2eqü2éqü2íqü2èqü2io3ron3siig3ne3lea3ria3ne3ser3nei3nef3exp_th2_ch2p2síg2nòg2nop2si", 10 | 5: "u1i2í1f2lú1f2ló1f2lí1f2lé1d2rò1d2rè1d2rà1d2rú1d2ró1d2rí1d2ré1c2rò1c2rè1c2rà1c2rú1c2ró1c2rí1c2ré1c2lò1c2lè1c2là1c2lú1c2ló1c2lí1c2lé1b2rò1b2rè1b2rà1b2rú1b2ró1b2rí1b2ré1b2lò1b2lè1b2là1b2lú1b2ló1b2lí1b2lé1l2lò1l2lè1l2là1l2lú1l2ló1l2lí1l2lé1n2yu1n2yo1n2yi1n2ye1n2ya1t2ru1t2ro1t2ri1t2re1t2ra1p2ru1p2ro1p2ri1p2re1p2ra1p2lu1p2lo1p2li1p2le1p2la1g2ru1g2ro1g2ri1g2re1g2ra1g2lu1g2lo1g2li1g2le1g2la1f2ru1f2ro1f2ri1f2re1f2ra1f2lu1f2lo1f2li1f2le1f2la1d2ru1d2ro1d2ri1d2re1d2ra1c2ru1c2ro1c2ri1c2re1c2ra1c2lu1c2lo1c2li1c2le1c2la1b2ru1b2ro1b2ri1b2re1b2ra1b2lu1b2lo1b2li1b2le1b2la1l2lu3l2lo1l2li1l2lea1i2aa1i2ea1i2oa1i2ua1u2aa1u2ea1u2ia1u2oa1u2ue1i2ae1i2ee1i2oe1i2ue1u2ae1u2ee1u2ie1u2oe1u2ui1i2ai1i2ei1i2oi1i2ui1u2ai1u2ei1u2ii1u2oi1u2uo1i2ao1i2eo1i2oo1i2uo1u2ao1u2eo1u2oo1u2io1u2uu1i2au1i2eu1i2ou1i2uu1u2au1u2eu1u2iu1u2ou1u2ua1i2éa1i2ía1i2óa1i2úa1i2àa1i2èa1i2òa1u2éa1u2ía1u2óa1u2úa1u2àa1u2èa1u2òe1i2ée1i2íe1i2óe1i2úe1i2àe1i2èe1i2òe1u2ée1u2íe1u2óe1u2úe1u2àe1u2èe1u2òi1i2éi1i2íi1i2ói1i2úi1i2ài1i2èi1i2òi1u2éi1u2íi1u2ói1u2úi1u2ài1u2èi1u2òo1i2éo1i2ío1i2óo1i2úo1i2ào1i2èo1i2òo1u2éo1u2ío1u2óo1u2úo1u2ào1u2èo1u2òu1i2é1f2lòu1i2óu1i2úu1i2àu1i2èu1i2òu1u2éu1u2íu1u2óu1u2úu1u2àu1u2èu1u2òé1i2aé1i2eé1i2oé1i2ué1u2aé1u2eé1u2oé1u2ié1u2uí1i2aí1i2eí1i2oí1i2uí1u2aí1u2eí1u2oí1u2ií1u2uó1i2aó1i2eó1i2oó1i2uó1u2aó1u2eó1u2oó1u2ió1u2uú1i2aú1i2eú1i2oú1i2uú1u2aú1u2eú1u2oú1u2iú1u2uà1i2aà1i2eà1i2oà1i2uà1u2aà1u2eà1u2oà1u2ià1u2uè1i2aè1i2eè1i2oè1i2uè1u2aè1u2eè1u2oè1u2iè1u2uò1i2aò1i2eò1i2oò1i2uò1u2aò1u2eò1u2oò1u2iò1u2uï1i2aï1i2eï1i2oï1i2éï1i2íï1i2óï1i2úï1i2àï1i2èï1i2òï1i2uï1u2aï1u2eï1u2oï1u2éï1u2íï1u2óï1u2úï1u2àï1u2èï1u2òï1u2iï1u2uü1i2aü1i2eü1i2oü1i2éü1i2íü1i2óü1i2úü1i2àü1i2èü1i2òü1i2uü1u2aü1u2eü1u2oü1u2éü1u2íü1u2óü1u2úü1u2àü1u2èü1u2òü1u2iü1u2u_hi2a_hi2e_hi2o_hi2u_hu2a_hu2e_hu2i_hu2o1f2lè1f2ré1f2rí1f2ró_hi2é_hi2ó_hi2ú_hi2à_hi2è_hi2ò_hu2é_hu2í_hu2ó_hu2à_hu2è_hu2ò1f2rú1f2rà1f2rè1f2rò1g2lé1g2lí1g2ló1g2lú1g2là1g2lè1g2lò1g2ré1g2rí1g2ró1g2rú1g2rà1g2rè1g2rò1p2lé1p2lí1p2ló1p2lú1p2là1p2lè1p2lò1p2ré1p2rí1p2ró1p2rú1p2ràui3etsub3as3esps3empqui3e1p2rè1p2ròin3ex1t2rées3asa1um_e1um_i1um_o1um_u1um_es3ap_be2n_be2s_bi2s_ca2p_ce2les3afe3ris_co2n_co2r_de2s_di2s_en3ae3rio1t2ríe3ismbi3se1t2ró1t2rú_in3o1t2rà_ma2l3l2la_pa2n_pe2r1t2rè1t2rò1n2yé1n2yí_re2d_su2b1n2yó1n2yú1n2yàp2neu1n2yè1n2yò1f2lào3gnò", 11 | 6: "_in3aces3int_sub3oes3arr_cla2res3aco_co2ll_psa2l_pos2t_pe3rides3avdes3ar_in3es_in3ap_in3addes3ag", 12 | 7: "u1ista__inte2rdes3enc_supe2ra1isme__hipe2re1isme_i1isme_o1isme_u1isme__rebe2sa1ista_e1ista_o1ista_i1ista__tran2s", 13 | 8: "_subde2s_antihi2", 14 | 9: "_hiperm2n", 15 | 10: "_mal1t2husein1s2tein", 16 | 12: "ru1t2herfordni2etz1sc2he" 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /src/hypher-patterns/cs.js: -------------------------------------------------------------------------------- 1 | // For questions about the Czech hyphenation patterns 2 | // ask Martin Hasoň (martin dot hason at gmail dot com) 3 | module.exports = { 4 | id: "cs", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "a11f1g1k1n1pu11vy11zé11ňó11š1ť1ú1ž", 9 | 3: "_a2_b2_c2_d2_e2_g2_h2_i2_j2_k2_l2_m2_o2_p2_r2_s2_t2_u2_v2_z2_č2_é2_í2_ó2_š2_ú2_ž22a_a2da2ga2ia2ka2ra2sa2ta2u2av2aya2ča2ňa2ť2b_b1db1h1bib1j2bkb1m2bn1bob2z1bá1bí2bň2c_1ca2cc1ce1ci2cl2cn1coc2p2ctcy21cá1cí2cň1ců2d_1dad1bd1d1de1did1j2dkd1m2dn1dod1t1dud2v1dy1dá1dé1dě1dí2dň1dů1dý2e_e1ae1be1ee1ie2ke1o2ere1se1te1ue1áe2ňe1ře2šeú12f_f2l2fn2fr2fs2ft2féf2ú2g_2gngo12h_h2bh2c2hd2hkh2mh2rh1č2hňhř2h2ž2i_i1ai1bi1di1hi1ji1li1mi2ni1oi1ri1ti1xi1ái2ďi1éi1ói1ři2ši2ž2j_j2d1jij1j2jkj2m2jn2jp2jz2jď1jí2jž2k_k2dk2e2kf2kkk2l2kn2ks2kčk2ň2l_2lf2lg2lh1li2lj2lk2ll2ln2lp2lv2lz2lň1lů1lý2m_1ma1me2mf1mim2l2mn1mo2mp1mu2mv2mz2mčm2ž2n_2nb2nf2ngn1j2nk2nn2nz2nď2nónů22nž2o_o1ao1cog2o1ho1io1jo1lo1mo2no1oo1to2uo1xo2zo1čo2ňo1ř2p_2pkp2l2pn2pp2ptpá12pč2pš2pťqu22r_r1br1cr1d2rkr1l2rn2rrr1x2rzr1č2ró2rš2s_s2cs2d1se2sf1sis2js2k2sn1sos2p1sr2ss1sus2v1sé1sí2sň2sť1sůs2ž2t_1te2tf2tg1ti2tl2tm2tn1to2tpt2vt2č1té1tě2tř2tš1tů2u_u2b2ufu2ku2mu2nu2pu2ru2su2vu2zu2ču2ďu2ňu2šu2ž2v_2vkv2l2vm2vnv2p2vňwe22x_2xf2xnx1ty2ay2ey2sy2ňy2šyž22z_2zbz2ez2j2zl2ztz2v2zzzá12zč2zňz2řá1bá1dá1já1sá2ňá1řá2š2č_1ča2čb1če1či2čk2čn1čoč2p2čs1ču1čá1čí1čů2ď_1ďa1ďoé2dé2fé2lé2mé2sé2té2šé2žě1cě1lě2vě2zě1řě2šě2ťě2ží1bí1hí1jí1lí1rí1tí2ňí1ří2š2ň_2ňa2ňk2ňmň1só2z2ř_2řc2řdři12řk2řn1řoř2v2řz2řš2š_2šl2šnš2p2štš2vš2ň2ť_2ťk2ťm2ťtú2dú2kú2lú2nú2pú2tú2vú2zú2čú2žů1bů1cůt2ů2vů2zů2žý1bý1dý1hý1jý1lý2ný1rý1tý1uý1ř2ž_2žk2žl2žnž2v2žď2žň2žš", 10 | 4: "_ch2_ná1_st2_us2_ut2_vy3_vý1_za3_zd2a3daa3dea3dia3doa3dua3dya3dáa3déa3děa3día3důa3dýa3gaa3goa3gua3gáah3va3ina3iva2jda2jmaj2oa3kea3kia3kla3koa3kra3kua3kya3káa3kéa3kóa3kůa3kýap3ta3raa3rea3ria3roa3rua3rya3ráa3róa3růa3rýa3saa3sea3sha3soa3sua3sva3sya3sáa3séa3sía3sůa3taa3tea3tia3toa3tra3tua3tva3tya3táa3téa3těa3tía3tóat1řa3tůa3týa3uja3učav3dav3taz3ka3zpa3čaa3čea3čia3čla3čoa3čua3čáa3čía3čůa3ňoa3ňua3říaú3t3ba_2b1cbe3pbis33bl_3blk2brib2ru2b1tbu2c3by_bys32b1č1bě_3bínb3řab1ří2bš2ce2u2ch_1cha3che2chl2cht1chu1chy1chá2chř2ck2c3lac3léc2tict2nc3tvc2těcuk11c2vda3dd2bad2bá2d1cde1xde2z2d1hd3kv3dl_d1lad3li1dlnd2lud1léd2lů1dmddo1ddo3hdo3pdo1sdo3tdo3čd1red3réd3rýd3tld3třdu3p2durd3ved3vld3vrd3vyd3vád3věd3víd3zbd3zdd3zn2d1č3dějd1řad1ří2dš2d3škd3št3dů_dů3sd2ž2e2are2břed1led3ve1hae1hee1hoe1hre1hue1hye1háe1hýe1jeej1mej1oej1uej3ve3kae3kee3koe3kre3kue3kye3káe3kée3kóe3kře3kůe1lae1lee1loe1lue1lye1láe1lée1líe1mle1mre1mye3máe1měe1míe3mře3můe1mýeo1seo3ze2plepy3e1rae1ree1rie1roer3se1rue1rye1ráe1rée1růe1rýe2ske2sles2me2stet1řeu3beu3deu3keu3meu3neu3peu3reu3teu3veu3zeu3že3vdevy3e3xue3zeez2te3zíe3zře1čte3ňoe3ňue3ňáe3óne3říe3šee3šie3šle3šoe3šíeú3neú3peú3teú3čf3líf1rige2s3gic3gin2g1mgu3mgu3vhe2she2uhe3x2hli2hlý2h2nh3ne2h1th2tě2h2vhyd1hys3ia3dib2li1chid2li1emi1eni1etif1ri2hlih3ni3imi2klik3milu3i3nai3nei3nii3noi3nui3nyi3nái3néi3něi3níi3nůi3nýi2psi1sais3cis1ti1syi3sáit1ri2tvi1umiv3di3zpiz1ri1člič3ti1íci1ími3šei3šiiš3ki3šoi3šui3šái3šíi3žai3žei3žii3žoi3žui3žája3dja3gj1b22j1cj3drj3dáj3důj3efj3ex2j1hj3kv2j1lj3maj3mi2jmíjne3j1obj1odj1ohj1opj1osj2ov2j1rj3sn2j1tj3tlju3pj1usju3tju3vju3zj1už2jv2j3vdj3vnj3zbj3zdj3zkj3znj3zp2j1čj3štj3šť2jú1jú3njú3čjú3ž3kaj3kat3kav3kač3kař2k1c3ket3kl_k3lék3lók3lý2k2mk3mě3kof3kovkr2s2k1tkt2r3kujku3v2k2v3kyn3kác3kár3kářk2ř23ků_1la_2l1b2l1c2l1dle2i1lej1lel3lio2ližl2kl2l1m1loslo3zl2pěls3n2l1t1lá_2l1č1lé_1lík1líř2lš2l3štlý2t2l2ž2m1b2m1cm2dl3me_me3x2mk22mleml3h2mlim3nam3nám3ném3nýmo2kmo2smoú3m2psmp2tmr2s2m1tmu3n2muš3má_má2sm2čemí1c2m2šmš3ť3mů_3mý_3na_na3hnat2na3zna3š2n1c2n1dne1dne1hne2jne3pne3zn3frng1l3nio2n1lno3z2nožn2sa2n1t2nub3ny_3nák2n1č2nív2níž2nš2n3što1bao1beob1lob1ro1buob3zo3béocy3od3bod1lod3vod1řo1e2oe3go2flo3gnoj2o2okaom2no3nao3neo3nio3noo3nuo3nyo3náo3něo3nío3nůo3nýo2pso1rao1reo1rio1roo1ruo1ryo1ráo3réo1růo3rýo1sao1sko1slo1syo3tío3třou3mou3vo3zaoz1bo3zeoz1ho3zioz3joz3koz1loz3mo3zooz3poz3to3zuo3zío3zůoč2ko3ňao3ňoo3ško3šlo3žl2p1c3pečp2kl3pl_pl3hp2nu3podpo3hpo3ppoč2pr2cpro1pr2sprů3p3tupá2c2př_při31ra_2rakr2blrca3r1harh3nr1hor3hur1há1ricr2kl2r1mro3h2r1sr2st2r1tr2thrtu31ru_1ry_ryd2rz3drz3l1rák1rářrč3t3ré_3rý_s2b2s3casch2s3cis3císe3h3sel3semset2se3zs3fo3sfés3fú3sic3sif3sik3sits3jus3ků3sl_3slns2lys1lís2mas2mos2nas2nes2ná2st_2stns2tvs2tás1tísy3csá2d3sáh2s2čs3čis3ťo1ta_1tajt1ao2t1b2t1c3te_2tihtiú32tiž2tk2t2klt2ká3tl_t1le3tlmtlu3t1lyt1lét2mat3níto3b2toj2trč2trý2t1sts2t2t1t1tu_1tuj2tup2tve1ty_3tá_t3či2tčí3tém2těh2těp1tíc1tím2tín2tírt1řut2řát3št1tý_1tým1týř3týšu2atu3bau3beu3biu3bou3buu3báu3bů2u2du3deu3diu3dou3duu3dyu3díu2hlu2inu2jmu3keu3kou3kuu3kyu3kůul1hu3mau3meu3miu3muu3má3umřu3neu3nou3nuu3něu3níu3nůu3pau3peu3piu3puu3pyu3páu3pěu3píu3půu3rau3reu3riu3ruu3rá1urču3růus1lu3sou3syu3sáu3síu3sůu3viu3vuu3zeu3ziuz1lu3zou3zuu3zíu3čau3čeu3čiu3čouč3tu3čuu3čáu3číu3šeu3šiu3šou3šuu3šáu3šíu3žeu3žou3žuu3žáu3ží2v1b2v1cv2ch2v2dv3di3venve2pv2kr2vlovo3bvo2svou3vr2cv1ro2vs2v1sk2v2tvy3cvyp2vy3tvy3čvyš2v2z22v2čv3čáv3čí3vín2vřív2š23výsvý3tv2ž23war3xovy2bly2chy2dry2gry3hny2kly3niy2přyr2vy3say3sey3siy3smy3soy3spys2ty3suy3svy3syy3sáy3séy3síyu3žy3vsy3zby3zdy3zky3zny3zpyč2kyř3by3říy3šey3šiy3škyš1ly3šoy3špy3šuy3šíy3ždza3hza3iza3jza3kzat2za3zza3šz2by2z1c2z2dz3dize3hzet2zev2ze3z2z2fz1ház3jí2z2kz3kyz3kéz3kůz3ký3zl_z2m22zmez3mnz3my2z2nz3noz3nuz3nyz3néz3něz3níz3ný2z2pz3ptz3tř3zu_zu3šz3vi3zy_záh23zápzá3zzáš2z3čl2zš2z3škz3štzú3čzú3žzů3sá2blá2dlád1řá1haá3heáh1láh3ná1hoá1hrá1háá1laá1leá1loá1luá1lyá3léá1líá3myá3méá1měá3míá3mýá1raá1reár2má1roá1ruá3růá2scá2smá2stát3kát1rá1tuá1tyá1tíá3týáz3ká3šeá3ší2č1c3če_če1cč3koč3kuč3ky2č1mč2neč1sk2č2t3čtvč3tí2ď1t3ďujé3dié3doé3foéf1ré2klé3maé3meé3mié3moé3mué3můé3taé3toé3táěd3rě3haě3heěh3ně1hoě3huě3hůě3jaě1jeě1joě3jůě1raě1reě1roěr3sě1ruě1ryě1růěs3kěs3nět1lě1trět3vě1tíě3vaě3veě3vlě3voě3vuě3váěv3čě3zeě3ziěz3ně3zoě3zíě3šeě3šiě3šoě3šuě3šáě3šíěš3ťě3ťoě3žeě3žiě3žoě3žuě3žííb3říd1lí2hlíh3ní2krí1máí3méí1měí1saít3kíz3kí3šeí3šií3šoí3šíňa3d3ňov2ň1tó3zaó3zió3zoó3zy2ř2bře1h2řesřia3ři3hřis2ři3zři3řř2kl2ř1l2ř1m2řou2ř2p2ř1s2ř1t2ř1č2řídří1sř3štšab32š1c2š2kš3kaš3ke3škrš3kyš2laš2liš2lošlá2š2léš2lý2š1m2š1sší3dš3ší2š2ťš3ťoš3ťuš3ťá3ťalú2c2úz3k3účeů1hlů3jdů1leů1myů1měů1raů1s2ů2stů3vaů3voů3věů3zoů3žeů3žiů3žoý1mlý1měý3noý1s2ý2ský3zký3znýš3lža3d3žač2ž1b2ž1c2ž1d3žil3žlo2ž1mžon22ž1t", 11 | 5: "_a4da_a4de_a4di_a4do_a4dé_a4kl_a4ko_a4kr_a4ku_a4ra_a4re_a4ri_a4ro_a4ry_a4rá_a4sa_a4se_a4so_a4sy_a4ta_a4te_at3l_a4to_a4tr_a4ty_a4ve_cyk3_dez3_d4na_dne4_d4ny_dos4_d4ve_d4vě_d4ví_e4ch_e4ko_es3k_es3t_e4ve_f4ri_h4le_h4ne_i4na_i4ni_i4no_is3l_j4ak_j4se_j4zd_jád4_k4li_k4ly_ne3c_neč4_ne3š_ni2t_n4vp_o4bé_ode3_od3l_o4ka_o4ko_o4na_o4ne_o4ni_o4no_o4nu_o4ny_o4ně_o4ní_o4pe_o4po_o4se_o4sl_ot3v_o4tí_o4tř_o4za_o4zi_o4zo_o4zu_o4šk_o4šl_o4ži_p4ro_p4rý_p4se_pu3b_rej4_re3s_ro4k_s4ch_s4ci_sem4_s4ke_sk4l_s4ká_s4le_s4na_s4ny_s4pe_s4po_s4tá_s4ži_u4ba_u4be_u4bi_u4bo_u4de_u4di_u4do_u4du_u4dí_uh4n_uj4m_u4ko_u4ku_ul4h_u4ma_u4me_u4mi_u4mu_u4ne_u4ni_u4pa_u4pe_u4pi_up4n_u4po_u4pu_u4pá_u4pě_u4pí_u4ra_u4ro_u4rá_u4so_u4st_u4sy_u4sí_u4vi_u4ze_u4če_u4či_u4čí_u4še_u4ši_u4šk_uš4t_u4ší_u4ži_už4n_u4žo_u4ží_v4po_v4zá_v4ži_y4or_y4ve_zar2_zač2_z4di_z4dr_z4ky_z4mn_z4no_z4nu_z4ně_z4ní_z4pe_z4po_z4tř_z4ve_z4vi_č4te_še3t_š4ka_š4ke_š4ky_š4ťo_š4ťá_ú4důaa3t2ab4lýab3riab4sbab2stac4ciad2laa4dlia4dláa4dléad4mead4muado4sad3ria3drža4dužad3voad4úzad4úřae4viafi2aag4faag3roah4liai4reaj4meak4nial4fbal4klal4tzal3žíam4bdam4klam4nuamo3sam4žia4naean4dtaneu4an4scan4sgan4slan4sman2span4svan4tčan4žhao4edao4hmao4tčap4r_a4psoa4př_ar4dwa4rerar4glar4kha4roxar3star2vaar3š2ar4šrarůs3a3sinas3náas3pia4stkas4tmas3tvat4cha4tioat4klat3loat3rea4truat4ráat4thau4gsauj4maus3tav4d_av3loa4vlua4vlíav4tiay4onaz3laaz4léaz3niač4máaře4ka4špla4špyba4brba3kaba4sebe4efbe4etbej4mbeu4rbe2z3beze3bi2b3bist4bi4trbl4blb2lemb2lesb4lánb2lémbo4etbo4jmbo4okbo4trbou3sbo4škb2ralb2ranb4roubroz4b3ru_b3rubb2rán2b1s2bs3trbtáh4bu4enby4smby4tčby4znbé4rcbě3tabí4rcb3ře_bře4scad4lca4escech4ced4lcelo3ce4nsce4ovce4pscer4v4che_ch4lych4mb2ch3n4chtech4u_cik4lc4ketco4atco4mmco4žpctis4ct4lací4plda4jšda4klda4trdch4ldd4hade3hnde3jdde3klde3kvde2nade2ozde3slde4smde4sode2spdes4tde4xtde3zndez3ode3čtde4žpdi4gg4dinddis3kdi4sodj4usd4labd4lakd2loud3lučd4láž2d1lídmýš44dobldo3bydo3bědo3býdod4ndoj4m4dokn4dolydo3mndo4pcdop4ndor2vdos4pdo3ukdo3učdo3z2doz4ndoč4tdo4žp4drand4rapd4rend3rosd3roud3rošdr4scd3rušd4rýv2d1s2ds4kůds4podum3řdu3nadu4pndu3sidu4í_d4vacdy4sudře4kd4řepd4řevd2řítea3dreb4erebez2eb4lie4ch_e4chme3choe2chre3chve4chťed4beed4kved2mae3dmned4říee4thee3xieg4giehno4eh4něej3age3jase3jede3jezej3ine3jisej3moe3jmue4klye4lauel4dvel4zee4mlíemo3kem3žeen4dven4scen4sient3reo3byeod3leo4due4oleeo2steo4třeo4zbeo4zdeoše3epa3te4pniep2noe4pnýep4tlep4tmep4tne4ptuer4a_er4s_er4sne4sage2scee4sinesi4ses4k_es3kyes3kée4slye4sp_es4pee4st_e4stee4tkie4tkre4tlie4tlyet3riet3roet3růet4úneu3cteu4m_eu4r_e4uraeu4rgeu3s2eu4tseve4še3v2ke4vskex4taey4orey4ovez4apez4boez3deez3duez4děez4ejez4elez4erez4esez4ezez4ešezis4ez4itez4leez4náez4něez4pyez4ácez4áhez4čeez4řeeč4tee4čtie4čtíeře4keř4kue4škaeš4láeš4toeúmy4ežíš4fe4infene4fe4uefi4emfi4flfló4rfm4nof4ranf4ras3frekfs4tefu4chga4učghou4gi4ímg4lomg4noig4nosgo4hm3grafgu4elgu4itgu4m_gus4tha4agha4arha4blha4brha3dlha4kehas3tha4ydhe4brhe4idhej4shi4anhi3erhi4ghhi4re4hla_h4ledh3lenh3lobh3loph3lovh3luj2h1ly4hlá_h4lásh3lí_4hlíkh4nedh3nivh4noj3hněd4hovehra4ph4tinh4títhu4chhu3mohu4tňhy4dohy4pshy4zdhř4byhý4blia3g2i4al_ias4tia4tri2b1ri4chžid4gei4dlýig4nei3hl_i4hliih4naijed4ij4meij4miik3leik4ryi4kveik4úřil4bai4lnui4mlai4mlyi4munina3din4cmin4dl3infein4ghin4gpin4gsin4gtin4špio4skiro4sis4chis4k_is3kais3keis3kris3kuis3kvis3kyis3lois3léis3plis3pois4thist3vis3tíit4rhit4rpit4seit4suix4tdič4tlič4toiř4kliř4čeiš4kriš4kviš4toja2b2jac4kja4cqj3aktj3dobj3dokj3dosjd4říjech4jg4raji4chjih3lji4mžj4inajis3kji2zvjod2řj4orajo3svj3ovljpor42j1s2j4semj4si_j4sk_js4kojs4kájs4poju4anju3naju3spju4t_ju4xtju3žijád2rjš4tika4blka4chka3dlka3ka3kami3kaněka2pska4pvka2přkas3tka4učkaš3lka4špke4blke3joke4prke4psk3lejk4libk3lic4klo_k3los2k3lyk3lá_kna4sko3byko4jmko2přko4skko3zá4kroak3robk3rofkr4ú_kuch4ku4fřku4hrku3seku3siku3suku4thk4vrňky2prkyp3řky4znká4plk3řejkš4tila4brlab4sla3kala4nqla4psla4všla4y_la2zmld4nele4adle4auleh3nle3jole4prle4psle4scle4smle4svlet3mle2trle4tčle4ukle4vhle4vkle3xilez3n3lhanli4azli4blli4bvli4dmlind4li4tňli4vrl4katlk4nul4nullo3brlo4idlo4islo3splo3svlo2trlo4třlo4u_loz4dlo4šk2l1s2l4slalst4nl4stílt4ralt4rult4rylu4idlu4j_lu4k_lu4lklu4m_lu4mnlu3prlu3valu3vllu3vylu3vílá4jšlá4všlí4pllí4znl4štýmaj4sma4klma4kr4maldmas3kmat3rma4všmaz3l2m1d2me4gome4ismh4lemid3lmik3rmi4xt3m2klmk4lamk4li4mla_ml4h_ml4scml4sk4mlu_mna4sm4nohm3nosm4noz3množm4nézm3nějmod3rmo2hlmo4s_mot3ř4moutmoza4mo3zřm4plompo4smp4se2m1s2m4stlmu4flmu4n_mu4ndmu4nnmu4nsmu4nšmy4škmálo3mí4rňmš4čina3chna4dona4emna4h_na3jdna3kana3p2na3s2na4s_na3tlna3třnaz4kna4zšna4č_naž4nn4chcnd4hindo4tnd2rend4rind4říne4glnej3tnej3une3klne3kvne4m_ne3s2ne4s_ne4ssne3tlnet4rne3udne3v2ne4v_nez4nne3škne3šťng4lang4leng4lín4grong4vinik4tni4mrni4mž3nisk2nitřno3b2no4bsno3hnno4hsno4irno4mžno3smnot4rno4zdno4šk2n1s2ns3akns4kon4socns3pont4r_nt3runt3ránu4ggná3s2ná4s_nš4ťooang4obe3jobe3sobe3zob4rňobys4o4chlo2chroc4keoc4koo4ct_oct3noc4únode3pode3so4docodos4od3raod3růo3držoe3tioh4neoi4ceo4into4jaro4jmio4jmuo4jmůo4juzok2teol4glol4toom4klona4soo4hřoote2o4ptuopá4to4př_o4raeor4dmor3stor4váorůs3o4saiose4sosi4do4skuosk3vo4skáo4skýos4laos4lios4lýos3moos4muo4st_o4stgo4stmo4stéo4stšo4stýot4klo4tlýoto3sot3root3víot3řiou3běou3děou4flou4ilou4isou4k_ou3kao4uklou3krou3káoup3noupo4ou4s_ou3saou3seou4skou3smou4tvou4vlou4vnouz3do4učkou3žio4vskovy2po2vštoz4d_oz3dáoz3děoz3díozer4oz4koo4zn_oz4pyoz4pěoz4píoz3rooz3ruoz3růo4zutoz3vroz3váozů4soč4kaoři2so4škuo4škyoš4láoš4mooš4tioš4ťuož4mopa4edpa4espa4klpa3sipa4t_pe4alpede4pe4igpe4npperi3pi4krpi4plpl4h_4plo_po1b2po3c2poly3po3m2po4mppo4olpo4p_po4pmpo1s2pos4ppo3t2po4t_po4tnpo3ukpo3učpo3už3po3vpo3z2po4zdpo3čkpo3řípo4šv4pra_prob2pro3ppro3z4pránpse4s2p1skp4sutp4tejp4terp4tevpt4rip4tá_pu4dlpu4trpyt3lpád3lpá4nvpá4slpé4rhpře3hpře3jpře3zpřih4pš4tira4brra4emra4esra4ffra4hlra4hmra4jgra4jšra4nhra3sira4vvra4wlra4y_ra4yora4ďm4ražir3char3chorc4kir4dlardo2sre4adre4aured4rre4etre3klre4mrre2sbres3lret4rre4umr3hl_ri4bbri4dgri4drri4flri4ghri4zmr4miorn4drro4adro3byrod2l3rofyro4h_ro4jbro4kšrom3nro2sbro3svro3tiro3tlro4tčro3vd3rovýroz3droz3nro4zoroz3vro3záro4čprpa3drr4harr4hor4stur4trárt4smr2t3vrt4zuru3seru3sirus3kru3žirych3rys3try4zkry4znry4í_ry4škrád4lrá4džrá3rirš4nírů4m_rů4v_rý4znsa4pfsa4prsas3ks3ce_sch4lsch4nsci4ese4ause4igse4ilsej4mse4kuse3lhse3s2ses4kse4ssse3tkse3třse4urse3čtsi4fl4skacs4kak4skams4kok2skonskos44skotsk4rask4rusk4ry4skvesk4vos3káns4lavs3le_s4leds3lems3lens3lets4libs3ly_s4meks3nats3ne_sn4tls3ná_s4nídsob4lso3brso4skso4tvsou3hsou3ssouz4so4šks4polss4sr4sta_s3tajs2tanst4at4stecs4tepst4er2stil4stičst3lo4sto_4str_4strnst4ve3ství4sty_s4tyl3styš4stá_s3tář4stě_s4těd3stěhs2těrs2těž2stí_su4basu4bosuma4su3vesá2klta2blt2a3dta4jfta4jg4talt4tand3taně2tarktast4ta4čkte4akte4flte4inteob4tep3lters4te4trte4ucte4urte4utti4grti3kltin4gti4plti3slti4tr2titutiz4r4tizít4kalt4kattk4latk4li4tkně4tla_tles3t3lo_t4loutlu4sto4astob4lto3drto4hmto4irtol4sto4ol4top_4topt4topu2torn2toupt4reat4reftre4ttrip4t4ritt4rogt3rolt4rou4trunt4rus4trášt3růmt3růvts4kott4chtt4ritu4fftu4lktu4r_tu3rytu4s_tu4ť_tu3ži2t3vit4višt4výcty4gřty2laty4řety4řhty4řjty4řoty4řrty4řútá4flté2bl2těnn4tíc_4tícet4řebt2řelt2řict3řiltř4ti3třábtří4stš4tiubs4tu3bí_uc4tíu3druue4fauh3láuh3nou3ka_uk4ajuk4aluk4atuk3lauk3leuk4á_ul4faul4píum4plum4ruun4dlun4žru3pln2u3rou3ry_us3kyus3káus3kéus3kýus2lou4steu4styu4stéu4stěu3střu4stšu4stýu3su_u4trou4tráuš4kluš3tíva3dlva4jťva4klv4dalv4děkv4děčve3jdve3psvep3řves3lve4smves4pvi4chvide2vi4drvi4etvi4krvi2tr4vle_4vlemv4nadvo4icvo4javo4jbvo4jdvo4jjvo4jmvo4jřvo4třvous2vr2dl4vrnyvr4stv3stvvy3d2vy3s2vy4snvys4tvyč4kvy4š_vy4šmvy4ššvy4žlvz4novz4névz4něvz4nívá3riv4čírvě4cmvíce3v3řínvše3s3vý3zwa4fdwa4rexand4xisk4xt4raxy4smyb3riy4chry2d1lyd4láyd4y_yh4neyj4mayj4meyk3layk4lyym4klyna4sype4ryp4siyp4táys3luys3teyst4ryt4meyvě4tyz4něyz4níyz4poyřk4nyř4čezab2lza4bsza4dkza3dlza4dnza4jkza4ktzal4kzam4nza3p2za3s2za3tlzat4rza4utzaz4nza4zšza4č_zaš4kza4šszban4zbys4zd4rezd4víze3p2ze3s2zes4pze3vnze4z_z4inez3ka_zlik3z3ly_z4měn3znakz4nalz3ne_z3nicz4nělz4nítz4nívzo4trzo4škz4pát3zrak2z1s2z4trázu3mozu3mězu3mízva4dz3vařzvik4zv4něz3vodz3vojz4vonzv4roz4vánz4věsz3víjzá3s2zřej3z3řezz3řešzš4ka2z2ú1áb4ryá4bř_á3choádo4sá3hl_á4jmuáj4můá4kliák4niáne4vá2s3kás4k_ás4klás4kná2slaás4lyás4poáv4siáv4síáz3niáz4viář4keář4kůča4brčes3kč3ka_čs4lačs4srčt4la4čtěnčís3lďs4te4ére_ě3hl_ěh3loě4kléě3k2těra3děrs4tět1a3ět4acět3raět3říěš4ťsí3choích4tíjed4íj4můí2s3kís4klís4knís4l_ís3leís4lnísáh2íz3daíz3deí3znařa4plřa4ďmře3chře3jdře3klře3kvřeo4rře3p2ře4p_ře4pkře4pčřer4vře2spře4srře3tlřet4řře3zdře3zk4řezlře3čtři4h_ři4hnři4jďři4l_ři4lbřil2n4řineři4v_ři4vkři4vnřič4tři4š_řk4lařk4liřk4lyřk4nořs4tořá4plřá2slří4křřš4tiša4vlšej4dšep3tši4mr4škovšk4roš3ku_š3livšmi4dš4tipšt4kašt4klš4těkš2těsš4těvš4típťáč4kúj4maút4koúře4zúš4tiůr4vaůr4vyůs3teů3tklý3choýd4laýt4kuýt4kyý4vliý4zvuýč4něža4tvže2b3žeh3nže4mlže4zgži4dlži4jmži2vlžk4niž4lic2ž1s2žá4bržá4nrží4znžš4tižš4tě", 12 | 6: "_ale3x_as3t3_je4dl_kří3d_le4gr_li3kv_moud3_na3č4_nář4k_od3rá_os4to_os4tě_ot3rá_ově4t_oz3do_pa4re_pa3tř_po3č4_roze3_roz3r_ru4dl_se3pn_va4dl_zao3sab3lona3d3ra3a3dvaa4nameane4skao4střas4tatat3ronat3rova4tří_ba4chr4chalgcien4c4dbat_3dch4nde4bredej4mode3strd3lou_4doboj4do4dd4do4djdomoh44do4čn3drobndře4pne3chl_eilus3ej3eleeju3steoch3repoč3te4s4knes3ku_e4s3lies3tižes4toles3táneu4rase4u4t_eu4traevy4čkevě4trezaos3ez3dovez4ed2eč4kateštíh4ha4dlahatos44h3lo_3hodinho3strhos4tě4hovna4hovny4hovná4hovněhy2t3rid4lo_ik3lo_ilič4nis3ko_i3slavis4talis4tatié4re_jbyst3jez3díjit4rojmou3dj1o3z2jpo4zvjpříz4j4s4kůj4s4mej4sou_j4soucj4s4teka2p3lka2p3rkast3r4k3la_4k3li_ko2t3vkous3k4la3silech3t4lejšk4lenchlepa3dlepo4slet4lilo3střma4tramet3remezi3smys3lonam4nene3h4nne4krones4le4nestino4skyno3strnst4rant4lemob3řezodej4modo4tkod4ranofrek4oje4dlo4jmovont4raopoč3topro4sopřej4o4s3keos4toros3trůoze3d2pat4ripes3t3pe4tra4p3la_4p3li_po3drupo3drápost4rpoč3tepra3stpro3t4pře3t4pře3č2rast4rre3kviretis4ric4kurna4všro3d4rromy4sropát4ro4skvro4skyrově4trs3tvěrs3tvý3rvanírys3kyrůs3ta3schopser4vase4střsig4nosi3ste4s3la_s4liči4s3lo_spro4ss4teros4tichs4tink4stit_s4tona4stou_4strams4trik4strács3třejsych3rsy4nesta3str4tenémtes3tatis4tr4t2kant3rant4tric_tro4sk4trouh4troň_4t4ružt3rálnt4vinntě3d4ltřeh3nupe2r3ve3dleve3stave3t4řve2z3m2v3la_vrst3vvy4dravě3t4aví4hatv3ští_y3klopymané4z4doba4zerotzlhos4ztros3zá4kl_ác3ti3ázni4cč4tenýě4trají3t3řeí3z3nií3zněnře4dobře4kříře3skaře3skořes3poře3staře3stuře3stáře3stř3ři4t_š3k3li4š3kouůs3tánýpo3č4", 13 | 7: "_dneš4k_mi3st4_no4s3t_os3t3r_polk4la4stru_b4roditckte4rýdob4ratdos4tivenitos4epro4zře4strouevyjad4evypá4t4kličkamš4ťan_nte4r3aonář4kaopře4jmovi4dlapodbě4hpod4nes4rčitý_se4strase4stru4stupnitac4tvovrs4tvězdně4níz4dobnýádos4tič4tené_č4tový_ů4jmový" 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /src/hypher-patterns/da.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | id: "da", 3 | leftmin: 2, 4 | rightmin: 2, 5 | patterns: { 6 | 3: "a3ca1ea3ha3ja5oa5z1ba4bd1be1bib1j1bo4bsb5t3bub5w1by1ce3chck35cy3dad1b1ded1fd1gd3h1did3jd1kd1ld1m3dod1p1dud1v3dye3ee1he5x1faf1bf1d1fef1ff1gf1h1fif1k3fl1fof1p4ft1fuf1v3fy1gag1bg1d1geg3fg1gg1h1gi5gjg3kg1lg1m3gog3p1grg3v1gyi1ai3bi1ci3hi5ii5ji1uj5kj3rk5bk3hk1kk1tl1bl1fl3hl3jl1ll3r4ls1mam1bm3d1mem3fm1gm3h1mim3km1lm1mm1n3mom1r3my3nan1bn1c4nd1nen1f1nin1mn1n1non5pn3r4ns3nyn3zo3ao1co1eo5ho1jo3t3pap3dp3fp3mp3np1t1pup5vqu4r1br1fr1hr1lr1nr3pr1rs1d1ses1fs1msp44tbt1ht1mt1n4tsu1au1eu3iu5qv5hv5jv5kvl41vov5pv5t3vuy3ay3ey5o5bæ3dæ3døe3æe5å3fæ3fø3gæ3gåi3ø3kø3kå1mæ3mø3må3næ5nøo5åpå31sæ1sø5våæ3cæ3eæ5iæ5oø3eå1då1eå5hå3lå3t", 7 | 4: "_ae3_om1_po15adg5afgaf3r5afsa4gia4gya5kaa3kea5kraku5a3laa1lea1lial3ka1loa3lua1lya3nu3anva5pea3pia5poa1ra1arba1re5arga1ria3roa3saa3sca1sia3ska3soa1tea1tia1toa5tra1tua5vaa1vebe1k4b1n1br4bs5kb3sob1stby5s4c1c4ch_ci4oda4sd1d4de5ddi1edi5l4d1n4dopd5ovd5rud4smd4sud3tad1tedt5od5trdt5udub5e5ade3afe5age3ake1ale3ane5ape3ate3blebs3e1cie4do3effe3fr3efte3gue3inei5se3jee1kae3kee3kle5kre3kue1kve5kye3lee1lie3loe5lue3lyem1s4enne4noe5nue5ole3ope1ore3ovepi3e1pre3rae1ree1rier1ker3se5rye1tae1tee1tie3tje1toe3tre3tue1tye3ume3un3eure1vae3vee1vifej4f1s4f3taf1tef1tif5toge3sgi4bg5ovgs1ag4segs1pgs1vg3tag1teg1tig5tog3trgt4sg3udgun5g5yd4ha_he5s4hethi4ehi3s4h3thun4hvo4i3dri1eli1eni3erif3ri3gui1kai1keik1li5koi3kuik3vi3liil3ki1loil5ui3mu5infin3si3nui3odi3ogi5oki3olion4i3oti5pii5pri3rei3riir5ti3sci3sii4smis3pi1tai1tei1tii3toi3tri1tui3tyi1vai1vei1vij3agjds1j3lej3lijre5ju3s5kapk5au5kavki3ek1le3kluk4ny5kod1konko3v1kra5kryk1siks3kks1pks5vkt5s3kur1kus3kutk4vok4vu5lab5lam1latl3dr1le_5led3len1ler1les4leuli5ol1kel1kol3kyl5mul3op3lov4l3pl4psl5sjl1tal1tel3tilt3ol3trl3tulu5ll3vel3vimi3kmi4o4mopm1pem3pim3plm1pom3prm5skms3pms5vm3tam3tem3tim3trm1ud1mul4nak1naln3drne5aneo4n4go4n1h4nimni5on1ken1kon3krn3kun5kv4n1ln3sin1tan1ten1tin3ton1trn3tun3ty4n1vo4asod5sof5ro5ino3kao1keo3kuo3lao3leo1lio1loo3luo5ly1omron3kook5o3oro5ovo3piop3lop3rop3s4or_o3rior3kor5oo3sio3soo1teo5unov4s4pec3pen1perpe5spe3u4p5h1pla5pok3potp4rop3skp5sops4pp3stpu5b5py34rafr3dr1relr1guri1er3kar1ker1kir3kurmo4r5muro1bro3pr3orr1sar1sirs4nr3spr5sur3svr1ter1tir3tort3sr5tyr3ud5rutr3var1ver3viry4ss3af1sams3aps1ar1sat4s1bsdy4s4ed4s3h1sig5sis5sit5sius5ju4sk_1skes3kl5skys1les1lislo35slus5lys4myso5k5sol3sons1pls5r4s1s44st_5stj3sto1strs1ud3suls3un3surs3ve3s4y5ta_1tag3tegteo14t1f6t3g3tid4t3k4t1l4t3pt4ra1tryt3sit3st4t1t5turt5ve1typ5udlud5rud3s3udvugs3u5guu5klu1lau1leu5lyu5peup5lu3rau3reu3rous5au3siu5sous5vu1teu1tiu1tout5r5u5vva5d1vedve3s5vet1visv3lev5livls1v5rev3stv5suy5dry3key5kiy3koy3kvy5liy5loy5muyns5y1pey3piy3rey3riy3siy3tiy5vezi5o_så3a3tøa5væe3læe3løe3røe5tæe5tøe1vægiø4g4søg5så3gø1i5tæl3væ5løsm5tån3kæn5tæo5læor3ø5præ5pædr5kær5tær5tør3vær5æl4røn5rør3rådr5års4kå3slås4næ5stø1stås5økti4øt4søt5såt3væu3læy5vææb3læg5aægs5æ5kvæ1reæ3riær5sæ5siæ3soæ3veøde5ø1jeø3keø3leøms5ø1reø3riør5oø1veå3reå5sk", 8 | 5: "_an3k_an1s_be1t_her3_ove4_til3_yd5rab5le3abstaf4ria4gefag5inag5si3agtiais5t4alkval5siam4paar5af3a3spa3stea3stia1ta1ato5vba4tibe3robe5rube1s4be1trbi5skbo4grbo3rabo5rece5ro4d3afde5sk3drif3drivd5rosds5ands5ind1skidsu5lds5viea4laed5aredde4ed5raed3re4e1koek5sa3ekspe3ladel3akel3are1lase4lek3elem5elimel5sae4maden5ake4nanen3soer3afe4rage4rake4ref5erhve4ribero5der5over5tre3rumer5unfa4cefags3fejl1fo4rif5tvig3artgi3st4g5omgsha4g5slags3org4strheds3hi4n5ho5koho5vehund3i4bleids5ki3et_ik3reik5riiks5tik4tui3lagil3egil5ejil5elind3tings1in4svions1i5o5ri3plii3stii5suakel5ske3skke5stki3stk5lakko3ra3kortks3ank3stek5stuk4tarkti4ekt5relad3r5lagdld3st4lelele4molfin4l1go1li4galo4du4l5orlses1ls5inl4taf4m5ejm5ingmmen5mo4da4m5ovmse5sms5inm3stemu1lind5sind5sknd5spne4dan3erkn5erlne5slne5stni3stn3ordn1skuns3pon1stan5stint4suob3lio4dinod5riod5uno4geko4gelo4g5oog5reog5sk3optaor1an3ordnord5so3re_o3rego3reko3rero3retor5imor3slor3stpa5ghp5anlpe1rap4lan4ple_4pler4ples4p5p41procp5ulera5is4rarbrd4s34reksre5la5rese4ressre3st5rettri5la4rimor4ing4rinp4rintrk3sorre5sr5skrr5stur5talrt3rer5trir5trosa4ma5s4erse4se4s1g4si4bls5int1skabsk5s44snins4nit5som_3somms5oms5somt4s1op3spec4sper3s4pi1stanst5as3stat1stav1ste_1sted3stel1sten5step3stes5stetst5om1sy1s4tanvteds55tekn5termte5roti4enti3stto5rato1reto1ritor4m4trestro5vts4pats5prts5ult5udsue4t5uk4tauk4tru1reru5skaut5s43varm4v5omyk3liyk4s5yr3eky5t3r_ær5i_øv3rbrød35drøvdstå4er5øn4n5æb4s5ænså4r53værd1værkæ4gekæ4g5rælle4æn1drær4maær4moæ3steøn3støn4t3ørne3års5t", 9 | 6: "_be5la_bi4tr_der3i_ne4t5ade5la5a4f1l3analyan4k5ra4t5ind5antade4rig4dretteddel5ed3rined4stre4j5el3eksemer5egeetek4sfor1enger3ini4l5idinter1i1sterit5re_jek4to4j5en_ke4t5ak4terhla4g3rlfind54l5ins4l3intmi5stynemen4nta4lent4s5toi6s5eo3re3so4r5in4po3rer4d5arr5enssre5spore5s4urro4n5r4sk5vr4telir4t5orrt5ratrun4da5s4tam5stemo3ster_tands3tede4ltli4s5uge4riu4r3egve4l5eve4reg3træk_ær4g5r", 10 | 7: "_hoved3bu4s5tr4de4lemder5eri5d4reveem4p5lee4v3erfjde4rerjlmeld5l4t5erfntiali43orientringse43sprog_vi4l3infø4r5en", 11 | 8: "_diagno54g5endengsde4leng5s4tidejlmel4dinement5eringso4rtialis5t", 12 | 9: "ldiagnos5lingeniø4" 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /src/hypher-patterns/el-monoton.js: -------------------------------------------------------------------------------- 1 | // Hyphenation patterns for Modern Monotonic Greek. 2 | // Created by Dimitrios Filippou with some ideas borrowed from 3 | // Yannis Haralambous, Kostis Dryllerakis and Claudio Beccari. 4 | // From http://tug.org/svn/texhyphen/branches/ptex/hyph-utf8/tex/generic/hyph-utf8/patterns/tex/hyph-el-monoton.tex 5 | // Converted by Pablo Rodríguez (hyphenator at pragmata dot tk) 6 | module.exports = { 7 | id: ["el-monoton", "el"], 8 | leftmin: 2, 9 | rightmin: 2, 10 | patterns: { 11 | 2: "α1ε1η1ι1ο1υ1ω1ϊ1ϋ1ά1έ1ή1ί1ό1ύ1ώ1ΐ1ΰ14'4ʼ4᾿", 12 | 3: "α2ια2ία2ίά2ιά2ιά2ϊά2ϊα2υα2ύα2ύά3υά3υε2ιε2ίε2ίέ2ιέ2ιέ2ϊέ2ϊε2υε2ύε2ύέ3υέ3υη2υη2ύη2ύή3υή3υο2ιο2ίο2ίό2ιό2ιό2ϊό2ϊο2υο2ύο2ύό3υό3υυ2ιυ2ίυ2ίύ3ιύ3ια2ηα2ϊα2ϋε2ϊε2ϋο2ηο2ϊι2αι2άι2άι2ει2έι2έι2οι2όι2όι2ωι2ώι2ώ_ι3_ί3_ί3η2αη2άη2άη2εη2έη2έη2οη2όη2όη2ωη2ώη2ώ_η3_ή3_ή3υ2αυ2άυ2άυ2ου2όυ2όυ2ωυ2ώυ2ώ_υ3_ύ3_ύ34β_4γ_4δ_4ζ_4θ_4κ_4λ_4μ_4ν_4ξ_4π_4ρ_4σ_4ϲ_4ς_4τ_4φ_4χ_4ψ_4β'4βʼ4β᾿4γ'4γʼ4γ᾿4δ'4δʼ4δ᾿4ζ'4ζʼ4ζ᾿4θ'4θʼ4θ᾿4κ'4κʼ4κ᾿4λ'4λʼ4λ᾿4μ'4μʼ4μ᾿4ν'4νʼ4ν᾿4ξ'4ξʼ4ξ᾿4π'4πʼ4π᾿4ρ'4ρʼ4ρ᾿4σ'4σʼ4σ᾿4ϲ'4ϲʼ4ϲ᾿4τ'4τʼ4τ᾿4φ'4φʼ4φ᾿4χ'4χʼ4χ᾿4ψ'4ψʼ4ψ᾿_β4_γ4_δ4_ζ4_θ4_κ4_λ4_μ4_ν4_ξ4_π4_ρ4_σ4_ϲ4_τ4_φ4_χ4_ψ4", 13 | 4: "ά3η_ά3η_ά3ι_ά3ι_ο2ειό3η_ό3η_ό3ι_ό3ι_4γκ_4μπ_4ντ_4τζ_4τσ_4τϲ_4τς_4μπ'4μπʼ4μπ᾿4ντ'4ντ’4ντ᾿4τζ'4τζʼ4τζ᾿4τσ'4τσʼ4τσ᾽4τϲ'4τϲʼ4τϲ᾿4β1β4γ1γ4δ1δ4ζ1ζ4θ1θ4κ1κ4λ1λ4μ1μ4ν1ν4π1π4ρ1ρ4σ1σ4ϲ1ϲ4τ1τ4φ1φ4χ1χ4ψ1ψ4β1ζ4β1θ4β1κ4β1μ4β1ν4β1ξ4β1π4β1σ4β1ϲ4β1τ4β1φ4β1χ4β1ψ4γ1β4γ1ζ4γ1θ4γ1μ4γ1ξ4γ1π4γ1σ4γ1ϲ4γ1τ4γ1φ4γ1χ4γ1ψ4δ1β4δ1γ4δ1ζ4δ1θ4δ1κ4δ1λ4δ1ξ4δ1π4δ1σ4δ1ϲ4δ1τ4δ1φ4δ1χ4δ1ψ4ζ1β4ζ1γ4ζ1δ4ζ1θ4ζ1κ4ζ1λ4ζ1μτζ2μ4ζ1ν4ζ1ξ4ζ1π4ζ1ρ4ζ1σ4ζ1ϲ4ζ1τ4ζ1φ4ζ1χ4ζ1ψ4θ1β4θ1γ4θ1δ4θ1ζ4θ1κ4θ1μσθ2μϲθ2μ4θ1ξ4θ1π4θ1σ4θ1ϲ4θ1τ4θ1φ4θ1χ4θ1ψ4κ1β4κ1γ4κ1δ4κ1ζ4κ1θ4κ1μ4κ1ξ4κ1π4κ1σ4κ1ϲ4κ1φ4κ1χ4κ1ψ4λ1β4λ1γ4λ1δ4λ1ζ4λ1θ4λ1κ4λ1μ4λ1ν4λ1ξ4λ1π4λ1ρ4λ1σ4λ1ϲ4λ1τ4λ1φ4λ1χ4λ1ψ4μ1β4μ1γ4μ1δ4μ1ζ4μ1θ4μ1κ4μ1λ4μ1ξ4μ1ρ4μ1σ4μ1ϲ4μ1τ4μ1φ4μ1χ4μ1ψ4ν1β4ν1γ4ν1δ4ν1ζ4ν1θ4ν1κ4ν1λ4ν1μ4ν1ξ4ν1π4ν1ρ4ν1σ4ν1ϲ4ν1φ4ν1χ4ν1ψ4ξ1β4ξ1γ4ξ1δ4ξ1ζ4ξ1θ4ξ1κ4ξ1λ4ξ1μ4ξ1ν4ξ1π4ξ1ρ4ξ1σ4ξ1ϲ4ξ1τ4ξ1φ4ξ1χ4ξ1ψ4π1β4π1γ4π1δ4π1ζ4π1θ4π1κ4π1μ4π1ξ4π1σ4π1ϲ4π1φ4π1χ4π1ψ4ρ1β4ρ1γ4ρ1δ4ρ1ζ4ρ1θ4ρ1κ4ρ1λ4ρ1μ4ρ1ν4ρ1ξ4ρ1π4ρ1σ4ρ1ϲ4ρ1τ4ρ1φ4ρ1χ4ρ1ψ4σ1δ4ϲ1δ4σ1ζ4ϲ1ζ4σ1ν4ϲ1ν4σ1ξ4ϲ1ξ4σ1ρ4ϲ1ρ4σ1ψ4ϲ1ψ4τ1β4τ1γ4τ1δ4τ1θ4τ1κ4τ1ν4τ1ξ4τ1π4τ1φστ2φϲτ2φ4τ1χ4τ1ψ4φ1β4φ1γ4φ1δ4φ1ζ4φ1κ4φ1μ4φ1ν4φ1ξ4φ1π4φ1σ4φ1ϲ4φ1χ4φ1ψ4χ1β4χ1γ4χ1δ4χ1ζ4χ1κ4χ1μ4χ1ξ4χ1π4χ1σ4χ1ϲ4χ1φ4χ1ψ4ψ1β4ψ1γ4ψ1δ4ψ1ζ4ψ1θ4ψ1κ4ψ1λ4ψ1μ4ψ1ν4ψ1ξ4ψ1π4ψ1ρ4ψ1σ4ψ1ϲ4ψ1τ4ψ1φ4ψ1χ4βρ_4γλ_4κλ_4κτ_6κς_6κϲ_4κσ_4λς_4λϲ_4λσ_4μς_4μϲ_4μσ_4νς_4νϲ_4νσ_4ρς_4ρϲ_4ρσ_4σκ_4ϲκ_4στ_4ϲτ_4τλ_4τρ_4φτ_", 14 | 5: "ο3ϊ3όο3ϊ3ό4γ1κτ4μ1πτ4ν1τζ4ν1τσ4ν1τϲ4γκς_4γκϲ_4γκσ_4μπλ_4μπν_4μπρ_4ντς_4ντϲ_4ντσ_", 15 | 6: "4ρ5γ2μ4ρ5θ2μ4λ5κ2μ4ρ5κ2μ4ν5κ2φ4γ5ξ2τ4ρ5ξ2τ4ρ5φ2ν4ρ5χ2μ4μ5ψ2τ4γ5κ2φ4γκ1ντ4γκ1τζ4γκ1τσ4γκ1τϲ4μπ1ντ4μπ1τζ4μπ1τσ4μπ1τϲ4ντ1μπ4τσ1γκ4τϲ1γκ4τσ1μπ4τϲ1μπ4τσ1ντ4τϲ1ντ", 16 | 10: "4χτ_4γκ1μπ" 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /src/hypher-patterns/el-polyton.js: -------------------------------------------------------------------------------- 1 | // Hyphenation patterns for Modern Polytonic Greek. 2 | // Created by Dimitrios Filippou with some ideas borrowed from 3 | // Yannis Haralambous, Kostis Dryllerakis and Claudio Beccari. 4 | // From http://tug.org/svn/texhyphen/branches/ptex/hyph-utf8/tex/generic/hyph-utf8/patterns/tex/hyph-el-polyton.tex 5 | // Converted by Pablo Rodríguez (hyphenator at pragmata dot tk) 6 | module.exports = { 7 | id: "el-polyton", 8 | leftmin: 2, 9 | rightmin: 2, 10 | specialChars: 11 | "αεηιουωϊϋἀἁἂἃἄἅἆἇἐἑἒἓἔἕἠἡἢἣἤἥἦἧἰἱἲἳἴἵἶἷὀὁὂὃὄὅὐὑὒὓὔὕὖὗὠὡὢὣὤὥὦὧὰὲὴὶὸὺὼᾀᾁᾂᾃᾄᾅᾆᾇᾐᾑᾒᾓᾔᾕᾖᾗᾠᾡᾢᾣᾤᾥᾦᾧᾲᾳᾴᾶᾷῂῃῄῆῇῒῖῗῢῦῧῲῳῴῶῷάέήίόύώΐΰάέήίόύώΐΰβγκδζθλμπντξρσϲςφχψ'ʼ᾿’᾽ῤῥ", 12 | patterns: { 13 | 2: "α1ε1η1ι1ο1υ1ω1ϊ1ϋ1ἀ1ἁ1ἂ1ἃ1ἄ1ἅ1ἆ1ἇ1ἐ1ἑ1ἒ1ἓ1ἔ1ἕ1ἠ1ἡ1ἢ1ἣ1ἤ1ἥ1ἦ1ἧ1ἰ1ἱ1ἲ1ἳ1ἴ1ἵ1ἶ1ἷ1ὀ1ὁ1ὂ1ὃ1ὄ1ὅ1ὐ1ὑ1ὒ1ὓ1ὔ1ὕ1ὖ1ὗ1ὠ1ὡ1ὢ1ὣ1ὤ1ὥ1ὦ1ὧ1ὰ1ὲ1ὴ1ὶ1ὸ1ὺ1ὼ1ᾀ1ᾁ1ᾂ1ᾃ1ᾄ1ᾅ1ᾆ1ᾇ1ᾐ1ᾑ1ᾒ1ᾓ1ᾔ1ᾕ1ᾖ1ᾗ1ᾠ1ᾡ1ᾢ1ᾣ1ᾤ1ᾥ1ᾦ1ᾧ1ᾲ1ᾳ1ᾴ1ᾶ1ᾷ1ῂ1ῃ1ῄ1ῆ1ῇ1ῒ1ῖ1ῗ1ῢ1ῦ1ῧ1ῲ1ῳ1ῴ1ῶ1ῷ1ά1έ1ή1ί1ό1ύ1ώ1ΐ1ΰ1ά1έ1ή1ί1ό1ύ1ώ1ΐ1ΰ16'6ʼ6᾿", 14 | 3: "α2ια2ία2ία2ὶα2ῖα2ἰα2ἴα2ἲα2ἶα2ἱα2ἵα2ἳα2ἷά2ιά2ιά2ϊά2ϊα2υα2ύα2ύα2ὺα2ῦα2ὐα2ὔα2ὒα2ὖα2ὑα2ὕα2ὓα2ὗά3υά3υε2ιε2ίε2ίε2ὶε2ῖε2ἰε2ἴε2ἲε2ἶε2ἱε2ἵε2ἳε2ἷέ2ιέ2ιέ2ϊέ2ϊε2υε2ύε2ύε2ὺε2ῦε2ὐε2ὔε2ὒε2ὖε2ὑε2ὕε2ὓε2ὗέ3υέ3υη2υη2ύη2ύη2ὺη2ῦη2ὐη2ὔη2ὒη2ὖη2ὑη2ὕη2ὓη2ὗο2ιο2ίο2ίο2ὶο2ῖο2ἰο2ἴο2ἲο2ἶο2ἱο2ἵο2ἳο2ἷό2ιό2ιό2ϊό2ϊο2υο2ύο2ύο2ὺο2ῦο2ὐο2ὔο2ὒο2ὖο2ὑο2ὕο2ὓο2ὗό3υό3υυ2ιυ2ίυ2ίυ2ὶυ2ῖυ2ἰυ2ἴυ2ἲυ2ἶυ2ἱυ2ἵυ2ἳυ2ἷα2ηα2ϊα2ϋά3ϋά3ϋε2ηέ2ηέ2ηε2ϊε2ϋό2ηό2ηο2ϊω2ιὠ2ιι2αι2άι2άι2ὰι2ᾶι2ει2έι2έι2ὲι2οι2όι2όι2ὸι2ωι2ώι2ώι2ὼι2ῶ_ί3_ί3_ῖ3_ἰ3_ἱ3η2αῃ2αη2άη2άη2ὰη2ᾶῃ2άῃ2άῃ2ὰῃ2ᾶη2εῃ2εη2έη2έη2ὲῃ2έῃ2έῃ2ὲη2οῃ2οη2όη2όη2ὸῃ2όῃ2όῃ2ὸη2ωῃ2ωη2ώη2ώη2ὼη2ῶῃ2ώῃ2ώῃ2ὼῃ2ῶ_ή3_ή3_ῆ3_ἠ3_ἡ3υ2αυ2άυ2άυ2ὰυ2ᾶυ2ευ2έυ2έυ2ὲυ2ου2όυ2όυ2ὸυ2ωυ2ώυ2ώυ2ὼυ2ῶ_ύ3_ύ3_ῦ3_ὑ36β_6γ_6δ_6ζ_6θ_6κ_6λ_6μ_6ν_6ξ_6π_6ρ_6σ_6ϲ_6ς_6τ_6φ_6χ_6ψ_6β'6βʼ6β᾿6γ'6γʼ6γ᾿6δ'6δʼ6δ᾿6ζ'6ζʼ6ζ᾿6θ'6θʼ6θ᾿6κ'6κʼ6κ᾿6λ'6λʼ6λ᾿6μ'6μʼ6μ᾿6ν'6νʼ6ν᾿6ξ'6ξʼ6ξ᾿6π'6πʼ6π᾿6ρ'6ρʼ6ρ᾿6σ'6σʼ6σ᾿6ϲ'6ϲʼ6ϲ᾿6τ'6τʼ6τ᾿6φ'6φʼ6φ᾿6χ'6χʼ6χ᾿6ψ'6ψʼ6ψ᾿_β6_γ6_δ6_ζ6_θ6_κ6_λ6_μ6_ν6_ξ6_π6_ρ6_σ6_ϲ6_τ6_φ6_χ6_ψ6", 15 | 4: "ά3η_ά3η_ά3ι_ά3ι_ά3ϊ_ά3ϊ_ό2ειό2ειό3η_ό3η_ό3ι_ό3ι_ό3ϊ_ό3ϊ_6γκ_6μπ_6ντ_6τζ_6τσ_6τϲ_6τς_6μπ'6μπʼ6μπ᾿6ντ'6ντ’6ντ᾿6τζ'6τζʼ6τζ᾿6τσ'6τσʼ6τσ᾽6τϲ'6τϲʼ6τϲ᾿4β1β4γ1γ4δ1δ4ζ1ζ4θ1θ4κ1κ4λ1λ4μ1μ4ν1ν4π1π4ρ1ρ4ῤ1ῥ4σ1σ4ϲ1ϲ4τ1τ4φ1φ4χ1χ4ψ1ψ4β1ζ4β1θ4β1κ4β1μ4β1ν4β1ξ4β1π4β1σ4β1ϲ4β1τ4β1φ4β1χ4β1ψ4γ1β4γ1ζ4γ1θ4γ1κ4γ1μ4γ1ξ4γ1π4γ1σ4γ1ϲ4γ1τ4γ1φ4γ1χ4γ1ψ4δ1β4δ1γ4δ1ζ4δ1θ4δ1κ4δ1λ4δ1ξ4δ1π4δ1σ4δ1ϲ4δ1τ4δ1φ4δ1χ4δ1ψ4ζ1β4ζ1γ4ζ1δ4ζ1θ4ζ1κ4ζ1λ4ζ1μτζ2μ4ζ1ν4ζ1ξ4ζ1π4ζ1ρ4ζ1σ4ζ1ϲ4ζ1τ4ζ1φ4ζ1χ4ζ1ψ4θ1β4θ1γ4θ1δ4θ1ζ4θ1κ4θ1μσθ2μϲθ2μ4θ1ξ4θ1π4θ1σ4θ1ϲ4θ1τ4θ1φ4θ1χ4θ1ψ4κ1β4κ1γ4κ1δ4κ1ζ4κ1θ4κ1ξ4κ1π4κ1σ4κ1ϲ4κ1φ4κ1χ4κ1ψ4λ1β4λ1γ4λ1δ4λ1ζ4λ1θ4λ1κ4λ1μ4λ1ν4λ1ξ4λ1π4λ1ρ4λ1σ4λ1ϲ4λ1τ4λ1φ4λ1χ4λ1ψ4μ1β4μ1γ4μ1δ4μ1ζ4μ1θ4μ1κ4μ1λ4μ1ξ4μ1π4μ1ρ4μ1σ4μ1ϲ4μ1τ4μ1φ4μ1χ4μ1ψ4ν1β4ν1γ4ν1δ4ν1ζ4ν1θ4ν1κ4ν1λ4ν1μ4ν1ξ4ν1π4ν1ρ4ν1σ4ν1ϲ4ν1τ4ν1φ4ν1χ4ν1ψ4ξ1β4ξ1γ4ξ1δ4ξ1ζ4ξ1θ4ξ1κ4ξ1λ4ξ1μ4ξ1ν4ξ1π4ξ1ρ4ξ1σ4ξ1ϲ4ξ1τ4ξ1φ4ξ1χ4ξ1ψ4π1β4π1γ4π1δ4π1ζ4π1θ4π1κ4π1μ4π1ξ4π1σ4π1ϲ4π1φ4π1χ4π1ψ4ρ1β4ρ1γ4ρ1δ4ρ1ζ4ρ1θ4ρ1κ4ρ1λ4ρ1μ4ρ1ν4ρ1ξ4ρ1π4ρ1σ4ρ1ϲ4ρ1τ4ρ1φ4ρ1χ4ρ1ψ4σ1δ4ϲ1δ4σ1ζ4ϲ1ζ4σ1ν4ϲ1ν4σ1ξ4ϲ1ξ4σ1ρ4ϲ1ρ4σ1ψ4ϲ1ψ4τ1β4τ1γ4τ1δ4τ1θ4τ1ν4τ1ξ4τ1π4τ1φστ2φϲτ2φ4τ1χ4τ1ψ4φ1β4φ1γ4φ1δ4φ1ζ4φ1κ4φ1ν4φ1ξ4φ1π4φ1σ4φ1ϲ4φ1χ4φ1ψ4χ1β4χ1γ4χ1δ4χ1ζ4χ1κ4χ1μ4χ1ξ4χ1π4χ1σ4χ1ϲ4χ1φ4χ1ψ4ψ1β4ψ1γ4ψ1δ4ψ1ζ4ψ1θ4ψ1κ4ψ1λ4ψ1μ4ψ1ν4ψ1ξ4ψ1π4ψ1ρ4ψ1σ4ψ1ϲ4ψ1τ4ψ1φ4ψ1χβγ2κσγ2κϲγ2κσμ2πϲμ2πμν2τσν2τϲν2τ6βρ_6γλ_6κλ_6κτ_6κς_6κϲ_6κσ_6λς_6λϲ_6λσ_6μς_6μϲ_6μσ_6νς_6νϲ_6νσ_6ρς_6ρϲ_6ρσ_6σκ_6ϲκ_6στ_6ϲτ_6τλ_6τρ_6φτ_6χτ_", 16 | 5: "ο3ϊ3όο3ϊ3όο3ϊ3ὸβ5ν2τζ5ν2τλ5ν2τρ5ν2τ", 17 | 6: "4ρ5γ2μ4ρ5θ2μ4λ5κ2μ4ρ5κ2μ4γ5κ2φ4ν5κ2φ4γ5ξ2τ4ρ5ξ2τ4ρ5φ2ν4ρ5χ2μ4μ5ψ2τ4λ5γ2κ4ν5γ2κ4ρ5γ2κ4τ5γ2κ4ζ5μ2π4λ5μ2π4ν5μ2π4ρ5μ2πἄ5μ2ακἀ5μ2πρὄ5μ2ποὀ5μ2ποὀ5ν2τάὀ5ν2τάὀ5ν2τὰὀ5ν2τᾶ6μ2πλ_6μ2πν_6μ2πρ_", 18 | 7: "ἰ5γ2κου_ξε5γ2κ_ξέ5γ2κ_ξέ5γ2κ_σι5γ2κ_ϲι5γ2κἀ5μ2πάκἀ5μ2πάκἀ5μ2πανἀ5μ2πάρἀ5μ2πάρἀ5μ2πᾶρἀ5μ2παρἀρα5μ2πἰ5μ2πρα_κε5μ2π_λό5μ2π_λό5μ2π5μ2πέη_5μ2πέη_5μ2πεη_5μ2πογι_ξε5μ2π_ξέ5μ2π_ξέ5μ2π_ρε5μ2π_ρέ5μ2π_ρέ5μ2π_ρο5μ2πρό5μ2παρό5μ2παρό5μ2περό5μ2περό5μ2πωρό5μ2πωρο5μ2πῶρο5μ2παρο5μ2περο5μ2πωσό5μ2πασό5μ2παϲό5μ2παϲό5μ2πασό5μ2πεσό5μ2πεϲό5μ2πεϲό5μ2πεσο5μ2πῶϲο5μ2πῶσό5μ2πωσό5μ2πωϲό5μ2πωϲό5μ2πωσο5μ2παϲο5μ2πασο5μ2πεϲο5μ2πεσο5μ2πωϲο5μ2πω_τα5μ2π_χα5μ2π_χό5μ2π_χό5μ2π_ξε5ν2τ_ξέ5ν2τ_ξέ5ν2τ6γ2κ1τζ6γ2κ1τσ6γ2κ1τϲ6μ2π1τζ6μ2π1τσ6μ2π1τϲ6τσ5γ2κ6τϲ5γ2κ6τσ5μ2π6τϲ5μ2π6τσ5ν2τ6τϲ5ν2τ", 19 | 8: "ἐμι5γ2κρ_μπα5γ2κ_μπι5γ2κ_σπά5γ2κ_σπά5γ2κ_ϲπά5γ2κ_ϲπά5γ2κ_σπα5γ2κ_ϲπα5γ2κ_φιό5γ2κ_φιό5γ2κ_φιο5γ2κἀ6μ3πάριἀ6μ3πάριἀ6μ3παρι_γά5μ2πι_γά5μ2πι_γα5μ2πι_ζεϊ5μ2π_κό5μ2πρ_κό5μ2πρ_κο5μ2πρ_λι5μ2πρ5μ2πέης_5μ2πέης_5μ2πέηϲ_5μ2πέηϲ_5μ2πεης_5μ2πεηϲ_5μ2πέησ_5μ2πέησ_5μ2πεησ__μπι5μ2π_τρο6μ3π_τρό6μ3π_τρό6μ3π_ρου5μ2π_σέ5μ2πρ_σέ5μ2πρ_ϲέ5μ2πρ_ϲέ5μ2πρ_σνο5μ2π_ϲνο5μ2π_σού5μ2π_σού5μ2π_ϲού5μ2π_ϲού5μ2π_σου5μ2π_ϲου5μ2π_τζά5μ2π_τζά5μ2π_τζα5μ2π_τζι5μ2π_τό5μ2πρ_τό5μ2πρ_το5μ2πρ_φρα5μ2πἀ5ν2τάτζἀ5ν2τάτζ_βί5ν2τε_βί5ν2τε_βι5ν2τε_κα5ν2τρ_μαϊ5ν2τ_μπε5ν2τ_μπι5ν2τ_ντα5ν2τ5ν2τίβαν5ν2τίβαν_ρε5ν2τί_ρε5ν2τί_ρε5ν2τι_ροῦ5ν2τ_ρού5ν2τ_ρού5ν2τ_χα5ν2το_χα5ν2τρ_χά5ν2τρ_χά5ν2τρ6γ2κ5μ2π6γ2κ5ν2τ6μ2π5ν2τ6ν2τ5μ2π", 20 | 9: "5γ2κραντ_ἴντρι5γ2κἰντρι5γ2κ_μα5γ2κιό_μα5γ2κιό_ντά5γ2κλ_ντά5γ2κλ_ντα5γ2κλἀλα5μ2πουἀρλού5μ2πἀρλού5μ2πἀρλοῦ5μ2πἀρλου5μ2π_βό5μ2πιρ_βό5μ2πιρ_βο5μ2πιρ_κα5μ2πάδ_κα5μ2πάδ_κα5μ2πίν_κα5μ2πίν_κα5μ2πῖν_κα5μ2πιν_κά5μ2ποτ_κά5μ2ποτ_κα5μ2πότ_κα5μ2πότ_κα5μ2ποτ_καου5μ2π_καρα5μ2π5μ2πα5μ2π5μ2πά5μ2π5μ2πά5μ2π5μ2πέ5μ2π5μ2πέ5μ2π5μ2πε5μ2π_νό5μ2πελ_νό5μ2πελ_νο5μ2πελ_ντό5μ2πρ_ντό5μ2πρ_ντο5μ2πρ_σα2μ5ποτ_ϲα2μ5ποτ_τε5μ2πεσ_τε5μ2πεϲ_τζου5μ2π_τσά5μ2πα_τσά5μ2πα_τϲά5μ2πα_τϲά5μ2πα_τσα5μ2πα_τϲα5μ2παἀτρα5ν2τέἀτρα5ν2τέἀτρα5ν2τὲ_γιβε5ν2τ_γκάι5ν2τ_γκάι5ν2τ_γκάϊ5ν2τ_γκάϊ5ν2τ_γκαϊ5ν2τ_κα5ν2ταΐ_κα5ν2ταΐ_κα5ν2ταϊ_μα5ν2τάμ_μα5ν2τάμ_μα5ν2τὰμ_μα5ν2ταμ_μα5ν2τέμ_μα5ν2τέμ_μα5ν2τεμ_μεϊ5ν2τά_μεϊ5ν2τά_μεϊ5ν2τα_μο5ν2τέλ_μο5ν2τέλ_μο5ν2τελμο5ν2τέρνμο5ν2τέρνμο5ν2τερν_νισα5ν2τ_νιϲα5ν2τ_ρεζε5ν2τ_σε5ν2τέφ_σε5ν2τέφ_ϲε5ν2τέφ_ϲε5ν2τέφ_σε5ν2τεφ_ϲε5ν2τεφ_σε5ν2τοῦ_ϲε5ν2τοῦ_σε5ν2τού_σε5ν2τού_ϲε5ν2τού_ϲε5ν2τού_σε5ν2του_ϲε5ν2του_τσα5ν2τί_τσα5ν2τί_τϲα5ν2τί_τϲα5ν2τί_τσα5ν2τι_τϲα5ν2τι", 21 | 10: "_γιου5γ2κο_καρα5γ2κι_χούλι5γ2κ_χούλι5γ2κ_χουλι5γ2κ_γιαρα5μ2π_καλα5μ2πα_καλί5μ2πρ_καλί5μ2πρ_καλι5μ2πρ_κα5μ2παρέ_κα5μ2παρέ_κα5μ2παρὲ_κα5μ2παρε_καρνα5μ2π_κολι5μ2πρ_κου5μ2πού_κου5μ2πού_κου5μ2ποῦ_κου5μ2που5μ2πέηδες_5μ2πέηδες_5μ2πέηδεϲ_5μ2πέηδεϲ_5μ2πέηδεσ_5μ2πέηδεσ_5μ2πέηδων_5μ2πέηδων__μπό5μ2πιρ_μπό5μ2πιρ_μπο5μ2πιρ_μπο5μ2πότ_μπο5μ2πότ_μπο5μ2ποτ_σκα5μ2παβ_ϲκα5μ2παβ_ταβλα5μ2π_τζανα5μ2π_τρα5μ2πάλ_τρα5μ2πάλ_τρα5μ2παλ_φά5μ2πρικ_φά5μ2πρικ_φα5μ2πρικ_μπαλά5ν2τ_μπαλά5ν2τ_μπαλα5ν2τ_μπα5ν2ταν_μπου5ν2τα_μπου5ν2τρ", 22 | 11: "_καρα6μ3πόλ_καρα6μ3πόλ_καρα6μ3πολ_κολού5μ2πρ_κολού5μ2πρ_κολοῦ5μ2πρ_κολου5μ2πρ_κο6μ3πρέσσ_κο6μ3πρέσσ_κο6μ3πρέϲϲ_κο6μ3πρέϲϲ_κο6μ3πρεσσ_κο6μ3πρεϲϲ_κοντρα5μ2π_κωλού5μ2πρ_κωλού5μ2πρ_κωλοῦ5μ2πρ_κωλου5μ2πρ_μανιτό5μ2π_μανιτό5μ2π_μπα6μ3πάκι_μπα6μ3πάκι_μπα6μ3πακι_ρεπού5μ2πλ_ρεπού5μ2πλ_ρεπου5μ2πλ_τα6μ3περαμ_τα6μ3ποῦρλ_τα6μ3πούρλ_τα6μ3πούρλ_τρα5μ2ποῦκ_τρα5μ2πούκ_τρα5μ2πούκ_τρα5μ2πουκ_τσι5μ2πούκ_τσι5μ2πούκ_τϲι5μ2πούκ_τϲι5μ2πούκ_τσι5μ2πουκ_τϲι5μ2πουκ_τσι5μ2πούσ_τσι5μ2πούσ_τϲι5μ2πούϲ_τϲι5μ2πούϲ_τσι5μ2πουσ_τϲι5μ2πουϲ_γιαχου5ν2τ", 23 | 12: "_σαλτιπά5γ2κ_σαλτιπά5γ2κ_ϲαλτιπά5γ2κ_ϲαλτιπά5γ2κ_κουλού5μ2πρ_κουλού5μ2πρ_κουλοῦ5μ2πρ_κουλου5μ2πρ_μπου5μ2πούν_μπου5μ2πούν_μπου5μ2ποῦν_μπου5μ2πουν_χοντρο5μ2πα_λικβι5ν2ταρ_ντερμπε5ν2τ_ντου5ν2τούκ_ντου5ν2τούκ_ντου5ν2τοῦκ_ντου5ν2τουκ_φαστφου5ν2τ_φαϲτφου5ν2τ", 24 | 13: "_μπασκε2τ5μ2π_μπαϲκε2τ5μ2π_μπασι5μ2πουζ_μπαϲι5μ2πουζ" 25 | } 26 | }; 27 | -------------------------------------------------------------------------------- /src/hypher-patterns/fi.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | id: "fi", 3 | leftmin: 2, 4 | rightmin: 2, 5 | patterns: { 6 | 3: "1ba1be1bi1bo1bu1by1da1de1di1do1du1dy1dä1dö1fa1fe1fi1fo1fu1fy1ga1ge1gi1go1gu1gy1gä1gö1ha1he1hi1ho1hu1hy1hä1hö1ja1je1ji1jo1ju1jy1jä1jö1ka1ke1ki1ko1ku1ky1kä1kö1la1le1li1lo1lu1ly1lä1lö1ma1me1mi1mo1mu1my1mä1mö1na1ne1ni1no1nu1ny1nä1nö1pa1pe1pi1po1pu1py1pä1pö1ra1re1ri1ro1ru1ry1rä1rö1sa1se1si1so1su1sy1sä1sö1ta1te1ti1to1tu1ty1tä1tö1va1ve1vi1vo1vu1vy1vä1vöä2yo1yö2ya1äa1öo1äo1öä2äö2öä2öö2ä_ä2u2sb2lb2rd2rf2lf2rg2lg2rk2lp2lp2rc2lq2v", 7 | 4: "y1a2y1o2u1y2y1u2ö3a2ö3o2ä3a2ä3o2ä1u2ö1u2u1ä2u1ö2e1aai1aao1aau1aau1eea1uui1uue1uuo1uuää1iää1eää3yi1ääe1ääy1ääi1ööa1eia1oie1aii1auy1eiai1aai1eai1oai1uau1aau1eeu1aie1aie1oie1yiu1aiu1eiu1ooi1aoi1eoi1ooi1uo1uiou1eou1oue1aui1euo1auo1ue1ö2ö1e2r2asl2as1k2vsc2hts2h", 8 | 5: "1st2raa1i2aa1e2aa1o2aa1u2ee1a2ee1i2ee1u2ee1y2ii1a2ii1e2ii1o2uu1a2uu1e2uu1o2uu1i2io1a2io1e2keus11b2lo1b2ri1b2ro1b2ru1d2ra1f2la1f2ra1f2re1g2lo1g2ra1k2ra1k2re1k2ri1k2va1p2ro1q2vich2r", 9 | 6: "1sp2lialous1rtaus1perus12s1ase2s1apuulo2s1bib3li", 10 | 7: "yli1o2pali1a2v2s1ohje1a2sian1a2siat1a2sioi2s1o2sa2n1o2sa_ydi2n12n1otto2n1oton2n1anto2n1anno2n1aika2n1a2jo2s1a2jo", 11 | 8: "2s1a2sia2n1o2pet2s1a2loialkei2s12n1e2dus2s1ajatu2s1y2rit2s1y2hti2n1a2jan2n1o2mai2n1y2lit2s1a2len2n1a2len", 12 | 9: "2s1o2pisk2n1o2pist2s1o2pist2s1i2dea_2s1i2dean2s1e2sity_suu2r1a2", 13 | 11: "1a2siaka2s1" 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /src/hypher-patterns/fr.js: -------------------------------------------------------------------------------- 1 | // The french hyphenation patterns are retrieved from 2 | // http://tug_org/svn/texhyphen/trunk/collaboration/repository/hyphenator/ 3 | module.exports = { 4 | id: "fr", 5 | leftmin: 2, 6 | rightmin: 3, 7 | patterns: { 8 | 2: "1ç1j1q", 9 | 3: "1gè’â41zu1zo1zi1zè1zé1ze1za’y4_y41wu1wo1wi1we1wa1vy1vû1vu1vô1vo1vî1vi1vê1vè1vé1ve1vâ1va’û4_û4’u4_u41ba1bâ1ty1be1bé1bè1bê1tû1tu1tô1bi1bî1to1tî1ti1tê1tè1té1te1tà1tâ1ta1bo1bô1sy1sû1su1sœ1bu1bû1by2’21ca1câ1sô1ce1cé1cè1cê1so1sî1si1sê1sè1sé1se1sâ1sa1ry1rû1ru1rô1ro1rî1ri1rê1rè1ré1re1râ1ra’a41py1pû1pu1pô1po1pî1pi1pê1pè1pé1pe1pâ1pa_ô41ci1cî’ô4’o4_o41nyn1x1nû1nu1nœ1nô1no1nî1ni1nê1nè1né1ne1nâ1co1cô1na1my1mû1mu1mœ1mô1mo1mî1mi1cœ1mê1mè1mé1me1mâ1ma1ly1lû1lu1lô1lo1lî1li1lê1lè1cu1cû1cy1lé1d’1da1dâ1le1là1de1dé1dè1dê1lâ1la1ky1kû1ku1kô1ko1kî1ki1kê1kè1ké1ke1kâ1ka2jk_a4’î4_î4’i4_i41hy1hû1hu1hô1ho1hî1hi1hê1hè1hé1he1hâ1ha1gy1gû1gu1gô1go1gî1gi1gê_â41gé1ge1gâ1ga1fy1di1dî1fû1fu1fô1fo’e41fî1fi1fê1fè1do1dô1fé1fe1fâ1fa’è41du1dû1dy_è4’é4_é4’ê4_ê4_e41zy", 10 | 4: "1f2lab2h2ckg2ckp2cksd1s22ckb4ck_1c2k2chw4ze_4ne_2ckt1c2lad2hm1s22cht2chsch2r2chp4pe_1t2r1p2h_ph44ph_ph2l2phnph2r2phs1d2r2pht2chn4fe_2chm1p2l1p2r4me_1w2rch2l2chg1c2r2chb4ch_1f2r4le_4re_4de_f1s21k2r4we_1r2h_kh44kh_1k2h4ke_1c2h_ch44ge_4je_4se_1v2r_sh41s2h4ve_4sh_2shm2shr2shs4ce_il2l1b2r4be_1b2l4he_4te__th41t2h4th_g1s21g2r2thl1g2l2thm2thnth2r1g2n2ths2ckf", 11 | 5: "2ck3h4rhe_4kes_4wes_4res_4cke_éd2hi4vre_4jes_4tre_4zes_4ges_4des_i1oxy4gle_d1d2h_cul44gne_4fre_o1d2l_sch44nes_4les_4gre_1s2ch_réu24sch_4the_1g2hy4gue_2schs4cle_1g2ho1g2hi1g2he4ses_4tes_1g2ha4ves_4she_4che_4cre_4ces_t1t2l4hes_l1s2t4bes_4ble__con4xil3lco1ap4que_vil3l4fle_co1arco1exco1enco1auco1axco1ef4pes_co1é2per3h4mes__pe4r4bre_4pre_4phe_1p2né4ple__dé2smil3llil3lhil3l4dre_cil3lgil3l4fes_", 12 | 6: "’in1o2rcil4l4phre_4dres_l3lioni1algi2fent_émil4l4phle_rmil4l4ples_4phes_1p2neuextra14pres_y1asthpé2nul2xent__mé2sa2pent_y1algi4chre_1m2nès4bres_1p2tèr1p2tér4chle_’en1o24fles_oxy1a2avil4l_en1o24ques_uvil4lco1a2d4bles__in1a2’in1a21s2por_cons4_bi1u2’as2ta_in1e2’in1e2_in1é2’in1é21s2lov1s2lavco1acq2cent__as2ta_co1o24ches_hémi1é_in2er’in2er2s3homo1ioni_in1i2’in1i22went_4shes__ré1a2_ré1é2_ré1e2_ré2el_in1o2ucil4lco1accu2s3tr_ré2er_ré2èr4cles_2vent__ré1i22sent_2tent_2gent__ré1o24gues__re1s24sche_4thes_’en1a2e2s3ch4gres_1s2cop2lent__en1a22nent__in1u2’in1u24gnes_4cres_wa2g3n4fres_4tres_4gles_1octet_dé1o2_dé1io4thre__bi1au2jent__dé1a22zent_4vres_2dent_4ckes_4rhes__dy2s3sub1s22kent_2rent_2bent_3d2hal", 13 | 7: "a2g3nos3d2houdé3rent__dé3s2t_dé3s2pé3dent_2r3heur2r3hydri1s2tat2frent_io1a2ctla2w3re’in2u3l_in2u3l2crent_’in2uit_in2uit1s2caph1s2clér_ré2ussi2s3ché_re2s3t_re2s3s4sches_é3cent__seu2le’in2ond_in2ond’in2i3t_in2i3t’in2i3q_ré2aux_in2i3q2shent__di1alduni1a2x’in2ept2flent__in2eptuni1o2v2brent_co2nurb2chent_2quent_1s2perm1s2phèr_ma2c3kuevil4l1s2phér1s2piel1s2tein1s2tigm4chles_1s2tock1s2tyle1p2sych_pro1é2_ma2r1x_stil3lpusil3libril3lcyril3l_pré1s2thril3l_mé3san_pré1u2_mé2s1i_pré1o2_pré1i2piril3lpupil3lâ2ment__pré1e2_pré1é2_pré2au_pré1a22prent_2vrent_supero2_di1e2npoly1u2è2ment_poly1s2poly1o2poly1i2poly1è2poly1é2poly1e2poly1a2supe4r1capil3l2plent_armil5lsemil4lmil4letvacil4l_di2s3h3ph2tis2dlent_a2s3tro4phres_l2ment_i1è2drei1arthr2drent_4phles_supers2ô2ment_extra2i2phent_su3r2ah_su2r3hextra2chypo1u21alcool_per1u2_per1o2_per1i2_per1é2hypo1s2_per1a2hypo1o2hypo1i2hypo1é2_pen2tahypo1e2hypo1a2y1s2tome2s3cophyperu2hype4r1hypers2hypero21m2némohyperi21m2nési4chres_a1è2drehyperé2hypere2hypera2’oua1ou_oua1ouo1s2tomo1s2timo1s2tato1s2tasomni1s2tung2s3_dé3s2c2blent__bio1a2télé1e2télé1i22clent_télé1s22guent_1é2nerg2grent_2trent__dé2s1œ2t3heuro1è2dre2gnent_2glent_4thres__bi1a2t1é2drie_bi1a2c_i2g3nin3s2at_’i2g3ni2ckent__i2g3né’ab3réa’i2g3né_ab3réa_per1e2", 14 | 8: "_ma2l1ap_dy2s1u2_dy2s1o2_dy2s1i2n3s2ats__dy2s1a2distil3l1é2lectrinstil3l1s2trophe2n1i2vro2b3long1s2tomos_ae3s4ch’ae3s4ch_eu2r1a2ombud2s3’eu2r1a2_mono1s2_mono1u2o1s2téro_mono1o2eu1s2tato1s2tradfritil3la2l1algi_mono1i2_mono1é2_ovi1s2c’ovi1s2c_mono1e2_mono1a2co1assocpaléo1é2boutil3l1s2piros_ré2i3fi_pa2n1ischevil4l1s2patiaca3ou3t2_di1a2cé_para1s2_pa2r3héco1assur_su2b1é2tu2ment_su2ment__su2b1in_su2b3lupapil3lire3pent_’inte4r3_su2b1urab3sent__su2b1a2di2s3cophu2ment_fu2ment__intera2au2ment_as2ment_or2ment_’intera2_intere2pé1r2é2q_péri1os_péri1s2ja3cent__anti1a2_péri1u2’anti1a2er2ment__anti1e2ac3cent_ar2ment_to2ment_’intere2ré3gent_papil3leom2ment_’anti1e2photo1s2_anti1é2_interé2’anti1é2_anti1s2’anti1s23ph2talé’interé2ri2ment__interi2’interi2mi2ment_apo2s3tri2s3chio_pluri1ai2s3chia_intero2’intero2_inte4r3po1astre_interu2’interu2_inters2ai2ment_’inters2papil3la_tri1o2n_su2r1a2_pon2tet_pos2t3h_dés2a3mes3cent__pos2t3r_post1s2_tri1a2tta2ment__tri1a2nra2ment_is3cent__su2r1e2_tri1a2cfa2ment_da2ment__su3r2et_su2r1é2_mé2s1es_mé2g1oh_su2r1of_su2r1ox_re3s4ty_re3s4tu_ma2l1oc’a2g3nat_dé2s1é2_ma2l1entachy1a2_pud1d2ltchin3t2_re3s4trtran2s3p_bi2s1a2tran2s3hhémo1p2té3quent__a2g3nat_dé2s1i2télé1o2bo2g3nosiradio1a2télé1o2ppu2g3nacru3lent__sta2g3nre3lent__ré2a3le_di1a2mi", 15 | 9: "_ré2a3lit_dé3s2o3lthermo1s2_dé3s2ist_dé3s2i3rmit3tent_éni3tent__do3lent__ré2a3lisopu3lent__pa3tent__re2s3cap_la3tent__co2o3lie_re2s3cou_re2s3cri_ma2g3num_re2s3pir_dé3s2i3dco2g3nititran2s1a2tran2s1o2_dé3s2exu_re3s4tab_re3s4tag_dé3s2ert_re3s4tat_re3s4tén_re3s4tér_re3s4tim_re3s4tip_re3s4toc_re3s4toptran2s1u2_no2n1obs_ma2l1a2v_ma2l1int_prou3d2hpro2s3tativa3lent__ta3lent__rétro1a2_pro1s2cé_ma2l1o2dcci3dent__pa3rent__su2r1int_su2r1inf_su2r1i2mtor3rent_cur3rent__mé2s1u2stri3dent__dé3s2orm_su3r2ell_ar3dent__su3r2eaupru3dent__pré2a3lacla2ment__su3r2a3t_pos2t1o2_pos2t1inqua2ment_ter3gent_ser3gent_rai3ment_abî2ment_éci2ment_’ar3gent__ar3gent_rin3gent_tan3gent_éli2ment_ani2ment_’apo2s3ta_apo2s3tavélo1s2kivol2t1amp_dé3s2orp_dé2s1u2n_péri2s3ssesqui1a2’ana3s4trfir2ment_écu2ment_ser3pent_pré3sent_’ar3pent__ar3pent_’in1s2tab_in1s2tab’in2o3cul_in2o3culplu2ment_bou2ment_’in2exora_in2exora_su2b3linbru2ment__su3b2é3r_milli1am’in2effab_in2effab’in2augur_di1a2cid_in2augur_pa2n1opt’in2a3nit_in2a3nit1informat_ana3s4trvanil3lis_di1a2tom_su3b2altvanil3linstéréo1s2_pa2n1a2fo1s2tratuépi2s3cop_ci2s1alp1s2tructu1é2lément1é2driquepapil3lomllu2ment_", 16 | 10: "1s2tandardimmi3nent__émi3nent_imma3nent_réma3nent_épi3s4cope_in2i3miti’in2i3miti_res3sent_moye2n1â2gréti3cent__dé3s2a3crmon2t3réalinno3cent__mono1ï2dé_pa2n1a2méimpu3dent__pa2n1a2ra_amino1a2c’amino1a2c_pa2n1o2phinci3dent__ser3ment_appa3rent_déca3dent__dacryo1a2_dé3s2astr_re4s5trin_dé3s2é3gr_péri2s3ta_sar3ment__dé3s2oufr_re3s4tandchro2ment__com3ment__re2s3quil_re2s3pons_gem2ment__re2s3pect_re2s3ciso_dé3s2i3gn_dé3s2i3ligram2ment__dé3s2invo_re2s3cisitran3s2act’anti2enneindo3lent__sou3vent_indi3gent_dili3gent_flam2ment_impo3tent_inso3lent_esti2ment_’on3guent__on3guent_inti2ment__dé3s2o3défécu3lent_veni2ment_reli2ment_vidi2ment_chlo2r3é2tpu2g3nablechlo2r3a2cryth2ment_o2g3nomonicarê2ment__méta1s2ta_ma2l1aisé_macro1s2célo3quent_tran3s2ats_anti2enne", 17 | 11: "_contre1s2cperti3nent_conti3nent__ma2l1a2dro_in2é3lucta_psycho1a2n_dé3s2o3pil’in2é3luctaperma3nent__in2é3narratesta3ment__su2b3liminrésur3gent_’in2é3narraimmis4cent__pro2g3nathchien3dent_sporu4lent_dissi3dent_corpu3lent_archi1é2pissubli2ment_indul3gent_confi3dent__syn2g3nathtrucu3lent_détri3ment_nutri3ment_succu3lent_turbu3lent__pa2r1a2che_pa2r1a2chèfichu3ment_entre3gent_conni3vent_mécon3tent_compé3tent__re4s5trict_dé3s2i3nen_re2s3plend1a2nesthésislalo2ment__dé3s2ensib_re4s5trein_phalan3s2tabsti3nent_", 18 | 12: "polyva3lent_équiva4lent_monova3lent_amalga2ment_omnipo3tent__ma2l1a2dreséquipo3tent__dé3s2a3tellproémi3nent_contin3gent_munifi3cent__ma2g3nicideo1s2trictionsurémi3nent_préémi3nent__bai2se3main", 19 | 13: "acquies4cent_intelli3gent_tempéra3ment_transpa3rent__ma2g3nificatantifer3ment_", 20 | 14: "privatdo3cent_diaphrag2ment_privatdo3zent_ventripo3tent__contre3maître", 21 | 15: "grandilo3quent_", 22 | 16: "_chè2vre3feuille" 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /src/hypher-patterns/gu.js: -------------------------------------------------------------------------------- 1 | // For questions about the Gujarati hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "gu", 5 | leftmin: 2, 6 | rightmin: 2, 7 | specialChars: unescape( 8 | "આઅઇઈઉઊઋએઐઔકગખઘઙચછજઝઞટઠડઢણતથદધનપફબભમયરલવશષસહળિીાુૂૃેાોૈૌ્ઃં%u200D" 9 | ), 10 | patterns: { 11 | 2: "અ1આ1ઇ1ઈ1ઉ1ઊ1ઋ1એ1ઐ1ઔ1િ1ા1ી1ુ1ૂ1ૃ1ે1ો1ૌ1્2ઃ1ં11ક1ગ1ખ1ઘ1ઙ1ચ1છ1જ1ઝ1ઞ1ટ1ઠ1ડ1ઢ1ણ1ત1થ1દ1ધ1ન1પ1ફ1બ1ભ1મ1ય1ર1લ1વ1શ1ષ1સ1હ1ળ" 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /src/hypher-patterns/hi.js: -------------------------------------------------------------------------------- 1 | // For questions about the Hindi hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "hi", 5 | leftmin: 2, 6 | rightmin: 2, 7 | specialChars: unescape( 8 | "आअइईउऊऋऎएऐऒऔकगखघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहळऴऱिीाुूृॆेॊाोैौ्ःं%u200D" 9 | ), 10 | patterns: { 11 | 2: "अ1आ1इ1ई1उ1ऊ1ऋ1ऎ1ए1ऐ1ऒ1औ1ि1ा1ी1ु1ू1ृ1ॆ1े1ॊ1ो1ौ1्2ः1ं11क1ग1ख1घ1ङ1च1छ1ज1झ1ञ1ट1ठ1ड1ढ1ण1त1थ1द1ध1न1प1फ1ब1भ1म1य1र1ल1व1श1ष1स1ह1ळ1ऴ1ऱ" 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /src/hypher-patterns/hy.js: -------------------------------------------------------------------------------- 1 | // For questions about the armenian hyphenation patterns 2 | // ask Sahak Petrosyan (sahak at mit dot edu) 3 | module.exports = { 4 | id: "hy", 5 | leftmin: 1, 6 | rightmin: 2, 7 | patterns: { 8 | 3: "և1աև1եև1էև1ըև1իև1ոև1օ", 9 | 4: "ա1բաա1բեա1բէա1բըա1բիա1բոա1բօա1գաա1գեա1գէա1գըա1գիա1գոա1գօա1դաա1դեա1դէա1դըա1դիա1դոա1դօա1զաա1զեա1զէա1զըա1զիա1զոա1զօա1թաա1թեա1թէա1թըա1թիա1թոա1թօա1ժաա1ժեա1ժէա1ժըա1ժիա1ժոա1ժօա1լաա1լեա1լէա1լըա1լիա1լոա1լօա1խաա1խեա1խէա1խըա1խիա1խոա1խօա1ծաա1ծեա1ծէա1ծըա1ծիա1ծոա1ծօա1կաա1կեա1կէա1կըա1կիա1կոա1կօա1հաա1հեա1հէա1հըա1հիա1հոա1հօա1ձաա1ձեա1ձէա1ձըա1ձիա1ձոա1ձօա1ղաա1ղեա1ղէա1ղըա1ղիա1ղոա1ղօա1ճաա1ճեա1ճէա1ճըա1ճիա1ճոա1ճօա1մաա1մեա1մէա1մըա1միա1մոա1մօա1յաա1յեա1յէա1յըա1յիա1յոա1յօա1նաա1նեա1նէա1նըա1նիա1նոա1նօա1շաա1շեա1շէա1շըա1շիա1շոա1շօա1չաա1չեա1չէա1չըա1չիա1չոա1չօա1պաա1պեա1պէա1պըա1պիա1պոա1պօա1ջաա1ջեա1ջէա1ջըա1ջիա1ջոա1ջօա1ռաա1ռեա1ռէա1ռըա1ռիա1ռոա1ռօա1սաա1սեա1սէա1սըա1սիա1սոա1սօա1վաա1վեա1վէա1վըա1վիա1վոա1վօա1տաա1տեա1տէա1տըա1տիա1տոա1տօա1րաա1րեա1րէա1րըա1րիա1րոա1րօա1ցաա1ցեա1ցէա1ցըա1ցիա1ցոա1ցօա1փաա1փեա1փէա1փըա1փիա1փոա1փօա1քաա1քեա1քէա1քըա1քիա1քոա1քօե1բաե1բեե1բէե1բըե1բիե1բոե1բօե1գաե1գեե1գէե1գըե1գիե1գոե1գօե1դաե1դեե1դէե1դըե1դիե1դոե1դօե1զաե1զեե1զէե1զըե1զիե1զոե1զօե1թաե1թեե1թէե1թըե1թիե1թոե1թօե1ժաե1ժեե1ժէե1ժըե1ժիե1ժոե1ժօե1լաե1լեե1լէե1լըե1լիե1լոե1լօե1խաե1խեե1խէե1խըե1խիե1խոե1խօե1ծաե1ծեե1ծէե1ծըե1ծիե1ծոե1ծօե1կաե1կեե1կէե1կըե1կիե1կոե1կօե1հաե1հեե1հէե1հըե1հիե1հոե1հօե1ձաե1ձեե1ձէե1ձըե1ձիե1ձոե1ձօե1ղաե1ղեե1ղէե1ղըե1ղիե1ղոե1ղօե1ճաե1ճեե1ճէե1ճըե1ճիե1ճոե1ճօե1մաե1մեե1մէե1մըե1միե1մոե1մօե1յաե1յեե1յէե1յըե1յիե1յոե1յօե1նաե1նեե1նէե1նըե1նիե1նոե1նօե1շաե1շեե1շէե1շըե1շիե1շոե1շօե1չաե1չեե1չէե1չըե1չիե1չոե1չօե1պաե1պեե1պէե1պըե1պիե1պոե1պօե1ջաե1ջեե1ջէե1ջըե1ջիե1ջոե1ջօե1ռաե1ռեե1ռէե1ռըե1ռիե1ռոե1ռօե1սաե1սեե1սէե1սըե1սիե1սոե1սօե1վաե1վեե1վէե1վըե1վիե1վոե1վօե1տաե1տեե1տէե1տըե1տիե1տոե1տօե1րաե1րեե1րէե1րըե1րիե1րոե1րօե1ցաե1ցեե1ցէե1ցըե1ցիե1ցոե1ցօե1փաե1փեե1փէե1փըե1փիե1փոե1փօե1քաե1քեե1քէե1քըե1քիե1քոե1քօէ1բաէ1բեէ1բէէ1բըէ1բիէ1բոէ1բօէ1գաէ1գեէ1գէէ1գըէ1գիէ1գոէ1գօէ1դաէ1դեէ1դէէ1դըէ1դիէ1դոէ1դօէ1զաէ1զեէ1զէէ1զըէ1զիէ1զոէ1զօէ1թաէ1թեէ1թէէ1թըէ1թիէ1թոէ1թօէ1ժաէ1ժեէ1ժէէ1ժըէ1ժիէ1ժոէ1ժօէ1լաէ1լեէ1լէէ1լըէ1լիէ1լոէ1լօէ1խաէ1խեէ1խէէ1խըէ1խիէ1խոէ1խօէ1ծաէ1ծեէ1ծէէ1ծըէ1ծիէ1ծոէ1ծօէ1կաէ1կեէ1կէէ1կըէ1կիէ1կոէ1կօէ1հաէ1հեէ1հէէ1հըէ1հիէ1հոէ1հօէ1ձաէ1ձեէ1ձէէ1ձըէ1ձիէ1ձոէ1ձօէ1ղաէ1ղեէ1ղէէ1ղըէ1ղիէ1ղոէ1ղօէ1ճաէ1ճեէ1ճէէ1ճըէ1ճիէ1ճոէ1ճօէ1մաէ1մեէ1մէէ1մըէ1միէ1մոէ1մօէ1յաէ1յեէ1յէէ1յըէ1յիէ1յոէ1յօէ1նաէ1նեէ1նէէ1նըէ1նիէ1նոէ1նօէ1շաէ1շեէ1շէէ1շըէ1շիէ1շոէ1շօէ1չաէ1չեէ1չէէ1չըէ1չիէ1չոէ1չօէ1պաէ1պեէ1պէէ1պըէ1պիէ1պոէ1պօէ1ջաէ1ջեէ1ջէէ1ջըէ1ջիէ1ջոէ1ջօէ1ռաէ1ռեէ1ռէէ1ռըէ1ռիէ1ռոէ1ռօէ1սաէ1սեէ1սէէ1սըէ1սիէ1սոէ1սօէ1վաէ1վեէ1վէէ1վըէ1վիէ1վոէ1վօէ1տաէ1տեէ1տէէ1տըէ1տիէ1տոէ1տօէ1րաէ1րեէ1րէէ1րըէ1րիէ1րոէ1րօէ1ցաէ1ցեէ1ցէէ1ցըէ1ցիէ1ցոէ1ցօէ1փաէ1փեէ1փէէ1փըէ1փիէ1փոէ1փօէ1քաէ1քեէ1քէէ1քըէ1քիէ1քոէ1քօը1բաը1բեը1բէը1բըը1բիը1բոը1բօը1գաը1գեը1գէը1գըը1գիը1գոը1գօը1դաը1դեը1դէը1դըը1դիը1դոը1դօը1զաը1զեը1զէը1զըը1զիը1զոը1զօը1թաը1թեը1թէը1թըը1թիը1թոը1թօը1ժաը1ժեը1ժէը1ժըը1ժիը1ժոը1ժօը1լաը1լեը1լէը1լըը1լիը1լոը1լօը1խաը1խեը1խէը1խըը1խիը1խոը1խօը1ծաը1ծեը1ծէը1ծըը1ծիը1ծոը1ծօը1կաը1կեը1կէը1կըը1կիը1կոը1կօը1հաը1հեը1հէը1հըը1հիը1հոը1հօը1ձաը1ձեը1ձէը1ձըը1ձիը1ձոը1ձօը1ղաը1ղեը1ղէը1ղըը1ղիը1ղոը1ղօը1ճաը1ճեը1ճէը1ճըը1ճիը1ճոը1ճօը1մաը1մեը1մէը1մըը1միը1մոը1մօը1յաը1յեը1յէը1յըը1յիը1յոը1յօը1նաը1նեը1նէը1նըը1նիը1նոը1նօը1շաը1շեը1շէը1շըը1շիը1շոը1շօը1չաը1չեը1չէը1չըը1չիը1չոը1չօը1պաը1պեը1պէը1պըը1պիը1պոը1պօը1ջաը1ջեը1ջէը1ջըը1ջիը1ջոը1ջօը1ռաը1ռեը1ռէը1ռըը1ռիը1ռոը1ռօը1սաը1սեը1սէը1սըը1սիը1սոը1սօը1վաը1վեը1վէը1վըը1վիը1վոը1վօը1տաը1տեը1տէը1տըը1տիը1տոը1տօը1րաը1րեը1րէը1րըը1րիը1րոը1րօը1ցաը1ցեը1ցէը1ցըը1ցիը1ցոը1ցօը1փաը1փեը1փէը1փըը1փիը1փոը1փօը1քաը1քեը1քէը1քըը1քիը1քոը1քօի1բաի1բեի1բէի1բըի1բիի1բոի1բօի1գաի1գեի1գէի1գըի1գիի1գոի1գօի1դաի1դեի1դէի1դըի1դիի1դոի1դօի1զաի1զեի1զէի1զըի1զիի1զոի1զօի1թաի1թեի1թէի1թըի1թիի1թոի1թօի1ժաի1ժեի1ժէի1ժըի1ժիի1ժոի1ժօի1լաի1լեի1լէի1լըի1լիի1լոի1լօի1խաի1խեի1խէի1խըի1խիի1խոի1խօի1ծաի1ծեի1ծէի1ծըի1ծիի1ծոի1ծօի1կաի1կեի1կէի1կըի1կիի1կոի1կօի1հաի1հեի1հէի1հըի1հիի1հոի1հօի1ձաի1ձեի1ձէի1ձըի1ձիի1ձոի1ձօի1ղաի1ղեի1ղէի1ղըի1ղիի1ղոի1ղօի1ճաի1ճեի1ճէի1ճըի1ճիի1ճոի1ճօի1մաի1մեի1մէի1մըի1միի1մոի1մօի1յաի1յեի1յէի1յըի1յիի1յոի1յօի1նաի1նեի1նէի1նըի1նիի1նոի1նօի1շաի1շեի1շէի1շըի1շիի1շոի1շօի1չաի1չեի1չէի1չըի1չիի1չոի1չօի1պաի1պեի1պէի1պըի1պիի1պոի1պօի1ջաի1ջեի1ջէի1ջըի1ջիի1ջոի1ջօի1ռաի1ռեի1ռէի1ռըի1ռիի1ռոի1ռօի1սաի1սեի1սէի1սըի1սիի1սոի1սօի1վաի1վեի1վէի1վըի1վիի1վոի1վօի1տաի1տեի1տէի1տըի1տիի1տոի1տօի1րաի1րեի1րէի1րըի1րիի1րոի1րօի1ցաի1ցեի1ցէի1ցըի1ցիի1ցոի1ցօի1փաի1փեի1փէի1փըի1փիի1փոի1փօի1քաի1քեի1քէի1քըի1քիի1քոի1քօո1բաո1բեո1բէո1բըո1բիո1բոո1բօո1գաո1գեո1գէո1գըո1գիո1գոո1գօո1դաո1դեո1դէո1դըո1դիո1դոո1դօո1զաո1զեո1զէո1զըո1զիո1զոո1զօո1թաո1թեո1թէո1թըո1թիո1թոո1թօո1ժաո1ժեո1ժէո1ժըո1ժիո1ժոո1ժօո1լաո1լեո1լէո1լըո1լիո1լոո1լօո1խաո1խեո1խէո1խըո1խիո1խոո1խօո1ծաո1ծեո1ծէո1ծըո1ծիո1ծոո1ծօո1կաո1կեո1կէո1կըո1կիո1կոո1կօո1հաո1հեո1հէո1հըո1հիո1հոո1հօո1ձաո1ձեո1ձէո1ձըո1ձիո1ձոո1ձօո1ղաո1ղեո1ղէո1ղըո1ղիո1ղոո1ղօո1ճաո1ճեո1ճէո1ճըո1ճիո1ճոո1ճօո1մաո1մեո1մէո1մըո1միո1մոո1մօո1յաո1յեո1յէո1յըո1յիո1յոո1յօո1նաո1նեո1նէո1նըո1նիո1նոո1նօո1շաո1շեո1շէո1շըո1շիո1շոո1շօո1չաո1չեո1չէո1չըո1չիո1չոո1չօո1պաո1պեո1պէո1պըո1պիո1պոո1պօո1ջաո1ջեո1ջէո1ջըո1ջիո1ջոո1ջօո1ռաո1ռեո1ռէո1ռըո1ռիո1ռոո1ռօո1սաո1սեո1սէո1սըո1սիո1սոո1սօո1վաո1վեո1վէո1վըո1վիո1վոո1վօո1տաո1տեո1տէո1տըո1տիո1տոո1տօո1րաո1րեո1րէո1րըո1րիո1րոո1րօո1ցաո1ցեո1ցէո1ցըո1ցիո1ցոո1ցօո1փաո1փեո1փէո1փըո1փիո1փոո1փօո1քաո1քեո1քէո1քըո1քիո1քոո1քօօ1բաօ1բեօ1բէօ1բըօ1բիօ1բոօ1բօօ1գաօ1գեօ1գէօ1գըօ1գիօ1գոօ1գօօ1դաօ1դեօ1դէօ1դըօ1դիօ1դոօ1դօօ1զաօ1զեօ1զէօ1զըօ1զիօ1զոօ1զօօ1թաօ1թեօ1թէօ1թըօ1թիօ1թոօ1թօօ1ժաօ1ժեօ1ժէօ1ժըօ1ժիօ1ժոօ1ժօօ1լաօ1լեօ1լէօ1լըօ1լիօ1լոօ1լօօ1խաօ1խեօ1խէօ1խըօ1խիօ1խոօ1խօօ1ծաօ1ծեօ1ծէօ1ծըօ1ծիօ1ծոօ1ծօօ1կաօ1կեօ1կէօ1կըօ1կիօ1կոօ1կօօ1հաօ1հեօ1հէօ1հըօ1հիօ1հոօ1հօօ1ձաօ1ձեօ1ձէօ1ձըօ1ձիօ1ձոօ1ձօօ1ղաօ1ղեօ1ղէօ1ղըօ1ղիօ1ղոօ1ղօօ1ճաօ1ճեօ1ճէօ1ճըօ1ճիօ1ճոօ1ճօօ1մաօ1մեօ1մէօ1մըօ1միօ1մոօ1մօօ1յաօ1յեօ1յէօ1յըօ1յիօ1յոօ1յօօ1նաօ1նեօ1նէօ1նըօ1նիօ1նոօ1նօօ1շաօ1շեօ1շէօ1շըօ1շիօ1շոօ1շօօ1չաօ1չեօ1չէօ1չըօ1չիօ1չոօ1չօօ1պաօ1պեօ1պէօ1պըօ1պիօ1պոօ1պօօ1ջաօ1ջեօ1ջէօ1ջըօ1ջիօ1ջոօ1ջօօ1ռաօ1ռեօ1ռէօ1ռըօ1ռիօ1ռոօ1ռօօ1սաօ1սեօ1սէօ1սըօ1սիօ1սոօ1սօօ1վաօ1վեօ1վէօ1վըօ1վիօ1վոօ1վօօ1տաօ1տեօ1տէօ1տըօ1տիօ1տոօ1տօօ1րաօ1րեօ1րէօ1րըօ1րիօ1րոօ1րօօ1ցաօ1ցեօ1ցէօ1ցըօ1ցիօ1ցոօ1ցօօ1փաօ1փեօ1փէօ1փըօ1փիօ1փոօ1փօօ1քաօ1քեօ1քէօ1քըօ1քիօ1քոօ1քօ" 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /src/hypher-patterns/it.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | id: "it", 3 | leftmin: 2, 4 | rightmin: 2, 5 | // The italian hyphenation patterns are retrieved from 6 | // http://www.ctan.org/tex-archive/language/hyphenation/ithyph.tex 7 | patterns: { 8 | 2: "1b1c1d1f1g1h1j1k1l1m1n1p1q1r1t1v1w1x1z", 9 | 3: "2’2e2w2bb2bc2bd2bf2bm2bn2bp2bs2bt2bvb2lb2r2b_2b’2cb2cc2cd2cf2ck2cm2cn2cq2cs2ct2czc2hc2lc2r2c_2c’_c22db2dd2dg2dl2dm2dn2dpd2r2ds2dt2dv2dw2d_2d’_d22fb2fg2ff2fnf2lf2r2fs2ft2f_2f’2gb2gd2gf2ggg2hg2l2gmg2n2gpg2r2gs2gt2gv2gw2gz2g_2g’2hb2hd2hhh2l2hm2hn2hr2hv2h_2h’2j_2j’2kg2kfk2h2kkk2l2kmk2r2ks2kt2k_2k’2lb2lc2ld2lgl2h2lk2ll2lm2ln2lp2lq2lr2ls2lt2lv2lw2lz2l_2mb2mc2mf2ml2mm2mn2mp2mq2mr2ms2mt2mv2mw2m_2m’2nb2nc2nd2nf2ng2nk2nl2nm2nn2np2nq2nr2ns2nt2nv2nz2n_2n’2pdp2hp2l2pn2ppp2r2ps2pt2pz2p_2p’2qq2q_2q’2rb2rc2rd2rfr2h2rg2rk2rl2rm2rn2rp2rq2rr2rs2rt2rv2rx2rw2rz2r_2r’1s22sz4s_2tb2tc2td2tf2tgt2ht2l2tm2tn2tpt2rt2s2tt2tv2twt2z2t_2vcv2lv2r2vv2v_w2h2w_2w’2xb2xc2xf2xh2xm2xp2xt2xw2x_2x’y1i2zb2zd2zl2zn2zp2zt2zs2zv2zz2z_", 10 | 4: "_p2sa1iaa1iea1ioa1iua1uoa1ya2at_e1iuo1iao1ieo1ioo1iu2chh2chbch2r2chn2l’_2l’’2shm2sh_2sh’2s3s2stb2stc2std2stf2stg2stm2stn2stp2sts2stt2stv4s’_4s’’2tzktz2s2t’_2t’’2v’_2v’’wa2r2w1yy1ou2z’_2z’’_z2", 11 | 5: "_bio1_pre12gh2t2l3f2n2g3n3p2nes4s3mt2t3s", 12 | 6: "_a3p2n_anti1_free3_opto1_para1hi3p2n2nheit3p2sicr2t2s32s3p2n3t2sch", 13 | 7: "_ca4p3s_e2x1eu_narco1_su2b3r_wa2g3n_wel2t1n2s3fer", 14 | 8: "_contro1_fran2k3_li3p2sa_orto3p2_poli3p2_sha2re3_su2b3lu", 15 | 9: "_anti3m2n_circu2m1_re1i2scr_tran2s3c_tran2s3d_tran2s3l_tran2s3n_tran2s3p_tran2s3r_tran2s3t", 16 | 10: "_di2s3cine" 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /src/hypher-patterns/kn.js: -------------------------------------------------------------------------------- 1 | // For questions about the Kannada hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "kn", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "ಅ1ಆ1ಇ1ಈ1ಉ1ಊ1ಋ1ಎ1ಏ1ಐ1ಒ1ಔ1ೀ1ು1ೂ1ೃ1ೆ1ೇ1ೊ1ೋ1ೌ1್2ಃ1ಂ11ಕ1ಗ1ಖ1ಘ1ಙ1ಚ1ಛ1ಜ1ಝ1ಞ1ಟ1ಠ1ಡ1ಢ1ಣ1ತ1ಥ1ದ1ಧ1ನ1ಪ1ಫ1ಬ1ಭ1ಮ1ಯ1ರ1ಲ1ವ1ಶ1ಷ1ಸ1ಹ1ಳ1ಱ", 9 | 3: "2ಃ12ಂ1" 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /src/hypher-patterns/la.js: -------------------------------------------------------------------------------- 1 | // Latin hyphenation patterns converted by 2 | // Pablo Rodríguez (hyphenator at pragmata dot tk) 3 | // based on LaTeX Latin hyphenation patterns by Claudio Beccari 4 | // (http://tug.ctan.org/tex-archive/language/hyphenation/lahyph.tex) 5 | module.exports = { 6 | id: "la", 7 | leftmin: 2, 8 | rightmin: 2, 9 | patterns: { 10 | 2: "æ1œ11b1c1d1f1g1h1j1k1l1m1n1p1r1t1v1x1z", 11 | 3: "2bb2bdb2l2bm2bnb2r2bt2bs2b_2ccc2l2cm2cn2cqc2r2cs2ct2cz2c_2dd2dg2dmd2r2ds2dv2d_2fff2l2fnf2r2ft2f_2gg2gd2gfg2l2gmg2ng2r2gs2gv2g_2hp2ht2h_2kk2lb2lc2ld2lf2lg2lk2ll2lm2ln2lp2lq2lr2ls2lt2lv2l_2mm2mb2mp2ml2mn2mq2mr2mv2m_2nb2nc2nd2nf2ng2nl2nm2nn2np2nq2nr2ns2nt2nv2nx2n_p2hp2l2pn2ppp2r2ps2pt2pz2p_2rb2rc2rd2rf2rgr2h2rl2rm2rn2rp2rq2rr2rs2rt2rv2rz2r_1s22s_2tb2tc2td2tf2tgt2ht2lt2r2tm2tn2tp2tq2tt2tv2t_v2lv2r2vv2xt2xx2x_2z_", 12 | 4: "a1iaa1iea1ioa1iuae1aae1oae1ue1iuio1io1iao1ieo1ioo1iuuo3uc2h2k2h22php2pht1qu22s3s2stb2stc2std2stf2stg2stm2stn2stp2stq2sts2stt2stv2st_a1uaa1uea1uia1uoa1uue1uae1uee1uie1uoe1uui1uai1uei1uii1uoi1uuo1uao1ueo1uio1uoo1uuu1uau1ueu1uiu1uou1uu", 13 | 5: "_e2x1_o2b3l3f2tn2s3mn2s3f2s3ph2st3l", 14 | 6: "_a2b3l_anti13p2sic3p2neua2l1uaa2l1uea2l1uia2l1uoa2l1uue2l1uae2l1uee2l1uie2l1uoe2l1uui2l1uai2l1uei2l1uii2l1uoi2l1uuo2l1uao2l1ueo2l1uio2l1uoo2l1uuu2l1uau2l1ueu2l1uiu2l1uou2l1uua2m1uaa2m1uea2m1uia2m1uoa2m1uue2m1uae2m1uee2m1uie2m1uoe2m1uui2m1uai2m1uei2m1uii2m1uoi2m1uuo2m1uao2m1ueo2m1uio2m1uoo2m1uuu2m1uau2m1ueu2m1uiu2m1uou2m1uua2n1uaa2n1uea2n1uia2n1uoa2n1uue2n1uae2n1uee2n1uie2n1uoe2n1uui2n1uai2n1uei2n1uii2n1uoi2n1uuo2n1uao2n1ueo2n1uio2n1uoo2n1uuu2n1uau2n1ueu2n1uiu2n1uou2n1uua2r1uaa2r1uea2r1uia2r1uoa2r1uue2r1uae2r1uee2r1uie2r1uoe2r1uui2r1uai2r1uei2r1uii2r1uoi2r1uuo2r1uao2r1ueo2r1uio2r1uoo2r1uuu2r1uau2r1ueu2r1uiu2r1uou2r1uu", 15 | 7: "_para1i_para1u_su2b3r2s3que_2s3dem_", 16 | 8: "_su2b3lu", 17 | 9: "_anti3m2n_circu2m1_co2n1iun", 18 | 10: "_di2s3cine" 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /src/hypher-patterns/lt.js: -------------------------------------------------------------------------------- 1 | // For questions about the Lithuanian hyphenation patterns 2 | // ask Rogutės Sparnuotos (rogutes at googlemail dot com) 3 | module.exports = { 4 | id: "lt", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 3: "a1ba1ca1da1ea1fa1ha1ja1ka1la1ma1na2oa1pa1ra1sa1ta4ua1va1wa1ya1za1ąa1ęa1įa1ša1ųa1žb1jcu4d4zd4že1ce1ee1fe1ge1he1je1ke1le1me2oe3pe1re1se1te1ve1we1ye1ze1ąe1če1ęe1ėe1še1ųe1ūe1ž3gui2ai1ci1di2ei1fi1ji1ki1li1mi2oi1pi1ri2ui1vi1wi1yi1zi2ąi1či1ęi1įi1ši2ųi2ūi3ž1ju1jū3kek4i3ko3ku5ką3lą3lųm2am2one15noo1ao1bo1co1do1eo1fo1go1ho1io1jo1ko1lo1mo1no1po1ro1so1vo1wo1yo1zo1ąo1čo1ęo1ėo1įo1šo1ųo1ūo1žpa3p2ep2i3pop2yp2ėr2ar2ir2or2u3rą5rųs2esu1są35sėt2at2it2o3tęu1bu1cu1du1fu1gu1hu1ju1ku1lu1mu1nu2ou3pu1ru1su1uu1vu1wu1yu1zu1ąu1ču1ęu1įu1šu1ųu1žv2e3vą3vėy1ay1by1cy1dy1ey1fy1gy1hy1iy1jy1ky1ly1my1ny1oy1py3ry1sy1ty1uy1vy1wy1yy1zy1ąy1čy1ęy1ėy1įy1šy1ųy1ūy1žą1aą1bą1cą1dą1eą1fą1gą1hą1ią1ją1ką1lą1mą1ną1oą1pą1rą1są1tą1uą1vą1wą1yą1zą1ąą1čą1ęą1ėą1įą1šą1ųą1ūą1žę1aę1bę1cę1dę1eę1fę1gę1hę1ię1ję1kę1lę1mę1nę1oę1pę1rę1sę1tę1uę1vę1wę1yę1zę1ąę1čę1ęę1ėę1įę1šę1ųę1ūę1žė1aė1bė1cė1dė1eė1fė1gė1hė1iė1jė1kė1mė1nė1oė1pė1rė1uė1vė1wė1yė1zė1ąė1čė1ęė1ėė1įė1šė1ųė1ūė1žį1aį1bį1cį2eį1fį4gį1hį1iį1jį2lį2mį1nį1oį4pį2rį1sį1uį2vį1wį1yį1zį1ąį1čį1ęį1įį1šį1ųį1ūį1žų1aų1bų1cų1dų1eų1fų1gų1hų1ių1jų1kų1lų1mų1nų1oų1pų1rų1sų1tų1uų1vų1wų1yų1zų1ąų1čų1ęų1ėų1įų1šų1ųų1ūų1žū1aū1bū1cū1dū1eū1fū1gū1hū1iū1jū1kū1lū1mū1nū1oū1pū1rū1sū1tū1uū1vū1wū1yū1zū1ąū1čū1ęū1ėū1įū1šū1ųū1ūū1žž1jž2u", 9 | 4: "_ap1_at1_nu1_sk4_st4_uk3_už1_įs4a1a2a2chae2l2a1ga4grak2la3lia3lya3lėa3lūap3la3pra4rgasi1a4ska3slato1atp42a1ča1ė2a3šnaš2va1ū2až2lba3c2b1b2b1c4b3dbep42b1f2b1g2b1h2b1k2b1lb2lab2lu2b1m2b1n2b1p2b2rb3ri2b1s2b3tbu4k2b1v2b1w2b1z2b1č2b1š2b1žcar42c1b2c1c2c1d2c1f2c1g3chi2c1k2c1l2c1m2c1n2c1p2c1r2c1s2c1tcuk52c1v2c1w2c1z2c1č2c1š2c1ž2d1b2d1c2d1dde4k2d1f2d1g2d1hdi4pdi4s2d1j2d3k4d3l2d1m2d1n2d1p2d1rdro1d2rė4drų2d1s2d1tdu2adu4k2d1vd3va2d1w2d1č2d1še1a2eat1e1b2ebe1e3bleb3re2che3d2e1ie1eine3kr2e1neno1ens4enu1e3orep4rero1erė2es4ke1u4euž3e3vie1į4eįp3e3šneš2vešė32f1b2f1c2f1d2f1f2f1g2f1h2f1k2f1l2f1m2f1n2f1p2f1rfri12f1s2f1t2f1v2f1w2f1z2f1č2f1š2f1žgaš32g1b2g1c2g1d2g1f2g1g2g1h2g1k2g1lg2leg2lo2g1m2g1n3g2rg3rig4rą5grį4grų2g1s4g1t2g1v2g1w2g1z2g1č2g1š2g1ž2h1b2h1c2h1d2h1f2h1g2h1hhi4b2h1k2h2l2h1mh2me2h1n2h1p2h1r2h1s2h1t2h1v2h1w2h1z2h1č2h1š2h1žia3kiap4i3ari3b2ice1id2rie3gi3ei2i1g2i1hi1i2ik3rilo11imd4i1n5inviok2i3ori3ri4i1si5sai5siis4ki3sli1ė2i3šniš5ti4švišė21išš3ja_2j1b2j1c2j1d2j1f2j1g2j1h2j1j2j1k2j1l2j1m2j1njot32j1p2j1r2j1s2j1t2j1v2j1w2j1z2j1č2j1š2j1ž3ka_kak33kar3kas5kav2k1b2k1c2k1d2k1f2k1g2k1h5ki_5kia3kib3kil5kit2k1k2k1lk2ly4klą4klų2k1m2k1n2k1p2k2rk3rok4ryk5rą2k1sk4skks3l4k1tk3ta4kubku4k2k1vk2vak3vok2vė2k1w3kyt2k1z2k1č2k1škšė32k1ž3la_2l1blb3r2l1c2l1d3le_le3c4leč2l1f2l1g2l1h3li_li4a3lių2l1j2l1klko12l1l2l1m2l1n3lo_log44lop4l1p2l1r4l1sl4sk4l3t3lu_2lup4l1v2l1w3lyč2l1z2l1č3lęs3lėm3lės2lėč3lį44l1š2l1ž3mas2m1bmb3r2m1c2m1dme3c2m1f2m1g2m1h2m1k2m1l2m1m2m1n2mod2m1pm4plm3pr2m1r4m1s2m1tm3ta3muo2m1v2m1w2m1z2m1č2m1š2m1ž2n1b2n1c2n1dneg42n1f4n1gng3lng4r2n1hni4s2n1j2n1knk3r2n1l2n1m2n1n2n1p2n1r4n1sns3l4n1tn3tanua4nu3gnu1inuk22n1v2n1w2n1z4n1č2n1š2n1žo3dro2eto3krono1o1o2o2ręo3slo3t2oto1oš2vpad23panpap4p2arpas22p1b4p1cper12p1f2p1g2p1h3p2lp3lep3lip3lop4lup4ly2p1m4p1npo4g2p1p2p2rp3rip3ry4prąp3rėp3rū4p1spsi13p4u2p1v2p1w2p1z2p1č4p3ž3ra_ra3b3rac3ral3ram3rav2r1brbo12r1c4r1d2reb3rel5res3ret2r1f2r1g2r1h3ri_ri3d3rij2ril3riori3p3rią3rių2riū4r1k4r1l2r1m4r1n3roj3rok3ron3rop5ros2r1p2r1r4r1srs4p4r1t2ruk3rul4run2rup3rus4r1v2r1w2r1z4rąs4r1č4r1š2r1ž2s3b2s1c2s3d2s1f2s1g2s1hsi3d4sk_4ske5ski5sky4ską5skę2s2l3sles3lis3lo2s1m4smę4s3n3s2ps3pe4spn4spu4s1rs3ri2s1s2s1tst2v4stę4stųs2tūsuž42s1vs2ve2s1w2s1z4s3č2s1š2s1ž2tabta5s2tat2tač2t1b2t1c2t1d2teb3temte4o2t1f4t3g2t1h3tin2tip4t3j4t3kt4kl4t3l4t3m2t1n2tow2t3pt4pjtp4r2t1r4tro4trą4trųtsi14t1ttua43tur2t1vt2vo2t1w3tyd2t1z2t1čt2ėm2t3žu1a2u3aiu2bju1e2ug4ru5inui2ru3klu3kru3kvu5kųu3orup4lurk2u3slu3t2uto12utru1ė2uš2vu1ū2u3žluž3v3va_vap4va3t2v1b2v1c2v1d2vep3ves2v1f2v1g2v1h2v1j2v1k2v1l2v1m2v1n2v1p2v1r2v4s2v1t2v1v2v1w2v1z2v1č4vėp2v1š2v1ž2w1b2w1c2w1d2w1f2w1g2w1h2w1k2w1l2w1m2w1n2w1p2w1r2w1s2w1t2w1v2w1w2w1z2w1č2w1š2w1žy4sk2z1b2z1c2z1d2z1f2z1g2z1h2z1k2z1l2z1m2z1n2z1p2z1r2z1s2z1t2z1v2z1w2z1z2z1č2z1š2z1ž2č1b2č1c2č1d2č1f2č1g2č1hčin12č1k2č1l2č1m2č1n2č1p2č1r2č1s2č1t2č1v2č1w2č1z2č1č2č1š2č1ž2ė3lė3me2ė1sės3l2ė3tė4trį1d2į2k4įsi1įs3lįs2mįs2rįst2į2t2į1ė22š1cš1eiše2v2š1f2š1h2š1lš2lu3šly2š1m2š1nš2nešno1šo2r2š1ršsi1šu4š3š1vš2vi2š1w2š1z4š3čšė2j2š1š2š1žūs3lūs3t2ž1cžen12ž3g2ž1hžio32ž1lž2lu4ž1m2ž1n2ž3p2ž1r2ž1sžsi1ž4skžs3t3ž2vž4viž3vo2ž1w2ž1z2ž1čžįs32ž1š2ž1ž", 10 | 5: "_api1_ap3r_as3p_ata1_at3r_aš3v_ek3r_i2š3_iši2_sam1_u2š3a4draag3raa5groa5infai4skai4trak2via2kėta5lo1an4skan4trap3eiap3s2ari4sasi5sas3klas2mias2mua5s4na4stua4truat1ė2atū2žau4klau4skau4slaš4trba4slbe3s2besi1be3t2b2liz3b2loda3b4dema1de4prde4spdis5kdo3ridro2bdu5kadu4sldvi3adžio1e2a3leapi1ed3rie4droed3rėeg3raei4skei4slei2š14entae3o2šep4liepra1epri1eri4sesi5seska1e5skoe3s2veįs3keįt3rfi4s5ge4o13g2nų2g1p2grai2g3ran5g3reg4reig3ro_gyva1ia5g4i3aišid3rėi2dėmie3kli3entie4ski3g2lig3rui3k2nin4klio4pli2p1jip3ruis4lii5s4ni4steisto12i3t2jo4tv5ka3dka4klka4pr3katika3z2ke4b33k2lak4lan4kle_k2lel4klo_4klu_k4raukris2k4rov4k3ru5krunk4s3pku4prkš2lyle4gr5li4olpna1l4s3pmeis1mi4glmi4grmin4smi4trna3s2na3t2ncen1n3drėnei2mne4o3neor2nerė3nesi1ne3slne3t2nk3lan3kryns4kun4s3pnst3rnt4pln3trunu3b2nu4o3nuos2nu5s4olen1om4pro2rieori4sor4tros3leos4loo3s2vpai2lpai2mpai2rpa5srp2at24p3d2pe2reper3spe2rėp3ieš2p3k24pliop4liup4lojpoli1p3raip3rašpris2p5ro_p3romp5s4kp3s2v4p3t2pu4skpu4slpu4tr4p3š2ra1imra3krras4lra3smr3b4r4rein4reitre4p5res3lri3krrisi1ri3strk3lyr3k4r3rod2ro4grr3p4rr3t2rr3t2v3ruosru4sk4rutor3š2lr3š2msala1san5tse4krsi3k4si3p4si3s23s2k2s5ka_5sk4r5skubsk3vask3vi4s3lu4s3lū4sme_so4drs2tals2ten4stins2tods2toj4s3tėsu3blsu3d2su3g2suk2lsu3s2susi13s2vyta3krte3t2ti4gr3toje2tolįto3s2tp3lū4triot2riš4t3s44tvėjt3ėmut3ėmęt3ėmė2t3š2u1i2muk2leuo4slup3rour3klu5ro1ur3s2us3laus3leusva1us3veu3š2lu3š2nuži2muž1ė2ygia1y4k3lčeko1ė4k3l2š1b22š3d22š1g4šiuk12š1k2š2lij2š1p42š3s44š3t2š4vydū4k3lū4s3kžant42ž3b22ž3d22ž3f4ži3mu2ž3k2ž4s5l4ž3t2žu3s2", 11 | 6: "_arbi1_arti1_dina1_nusi1_pie2č_sida1_su5kr_te3s2_šven1a5grioan3k2lap1a4kap3i2mar1eitat3augat3i2mau4t3rbalta1ei4k3l2eis3tema5s4en3k2lenk4laere3a44g4rioi3antęi3antėie4d3rie4p5rio4g3rira3s2jauna1kavar1keren1kri5stlg3s2t2m3aidmas3kine3s2tneįs3tnt2ruoparsi1p4s3tyrai4tįri2ma_2r3imtrivin12r3orgrs4ko_rti5k4rti3s22s1amžsarka1senat4si3auksi3a2vsi3a2šsi5š2v5s4ken5s4kle3s2tovst2raitaura1ti4k3ltskri1ug5riou2s1alvi4s5kvi4t3r2vydau2š5istžants5", 12 | 7: "_kirti1ate5isteist2rapa4r1ė2pe2r3imprau2sipusiau1rau4ka_viesia1šsikap1", 13 | 8: "lap4s3to" 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /src/hypher-patterns/ml.js: -------------------------------------------------------------------------------- 1 | // For questions about the Malayalam hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "ml", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "ാ1ി1ീ1ു1ൂ1ൃ1െ1േ1ൈ1ൊ1ോ1ൌ1ൗ11ക1ഖ1ഗ1ഘ1ങ1ച1ഛ1ജ1ഝ1ഞ1ട1ഠ1ഡ1ഢ1ണ1ത1ഥ1ദ1ധ1ന1പ1ഫ1ബ1ഭ1മ1യ1ര1റ1ല1ള1ഴ1വ1ശ1ഷ1സ1ഹ2ൺ2ൻ2ർ2ൽ2ൾ2ൿ", 9 | 3: "1അ11ആ11ഇ11ഈ11ഉ11ഊ11ഋ11ൠ11ഌ11ൡ11എ11ഏ11ഐ11ഒ11ഓ11ഔ12ഃ12ം12്2ന്2ര്2ള്2ല്2ക്2ണ്2", 10 | 4: unescape("2ന്%u200D2ര്%u200D2ല്%u200D2ള്%u200D2ണ്%u200D2ക്%u200D") 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /src/hypher-patterns/or.js: -------------------------------------------------------------------------------- 1 | // For questions about the Oriya hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "or", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "ଅ1ଆ1ଇ1ଈ1ଉ1ଊ1ଋ1ଏ1ଐ1ଔ1ି1ା1ୀ1ୁ1ୂ1ୃ1େ1ୋ1ୌ1ୗ1୍2ଃ1ଂ11କ1ଖ1ଘ1ଙ1ଚ1ଛ1ଜ1ଝ1ଞ1ଟ1ଠ1ଡ1ଢ1ଣ1ତ1ଥ1ଦ1ଧ1ନ1ପ1ଫ1ବ1ଭ1ମ1ଯ1ର1ଲ1ଵ1ଶ1ଷ1ସ1ହ1ଳ", 9 | 3: "1ଗ1", 10 | 4: unescape("2ନ୍%u200D2ର୍%u200D2ଲ୍%u200D2ଳ୍%u200D2ଣ୍%u200D") 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /src/hypher-patterns/pa.js: -------------------------------------------------------------------------------- 1 | // For questions about the Panjabi hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "pa", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: unescape( 9 | "ਅ1ਆ1ਇ1ਈ1ਉ1ਊ1ਏ1ਐ1ਔ1ਿ1ਾ1ੀ1ੁ1ੂ1ੇ1ੋ1ੌ1੍2ਃ1%u0A0211ਕ1ਗ1ਖ1ਘ1ਙ1ਚ1ਛ1ਜ1ਝ1ਞ1ਟ1ਠ1ਡ1ਢ1ਣ1ਤ1ਥ1ਦ1ਧ1ਨ1ਪ1ਫ1ਬ1ਭ1ਮ1ਯ1ਰ1ਲ1ਵ1ਸ਼1ਸ1ਹ1ਲ਼" 10 | ) 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /src/hypher-patterns/pt.js: -------------------------------------------------------------------------------- 1 | // For questions about the portuguese hyphenation patterns 2 | // ask Lailson Bandeira (lailsonbm at gmail dot com) 3 | // based on LaTeX patterns in Portuguese, by Pedro J. de Rezende and J.Joao Dias Almeida (http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/) 4 | module.exports = { 5 | id: "pt", 6 | leftmin: 2, 7 | rightmin: 4, 8 | patterns: { 9 | 2: "1-", 10 | 3: "1ba1be1bi1bo1bu1bá1bâ1bã1bé1bí1bó1bú1bê1bõ1ca1ce1ci1co1cu1cá1câ1cã1cé1cí1có1cú1cê1cõ1ça1çe1çi1ço1çu1çá1çâ1çã1çé1çí1çó1çú1çê1çõ1da1de1di1do1du1dá1dâ1dã1dé1dí1dó1dú1dê1dõ1fa1fe1fi1fo1fu1fá1fâ1fã1fé1fí1fó1fú1fê1fõ1ga1ge1gi1go1gu1gá1gâ1gã1gé1gí1gó1gú1gê1gõ1ja1je1ji1jo1ju1já1jâ1jã1jé1jí1jó1jú1jê1jõ1ka1ke1ki1ko1ku1ká1kâ1kã1ké1kí1kó1kú1kê1kõ1la1le1li1lo1lu1lá1lâ1lã1lé1lí1ló1lú1lê1lõ1ma1me1mi1mo1mu1má1mâ1mã1mé1mí1mó1mú1mê1mõ1na1ne1ni1no1nu1ná1nâ1nã1né1ní1nó1nú1nê1nõ1pa1pe1pi1po1pu1pá1pâ1pã1pé1pí1pó1pú1pê1põ1ra1re1ri1ro1ru1rá1râ1rã1ré1rí1ró1rú1rê1rõ1sa1se1si1so1su1sá1sâ1sã1sé1sí1só1sú1sê1sõ1ta1te1ti1to1tu1tá1tâ1tã1té1tí1tó1tú1tê1tõ1va1ve1vi1vo1vu1vá1vâ1vã1vé1ví1vó1vú1vê1võ1xa1xe1xi1xo1xu1xá1xâ1xã1xé1xí1xó1xú1xê1xõ1za1ze1zi1zo1zu1zá1zâ1zã1zé1zí1zó1zú1zê1zõa3aa3ea3oc3ce3ae3ee3oi3ai3ei3ii3oi3âi3êi3ôo3ao3eo3or3rs3su3au3eu3ou3u", 11 | 4: "1b2l1b2r1c2h1c2l1c2r1d2l1d2r1f2l1f2r1g2l1g2r1k2l1k2r1l2h1n2h1p2l1p2r1t2l1t2r1v2l1v2r1w2l1w2r", 12 | 5: "1gu4a1gu4e1gu4i1gu4o1qu4a1qu4e1qu4i1qu4o" 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /src/hypher-patterns/sk.js: -------------------------------------------------------------------------------- 1 | // Created based on sk-spell.sk.cx 2 | // For questions about the slovak hyphenation patterns 3 | // ask Zdenko Podobný (zdenop at gmail dot com) 4 | module.exports = { 5 | id: "sk", 6 | leftmin: 2, 7 | rightmin: 2, 8 | patterns: { 9 | 2: "a1á1ä1e1é1i1í1o1ó1ô1u1ú1y1ý1", 10 | 3: "i2ai2ái2ei2uo2uc2hd2zd2ž", 11 | 4: "2b1b2b1c2b1č2b1d2b1ď2b1f2b1g2b1h2b1j2b1k2b1l2b1ľ2b1m2b1n2b1ň2b1p2b1r2b1s2b1š2b1t2b1ť2b1v2b1w2b1x2b1z2b1ž2c1b2c1c2c1č2c1d2c1ď2c1f2c1g2c1j2c1k2c1l2c1ľ2c1m2c1n2c1ň2c1p2c1r2c1s2c1š2c1t2c1ť2c1v2c1w2c1x2c1z2c1ž2č1b2č1c2č1č2č1d2č1ď2č1f2č1g2č1h2č1j2č1k2č1l2č1ľ2č1m2č1n2č1ň2č1p2č1r2č1s2č1š2č1t2č1ť2č1v2č1w2č1x2č1z2č1ž2d1b2d1c2d1č2d1d2d1ď2d1f2d1g2d1h2d1j2d1k2d1l2d1ľ2d1m2d1n2d1ň2d1p2d1r2d1s2d1š2d1t2d1ť2d1v2ď1b2ď1c2ď1č2ď1d2ď1ď2ď1f2ď1g2ď1h2ď1j2ď1k2ď1l2ď1ľ2ď1m2ď1n2ď1ň2ď1p2ď1r2ď1s2ď1š2ď1t2ď1ť2ď1v2ď1z2ď1ž2f1b2f1c2f1č2f1d2f1ď2f1f2f1g2f1h2f1j2f1k2f1l2f1ľ2f1m2f1n2f1ň2f1p2f1r2f1s2f1š2f1t2f1ť2f1v2f1z2f1ž2g1b2g1c2g1č2g1d2g1ď2g1f2g1g2g1h2g1j2g1k2g1l2g1ľ2g1m2g1n2g1ň2g1p2g1r2g1s2g1š2g1t2g1ť2g1v2g1z2g1ž2h1b2h1c2h1č2h1d2h1ď2h1f2h1g2h1h2h1j2h1k2h1l2h1ľ2h1m2h1n2h1ň2h1p2h1r2h1s2h1š2h1t2h1ť2h1v2h1z2h1ž2j1b2j1c2j1č2j1d2j1ď2j1f2j1g2j1h2j1j2j1k2j1l2j1ľ2j1m2j1n2j1ň2j1p2j1r2j1s2j1š2j1t2j1ť2j1v2j1w2j1x2j1z2j1ž2k1b2k1c2k1č2k1d2k1ď2k1f2k1g2k1h2k1j2k1k2k1l2k1ľ2k1m2k1n2k1ň2k1p2k1r2k1s2k1š2k1t2k1ť2k1v2k1w2k1x2k1z2k1ž2l1b2l1c2l1č2l1d2l1ď2l1f2l1g2l1h2l1j2l1k2l1l2l1ľ2l1m2l1n2l1ň2l1p2l1r2l1s2l1š2l1t2l1ť2l1v2l1z2l1ž2ľ1b2ľ1c2ľ1č2ľ1d2ľ1ď2ľ1f2ľ1g2ľ1h2ľ1j2ľ1k2ľ1l2ľ1ľ2ľ1m2ľ1n2ľ1ň2ľ1p2ľ1r2ľ1s2ľ1š2ľ1t2ľ1ť2ľ1v2ľ1z2ľ1ž2m1b2m1c2m1č2m1d2m1ď2m1f2m1g2m1h2m1j2m1k2m1l2m1ľ2m1m2m1n2m1ň2m1p2m1r2m1s2m1š2m1t2m1ť2m1v2m1z2m1ž2n1b2n1c2n1č2n1d2n1ď2n1f2n1g2n1h2n1j2n1k2n1l2n1ľ2n1m2n1n2n1ň2n1p2n1r2n1s2n1š2n1t2n1ť2n1v2n1w2n1x2n1z2n1ž2ň1b2ň1c2ň1č2ň1d2ň1ď2ň1f2ň1g2ň1h2ň1j2ň1k2ň1l2ň1ľ2ň1m2ň1n2ň1ň2ň1p2ň1r2ň1s2ň1š2ň1t2ň1ť2ň1v2ň1z2ň1ž2p1b2p1c2p1č2p1d2p1ď2p1f2p1g2p1h2p1j2p1k2p1l2p1ľ2p1m2p1n2p1ň2p1p2p1r2p1s2p1š2p1t2p1ť2p1v2p1w2p1x2p1z2p1ž2r1b2r1c2r1č2r1d2r1ď2r1f2r1g2r1h2r1j2r1k2r1l2r1ľ2r1m2r1n2r1ň2r1p2r1r2r1s2r1š2r1t2r1ť2r1v2r1w2r1x2r1z2r1ž2s1b2s1c2s1č2s1d2s1ď2s1f2s1g2s1h2s1j2s1k2s1l2s1ľ2s1m2s1n2s1ň2s1p2s1r2s1s2s1š2s1t2s1ť2s1v2s1z2s1ž2š1b2š1c2š1č2š1d2š1ď2š1f2š1g2š1h2š1j2š1k2š1l2š1ľ2š1m2š1n2š1ň2š1p2š1r2š1s2š1š2š1t2š1ť2š1v2š1w2š1x2š1z2š1ž2t1b2t1c2t1č2t1d2t1ď2t1f2t1g2t1h2t1j2t1k2t1l2t1ľ2t1m2t1n2t1ň2t1p2t1r2t1s2t1š2t1t2t1ť2t1v2t1w2t1x2t1z2t1ž2ť1b2ť1c2ť1č2ť1d2ť1ď2ť1f2ť1g2ť1h2ť1j2ť1k2ť1l2ť1ľ2ť1m2ť1n2ť1ň2ť1p2ť1r2ť1s2ť1š2ť1t2ť1ť2ť1v2ť1w2ť1x2ť1z2ť1ž2v1b2v1c2v1č2v1d2v1ď2v1f2v1g2v1h2v1j2v1k2v1l2v1ľ2v1m2v1n2v1ň2v1p2v1r2v1s2v1š2v1t2v1ť2v1v2v1w2v1x2v1z2v1ž2z1b2z1c2z1č2z1d2z1ď2z1f2z1g2z1h2z1j2z1k2z1l2z1ľ2z1m2z1n2z1ň2z1p2z1r2z1s2z1š2z1t2z1ť2z1v2z1z2z1ž2ž1b2ž1c2ž1č2ž1d2ž1ď2ž1f2ž1g2ž1h2ž1j2ž1k2ž1l2ž1ľ2ž1m2ž1n2ž1ň2ž1p2ž1r2ž1s2ž1š2ž1t2ž1ť2ž1v2ž1z2ž1ž2x1t2x1n2b1ŕ2ŕ1ba1í2a1o2e1á2e1í2e1o2e1ó2e1u2i1o2o1a2o1e2o1i2o1o2u1a2u1á2u1i2u1í2u1o2u1u2y1a2y1e2y1ó2y1u2a2u1a2i1_vy5_vý5_cv6_ch6_sp6_st6_šk6_šp6_št6_tk6_uh6_uk6_um6_up6_us6_ús6_úš6_ut6_uv6_uz6_vd6_vh6_vk6_vp6_vs6_vš6_vt6_vz6_vž6_zb6_zg6_zh6_zm6_zr6_zv64lt_4rd_4st_4sť_", 12 | 5: "b2l3bb2l3šb2ľ3šb2r3db2r3zb3s2cb3s2tc3k2tc3t2vč2r3pd2l3nd2r3ld2r3nd3s2vd3s2td3v2rj3s2tj3t2mj3t2rk2r3bk3s2ľk2s3nk3t2rl3d2rľ3k2nl3t2rm3b2lm3b2ľm3b2rm3f2lm3f2rm3k2nm3p2lm3p2ľm3p2rm3p2sm2r3lm2r3šm2r3tm3s2tm3š2tn3dľan3d2rn3f2ln3f2rn3g2hn3g2ln3g2ľn2g3nn3g2rn3g2vn3k2cn3k2hn3k2nn3k2rn3k2vn3s2cn3š2pn3š2tn3t2gn3t2ln3t2nn3t2rn2ž3mp3š2ťp3t2rr2b3nr3g2ľr3g2rr3g2sr3k2dr2k3nr3k2tr3k2vr3p2cr3p2čr3p2rr3s2pr3š2čr3š2lr3š2rr2t3mr3t2nr2t3ňr3t2rr3t2vs2k3ls2k3ms2k3ns3k2rs3k2vs3p2rs3t2ks2t3ls3t2ms2t3ns3t2rs3t2vs2ť3hs2ť3ms2ť3pš3k2lš3k2rš3t2rt3k2lt3k2nt3h2lz3d2nz3g2nž2d3n3ž2ľtž3s2tx3p2lx3p2rx3t2rb3s4kd3s4kj3s4kl3s4kľ3s4kn3s4kp3s4kr3s4kš3s4kt3s4kv3s4kz3s4kž3s4kn2d3č_bez5_do5o_do5u_ge4o_o5p4_po5u5päť5_usk6_úsl6_usm6_úsm6_vzh6_vzk6_vzl6_vzp6_zd6n_zd6r_zd6v8c4h_8d4z_8d4ž_", 13 | 6: "2b1c2h2b1d2z2b1d2ž2c1c2h2c1d2z2c1d2ž2č1c2h2č1d2z2č1d2ž2d1c2h2d1d2z2d1d2ž2ď1c2h_atmo32ď1d2z2ď1d2ž2f1c2h2f1d2z2f1d2ž2g1c2h2g1d2z2g1d2ž2h1c2h2h1d2z2h1d2ž2c2h1b2c2h1c2c2h1č2c2h1d2c2h1ď2c2h1f2c2h1g2c2h1h2c2h1j2c2h1k2c2h1l2c2h1ľ2c2h1m2c2h1n2c2h1ň2c2h1p2c2h1r2c2h1s2c2h1š2c2h1t2c2h1ť2c2h1v2c2h1w2c2h1ž2j1c2h2j1d2z2j1d2ž2k1c2h2k1d2z2k1d2ž2l1c2h2l1d2z2l1d2ž2ľ1c2h2ľ1d2z2ľ1d2ž2m1c2h2m1d2z2m1d2ž2n1c2h2n1d2z2n1d2ž2ň1c2h2ň1d2z2ň1d2ž2p1c2h2p1d2z2p1d2ž2r1c2h2r1d2z2r1d2ž2s1c2h2s1d2z2s1d2ž2š1c2h2š1d2z2š1d2ž2t1c2h2t1d2z2t1d2ž2ť1c2h2ť1d2z2ť1d2ž2v1c2h2v1d2z2v1d2ž2z1c2h2z1d2z2z1d2ž2ž1c2h2ž1d2z2ž1d2ž2d2z1k2d2z1n2d2z1r2d2z1s2d2ž1š2d2z1ŕ2ŕ1d2z2d2z1ľ2ŕ1d2ž2d2ž1ľ3b2l3č3b2l3k3b2ľ3k3b2l3ň3b2r3b3b2r3k3b2ŕ3k3b2r3l3b2ŕ3ľ3b2r3n3b2r3ň3b2r3v3c2r3č3c2ŕ3č3c2r3k3c2ŕ3k3č2l3n3č2r3č3č2r3t3č2r3v3d2l3b3d2l3h3d2l3ž3d2ľ3ž3d2r3d3d2r3g3d2r3k3d2r3m3d2r3v3d2r3z3d2r3ž3d2ŕ3ž3f2r3č3f2r3f3f2r3k3f2ŕ3k3f2r3m3f2r3n3g2l3g3g2r3c3g2r3g3h2l3b3h2ľ3b3h2l3t3h2m2l3h2r3b3h2ŕ3b3h2r3č3h2r3d3h2r3k3h2r3m3h2r3n3h2r3ň3h2r3t3h2r3vj3š2le3k2l3b3k2ľ3b3k2l3č3k2l3z3k2ľ3z3k2r3č3k2ŕ3č3k2ŕ3d3k2r3k3k2ŕ3k3k2ŕ3m3k2r3p3k2r3s3k2r3t3k2r3v3m2l3č3m2l3k3m2r3h3m2r3k3m2r3v3m2r3z3m2ŕ3z3p2l3n3p2l3ň3p2ľ3ň3p2l3z3p2ľ3z3p2ľ3ž3p2ŕ3c3p2r3č3p2r3d3p2r3s3p2r3š3s2l3n3s2l3ň3s2l3z3s2r3d3s4ŕ3k3s4r3š3š4t4v3t2l3č3t2l3k3t4r3č3t4r3h3t2r3l3t2r3k3t2r3m3t2r3n3t2ŕ3n3t2ŕ3ň3t4r3p3t2r3v3t2ŕ3ž3v2l3č3v2ľ3č3v2l3h3v2l3k3v2l3n3v2r3h3v2r3l3v2ŕ3š3v2ŕ3t3v2r3z3v2ŕ3z3v4z4d3v4z4h3v4z4n3v3z2ť3z4d4r3z4d4v3z4h4r3z2r3k3z2r3n3z4v4l3ž2l3č3ž2l3t3ž2r3ď4m3s4kz3š2t2_belo5_bi2o5_biok4_biop4_bios4_bože5_b2z2d_c4t4n_čo5s4_de5f4_de5g4_dek4l_do5d4_do5f4_do5h4_do5i4_do5k4_do5p4_do5s4_do5v4_do5z4_do5ž4_ex5k4_foto5_ľ4s4t_m4z4d_na5a4_na5b4_na5c4_na5h4_na5i4_na5k4_na5m4_na5o4_na5p4_ná5p4_na5s4_ná5s4_na5š4_na5t4_na5u4_na5ú4_ná5u4_ná5ú4_na5ž4_ne5a4_ne5e4_ne5i4_ne5m4_ne5p4_ne5s4_ne5š4_ne5t4_ne5u2_ne5ú2_ne5v4_ni5k4_ob5k4_ob5s4_ob5t4_ob5z4_od5b4_od5c4_od5d4_od5f4_od5h4_od5i4_od5í4_od5k4_od5p4_od5s4_od5š4_od5t4_od5v4_od5z4_t4v4r_o5h4l_o5h4ľ_o5h4r_o5k4l_o5k4ľ_o5m4l_o5m4n_o5m4r_o5v4r_o5z4n_po5b4_po5č4_po5h4_po5i4_po5k4_po5m4_po5o4_po5s4_po5š4_po5t4_po5v4_po5z4_re5g4_re5k4_re5p4_re5š4_re5t4_sú5h4_sú5s4_sú5v4_sú5z4_troj5_vo5t4_vo5v4_vy5b4_vy5c4_vý5c4_vy5č4_vý5č4_vy5d4_vý5d4_vy5h4_vý5h4_vy5k4_vý5k4_vy5m4_vy5p4_vý5p4_vy5s4_vý5s4_vy5š4_vy5t4_vý5t4_vy5v4_vy5z4_vý5z4_za5b4_zá5b4_za5c4_za5č4_za5d4_za5h4_za5k4_za5m4_za5p4_za5r4_za5s4_za5š4_za5t4_za5v4_za5z4_za5ž4_zá5k4_zá5z4_zo5b4_zo5h4_zo5s4_zo5š4_zo5t4_zo5v4_zo5z4_zo5ž45b4lah5b4lok5b4lúd5b4rať5b4ruč5b4rús5c4muk5c4nie5c4vak5c4vič5c4vik5č4len5č4lov5d4ňov5d4rať5d4vih5d4viž5d4voj5d4vor5f4ľak5f4ráz5g4raf5g4ram5g4réč5g4rob5h4lad5h4las5h4lav5h4ľad5h4mat5h4mot5h4nať5h4ned5h4nev5h4noj5h4nut5h4núť5h4nút5h4rab5h4ran5h4rať5h4rob5h4rom5h4roz5h4rub5h4ryz5k4lad5k4laď5k4ľak5k4lam5k4lep5k4les5k4ľúč5k4ruh5k4rúž5k4ryt5k4vet5m4nož5m4rav5m4ráz5p4lán5p4lat5p4lav5p4rávs6práv5s4fér5s4koč5s4kok5s4kop5s4kor5s4kôr5s4lav5s4láv5s4led5s4lep5s4luh5s4lúž5s4ľub5s4maž5s4mel5s4mer5s4pev5s4por5s4tav5s4tup5s4ved5š4ľah5š4pin5š4tát5š4tep5š4tít5t4lač5t4lak5t4ras5t4rub5uhoľn5v4lád5v4las5v4rás5v4rav5v4rat5v4rát5v4ták5v4tip5z4lom5z4luč5z4nak5z4nám5z4rak5z4väz5z4vod5z4vuk5z4vuč5ž4ráč5ž4reb5ž4rút_uc6h6_úsc6h_ús7ti_ust6l_ust6rr4p4t_r4š4č_r4t4z_", 14 | 7: "b2l3c2hd3c4h4nj2c2h3nm2r3c4ha4t2r3nnoz5d4rb3s2t2rd4ľ4ž3kd4l4ž3nd4ľ4ž3nh2r4d3lj3s4t4rj3s4t4vm3p4r3pm3p4r3vn4g3s4tn3š4t4rn3t4l3mp2ŕ4c3nr2s3k4dr2s3k4ts3t4r3bs4t4r3vš4t4r3nt2r4č3kk4č3ný_k4č3né_k4č3ná_k4č3nú_k4č3ní_k4t3ný_k4t3né_k4t3ná_k4t3nú_k4t3ní_n4č3ný_n4č3né_n4č3ná_n4č3nú_n4č3ní_n4k4č3nn4t3ný_n4t3né_n4t3ná_n4t3nú_n4t3ní_r4d3ný_r4d3né_r4d3ná_r4d3nú_r4d3ní_r4m3ný_r4m3né_r4m3ná_r4m3nú_r4m3ní_r4p4č3nr4t3ný_r4t3né_r4t3ná_r4t3nú_r4t3ní_s4t3ný_s4t3né_s4t3ná_s4t3nú_s4t3ní_z4d3ny_z4d3ne_z4d3na_z4d3nu_z4d3ni_z4d3ný_z4d3né_z4d3ná_z4d3nú_z4d3ní_b2l4š3kn2k2t3kl4p3s4kl4t3s4kn4d3s4kn4t3s4kp4t3s4kr4t3s4kr4z5s4kb3s4t4vč3s4t4vd3s4t4vď3s4t4vľ3s4t4vm3s4t4vn3s4t4vp3s4t4vr3s4t4vš3s4t4vt3s4t4vv3s4t4vž3s4t4v_a2e2ro_ap4rio_ap4rió_bez5b4_bez5d4_bez5h4_bez5k4_bez5m4_bez5p4_bez5s4_bez5t4_bez5v4_bez5z4_bielo5_blaho5_bledo5_čo5ch4_da3k2d_desať5_dez5i2_dez5o2_do5č2m_do5š4p_do5t4l_do5t4m_do5t4r_do5t4v_dvoj5u_fol2k5_hydro5_juho5a_koso5u_lesos4_malo5o_mimo5ú_nad5h4_nad5p4_na5st4_ná5st4_na5šk4_na5v4l_na5z4r_na5z4v_náz5v4_ne6t5t_ne5z4l_ne5z4m_ne5z4n_ne5z4r_ne5z4v_nie5k4_obi5d4_obo5s4_obo5z4_od6i5ó_odo5b4_odo5h4_odo5k4_odo5p4_odo5s4_o5h4na_o5h4nú_o5c4h4_o5k4ra_o5k4rá_o5k4ri_o5k4rí_o5k4ru_o5k4rú_o5s4lo_o5s4p4_o5š4k4_o5š4ľ4_o5š4m4_o5š4p4_o5š4v4_o5v4p4_o5z4l4_o5z4re_plno5a_pod5h4_pod5k4_pod5p4_pod5re_pod5v4_pod3ža_pod3žu_pol5d4_polo5a_polo5i_po6š5v_po5t4ľ_po5t4r_pra5o4_pra5p4_pre5b4_pre5c4_pred5i_pre5č4_pre5e2_pre5f2_pre5h4_pre5i4_pre5k4_pre5m4_pre5o4_pre5p4_pre5s4_pre5š4_pre5t4_pre5v4_pre5z4_pre5ž4_pri5b4_pri5č4_pri5d4_pri5h4_pri5k4_prí5k4_pri5m4_pri5p4_pri5s4_prí5s4_pri5š4_pri5t4_pri5v4_pri5z4_pri5ž4_re6k5v_re6p5n_štáto5_sú5k4r_sú5m4r_vo5p4r_vo5s4p_vy6h5ň_vy6š5š_vý6š5k_zo6d5p_zo5d4r_zo5d4v_zo5m4l_zo5m4rauto4rkauto4rs5b4ledn5b4lesk5b4lysk5b4lysn5boh3z45b4rázd5b4ronz5b4rýzg5č4lánk5f4lias5h4liad5h4luch5c6hran5k4lásť5k4liat5k4liať5k4resb5k4resť5k4rídl5k4rôch5k4vadr5p4leta5p4letú5p4riam5s4ladk5s4lovn5s4love5s4lova5s4lovk5s4piev5s4tati5šes4ť55s4t4la5š4liap5š4kola5š4tart5š4tude5š4tudo5š4tyli5š4ťast5štiep45t4resk5t4ried5v4čera5v4šimn5v4z4du5z4mysl5z4náša5z4vest5zv4esť5ž4rane_usc6h6_ús7ta__ús7toč_úst7ny_ús6t6r4b4s4ť_4c4ht4_4j4s4ť_4m4p4r_4m4p4s_4m4š4t_4n4k4t_4p4r4v_5k4rát_akci3a2", 15 | 8: "_a2u1to32c2h1c2h2c2h1d2z2c2h1d2ž3h2r3d2z3c2h2l3p3c2h2r3b3c2h2r3č3c2h2r3l3c2h2r3t3s4c4h4n3v2r3c2h3b2l4č3n3b2ľ4č3k3b2l4n3k3b2ľ3k2n3b2r4b3l3b2r4b3t3b2r4č3k3b2r4d3c3b2ŕ4d3n3b2r3h2l3b4ŕ4k3n3b4r4m3b3b4r4n3č3b4r4n3k3b4r4š3l3b4r4t3l3b4r4t3n3b4r4v3n3b4r4z3d3b4r4z3l3b4r4z3n3c4ŕ4č3k3c4r4k3n3c4v4r3č3c4v4r3k3c4v4ŕ3k3c4v4r3l3č4l4n3k3č4r3č4r3č4r4p3k3č4r4p3n3č4r4t3n3č4v4r3k3č4v4r3l3d4l4b3n3d4r4c3n3d4r4g3ľ3d4r4g3n3d4r4h3n3d4r4n3č3d4r4n3k3d4r4s3n3d4r4ž3b3d4r4ž3k3f4r4c3k3f4r4c3n3f4r4č3k3f4r4f3l3f4r4k3n3f4r4n3d3f4r4n3g3f4r4n3k3g4l4g3n3g2r4c3k3h2ľ4b3k3h2l3t4n3h2r4b3č3h2r4č3k3h2r4g3ľ3h2r4k3ľ3h2r4k3n3h2ŕ4k3n3h2r4n3č3h2r4s3t3h2r4s3ť3k4l4b3č3k4l4b3k3k4l4z3k3k4l4z3n3k4r4č3m3k4r4č3n3k4r4k3v3k4r4m3n3k4ŕ4m3n3k4r4p3č3k4r4s3t3k4r4š3t3k4r4t3k3k4r4v3n3m2l4č3k3m2ľ4k3n3m2ľ4k3v3m2l4s3n3m4r4k3n3m4r4k3v3m4r4m3l3m4r4n3č3m4r4n3k3m4ŕ4š3t3m4ŕ4t3v3m4r4z3l3m4r4z3k3m4r4z3n3p2l4z3l3p2ľ4z3n3p2r4č3k3p4r4d3n3p4r4s3k3p4r4t3k3s4l4n3k3s4k4r3z3s4m4r3c3s4m4r3č3s4m4r3d3s4m4r3k3s4m4r3t3s4r4d3c3s4r4k3n3s4r4s3t3s4t4ľ3k3s4t4r3č3s4t4ŕ3h3s4t4r3k3š4k4l3b3š4k4r3k3š4k4ŕ3k3š4k4r3t3š4p4l3h3š4t4r3b3t2ľ4c3ť3t2r4b3l3t2r4d3l3t2r4h3l3t2r4h3n3t2r4k3n3t2r4k3v3t2r4m3n3t4ŕ4p3n3t2r4ž3k3t2r4ž3n3t2v4r3d3v2l4h3č3v2l4h3k3v2l4h3n3v2l4n3k3v2l4n3n3v4r4h3n3v4r4k3n3v4ŕ4z3g3v4r4z3g3v4r4z3n3v4r4ž3l3z4h4ŕ3ň3z4r4n3n3ž4l4č3n3ž4l4t3n3ž4r4d3kk4č3nom_k4č3ným_k4č3nej_k4č3nou_k4t3nom_k4t3ným_k4t3nej_k4t3nou_n4č3nom_n4č3ným_n4č3nej_n4č3nou_n4t3nom_n4t3ným_n4t3nej_n4t3nou_r4d3nom_r4d3ným_r4d3nej_r4d3nou_r4m3nom_r4m3ným_r4m3nej_r4m3nou_r4t3nom_r4t3ným_r4t3nej_r4t3nou_s4t3nom_s4t3ným_s4t3nej_s4t3nou_z4d3nom_z4d3nym_z4d3nej_z4d3nou_z4d3ným_l2t3k2a_l2t3k2y_l2t3k2e_l2t3k2u_n2t3k2a_n2t3k2y_n2t3k2e_n2t3k2u_p2t3k2a_p2t3k2y_p2t3k2e_p2t3k2u_s2t3k2a_s2t3k2y_s2t3k2e_s2t3k2u_5p4r4s3t4m4p3s4kr4z3š2t2_arci5k4_belo5h4_bielob4_bieloh4_bielov4_blahop4_blahos4_boha5p4_boho5s4_bože5d4_celo5d4_celo5k4_celo5p4_celo5s4_celo5u4_ceno5t4_cyto5p4_čaro5k4_čaro5s4_čaro5v4_čaro5z4_čudo5t4_de5š4t2_divo5t4_dlho5h4_dlho5p4_do5c4h4_do5š4tí_drevo5o_dvoj5al_dvoj5č4_dvoj5d4_dvoj5h4_dvoj5i4_dvoj5k4_dvoj5p4_dvoj5s4_dvoj5t4_dvoj5v4_dvoj5z4_gala5p4_gama5g4_hnedo5o_hnedo5u_holo5b4_holo5h4_holo5k4_hore5z4_jasno5o_juho5s4_kata5k4_koso5d4_koso5š4_krvi5p4_krvi5s4_krvi5t4_málo5k4_málo5v4_melo5d4_meru5ô2_mikro5o_mimo5š4_mimo5v4_mnoho5u_mnoho5v_mnoho5z_modro5o_mravo5u_na6š5sk_na5v4na_na5v4r4_ná5v4r4_na5v4z4_novo5u2_novo5z2_od5c4h4_okolo5i_o6p5lan_o6p5rat_o5s4lab_o5s4lad_o5s4lav_o5s4láv_o5s4lep_o5s4tar_o5s4tať_o5s4tan_o5s4taň_o5s4táv_o5s6to5_ostro5u_o5s4ved_o5s4vit_o5s4voj_o5t4ras_o5t4rav_o5t4ráv_o5t4rep_o5t4ria_o5v4dov_o5v4lád_o5v4laž_o5z4v4l_plno5p4_plno5š4_poda5k4_pod5b4r_pod5c4h_po5d4rh_po5d4rm_po5d4rv_pod3zem_pod3zol_po5c4h4_pol5i4z_polo5b4_polo5d4_polo5k4_polo5m4_polo5o4_polo5p4_polo5s4_polo5t4_polo5u4_polo5ú4_polo5v4_polo5z4_pol5s4t_po5ob4h_po5ob4l_po6š5ta_po6s5ti_po4v5ra_povy5h4_povy5k4_povy5p4_povy5s4_povy5v4_povy5z4_pra5v4l_pred5c4_pred5h4_pred5k4_pred5m4_pred5op_pred5p4_pred5s4_pred5v4_pred5z4_pre6s5n_prí6s5p_pri6s5p_ro4z5i4_ro6z5í4_rozo5b4_rozo5d4_rozo5m4_rozo5p4_rozo5r4_rozo5s4_rozo5š4_rozo5z4_rozo5ž4_ro6z5u4_ro6z5v43s4polu5_šikmo5o_široko5_št4vor5_su4b5s4_viac5k4_viac5v4_vide2o5_vo5p4ch_vy6h5ne_vy5c4h4_za5c4h45alkohol5b4rec2hčí6s5lov5č4lánok5d4ramat5e2u2róp5f4rancú5h4niezd5h4r3mot5h4viezd5c6h4lap5c6h4leb5c6h4rán5c6h4ráň5c6h4vál5c6h4vát5c6h4vat5k4ritic5k4valif5k4valit5p4letie5p4liesť5p4rirod5p2risám5p4roduk5s4k4lad5s4k4lon5s4k4rot5s4k4rúc5s4k4rýv5s4kúsen5s4kutoč5s4k4vúc5s4tatic5s4t4ran5s4t4rán5s4t4raš5s4t2rat5s4t2red5s4t2rek5s4t4rel5s4t4reľ5s4t4rih5s4t4riž5s4t4rom5s4t4rúh5s4t4run5s4t4ruž5š4k4rab5š4k4rie5š4print5t4retin5t4r4vaj5t4r4val5t4r4van5uholník5viac5h45v4z4ťah5v4z4ťaž5z4mysel_ús7tretkli3e2nt", 16 | 9: "_as4t4ro3c2h2r3c4h3ch4ľ4p3kčer4s3t4vmaš3k4r3tb3d4ľ4ž3nh2ŕ4s3t4ks3t4r4n3kk4č3ného_k4č3nému_k4č3ných_k4č3nými_k4t3ného_k4t3nému_k4t3ných_k4t3nými_n4č3ného_n4č3nému_n4č3ných_n4č3nými_n4t3ného_n4t3nému_n4t3ných_n4t3nými_r4d3ného_r4d3nému_r4d3ných_r4d3nými_r4m3ného_r4m3nému_r4m3ných_r4m3nými_r4t3ného_r4t3nému_r4t3ných_r4t3nými_s4t3ného_s4t3nému_s4t3ných_s4t3nými_z4d3neho_z4d3nemu_z4d3nych_z4d3nymi_z4d3ného_z4d3nému_z4d3ných_z4d3nými_l2t3k2ou_l2t3k2ám_n2t3k2ou_n2t3k2ám_p2t3k2ou_p2t3k2ám_s2t3k2ou_s2t3k2ám_n4k4t3s4kn4t3s4t4vr4v5s4t4v_aero3g2r_aero3p2l_aero3s2k_aero3s2t_aero3t2r_anti5k4l_anti5k4r_apo5p4le_as3k2lep_balne2o3_božec2h4_cudzo5k4_cudzo5o4_cudzo5s4_cudzo5t4_cudzo5v4_černo5b4_černo5h4_černo5k4_černo5o4_dis2k3d4_dobro5d4_dobro5p4_dobro5s4_do5š4tie_drevo5p4_drevo5v4_druho5s4_elektro5_horno5u4_hrôzo5v4_hrôzy5p4_hrubo5s4_jasno5z4_jedno5h4_jedno5i4_jedno5p4_jedno5s4_jedno5u4_jedno5z4_južno5s4_kmeňo5t4_krivo5p4_kruto5v4_lásky5p4_ľudovo5u_makro5k4_makro5o4_makro5s4_márno5t4_medzi5h4_medzi5i4_medzi5p4_medzi5š4_medzi5t4_mikro5e4_mikro5k4_mikro5p4_mnoho5s4_mnoho5t4_mrako5d4_mucho5t4_na5d4p4__na5d4ŕ4__na6z5vyš_ne5na5h4_ne5na5i4_ne5na5k4_ne5na5m4_ne5na5p4_ne5na5s4_ne5na5t4_ne6s5tor_ne5z4d4r_ne5z4d4v_ni6k5toš_nízko5k4_odo5m4k4_okolo5s4_o6s5tatn_o5s4tatk_o5s4vetl_o5s4viet_o5s4viež_päť5izbo_plno5kr4_po5d4ráž_po5d4rep_po5d4rie_po5d4r4ž_po6h5reb_polo5h4l_po6m5ník_po6s5tul_po6š5tov_po5t4k4n_poroz5p4_poroz5s4_poroz5v4_po5v4z4b_pra5v4nu_pra5v4nú_pred5ch4_predo5h4_pre5d4ri_pre5d4rž_pre5c4h4_pri5c4h4_pri5s4pô5f4rekvenpro6g5ram5g4vardej5c6h4vostna5d4ž4gana5d4ž4gánav3š4tevnáv3š4tevnav3š4tív5p4lastik5s4c2hopn5s4k4rutk5s4potreb5s4p4rávn5s4p4ravo5s4tarost5s4t4rach5s4t4ráda5s4t4riel5s4t4rieľ5päť5s4to5š4t4vera5t4ran4s5_ús7tami__us7t4ric5t4ľ4c4ť_t2ri3u2mf", 17 | 10: "3č4r4c4h3n3f4r4n3d4ž3c2h2r4b3t3c4h4r4s3t3p4ŕ4c2h3n3s4p4r3c4hko4s3t4r3č4s4ť5k4rát3š4t4v4r3t3š4t4v4r3ť3t2v4r3d4z3t2v4ŕ3d4z3b4r4n3k4n3c4v4r4č3k3c4v4r4n3k3č4ŕ4s3t4v3č4r4t4t3n3č4v4r4k3n3d4r4ž3g4r3f4r4n4g3n3k4r4s4t3n3k4r4s4t3ň3s4m4r4š3ť3s4m4r4t3k3š4k4l4b3n3š4k4r4t3n3š4k4v4r3č3š4k4v4r3k3š4k4v4ŕ3k3š4k4v4r3n3š4m4r4d3k3š4m4r4n3c3š4p4l4h3n3š4t4r4k3n3š3t4r4n3g3t4v4r4d3n3v4r4s3t4v3v4r4z3g4nl2t3k2ách_n2t3k2ách_p2t3k2ách_s2t3k2ách_5s4r4b3s4k_ane3s2téz_aristo5k4_austro5s4_brato5v4r_cáro5v4ra_ces2t5maj_cirkevno5_čierno5b4_čierno5h4_čierno5o4_drobno5z4_kata5s4t4_ktovie5a2_miesto5d4_miesto5p4_na5d4nes__národno5o_ne5do3u2k_o5k4resať_o5s4tatok_o5s6t4rap_plocho5d4_pod5s4koč_pol5o4blú_po6st5g4r_prá5vo5p4_pra5vo5s4_pre5d4rah_pre5d4rap_pre5d4rať_pre5d4raž_pre6k5vap_pri6š5la__pri6š5li__pri6š5lo__rozo5c4h43s4polu5h43s4polu5p43s4polu5v4_široko5p4_t4v4r4do5_vnútro5s4_vnútro5š45boles4t5n5p4ne2umat5s4k4romne5s4p4ravod5s4p4raved5d2ve5s4to5t2ri5s4to5osem5s4to5š4p4liech5š4t4vorecakvári3u2mgymnázi3umle2u3kémia", 18 | 11: "maš3k4r4t3nl2t3k2a1mi_n2t3k2a1mi_p2t3k2a1mi_s2t3k2a1mi__a2e2ro3d2r_a2e2ro3k2l_ane3s2teti_bac2k3hand_červeno5a4_červeno5b4_červeno5h4_červeno5k4_červeno5o4_červeno5p4_hrôzo5s4t4_chorobo5p45d4vanás4ť55jedenás4ť55šes4ť5s4to5sedem5s4to5deväť5s4to5š4t4ruktúr", 19 | 12: "3c2h2r4c4h3l3c2h2r4c4h3ľ3c4h4r4s4t3n3c4v4r4n3g4n3š4k4v4r4k3n3š4k4v4ŕ4k3n_akcie3s2c2h_cirkevno5p4_ďatelino5t4_na5d4robno__o5k4resávať_pravicovo5o_pred5ostatn5jedenás4t5k5m4ladis4t3v5š4tyri5s4to5vy5s4t4rája5s4to5k4rát_", 20 | 13: "5boh3vi4e3a2k5š4t4v4r4ť5k45š4t4v4r4ť5l45š4t4v4r4ť5r45š4t4v4r4ť5s4", 21 | 15: "ôs4t3k2ár3s4t4v_po6s4t5s4k4rip5boh3vi4e3o2d3k" 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /src/hypher-patterns/sl.js: -------------------------------------------------------------------------------- 1 | // For questions about the Slovenian hyphenation patterns 2 | // ask Mojca Miklavec (mojca dot miklavec dot lists at gmail dot com) 3 | module.exports = { 4 | id: "sl", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 3: "_č8_š8_ž81fa1hu1kn1sc1sp1wa1ye1zi1zn1zo1zu1čj1čl2cc2ck2ew2ft2jh2nč2vč8č_8š_8ž_a1aa1ba1ca1da1fa1ga1ha1ia1ja1ka1la1ma1na1oa1pa1sa1ta1va1ča1ša1žb1hb1mb1zb1žbe1bi1bo1d2ed2oe1ae1be1ce1de1ee1fe1ge1he1ie1je1ke1le1me1ne1pe1se1te1ve1ze1če1še1žfe1fu1go1gu1i1ai1bi1ci1di1fi1gi1hi1ii1ji1ki1li1mi1ni1pi1ri1si1ti1ui1vi1xi1zi1ši1žju1ki1ko1le1lo1na1ne1nu1o1ao1bo1co1do1eo1fo1go1ho1io1jo1ko1lo1mo1no1oo1po1so1to1uo1vo1yo1zo1čo1šo1žpe1po1qu2r1fr1rr1žre1ri1ro1si1su1t1ftu1u1bu1cu1du1eu1fu1gu1hu1iu1ju1lu1mu1nu1pu1su1tu1vu1zu1ču1šu1žv1fv1gvz2wo2x1fy1jy1ly1wz1cz1gz1tz1šz1žči1š2č", 9 | 4: "_is1_iz1_od1_st41ind1inp1inš1kre1liz1loč1naj1nas1naz1neh1peč1str1usp1viv1z1r1z2a1zlj2b1c2b1d2b1k2b1n2b1s2b1t2b1v2b1č2b1š2c1n2c1t2ch_2d1b2d1c2d1d2d1g2d1h2d1j2d1k2d1p2d1s2d1t2d1v2d1č2d1š2d3m2f1n2f1s2g1d2g1t2h1k2h1n2h1t2h1č2h1š2ine2iss2j1b2j1c2j1d2j1g2j1k2j1l2j1m2j1n2j1p2j1r2j1s2j1t2j1v2j1z2j1č2j1š2jos2jus2juč2k1c2k1d2k1m2k1t2ks_2l1b2l1c2l1d2l1f2l1g2l1h2l1k2l1l2l1m2l1n2l1p2l1s2l1t2l1v2l1z2l1č2l1š2l1ž2lj_2ljk2ljn2ljs2ljč2ljš2m1b2m1c2m1d2m1f2m1k2m1m2m1p2m1s2m1t2m1v2m1č2m1š2m1ž2n1b2n1c2n1f2n1g2n1h2n1k2n1l2n1n2n1p2n1s2n1t2n1v2n1z2n1š2n1ž2nj_2njc2njk2njs2njš2p1c2p1k2p1s2p1t2p1š2r1b2r1c2r1d2r1g2r1h2r1j2r1k2r1l2r1m2r1n2r1p2r1s2r1t2r1v2r1z2r1č2r1š2rae2s1b2s1f2s1j2s1s2sk_2st_2stk2stm2t1b2t1c2t1d2t1k2t1m2t1s2t1t2u1a2v1b2v1c2v1d2v1j2v1k2v1m2v1n2v1p2v1t2vzo2y1f2z1b2z1h2z1j2z1k2z1m2z1p2z1s2z1č2č1b2č1g2č1k2č1n2č1p2č1s2š1j2šč_2ščk2ščn2ž1b2ž1c2ž1j2ž1k2ž1č3ktr3ste4bmi4eth4hl_4igh4ile4ilo4ire4job4jož4ljc4njv4ogl4opy4phs4sc_4stf4tz_4urg4vjo4všk4zri4zru4čop4čup4žmia1e1a1raa1rea1ria1roa1rua1u1a1zea2uka4hma4jfa4mza4nma4pha4sša4tfa4ufa4ula4vžad2laf1tak4sat4ib1jaba4ube4vc1kack1sd1lod2lid4urdis1e1o1e1rae1ree1rie1roe1rue1u1e4dfe4epe4ffe4rfe4rre4wte4ywe4zte4zže4čde4čte4špeb4jed2lei2zez2gez4lh4loha4uhe4ii1e1i1o1i1čai1čei1čii1čui2zri4csi4kči4mhis4aiz1liz1uj1hijra1kok4ks1cks1pks1tl2i1le4en1čan1čen1čin1čun4dmn4ghn4gvn4tgn4tvnz4io1rao1reo1rio1roo1ruo2olo4aso4bzo4cro4kbo4kto4lro4omo4pmoiz2oz2noz2ooz2roz2voz4boz4gr4inr4thrz2ls2cis2kns4ids4onsis1taz4u1kau1keu1kou1rau1reu1riu4bpu4thub4jv1čav1čev1čiv2zav2zuv3zpve4ivt4kz1igz1liz1luz1obz1ogz1v2z2olz3dvz3kuz3vnz4omz4ujše2s", 10 | 5: "_av5r_ek3s_ek5v_si4s2d1z22j1od2n3d22p3č22v3zk2z1d22z1is2z1od2z1up2z1uz2z1z23inse3intr3razl3raču3real3rodi3v2pa3v2zg3zbir3zlil3zlog3zlož4d3vi4dind4dnas4dobč4idor4inšk4jime4kst_4ktra4mind4minp4minš4ploz4skre4tind4tinp4tnaj4zrez4zreš4zrež5dlet5obla5obro5oseb5redč5stim5tema5zlit5zliva4ksta4ziga4zoba4zraa5ju_ab5baac5ciad5uraf5gaah5miah5moai2n1aj3osaj3ugaj3učaj5fiaj5foaj5haaj5heaj5imaj5žnan5mian5ziao2b1ar5xaar5xoar5xuas5ščav5šiav5žaay5toaz3laaz3leaz5foaz5vpaž5mib3jemb3lepb3rabb3rašb3rezb3robb4ja_b5jelb5jetb5lilb5litb5livb5ordb5rasbo5vpbu5kibu5kubu5kvbu5ryc5ko_ch5mack1o2ck5weckov3d3repd4revd5litd5livd5nivd5razde4mndi5ckdo5rddo5včdu5rodu5ume2č1ve4zobe5stae5zije5zised5iged5obed5včed5zbef5feef5taeiz5eeo4dleob4jeob4res5daev5haew5leew5toez4moez4reez5djez5glez5izeč3leeč5deeč5dieč5doeč5opeč5tieč5toeč5treč5upeš5poff5mafre4uft5vego5vzh5reni4skvii2n1ik5čaim5hiisis4it5priv5joiz4laiz5meiz5moiz5poič5raič5vrj5aktjod4ljraz4ju2ž1ju5dmk5satk5vipke5tiko5kdks4poks5teku5rola4irle5melg5čalu5kilu5kum5nivm5urnme4drmy5hin4ostnad5rnaj3ond5gand5hine3d2ne3zmnez4vng5hang5vino5rdnsis4nt5gant5gent5viny5quo2d1žo2v1zo5vzaob5glob5jooc5keoc5kiod5dvod5zdoele4ok5baok5beol5reood4lop5meou5kiou5kuov3zdov5škoz5loozd5jož5mipe4ktpet3lph5sopi5zoprez4pč5kar3v2jrav5zre5jore5kmre5čvriz4griz4lriz4nro5zort5haru5klrv5jory5anrž5das4lavs4tens4tirs4tičse5mase5vpsoni5su4bosve5tta5witch5ote5xatrt5uub5pouth5oux5emuše3sv4pijv4pilv4červ5sknv5šekve4člve4čmvi5dvvo5rdz4gniz4venz4vokz5gotz5lasz5lomza1z2za3vpza5ukza5zdzd5juzliz5č5mes", 11 | 6: "_ob5it_obi4d_voz5l_voz5n_zliz62d3o2f3z4voj4d3nac4d3nar4d3nož4d5nap4d5nač4d5neb4d5niz4d5obd4j5int4l5izd4t3int4tinos4tinse4z5išč4zredč4č3let5načela4j5eka4z3oča6doblab6rodad6rl_ad6rlaad6robaj6imoaj6stban6dgaan6dhiar6dwaaz4lilaz4litaz4livaz4redaz5oraaz5orob5letab5režeba6bbaban3č4bo6chmbr6ždabre4zgbre4zibre4zrd4i5nodd6vojde4minde4z3idi4skrdi6sprdo5v4zdre6pndteks6e3z4dre4d3oče4dobse4tinše4z5ore5sti_e5stihe5stileb6lized6obeed6obrei6pziek6malek6treeo4z5nep5nikev5stvev6preev6steew6indez5imnez6ijoez6istez6lomez6maneč6vrsfe6ljtfi6zljfo6urige6igege6njčgel5č4gi6tprhu6ffmil5č4kis6ertiz6odeiz6ureizli4zje4ks4jsis6tjz6vesko6všekoz6loks6tazla6vz_le6ipzli6dž_me4d5nme6dosmi6th_mo6vš_mo6št_na4drena4j3una4v3zna6drana6durna6jakna6jočnavze6naz6ornteks4o6drepob5ideod5nalol6gčaor4dečose4m5ov5semoz5nicoz5nišoz6ložpe4tlepe4v5spev5t4po4d3lpo4dnapo6dfapo6lobpo6stdpz6ig_ra6jžnra6vzare6chtre6digre6ibare6sdare6zusre6zverev6skri5n4orob6ids4plods4tra_sek5sisi6gn_sonič4spod4ltek6stto6vž_tr6turud6mi_up6čkave4tinvi6žg_vid6vavoz5lez6ane_", 12 | 7: "_di6spo_po4d5n_po4v5s_se4k5s3i4n3os4d5njač6d5elem6tletnoera5z4rera5z4vera6z5leve6t5llju5d6jna4d5njna4j5ennje4v5so6l5avtpo4d5očra4z5idra4z5orre6dnjure6značse4k5savetle6t", 13 | 8: "_pre6d7ne4z5u4m5" 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /src/hypher-patterns/ta.js: -------------------------------------------------------------------------------- 1 | // For questions about the Tamil hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "ta", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "ா1ி1ீ1ு1ூ1ெ1ே1ை1ொ1ோ1ௌ11க1ங1ச1ஜ1ஞ1ட1ண1த1ந1ப1ம1ய1ர1ற1ல1ள1ழ1வ1ஷ1ஸ1ஹ", 9 | 3: "1அ11ஆ11இ11ஈ11உ11ஊ11எ11ஏ11ஐ11ஒ11ஓ11ஔ12ஂ12ஃ12ௗ12்1", 10 | 4: "2க்12ங்12ச்12ஞ்12ட்12ண்12த்12ன்12ந்12ப்12ம்12ய்12ர்12ற்12ல்12ள்12ழ்12வ்12ஷ்12ஸ்12ஹ்1" 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /src/hypher-patterns/te.js: -------------------------------------------------------------------------------- 1 | // For questions about the Telugu hyphenation patterns 2 | // ask Santhosh Thottingal (santhosh dot thottingal at gmail dot com) 3 | module.exports = { 4 | id: "te", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "అ1ఆ1ఇ1ఈ1ఉ1ఊ1ఋ1ఎ1ఏ1ఐ1ఒ1ఔ1ి1ా1ీ1ు1ూ1ృ1ె1ే1ొ1ో1ౌ1్2ః1ం11క1గ1ఖ1ఘ1ఙ1చ1ఛ1జ1ఝ1ఞ1ట1ఠ1డ1ఢ1ణ1త1థ1ద1ధ1న1ప1ఫ1బ1భ1మ1య1ర1ల1వ1శ1ష1స1హ1ళ1ఱ" 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /src/hypher-patterns/tr.js: -------------------------------------------------------------------------------- 1 | // For questions about the turkish hyphenation patterns ask 2 | // Andreas Lappe nd at off-pist dot de 3 | module.exports = { 4 | id: "tr", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 3: "2a12â12e12ı12i12î12o12ö12u12ü12û11b11c11ç11d11f11g11ğ11h11j11k11l11m11n11p11r11s11ş11t11v11y11z12bb2bc2bç2bd2bf2bg2bğ2bh2bj2bk2bl2bm2bn2bp2br2bs2bş2bt2bv2by2bz2cb2cc2cç2cd2cf2cg2cğ2ch2cj2ck2cl2cm2cn2cp2cr2cs2cş2ct2cv2cy2cz2çb2çc2çç2çd2çf2çg2çğ2çh2çj2çk2çl2çm2çn2çp2çr2çs2çş2çt2çv2çy2çz2db2dc2dç2dd2df2dg2dğ2dh2dj2dk2dl2dm2dn2dp2dr2ds2dş2dt2dv2dy2dz2fb2fc2fç2fd2ff2fg2fğ2fh2fj2fk2fl2fm2fn2fp2fr2fs2fş2ft2fv2fy2fz2gb2gc2gç2gd2gf2gg2gğ2gh2gj2gk2gl2gm2gn2gp2gr2gs2gş2gt2gv2gy2gz2ğb2ğc2ğç2ğd2ğf2ğg2ğğ2ğh2ğj2ğk2ğl2ğm2ğn2ğp2ğr2ğs2ğş2ğt2ğv2ğy2ğz2hb2hc2hç2hd2hf2hg2hğ2hh2hj2hk2hl2hm2hn2hp2hr2hs2hş2ht2hv2hy2hz2jb2jc2jç2jd2jf2jg2jğ2jh2jj2jk2jl2jm2jn2jp2jr2js2jş2jt2jv2jy2jz2kb2kc2kç2kd2kf2kg2kğ2kh2kj2kk2kl2km2kn2kp2kr2ks2kş2kt2kv2ky2kz2lb2lc2lç2ld2lf2lg2lğ2lh2lj2lk2ll2lm2ln2lp2lr2ls2lş2lt2lv2ly2lz2mb2mc2mç2md2mf2mg2mğ2mh2mj2mk2ml2mm2mn2mp2mr2ms2mş2mt2mv2my2mz2nb2nc2nç2nd2nf2ng2nğ2nh2nj2nk2nl2nm2nn2np2nr2ns2nş2nt2nv2ny2nz2pb2pc2pç2pd2pf2pg2pğ2ph2pj2pk2pl2pm2pn2pp2pr2ps2pş2pt2pv2py2pz2rb2rc2rç2rd2rf2rg2rğ2rh2rj2rk2rl2rm2rn2rp2rr2rs2rş2rt2rv2ry2rz2sb2sc2sç2sd2sf2sg2sğ2sh2sj2sk2sl2sm2sn2sp2sr2ss2sş2st2sv2sy2sz2şb2şc2şç2şd2şf2şg2şğ2şh2şj2şk2şl2şm2şn2şp2şr2şs2şş2şt2şv2şy2şz2tb2tc2tç2td2tf2tg2tğ2th2tj2tk2tl2tm2tn2tp2tr2ts2tş2tt2tv2ty2tz2vb2vc2vç2vd2vf2vg2vğ2vh2vj2vk2vl2vm2vn2vp2vr2vs2vş2vt2vv2vy2vz2yb2yc2yç2yd2yf2yg2yğ2yh2yj2yk2yl2ym2yn2yp2yr2ys2yş2yt2yv2yy2yz2zb2zc2zç2zd2zf2zg2zğ2zh2zj2zk2zl2zm2zn2zp2zr2zs2zş2zt2zv2zy2zz", 9 | 4: "a3a2a3â2a3e2a3ı2a3i2a3î2a3o2a3ö2a3u2a3ü2a3û2â3a2â3â2â3e2â3ı2â3i2â3î2â3o2â3ö2â3u2â3ü2â3û2e3a2e3â2e3e2e3ı2e3i2e3î2e3o2e3ö2e3u2e3ü2e3û2ı3a2ı3â2ı3e2ı3ı2ı3i2ı3î2ı3o2ı3ö2ı3u2ı3ü2ı3û2i3a2i3â2i3e2i3ı2i3i2i3î2i3o2i3ö2i3u2i3ü2i3û2î3a2î3â2î3e2î3ı2î3i2î3î2î3o2î3ö2î3u2î3ü2î3û2o3a2o3â2o3e2o3ı2o3i2o3î2o3o2o3ö2o3u2o3ü2o3û2ö3a2ö3â2ö3e2ö3ı2ö3i2ö3î2ö3o2ö3ö2ö3u2ö3ü2ö3û2u3a2u3â2u3e2u3ı2u3i2u3î2u3o2u3ö2u3u2u3ü2u3û2ü3a2ü3â2ü3e2ü3ı2ü3i2ü3î2ü3o2ü3ö2ü3u2ü3ü2ü3û2û3a2û3â2û3e2û3ı2û3i2û3î2û3o2û3ö2û3u2û3ü2û3û2", 10 | 6: "tu4r4k", 11 | 7: "2e2cek_m1t4rak" 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /src/hypher-patterns/uk.js: -------------------------------------------------------------------------------- 1 | // For questions about the Ukrainian hyphenation patterns 2 | // ask Alexey Grekov (athens at ukr dot net) 3 | module.exports = { 4 | id: "uk", 5 | leftmin: 2, 6 | rightmin: 2, 7 | patterns: { 8 | 2: "6’6ь", 9 | 3: "2а1а3аа3еа3іа3оа3уа3юа3яа3єа3ї2е1е3ае3ее3іе3ое3уе3юе3яе3єе3ї2и1и3аи3еи3іи3ои3уи3юи3яи3єи3ї2і1і3аі3еі3иі3оі3уі3юі3яі3єі3ї2о1о3ао3ео3іо3оо3уо3юо3яо3єо3ї2у1у3ау3еу3іу3оу3уу3юу3яу3єу3ї2ю1ю3аю3ею3ію3ою3ую3юю3яю3єю3ї2я1я3ая3ея3оя3уя3юя3яя3єя3ї2є1є3ує3ює3єє3ї2ї1ї3еї3ої3юд4жд4за2йе2йи2йі2йо2йу2йю2йя2йє2йї2йь6о", 10 | 4: "2б1к2б1п2б1с2б1т2б1ф2б1х2б1ц2б1ч2б1ш2б1щ2в1б2в1г2в1д2в1ж2в1з2в1к2в1л2в1м2в1н2в1п2в1р2в1с2в1т2в1ф2в1х2в1ц2в1ч2в1ш2в1щ2в1й2в’32г1к2г1п2г1с2г1т2г1ф2г1ц2г1ч2г1ш2д1к2д1п2д1с2д1т2д1ф2д1х2д1ц2д1ч2д1ш2д1щ2ж1к2ж1п2ж1с2ж1т2ж1ф2ж1х2ж1ц2ж1ч2ж1ш2з1к2з1п2з1с2з1т2з1ф2з1х2з1ц2з1ч2з1ш2з1щ2к1б2к1г2к1д2к1з2л1б2л1в2л1г2л1ґ2л1д2л1ж2л1з2л1к2л1м2л1н2л1п2л1р2л1с2л1т2л1ф2л1х2л1ц2л1ч2м1б2м1в2м1г2м1д2м1ж2м1з2м1к2м1л2м1н2м1п2м1р2м1с2м1т2м1ф2м1х2м1ц2м1ч2м1ш2м1щ2м’32н1б2н1в2н1г2н1д2н1ж2н1з2н1к2н1л2н1м2н1п2н1р2н1с2н1т2н1ф2н1х2н1ц2н1ч2н1ш2н1щ2н’32п1б2п1д2п1з2р1б2р1в2р1г2р1ґ2р1д2р1ж2р1з2р1к2р1л2р1м2р1н2р1п2р1с2р1т2р1ф2р1х2р1ц2р1ч2р1ш2р1щ2р1й2р’32с1б2с1г2с1д2т1б2т1г2т1д2т1ж2т1з2ф1б2ф1г2ф1з2х1г2х1д2ц1б2ц1г2ц1д2ц1з2ч1б2ч1д2ч1ж2ш1б2ш1г2й1б2й1в2й1г2й1д2й1ж2й1з2й1к2й1л2й1м2й1н2й1п2й1р2й1с2й1т2й1ф2й1х2й1ц2й1ч2й1ш2й1щ2б1б2в1в2г1г2ґ1ґ2д1д2ж1ж2з1з2к1к2л1л2м1м2н1н2п1п2р1р2с1с2т1т2ф1ф2х1х2ц1ц2ч1ч2ш1ш2щ1щ2й1й3ння3ття3ттю3лля3ллє3ллю3ддя3й6о_б’8_в’8_д’8_з’8_м’8_н’8_п’8_р’8_т’8_ф’8_ш’8_бд6_бр6_вб6_вг6_вд6_вж6_вз6_вк6_вл6_вм6_вп6_вс6_вт6_дж6_дз6_дл6_дс6_зб6_зг6_зд6_зл6_зс6_зч6_зш6_зґ6_йш6_кл6_кп6_кс6_кх6_кш6_лс6_ль6_мс6_мф6_нб6_пр6_пс6_пх6_рт6_ск6_сл6_сп6_ст6_сх6_тк6_тр6_тх6_ть6_фл6_хл6_ць6_чх6_шк6_шл6_шп6_шт66бв_6бз_6бй_6бл_6бн_6бр_6бс_6вб_6вв_6вд_6вж_6вз_6вй_6вк_6вл_6вм_6вн_6вп_6вр_6вс_6вт_6вх_6вч_6вш_6вщ_6гв_6гг_6гд_6гл_6гм_6гн_6гр_6гс_6гт_6дж_6дз_6дл_6дм_6дн_6др_6дт_6дь_6жб_6жв_6зв_6зг_6зд_6зк_6зл_6зм_6зн_6зр_6зь_6йб_6йв_6йг_6йд_6йз_6йк_6йл_6йм_6йн_6йп_6йр_6йс_6йт_6йф_6йх_6йц_6йч_6йш_6кв_6кк_6кл_6кр_6кс_6кт_6кх_6кш_6лб_6лг_6лд_6лк_6лл_6лм_6лн_6лп_6лс_6лт_6ль_6мб_6мг_6мж_6мк_6мл_6мм_6мн_6мп_6мр_6мс_6мт_6мф_6мх_6мш_6нв_6нг_6нд_6нж_6нз_6нк_6нм_6нн_6нр_6нс_6нт_6нф_6нх_6нц_6нч_6нш_6нь_6пд_6пл_6пр_6пс_6пт_6пф_6пц_6рб_6рв_6рг_6рд_6рж_6рз_6рк_6рл_6рм_6рн_6рп_6рр_6рс_6рт_6рф_6рх_6рц_6рч_6рш_6рщ_6рь_6ск_6сл_6см_6сн_6сп_6сс_6ст_6сь_6тв_6тл_6тм_6тр_6тс_6тт_6тц_6тч_6ть_6фм_6фр_6фт_6фф_6фь_6хв_6хм_6хн_6хр_6хт_6хш_6ць_6чб_6чм_6чн_6чт_6шв_6шм_6шн_6шт_виї4оо4боб’3од’3’ї4в’ї4з’ї4д’ї4ж’ї4л’ї4м’ї4с’ї4хге4ооо4куя4вді4омі4оі4онзо6ооу4с", 11 | 5: "2дь1к2дь1с2дь1т2дь1ц2зь1к2зь1с2зь1т2ль1б2ль1в2ль1г2ль1д2ль1ж2ль1з2ль1к2ль1м2ль1н2ль1п2ль1р2ль1с2ль1т2ль1ф2ль1х2ль1ц2ль1ч2ль1ш2ль1щ2ль1й2нь1б2нь1г2нь1з2нь1к2нь1л2нь1м2нь1с2нь1т2нь1х2нь1ц2нь1ч2нь1ш2нь1й2рь1к2рь1ц2сь1б2сь1д2ть1б2к1сп2к1ст2п1сп2п1ст2с1пк2с1пп2с1пс2с1пт2с1пх2с1пч2с1тк2с1тп2с1тс2с1тт2с1тф2с1тц2с1шт2т1ск2т1сп2т1ст2т1шк2ф1сп2ф1ст2ф1шт2х1ст2ц1ст2ц1шк2ш1тк3п4ре3п4риприї43п4ро3п4ріооб’3ооб3мнао4рнеу4к3блаж3ближ3близ3блок3бран3бруд3глад3глиб3глин3глоб3глуз3глуш3гляд3глян3гнан3гнил3гноз3грав3град3грай3грам3гран3граф3граш3граю3грає3грес3гроб3грож3гроз3груп3грів3гріт3гріш3д4ан3двиг3двою3двоє3двій3двір3драж3дром3друж3друк3дряп3дріб3жвав3зваж3зван3звед3звел3звич3звищ3звук3звуч3звіт3змін3зйом3зміш3знав3знай3знак3знал3знан3знат3знач3знаю3знає3зниж3знім3зрюв3зрів3зріл3зрін3й4ма3с4пі3х4то3ї4зд3ї4ставі4абі4о3дої4ддої4мдої4хдої4жзаї4дзаї4жзаї4ззаї4лзаї4мзаї4хзо4казо4кезо4кизо4кузо4кіий4тиій4тинаї4жнаї4знаї4лнаї4мнаї4снаї4хпоя4в_пої4пої4дпрої4сеї4ду4к4рвия4вз’я4взая4вная4веті4одея4као4хаео4ханія4кдоу4кдоу4мнею4ннея4кое4копоя4соа4ктеа4ктий4няпій4мвий4мзай4моа4на", 12 | 6: "2к1ськ2п1ськ2с1ськ2с1тсь2сь1кк2сь1кс2сь1кт2т1ськ2ф1ськ2х1ськ2ш1тсь_вб6’6_вв6’6_вз6д6_вм6’6_вп6’6_вп6х6_вс6т6_вш6к6_зв6’6_зд6з6_зм6’6_зс6к6_зс6т6_зш6к6_лк6с6_ск6л6_сп6’6_сп6л6_сп6х6_сх6л66б6ль_6б6ст_6б6ць_6в6др_6в6дь_6в6зь_6в6ль_6в6сь_6в6ць_6г6ль_6г6сь_6д6зь_6ж6дь_6ж6сь_6з6дв_6з6дн_6з6дь_6з6нь_6з6сь_6з6ьб_6з6ьк_6й6кл_6й6ль_6й6мс_6й6нс_6й6ст_6й6сь_6й6тс_6к6ль_6к6ст_6к6сь_6к6тр_6л6ль_6л6мс_6л6хв_6л6ьб_6л6ьв_6л6ьг_6л6ьд_6л6ьз_6л6ьк_6л6ьм_6л6ьн_6л6ьп_6л6ьс_6л6ьт_6л6ьф_6л6ьх_6л6ьц_6л6ьч_6л6ьш_6л6ьщ_6м6бр_6м6ль_6м6сь_6н6гл_6н6гр_6н6гс_6н6дж_6н6дз_6н6дп_6н6др_6н6кс_6н6кт_6н6ск_6н6ст_6н6тк_6н6тр_6н6ть_6н6ць_6н6ьб_6н6ьг_6н6ьк_6п6сь_6п6тр_6р6дв_6р6дж_6р6дь_6р6зн_6р6зь_6р6кс_6р6кт_6р6ль_6р6нс_6р6нь_6р6ср_6р6ст_6р6сь_6р6тв_6р6тр_6р6ть_6р6ць_6с6дп_6с6ль_6с6тв_6с6тй_6с6тм_6с6тр_6с6ть_6с6ць_6с6ьб_6с6ьк_6с6ьм_6т6вт_6т6зт_6т6ль_6т6мр_6ф6ть_6ц6тв_6ц6ьк_6ш6ль_6ш6нл_6ш6сь_6ш6тв_6щ6сь__бе4з3_безу4віду4ч_ві4д3_від’3_мі4ж3ові4д3_пере3_під’3_пі4д3_пі4в3_ро4з3ооб3рона4д’3за5о4рдо5о4рпо5о4рз3в’4яза3ю4шу3в’4яз3м’4яу3м’4яв3м’4язу4рочприо4р3й4ш4л3блиск3блоці3брати3брест3бризк3в4бив3в4дал3в4лад3в4лов3в4сюд3в4тіл3гнучк3грати3грець3грунт3д4бав3д4бал3д4бан3д4бат3д4бає3двічі3дріма3жміть3жріть3з4був3з4бут3звест3звись3з4год3з4дат3з4чеп3й4мищ3й4му_3й4шов3м4нож3м4щен3п4сов3п4сон3п4сув3р4вав3с4кид3с4кок3с4коп3с4кор3с4коч3с4пад3с4пин3с4піш3с4тав3с4тад3с4таз3с4тал3с4тан3с4тар3с4тат3с4тач3с4тає3с4теп3с4тиг3с4тиж3с4той3с4тою3с4туп3с4тяг3с4тіб3с4тій3с4тір3с4фер3с4хил3с4хов3с4хід3т4кан3ш4код3ш4кол3ш4кіл3ш4кір3ш4таб3ш4туч3ґрунт3е4тап3о4бід3о4біц3о4дяг3о4соб3о4хоч3о4чищ3у4ваг3у4важ3у4гав3у4мит3у4міл3у4ряд3я4зик3я4кіс3я4рус3є4д3н3є4дин3є4рей3ї4ждж3ї4хав3ї4хат_заї4к_заї4ц_заї4ч_наї4давої4дае4тилахої4дауді4обе5конб’4єтьбран4дви3й4дви3й4т3в’4яз4д7земді3й4тді3й4д_дої4в_дої4лдої4стеу4стрео4свіек2с1кек2с1пек2с1тек2с1цигої4діе4тилйо4свіквої4д3м’4ятна3з4внаї4вснаї4вшна4й3ана4й3енедої4неї4стоної4доо4палео4палонаї4доо4свіоу4строа4томпоч4непоч4нипоч4нупої4здраді4оз’4єднрмої4дсор4тнцук3роубої4дясої4дви3у4чза3у4чна3у4чне3у4чгелі4ополі4осоці4офізі4охімі4огоме4оао4пікка5налоі4золмете4оабия4квия4сннея4снпоя4сннеа4биео4ціноо4цінео4бурео4зорпіво4спале4оао4хотео4хотео4щадао4щадоо4чищоо4бігоу4суноу4комз3а4ктеу4богзай4нянай4няприй4мдій4манай4маобой4мпрой4мобій4моу4годау4годеу4годео4писоо4писао4пис_ом4рі_ум4ри_ум4рі_ум4ру_ум4ревиу4ди", 13 | 7: "_бе4з’3_ві5д4а_ві5д4іневі4д3_пі5д4о_пі5д4і_пі5д4е_пі5д4и_пі5д4у_спі4в3_ро5з4і_ро5з4е_ро5з4а_ро4з’3до3в’4єза3в’4єзі3в’4єпо3в’4єуі3в’4єпо3в’4яза3в’4язі3в’4яна3в’4яоб3в’4язі3м’4яно3м’4яза3м’4яна3м’4яоб3м’4япо3м’4ясу3м’4ядо3в’4юза3в’4юзі3в’4юна3в’4юпо3в’4юуі3в’4юза3я4локоу4рочпоу4роч3м4к4не3м4к4ну3м4к4ні3с4к4ле3с4к4ло3британ3в4довз3в4ласн3в4лашт3в4певн3громад3груван3г4ідро3з4бага3зворуш3з4довж3знаход3зрозум3й4менн3й4муть3й4міть3м4ріть3р4вати3р4віть3с4кіль3с4кіпл3с4пект3с4перм3с4піть3с4тайн3с4тара3с4тисл3с4титу3с4товб3с4тосо3с4тосу3с4тоян3с4тіль3ш4кідл3а4гент3а4грес3а4зарт3а4ктив3а4куст3а4кциз3а4птеч3а4соці3а4тлет3а4халі3е4моці3е4мігр3е4нерг3е4стет3о4бира3о4даль3о4збро3о4крем3о4плат3о4птим3о4пуст3о4пуше3о4пуще3о4ренд3о4сяжн3о4холо3о4чисн3у4згод3у4клад3у4рбан3у4спіш3у4твор3я4дерн3є4писк3і4снув_бе5зе_бйор4нсвер4х3нвід7знаві5д4енві5д4омво4с5ко_дої5ль3з’4ясозна3й4дзна3й4ткорої4д3м’4якшна3в4чанео4палобі3й4добі3й4тпереї4дпереї4жпереї4зпереї4лпереї4спереї4хпре4й4спо3д4вопри3й4тпро4ф3спор4т3нпри3й4дроз5винроз5витро5з4умспе4цпрспе4ц3ссь4квугтран4с3під3у4чво4єводво4єначді4алогді4огенпроя4снрозо4рарозо4рерозо4рннапоу4мне4олітне4ологне4онацне4офітнея4рок_пе4ом_д3у4сімроз’я4рте4ологте4ософа3у4даро3у4дарз3у4дарв3у4дареі4стотоі4стотоо4чистнайа4ктпіва4ктао4бразео4бразоо4бразиа4варіяа4варіоа4варіеа4варіаа4дресеа4дресоа4дресіа4дресае4фектее4фектое4фектое4місіие4місіяе4місіее4місій3у4богздій4няобій4няд4о3й4мперей4мбезу4глоа4каціоо4держбіблі4о_на3в4ч_ви3в4ч_до3в4ч_за3в4ч_по3в4чана3в4чена3в4чови3в4чеви3в4чедо3в4чоза3в4чпо3в4чае3м4рій_ви3м4р_за3м4р_зі3м4р_на3м4р_по3м4рие4стетое4стетее4стетоо4ктаніо4ктано3в4казе3в4каз", 14 | 8: "6б6с6тв_6б6с6тр_6б6с6ьк_6в6с6тв_6в6с6ть_6в6с6ьк_6г6с6тв_6д6с6тв_6д6с6ьк_6д6ь6сь_6й6с6тв_6й6с6тр_6й6с6ьк_6л6ь6дс_6л6ь6сь_6л6ь6тр_6м6б6ль_6м6с6тв_6м6с6ьк_6н6г6ль_6н6с6тв_6н6с6тр_6н6с6ьк_6н6ь6сь_6п6с6тв_6р6л6ьз_6р6н6ст_6р6с6тв_6р6с6ть_6р6с6ьк_6р6щ6сь_6с6д6рп_6с6т6рь_6т6с6тв_6т6с6ьк_6т6ь6сь_6ф6с6тв__ві5д4ом_ві5д4ун_ві5д4ербезві4д3неві4д’3_пона4д3_напі4в3ро5з4йом_чере4з3пере5о4рпі6д5о4робі3в’4євід3в’4япри3в’4япід3в’4япри3м’4янаду4рочприу4роч3в4б4лаг3в4к4лад3в4п4лив3в4т4рут3в4т4руч3з4б4рой3з4б4рою3з4б4роє3з4в4’яз3п4с4ков3с4к4лад3с4к4лит3с4п4лав3с4п4лат3с4п4лач3с4п4рав3с4т4вор3с4т4рах3с4т4риб3с4т4риж3с4т4рой3с4т4рок3с4т4ром3с4т4роф3с4т4роч3с4т4рою3с4т4роя3с4т4роє3с4т4рої3с4т4рій3с4т4ріл3с4т4річ3т4к4нен3т4ь4мар3у4п4рав3в4веден3в4довол3в4живан3в4поряд3в4рожай3з4доров3з4дійсн3с4короч3с4повід3с4пожив3с4табіл3с4тереж3с4теріг3с4торон3с4торін3а4дитив3а4ктуал3а4курат3а4кцепт3а4лергі3а4матор3а4наліз3а4натом3а4парат3а4пеляц3а4ромат3а4спект3е4колог3е4коном3е4лектр3о4б’єдн3о4б’єкт3о4береж3о4борон3о4перат3о4хорон3у4компл3у4крупн3у4перед3у4рядов3у4стпіш3у4тробн3я4скрав3і4зотоп3і4люстр3і4мовір3і4нтенс3і4нформальбі5онбей4сболбо4г3данбо4є3голбо4є3готбо4є3запбори4с5пвина3й4двина3й4тві5д4е4оджен4тльди4с3локди4с3пледи4с3путди4с3тилд4ні3п4рдо3з4волдо3з4вілкон4трремо4к5рийна3б4лизна3в4рядна4д7з4вна3в4ченне3в4томне3д4банна3д4банне3з4вичне3з4важна5п4ливні4т5ратоб5у4мовпере3й4дпере3й4тпі5в4еньпо3в4торпо3в4ченпо3д4робпо3д4разпо5з4бавпри4нципрай3в4нороз5вантро4з5ділро4з5горро4з5верро4з5чепро4з3ливсан4к4т3серцеї4дстат5упрукр3а4втукр3а4грукр3е4кснедо3у4чпед3у4чипере3у4чсамо3у4чсво4єчассво4єрідоо4динокміжу4собнай3я4снроз’я4снро5з4ориро5з4ороро5з4оруро5з4оряро5з4орюро5з4орірозо4решео4голошбальне4оне4окласпі5в4оніп4о5берео3о4кисли3о4кисле3о4кислх3о4кисли3і4сторо3і4сторі3і4стора3і4сторя3і4сторе3і4сторар4т3мінар4т3підар4т3ринар4т3хімперей4няпідій4нябезу4пин_при3в4чмона3в4чжона3в4чіона3в4ч_зав3м4р_при3м4р_роз3м4рй3е4стет", 15 | 9: "6л6ь6ств_6л6ь6ськ_6н6с6ькй_6н6т6ств__бе5з4о3д_безві4д3_ві5д4озвді4єві4д3за4вві4д3співві4д3_пере4д3г_пере4д3д_пере4д3м_пере4д3р_пере4д3ч_пере4д’3_пона5д4і_пона5д4и_пона5д4я_чере4з’3непо3в’4япере3м’4япіді3м’4япозау4роч3в4п4равн3с4к4рипт3с4п4ритн3с4п4рият3с4п4ромо3с4т4ражд3с4т4рукт3с4т4рукц3т4ь4мяні3в4разлив3з4баланс3й4мовірн3с4постер3а4вторит3а4декват3а4постол3а4ргумен3е4легант3е4лемент3е4стакад3о4рдинац3у4люблен3у4разлив3у4рочист3у4станов3у4сувати3і4ніціатай4с3бергбактері4оба4с3енербез5і4менбо4є3здатбо4є3компбо4є3постбо4є3прип4в3антрацге2ть3мандер4ж5виддер4ж5думдер4ж5комдер4ж3бездер4ж5стрдисбалансди4с3гармди4с3квалди4с3комфди4с3контди4с3кредди4с3кретди4с3крецди4с3кримди4с3кусіди4с3кутуди4с3персди4с3петчди4с3плейди4с3позиди4с3пропди4с3трибди4с3трофєв4р3атомєпі4с5копєпи4с5копза4п3часті4л3е4тилкиї4венермі4н5е4кона4й3маслна4й3сприна4й3якісна3в4чітьобі3д4раноб4лдер4жперег4нійпере4д5смпід5о4динпо3б4лизупо3в4чітьпо5ж4нітьпос4т3каппос4т3компос4т3натпос4т3соцпор4т3ретпор4т3фелпро4ект3нпро3б4лемпро4м3майпр4о5платро4з5д4вороз5у4ченроз5і4менро4з’5єднро4з3громспе4ц3курспе4ц3мон3с4проможтур4к3менро5з4ора_ро5з4орахне4омальтне4окомунне4оландшне4оліберно4к3а4утте4одолітпів3о4валнаді4сторар4т3афішар4т3кафеар4т3майсар4т3мейсар4т3фактнаді4стотнайі4стотау4т3еколбеза4варібезе4місіо3а4налізц3а4налізз3а4налізм3а4налізпів3у4годроз3у4год_віді3м4р_пере3м4рво4станнєоо4плачувео4плачув", 16 | 10: "_без5о4соб_без3ро4з3те4х3ві4д3_пере4д3св_пере4д3фрбе4з5і4дейінтер3в’4юна4й3у4бог3в4р4одливба4с3антравід5о4бражвід5о4бразводо5с4токводо5з4бірго4с4п5роздер4ж5а4дмдер4ж5бюдждер4ж5нафтдер4ж5реєсдер4ж5служдвох4а5томди4с3паритди4с3функцкон4тр3аргмі4н5е4нерна4й7о4берна4й7о4гидна4й7о4голна4й7о4пукна4й7о4хайпере5п4ливпере3в4томпів5о4с4трпос4т3процпос4т3фіксспор4т3вирспор4т3залспор4т3комспор4т3майтор4г3предсво4єкорисро5з4о5рамро6з5о4ри_ень7о4кислнай3і4сторпів3і4сторар4т3взводар4т3медіаар4т3о4динар4т3о4збрар4т3центргіпер3а4ктнай3о4бразар4т3мейстго4ф3мейстдо4к3мейстхо4р3мейстміж3а4варінад3а4варібез3а4дреснай3е4фектбло4к3пост_блі4ц3ана_блі4ц3турнт3а4налізре3а4налізбо4р4т3мехбо4р4т3пробо4р4т3радпан3е4стетпар3е4стет", 17 | 11: "про4ф3ві4д3спе4ц3ві4д3_пере4д3бач_пере4д3виб_пере4д3ост_пере4д3пла_пере4д3пок_пере4д3усібрі4дж3портволь4т3метргі4д5ро5метдер4ж5а4томдер4ж5замовзе4кономитиказа4х3станквар4т3платжко4м5а4томкому4ненергна4й3обережна4й7о4грядоб4л3а4дмінперед5о4бідперед5у4мовпо4с4т5комупо4с4т3декрпо4с4т3радіпо4с4т5соціпро3с4тирадполі4т5еконро4з5міннийруко5с4тискспор4т3клубспор4т4с3мечорно3б4ривхво4є3г4ризпа4н3о4тецьконтр3у4дарпост3і4сторар4т3десантар4т3о4бстрар4т3у4станграф3о4бразгро4с3мейсткра4н3мейстшта4л3мейстєге4р3мейстпост3а4варі_блі4ц3криг_блі4ц3опит_блі4ц3торгбак3а4налізген3а4налізміж3а4налізгос4п3у4годбо4р4т3і4нжнай3о4станнперед3о4пла", 18 | 12: "_пере4д3умовволь4т3ампердер4ж3резервдорого5в4казінфор4м3агенпо4с4т5радянпо4с4тприватукр3і4н4банкперед3і4сторсупер3о4бразбаге4р3мейстбале4т3мейстбран4д3мейстполі4ц3мейстпо4ш4т3мейстшапі4т3мейстнапів3а4варіперед3а4варісупер3а4варісупер3е4фектгіпер3е4місіполі3а4налізбо4р4т3о4пер", 19 | 13: "по4с4т3контрацен4т4р3енергва4ль4д3мействе4ль4т3мейстдекре4т3мейсткапе4ль3мейст_блі4ц3і4спитперед3о4станн", 20 | 14: "енерго3з4береженерго3з4берігкварти4р3мейстфо4р4с4т3мейст", 21 | 15: "по4с4т3менопаузконце4р4т3мейст" 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const modules = { 2 | quotes: require("./quotes"), 3 | hyphenate: require("./hyphenate"), 4 | ligatures: require("./ligatures"), 5 | smallCaps: require("./smallCaps"), 6 | punctuation: require("./punctuation"), 7 | hangingPunctuation: require("./hangingPunctuation"), 8 | spaces: require("./spaces"), 9 | }; 10 | 11 | const applyModuleToText = require("./eachTextNode"); 12 | 13 | module.exports = (html, options = {}) => { 14 | for (const moduleName in modules) { 15 | const currentModule = modules[moduleName]; 16 | 17 | // Check if the module should be enabled based on options 18 | if (options.enable && !options.enable.includes(moduleName)) { 19 | continue; 20 | } 21 | 22 | // Check if the module should be disabled based on options 23 | if (options.disable && options.disable.includes(moduleName)) { 24 | continue; 25 | } 26 | 27 | // Apply the module to the HTML 28 | html = applyModuleToText(html, currentModule, options); 29 | } 30 | 31 | return html; 32 | }; 33 | -------------------------------------------------------------------------------- /src/ligatures.js: -------------------------------------------------------------------------------- 1 | module.exports = (text) => { 2 | text = text.replace(/fi/g, "fi"); 3 | text = text.replace(/fl/g, "fl"); 4 | 5 | return text; 6 | }; 7 | -------------------------------------------------------------------------------- /src/punctuation.js: -------------------------------------------------------------------------------- 1 | module.exports = (text) => { 2 | 3 | // N Dash 4 | // https://en.wikipedia.org/wiki/Dash#En_dash 5 | // This is before M Dash because we want to handle number ranges as a special case before the more general fixes below. 6 | text = text.replace(/(\d+)\s?-\s?(\d+)/g, "$1 – $2"); 7 | text = text.replace(/(\d+)\s?–\s?(\d+)/g, "$1 – $2"); 8 | text = text.replace(/(\d+)\s?—\s?(\d+)/g, "$1 – $2"); 9 | 10 | // M Dash 11 | // https://en.wikipedia.org/wiki/Dash#Em_dash 12 | text = text.replace(/--/g, "–"); 13 | text = text.replace(/ – /g, " — "); 14 | 15 | // Ellipsis 16 | // https://en.wikipedia.org/wiki/Ellipsis 17 | text = text.replace(/\.\.\./g, "…"); 18 | 19 | // Non-breaking space 20 | // https://en.wikipedia.org/wiki/Non-breaking_space 21 | const NBSP = " "; 22 | const NBSP_PUNCTUATION_START = /([«¿¡]) /g; 23 | const NBSP_PUNCTUATION_END = / ([\!\?:;\.,‽»])/g; 24 | 25 | text = text.replace(NBSP_PUNCTUATION_START, "$1" + NBSP); 26 | text = text.replace(NBSP_PUNCTUATION_END, NBSP + "$1"); 27 | 28 | return text; 29 | }; 30 | -------------------------------------------------------------------------------- /src/quotes.js: -------------------------------------------------------------------------------- 1 | module.exports = (text, node, $) => { 2 | if ($(node).parent().is("p, blockquote") && $(node).parent().text() !== text) { 3 | const parentText = replace($(node).parent().text()); 4 | let start = 0; 5 | 6 | $(node).parent().contents().each(function () { 7 | if (this === node) return false; 8 | 9 | start += $(this).text().length; 10 | }); 11 | 12 | return parentText.slice(start, start + text.length); 13 | } 14 | 15 | return replace(text); 16 | }; 17 | 18 | function replace(text) { 19 | text = text 20 | .replace(/(\W|^)"([^\s\!\?:;\.,‽»])/g, "$1\u201c$2") // beginning " 21 | .replace(/(\u201c[^"]*)"([^"]*$|[^\u201c"]*\u201c)/g, "$1\u201d$2") // ending " 22 | .replace(/([^0-9])"/g, "$1\u201d") // remaining " at end of word 23 | .replace(/(\W|^)'(\S)/g, "$1\u2018$2") // beginning ' 24 | .replace(/([a-z])'([a-z])/gi, "$1\u2019$2") // conjunction's possession 25 | .replace(/((\u2018[^']*)|[a-z])'([^0-9]|$)/gi, "$1\u2019$3") // ending ' 26 | .replace( 27 | /(\u2018)([0-9]{2}[^\u2019]*)(\u2018([^0-9]|$)|$|\u2019[a-z])/gi, 28 | "\u2019$2$3" 29 | ) // abbrev. years like '93 30 | .replace( 31 | /(\B|^)\u2018(?=([^\u2019]*\u2019\b)*([^\u2019\u2018]*\W[\u2019\u2018]\b|[^\u2019\u2018]*$))/gi, 32 | "$1\u2019" 33 | ) // backwards apostrophe 34 | .replace(/'''/g, "\u2034") // triple prime 35 | .replace(/("|'')/g, "\u2033") // double prime 36 | .replace(/'/g, "\u2032"); 37 | 38 | // Allow escaped quotes 39 | text = text 40 | .replace(/\\“/g, '"') 41 | .replace(/\\”/g, '"') 42 | .replace(/\\’/g, "'") 43 | .replace(/\\‘/g, "'"); 44 | 45 | return text; 46 | } 47 | -------------------------------------------------------------------------------- /src/smallCaps.js: -------------------------------------------------------------------------------- 1 | const Entities = require("html-entities").AllHtmlEntities; 2 | const entities = new Entities(); 3 | 4 | // Only numbers regex 5 | const onlyNumbers = new RegExp("^\\d+$"); 6 | 7 | // Ensure the word has a length of more than 2 letters, 8 | // does not contain punctation since exterior punctuation 9 | // has been stripped by this point. If so, then see if the 10 | // uppercase version of the word is indentical, if so it's 11 | // very probably an acronym 12 | function isAcronym(word) { 13 | return ( 14 | word.length && 15 | word.trim().length > 1 && 16 | !onlyNumbers.test( 17 | word.replace(/[\.,-\/#!–$%°\^&\*;?:+′|@\[\]{}=\-_`~()]/g, "") 18 | ) && 19 | word.replace(/[\.,-\/#!$%\^&\*;–?:+|@\[\]{}=\-_`~(′°)]/g, "") === word && 20 | word.toUpperCase() === word 21 | ); 22 | } 23 | 24 | function removeCruft(word) { 25 | let ignore = "{}()-‘’[]!#$*&;:,.“”″′‘’\"'" 26 | .split("") 27 | .concat([""", "'s", "’s", "'s"]); 28 | const encodedIgnore = ignore.slice(0); 29 | 30 | for (const x in encodedIgnore) 31 | encodedIgnore[x] = entities.encode(encodedIgnore[x]); 32 | 33 | ignore = ignore.concat(encodedIgnore); 34 | 35 | let trailing = ""; 36 | let leading = ""; 37 | 38 | for (let i = 0; i < ignore.length; i++) { 39 | const ignoreThis = ignore[i]; 40 | const endOfWord = word.slice(-ignoreThis.length); 41 | 42 | if (endOfWord === ignoreThis) { 43 | trailing = ignoreThis + trailing; 44 | word = word.slice(0, -ignoreThis.length); 45 | i = 0; 46 | continue; 47 | } 48 | } 49 | 50 | for (let j = 0; j < ignore.length; j++) { 51 | const ignoreThat = ignore[j]; 52 | const startOfWord = word.slice(0, ignoreThat.length); 53 | 54 | if (startOfWord === ignoreThat) { 55 | leading += ignoreThat; 56 | word = word.slice(ignoreThat.length); 57 | j = 0; 58 | continue; 59 | } 60 | } 61 | 62 | return [leading, word, trailing]; 63 | } 64 | 65 | module.exports = (text) => { 66 | const wordList = text.split(" "); 67 | 68 | for (const i in wordList) { 69 | const brokenWord = removeCruft(wordList[i]); 70 | const word = brokenWord[1]; 71 | const leading = brokenWord[0]; 72 | const trailing = brokenWord[2]; 73 | 74 | if (isAcronym(word)) { 75 | wordList[i] = 76 | leading + '' + word + "" + trailing; 77 | } 78 | } 79 | 80 | return wordList.join(" "); 81 | }; 82 | -------------------------------------------------------------------------------- /src/spaces.js: -------------------------------------------------------------------------------- 1 | module.exports = (text) => { 2 | // Replaces wide spaces with hair spaces 3 | text = text.replace(/ × /g, " × "); 4 | text = text.replace(/ \/ /g, " / "); 5 | 6 | return text; 7 | }; 8 | -------------------------------------------------------------------------------- /test/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es6", 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "singleQuote": false, 6 | "printWidth": 80, 7 | "bracketSpacing": true, 8 | "overrides": [ 9 | { 10 | "files": "*.js*", 11 | "options": { 12 | "prettier.printWidth": 80 13 | } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /test/hangingPunctuationSpec.js: -------------------------------------------------------------------------------- 1 | const typeset = require("../src/index"); 2 | const expect = require("chai").expect; 3 | 4 | function hang(html) { 5 | return typeset(html, { 6 | enable: ["hangingPunctuation"], 7 | }); 8 | } 9 | 10 | describe("Hanging Punctuation", () => { 11 | it("text without hangable punctuation should be the same after call the function", () => { 12 | const html = "

En un lugar de la mancha

"; 13 | expect(hang(html)).to.equal("

En un lugar de la mancha

"); 14 | }); 15 | 16 | it("should hang punctuation in middle.", () => { 17 | const html = '

Hello, "Mr" Fox.

'; 18 | expect(hang(html)).to.equal( 19 | '

Hello, "Mr" Fox.

' 20 | ); 21 | }); 22 | 23 | it("should hang punctuation at start.", () => { 24 | const html = '

"Hello, Mr Fox."

'; 25 | expect(hang(html)).to.equal( 26 | '

"Hello, Mr Fox."

' 27 | ); 28 | }); 29 | 30 | it("should add a spacer when wrapping a node equaling a text node", () => { 31 | const html = '

X "O" X

'; 32 | expect(hang(html)).to.equal( 33 | '

X "O" X

' 34 | ); 35 | }); 36 | 37 | it("should hang single punction at start.", () => { 38 | const html = "

'Hello, Mr Fox.'

"; 39 | expect(hang(html)).to.equal( 40 | "

'Hello, Mr Fox.'

" 41 | ); 42 | }); 43 | 44 | it("should add a spacer when inside a node next to a text node", () => { 45 | const html = '

X "O" X

'; 46 | expect(hang(html)).to.equal( 47 | '

X "O" X

' 48 | ); 49 | }); 50 | 51 | it("should hang punctuation with two p", () => { 52 | const html = "

ABC

\n" + '

"Hello Fox."

'; 53 | expect(hang(html)).to.equal( 54 | "

ABC

\n" + '

"Hello Fox."

' 55 | ); 56 | }); 57 | }); 58 | -------------------------------------------------------------------------------- /test/ligaturesSpec.js: -------------------------------------------------------------------------------- 1 | const typeset = require("../src/index"); 2 | const expect = require("chai").expect; 3 | 4 | function lig(html) { 5 | return typeset(html, { 6 | enable: ["ligatures"], 7 | }); 8 | } 9 | 10 | describe("Ligatures", () => { 11 | it("text without ligatures should be the same after call the function", () => { 12 | const html = "

En un lugar de la mancha

"; 13 | expect(lig(html)).to.equal("

En un lugar de la mancha

"); 14 | }); 15 | 16 | it("should replace (fi) by (fi)", () => { 17 | const html = 18 | "

A file folder (US usage) (or folder in British and Australian usage) is a kind of folder that holds loose papers

"; 19 | expect(lig(html)).to.equal( 20 | "

A file folder (US usage) (or folder in British and Australian usage) is a kind of folder that holds loose papers

" 21 | ); 22 | }); 23 | 24 | it("should replace (fl) by (fl)", () => { 25 | const html = 26 | "

fluency is a speech language pathology term that means the smoothness or flow with which sounds

"; 27 | expect(lig(html)).to.equal( 28 | "

fluency is a speech language pathology term that means the smoothness or flow with which sounds

" 29 | ); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /test/punctuationSpec.js: -------------------------------------------------------------------------------- 1 | const typeset = require("../src/index"); 2 | const expect = require("chai").expect; 3 | 4 | function punc(html) { 5 | return typeset(html, { 6 | enable: ["punctuation"], 7 | }); 8 | } 9 | 10 | describe("Punctuation", () => { 11 | it("text without punctuation symbols should be the same after call the function", () => { 12 | const html = "

En un lugar de la mancha

"; 13 | expect(punc(html)).to.equal("

En un lugar de la mancha

"); 14 | }); 15 | 16 | it("should replace three dots by ellipsis symbol", () => { 17 | const html = "

En un lugar de la mancha...

"; 18 | expect(punc(html)).to.equal("

En un lugar de la mancha…

"); 19 | }); 20 | 21 | it("should replace three dots by ellipsis symbol on texts with multiple matches", () => { 22 | const html = 23 | "

En un lugar de la mancha... De cuyo nombre no quiero acordarme... no ha mucho tiempo que vivía...

"; 24 | expect(punc(html)).to.equal( 25 | "

En un lugar de la mancha… De cuyo nombre no quiero acordarme… no ha mucho tiempo que vivía…

" 26 | ); 27 | }); 28 | 29 | it("should replace two dashes (--) by a dash (–)", () => { 30 | const html = 31 | "

Pues aquí hay algo que no te va a gustar Laura, --dijo Carlos-- yo también voy al equipo de Juan.

"; 32 | expect(punc(html)).to.equal( 33 | "

Pues aquí hay algo que no te va a gustar Laura, –dijo Carlos– yo también voy al equipo de Juan.

" 34 | ); 35 | }); 36 | 37 | it("should replace a dash between spaces ( – ) by ( — )", () => { 38 | const html = 39 | '

Traveling – that is, traveling by public transit – can be a relaxing activity if you bring music and reading material along with you.

'; 40 | expect(punc(html)).to.equal( 41 | '

Traveling — that is, traveling by public transit — can be a relaxing activity if you bring music and reading material along with you.

' 42 | ); 43 | }); 44 | 45 | it("should replace a dash between numbers (10-20 or 10 - 20) by ( – )", () => { 46 | const html = 47 | '

Students spend 1-2 hours per night reading. By Monday, they should have read pages 79 - 113.

'; 48 | expect(punc(html)).to.equal( 49 | '

Students spend 1 – 2 hours per night reading. By Monday, they should have read pages 79 – 113.

' 50 | ); 51 | }); 52 | }); 53 | -------------------------------------------------------------------------------- /test/quotesSpec.js: -------------------------------------------------------------------------------- 1 | const typeset = require("../src/index"); 2 | const expect = require("chai").expect; 3 | 4 | function quotes(html) { 5 | return typeset(html, { 6 | enable: ["quotes"], 7 | }); 8 | } 9 | 10 | describe("Quotes", () => { 11 | it("text without quotes symbols should be the same after call the function", () => { 12 | const html = "

En un lugar de la mancha

"; 13 | expect(quotes(html)).to.equal("

En un lugar de la mancha

"); 14 | }); 15 | 16 | it("should replace quotes by unicode beginning and ending quotes characters", () => { 17 | const html = '

"Hello," said the fox.

'; 18 | expect(quotes(html)).to.equal("

“Hello,” said the fox.

"); 19 | }); 20 | 21 | // check if the issue [#10](http://github.com/davidmerfield/Typeset/issues/10) still fixed 22 | it("should replace quotes when a punctuation character is after ending quote character", () => { 23 | const html = '

"Hello,". said the fox.

'; 24 | expect(quotes(html)).to.equal("

“Hello,”. said the fox.

"); 25 | }); 26 | 27 | it("should replace multiple quotations", () => { 28 | const html = '

"Hello,". said the "fox".

'; 29 | expect(quotes(html)).to.equal("

“Hello,”. said the “fox”.

"); 30 | }); 31 | 32 | it("should work with encoded single quotes", () => { 33 | const html = "

I don't nee'd to d'o.

"; 34 | expect(quotes(html)).to.equal("

I don’t nee’d to d’o.

"); 35 | }); 36 | 37 | it("should work with encoded double quotes", () => { 38 | const html = 39 | "

"I don't "need" to "do" that."

"; 40 | expect(quotes(html)).to.equal("

“I don’t “need” to “do” that.”

"); 41 | }); 42 | 43 | it("multiple differents kinds quotations marks", () => { 44 | const html = '

"She\'s faster than a 120\' 4" whale."

'; 45 | expect(quotes(html)).to.equal("

“She’s faster than a 120′ 4″ whale.”

"); 46 | }); 47 | }); 48 | -------------------------------------------------------------------------------- /test/spacesSpec.js: -------------------------------------------------------------------------------- 1 | const typeset = require("../src/index"); 2 | const expect = require("chai").expect; 3 | 4 | function spaces(html) { 5 | return typeset(html, { 6 | enable: ["spaces"], 7 | }); 8 | } 9 | 10 | describe("Spaces", () => { 11 | it("text without wide spaces symbols should be the same after call the function", () => { 12 | const html = "

En un lugar de la mancha

"; 13 | expect(spaces(html)).to.equal("

En un lugar de la mancha

"); 14 | }); 15 | 16 | it("should replace wide spaces with hair spaces", () => { 17 | const html = "

4 × 4 = 16

"; 18 | expect(spaces(html)).to.equal("

4 × 4 = 16

"); 19 | }); 20 | 21 | it("should replace multiple wide spaces with hair spaces", () => { 22 | const html = "

4 × 4 = 16; 10 / 2 = 5;

"; 23 | expect(spaces(html)).to.equal("

4 × 4 = 16; 10 / 2 = 5;

"); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /test/typesetSpec.js: -------------------------------------------------------------------------------- 1 | const typeset = require("../src/index"); 2 | const expect = require("chai").expect; 3 | 4 | describe("Typeset", () => { 5 | it("should process encoded quotes", () => { 6 | const html = 7 | "

Foo's "bar" ABC's.

" + 8 | "

It’s not a PC replacement.

" + 9 | '

-Lukas Mathis, "iPad: A Consumption Device, After All?", ignore the code.

' + 10 | "
" + 11 | "

Foo's "bar's" ABC.

"; 12 | 13 | expect(typeset(html)).to.equal( 14 | '

Foo’s bar ABCs.

It’s not a PC re­place­ment.

-Lukas Mathis, iPad: A Consumption Device, After All?, ig­nore the code.

Foo’s bar’s” ABC.

' 15 | ); 16 | }); 17 | 18 | it("should process a complex text", () => { 19 | const html = 20 | '

Yjarni Sigurðardóttir spoke to NATO from Iceland yesterday: "Light of my life, fire of my florins -- my sin, my soul. The tip of the tongue taking a trip to 118° 19\' 43.5"."

' + 21 | '

"She\'s faster than a 120\' 4" whale." Piña co­ladas were widely consumed in Götterdämmerung from 1880–1912. For the low price of $20 / year from Ex­hi­bits A–E... Then the duplex came forward. "Thrice the tower, he mounted the round gunrest, \'awaking\' HTML. He can print a fixed num­ber of dots in a square inch (for in­stance, 600 × 600)."

'; 22 | 23 | expect(typeset(html)).to.equal( 24 | '

Yjarni Sigurðardóttir spoke to NATO from Iceland yes­ter­day: Light of my life, fire of my florins — my sin, my soul. The tip of the tongue tak­ing a trip to 118° 19′ 43.5″.”

She’s faster than a 120′ 4″ whale.” Piña co­ladas were widely con­sumed in Götterdämmerung from 1880 – 1912. For the low price of $20 / year from Ex­hi­bits A–E… Then the du­plex came for­ward. Thrice the tower, he mounted the round gun­rest, awaking’ HTML. He can print a fixed num­ber of dots in a square inch (for in­stance, 600 × 600).”

' 25 | ); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require("webpack"); 2 | const pkg = require("./package.json"); 3 | const PROD = process.env.PROD; 4 | 5 | const TerserPlugin = require("terser-webpack-plugin"); 6 | 7 | const banner = [ 8 | pkg.name + " - " + pkg.description, 9 | "@version v" + pkg.version, 10 | "@link " + pkg.homepage, 11 | "@author " + pkg.author, 12 | "@contributors " + pkg.contributors, 13 | "@license " + pkg.license, 14 | ].join("\n"); 15 | 16 | module.exports = { 17 | mode: "production", 18 | 19 | entry: __dirname + "/src/index.js", 20 | devtool: "source-map", 21 | 22 | output: { 23 | library: pkg.name, 24 | path: __dirname + "/build", 25 | filename: PROD ? "typeset.min.js" : "typeset.js", 26 | }, 27 | 28 | optimization: { 29 | minimizer: [new TerserPlugin()], 30 | }, 31 | 32 | externals: { 33 | cheerio: "jQuery", // TODO I think there should be another way to avoid require cheerio 34 | jquery: "jQuery", 35 | }, 36 | 37 | plugins: [ 38 | new webpack.BannerPlugin(banner), 39 | new webpack.DefinePlugin({ 40 | ENV: { 41 | browser: true, 42 | }, 43 | }), 44 | ], 45 | }; 46 | --------------------------------------------------------------------------------