palt-typesetting 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/apply-style.d.ts +5 -0
- package/dist/apply-style.d.ts.map +1 -0
- package/dist/apply-style.js +26 -0
- package/dist/apply-style.js.map +1 -0
- package/dist/html-processor.d.ts +15 -0
- package/dist/html-processor.d.ts.map +1 -0
- package/dist/html-processor.js +64 -0
- package/dist/html-processor.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/insert-separators.d.ts +9 -0
- package/dist/insert-separators.d.ts.map +1 -0
- package/dist/insert-separators.js +45 -0
- package/dist/insert-separators.js.map +1 -0
- package/dist/types/index.d.ts +32 -0
- package/dist/types/linebreak.d.ts +7 -0
- package/dist/utils-regex.d.ts +7 -0
- package/dist/utils-regex.d.ts.map +1 -0
- package/dist/utils-regex.js +10 -0
- package/dist/utils-regex.js.map +1 -0
- package/dist/utils-tags.d.ts +7 -0
- package/dist/utils-tags.d.ts.map +1 -0
- package/dist/utils-tags.js +26 -0
- package/dist/utils-tags.js.map +1 -0
- package/dist/utils-text-classes.d.ts +12 -0
- package/dist/utils-text-classes.d.ts.map +1 -0
- package/dist/utils-text-classes.js +78 -0
- package/dist/utils-text-classes.js.map +1 -0
- package/dist/win.d.ts +5 -0
- package/dist/win.d.ts.map +1 -0
- package/dist/win.js +13 -0
- package/dist/win.js.map +1 -0
- package/package.json +39 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2014-present Devon Govett
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TypeSetttingOptions } from './types';
|
|
2
|
+
declare const applyStyleToText: (currentNodeValue: string, nextNodeValue: string, options: TypeSetttingOptions) => string;
|
|
3
|
+
declare const applyStyleToSegment: (segment: string) => string;
|
|
4
|
+
export { applyStyleToText, applyStyleToSegment };
|
|
5
|
+
//# sourceMappingURL=apply-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-style.d.ts","sourceRoot":"","sources":["../src/apply-style.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAQ7C,QAAA,MAAM,gBAAgB,qBAAsB,MAAM,iBAAiB,MAAM,WAAW,mBAAmB,KAAG,MAOzG,CAAA;AAUD,QAAA,MAAM,mBAAmB,YAAa,MAAM,KAAG,MAkB9C,CAAA;AAED,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyStyleToSegment = exports.applyStyleToText = void 0;
|
|
4
|
+
const utils_text_classes_1 = require("./utils-text-classes");
|
|
5
|
+
const utils_tags_1 = require("./utils-tags");
|
|
6
|
+
const applyStyleToText = (currentNodeValue, nextNodeValue, options) => {
|
|
7
|
+
if (!options.addWbrToHtml || currentNodeValue === ' ') {
|
|
8
|
+
return currentNodeValue;
|
|
9
|
+
}
|
|
10
|
+
return (0, utils_tags_1.applyWbrStyle)(currentNodeValue);
|
|
11
|
+
};
|
|
12
|
+
exports.applyStyleToText = applyStyleToText;
|
|
13
|
+
const applyStyleToSegment = (segment) => {
|
|
14
|
+
if (segment === ' ') {
|
|
15
|
+
return segment;
|
|
16
|
+
}
|
|
17
|
+
if (utils_text_classes_1.LanguageClass.isLatin(segment)) {
|
|
18
|
+
return (0, utils_tags_1.applyLatinClass)(segment);
|
|
19
|
+
}
|
|
20
|
+
if (utils_text_classes_1.CharClass.shouldNotBreak(segment)) {
|
|
21
|
+
return (0, utils_tags_1.applyNoBreakStyle)(segment);
|
|
22
|
+
}
|
|
23
|
+
return segment;
|
|
24
|
+
};
|
|
25
|
+
exports.applyStyleToSegment = applyStyleToSegment;
|
|
26
|
+
//# sourceMappingURL=apply-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-style.js","sourceRoot":"","sources":["../src/apply-style.ts"],"names":[],"mappings":";;;AAAA,6DAA+D;AAC/D,6CAAgF;AAShF,MAAM,gBAAgB,GAAG,CAAC,gBAAwB,EAAE,aAAqB,EAAE,OAA4B,EAAU,EAAE;IAEjH,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,gBAAgB,KAAK,GAAG,EAAE,CAAC;QACtD,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED,OAAO,IAAA,0BAAa,EAAC,gBAAgB,CAAC,CAAA;AACxC,CAAC,CAAA;AA8BQ,4CAAgB;AApBzB,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAU,EAAE;IAEtD,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,OAAO,CAAA;IAChB,CAAC;IAGD,IAAI,kCAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,IAAA,4BAAe,EAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAGD,IAAI,8BAAS,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,IAAA,8BAAiB,EAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IAGD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAE0B,kDAAmB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TransformFunction, TypeSetttingOptions } from './types';
|
|
2
|
+
declare class HTMLProcessor {
|
|
3
|
+
private transformFunctions;
|
|
4
|
+
private options;
|
|
5
|
+
constructor(transformFunctions: TransformFunction[], options?: Partial<TypeSetttingOptions>);
|
|
6
|
+
processHtmlWithFunctions(srcHtml: string): string;
|
|
7
|
+
private processHtml;
|
|
8
|
+
private getTransformedHtml;
|
|
9
|
+
private replaceNode;
|
|
10
|
+
}
|
|
11
|
+
declare const parseFromString: (html: string) => Document;
|
|
12
|
+
declare const getTextNodes: (element: HTMLElement) => Node[];
|
|
13
|
+
export default HTMLProcessor;
|
|
14
|
+
export { parseFromString, getTextNodes };
|
|
15
|
+
//# sourceMappingURL=html-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-processor.d.ts","sourceRoot":"","sources":["../src/html-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAOrE,cAAM,aAAa;IACjB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,OAAO,CAAqB;gBAExB,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAkB/F,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAmBjD,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,WAAW,CASlB;CACF;AAQD,QAAA,MAAM,eAAe,SAAU,MAAM,aAEpC,CAAA;AAQD,QAAA,MAAM,YAAY,YAAa,WAAW,KAAG,IAAI,EAahD,CAAA;AAED,eAAe,aAAa,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getTextNodes = exports.parseFromString = void 0;
|
|
7
|
+
const win_1 = __importDefault(require("./win"));
|
|
8
|
+
class HTMLProcessor {
|
|
9
|
+
constructor(transformFunctions, options = {}) {
|
|
10
|
+
this.replaceNode = (node, transformedHtml) => {
|
|
11
|
+
const range = win_1.default.document.createRange();
|
|
12
|
+
range.selectNode(node);
|
|
13
|
+
const fragment = range.createContextualFragment(transformedHtml);
|
|
14
|
+
if (node.parentNode) {
|
|
15
|
+
node.parentNode.insertBefore(fragment, node);
|
|
16
|
+
node.parentNode.removeChild(node);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
this.transformFunctions = transformFunctions;
|
|
20
|
+
this.options = Object.assign({ addWbrToHtml: true, addThinSpaceToHtml: true, thinSpaceWidth: '50%' }, options);
|
|
21
|
+
}
|
|
22
|
+
processHtmlWithFunctions(srcHtml) {
|
|
23
|
+
if (srcHtml === '') {
|
|
24
|
+
return srcHtml;
|
|
25
|
+
}
|
|
26
|
+
return this.transformFunctions.reduce((currentHtml, transformFunction) => this.processHtml(currentHtml, transformFunction), srcHtml);
|
|
27
|
+
}
|
|
28
|
+
processHtml(html, transformFunction) {
|
|
29
|
+
if (html === '') {
|
|
30
|
+
return html;
|
|
31
|
+
}
|
|
32
|
+
const doc = parseFromString(html);
|
|
33
|
+
const textNodes = getTextNodes(doc.body);
|
|
34
|
+
textNodes.forEach((currentNode, index) => {
|
|
35
|
+
const nextNode = textNodes[index + 1] || null;
|
|
36
|
+
const transformedHtml = this.getTransformedHtml(currentNode, nextNode, transformFunction);
|
|
37
|
+
this.replaceNode(currentNode, transformedHtml);
|
|
38
|
+
});
|
|
39
|
+
return doc.body.innerHTML;
|
|
40
|
+
}
|
|
41
|
+
getTransformedHtml(currentNode, nextNode, transformFunction) {
|
|
42
|
+
const transformedHtml = transformFunction(currentNode.nodeValue || '', nextNode ? nextNode.nodeValue || '' : '', this.options);
|
|
43
|
+
return transformedHtml;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const parseFromString = (html) => {
|
|
47
|
+
return new win_1.default.DOMParser().parseFromString(html, 'text/html');
|
|
48
|
+
};
|
|
49
|
+
exports.parseFromString = parseFromString;
|
|
50
|
+
const getTextNodes = (element) => {
|
|
51
|
+
const walk = win_1.default.document.createTreeWalker(element, win_1.default.NodeFilter.SHOW_TEXT);
|
|
52
|
+
let textNode = walk.nextNode();
|
|
53
|
+
const textNodes = [];
|
|
54
|
+
while (textNode) {
|
|
55
|
+
if (textNode.nodeValue && textNode.nodeValue.trim() !== '') {
|
|
56
|
+
textNodes.push(textNode);
|
|
57
|
+
}
|
|
58
|
+
textNode = walk.nextNode();
|
|
59
|
+
}
|
|
60
|
+
return textNodes;
|
|
61
|
+
};
|
|
62
|
+
exports.getTextNodes = getTextNodes;
|
|
63
|
+
exports.default = HTMLProcessor;
|
|
64
|
+
//# sourceMappingURL=html-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-processor.js","sourceRoot":"","sources":["../src/html-processor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import HTMLProcessor from './html-processor';
|
|
2
|
+
import type { TypeSetttingOptions } from './types';
|
|
3
|
+
declare class TypeSetter extends HTMLProcessor {
|
|
4
|
+
constructor(options?: Partial<TypeSetttingOptions>);
|
|
5
|
+
private isIntlSegmenterSupported;
|
|
6
|
+
render(srcHtml: string): string;
|
|
7
|
+
}
|
|
8
|
+
declare const createTypeSetting: (srcHtml: string, options?: Partial<TypeSetttingOptions>) => string;
|
|
9
|
+
export { TypeSetter, createTypeSetting };
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,kBAAkB,CAAA;AAG5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAMlD,cAAM,UAAW,SAAQ,aAAa;gBACxB,OAAO,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAYtD,OAAO,CAAC,wBAAwB;IAkBhC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAOhC;AAQD,QAAA,MAAM,iBAAiB,YAAa,MAAM,YAAW,QAAQ,mBAAmB,CAAC,KAAQ,MAGxF,CAAA;AAED,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createTypeSetting = exports.TypeSetter = void 0;
|
|
7
|
+
const html_processor_1 = __importDefault(require("./html-processor"));
|
|
8
|
+
const insert_separators_1 = __importDefault(require("./insert-separators"));
|
|
9
|
+
const apply_style_1 = require("./apply-style");
|
|
10
|
+
class TypeSetter extends html_processor_1.default {
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
const transformFunctions = [apply_style_1.applyStyleToText, insert_separators_1.default, apply_style_1.applyStyleToSegment];
|
|
13
|
+
super(transformFunctions, options);
|
|
14
|
+
}
|
|
15
|
+
isIntlSegmenterSupported() {
|
|
16
|
+
const isSupported = typeof Intl.Segmenter !== 'undefined';
|
|
17
|
+
if (!isSupported) {
|
|
18
|
+
console.warn('Intl.Segmenter is not supported in this environment. The original HTML string will be returned. For more information, see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter');
|
|
19
|
+
}
|
|
20
|
+
return isSupported;
|
|
21
|
+
}
|
|
22
|
+
render(srcHtml) {
|
|
23
|
+
if (!this.isIntlSegmenterSupported()) {
|
|
24
|
+
return srcHtml;
|
|
25
|
+
}
|
|
26
|
+
return this.processHtmlWithFunctions(srcHtml);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.TypeSetter = TypeSetter;
|
|
30
|
+
const createTypeSetting = (srcHtml, options = {}) => {
|
|
31
|
+
const typeset = new TypeSetter(options);
|
|
32
|
+
return typeset.render(srcHtml);
|
|
33
|
+
};
|
|
34
|
+
exports.createTypeSetting = createTypeSetting;
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,sEAA4C;AAC5C,4EAAwD;AACxD,+CAAqE;AAOrE,MAAM,UAAW,SAAQ,wBAAa;IACpC,YAAY,UAAwC,EAAE;QACpD,MAAM,kBAAkB,GAAG,CAAC,8BAAgB,EAAE,2BAAsB,EAAE,iCAAmB,CAAC,CAAA;QAC1F,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC;IASO,wBAAwB;QAC9B,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,CAAA;QAEzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CACV,4NAA4N,CAC7N,CAAA;QACH,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAQD,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;YACrC,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;CACF;AAaQ,gCAAU;AALnB,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,UAAwC,EAAE,EAAU,EAAE;IAChG,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;IACvC,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC,CAAA;AAEoB,8CAAiB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TypeSetttingOptions } from './types';
|
|
2
|
+
declare const insertSeparatorsToText: (currentText: string, nextText: string, options: TypeSetttingOptions) => string;
|
|
3
|
+
declare const generateSegments: (src: string) => string[];
|
|
4
|
+
declare const addSeparatorsToSegment: (current: string, next: string | undefined, options: TypeSetttingOptions) => string;
|
|
5
|
+
declare const shouldAddWbr: (current: string, next: string) => boolean | null;
|
|
6
|
+
declare const shouldAddThinSpace: (current: string, next: string) => boolean;
|
|
7
|
+
export default insertSeparatorsToText;
|
|
8
|
+
export { generateSegments, addSeparatorsToSegment, shouldAddWbr, shouldAddThinSpace };
|
|
9
|
+
//# sourceMappingURL=insert-separators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-separators.d.ts","sourceRoot":"","sources":["../src/insert-separators.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAQ7C,QAAA,MAAM,sBAAsB,gBAAiB,MAAM,YAAY,MAAM,WAAW,mBAAmB,KAAG,MAWrG,CAAA;AAOD,QAAA,MAAM,gBAAgB,QAAS,MAAM,KAAG,MAAM,EAG7C,CAAA;AAQD,QAAA,MAAM,sBAAsB,YAAa,MAAM,qCAAsB,mBAAmB,KAAG,MAM1F,CAAA;AAQD,QAAA,MAAM,YAAY,YAAa,MAAM,QAAQ,MAAM,KAAG,OAAO,GAAG,IAK/D,CAAA;AAQD,QAAA,MAAM,kBAAkB,YAAa,MAAM,QAAQ,MAAM,KAAG,OAE3D,CAAA;AAED,eAAe,sBAAsB,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.shouldAddThinSpace = exports.shouldAddWbr = exports.addSeparatorsToSegment = exports.generateSegments = void 0;
|
|
7
|
+
const linebreak_1 = __importDefault(require("linebreak"));
|
|
8
|
+
const utils_text_classes_1 = require("./utils-text-classes");
|
|
9
|
+
const utils_tags_1 = require("./utils-tags");
|
|
10
|
+
const insertSeparatorsToText = (currentText, nextText, options) => {
|
|
11
|
+
const currentSegments = generateSegments(currentText);
|
|
12
|
+
const nextSegments = generateSegments(nextText);
|
|
13
|
+
const formattedText = currentSegments.reduce((accumulatedText, segment, index, array) => {
|
|
14
|
+
const current = segment;
|
|
15
|
+
const next = array[index + 1] || nextSegments[0];
|
|
16
|
+
return accumulatedText + addSeparatorsToSegment(current, next, options);
|
|
17
|
+
}, '');
|
|
18
|
+
return formattedText;
|
|
19
|
+
};
|
|
20
|
+
const generateSegments = (src) => {
|
|
21
|
+
const segmenter = new Intl.Segmenter('ja-JP', { granularity: 'word' });
|
|
22
|
+
return Array.from(segmenter.segment(src), ({ segment }) => segment);
|
|
23
|
+
};
|
|
24
|
+
exports.generateSegments = generateSegments;
|
|
25
|
+
const addSeparatorsToSegment = (current, next = '', options) => {
|
|
26
|
+
if (!next)
|
|
27
|
+
return current;
|
|
28
|
+
const addWbr = options.addWbrToHtml && shouldAddWbr(current, next);
|
|
29
|
+
const addSpace = options.addThinSpaceToHtml && shouldAddThinSpace(current, next);
|
|
30
|
+
return current + (addSpace ? (0, utils_tags_1.thinSpace)(options.thinSpaceWidth) : '') + (addWbr ? utils_tags_1.wbr : '');
|
|
31
|
+
};
|
|
32
|
+
exports.addSeparatorsToSegment = addSeparatorsToSegment;
|
|
33
|
+
const shouldAddWbr = (current, next) => {
|
|
34
|
+
const combinedText = current.slice(-1) + next.slice(0, 1);
|
|
35
|
+
const lb = new linebreak_1.default(combinedText);
|
|
36
|
+
const breakOpportunity = lb.nextBreak();
|
|
37
|
+
return breakOpportunity && breakOpportunity.position === 1;
|
|
38
|
+
};
|
|
39
|
+
exports.shouldAddWbr = shouldAddWbr;
|
|
40
|
+
const shouldAddThinSpace = (current, next) => {
|
|
41
|
+
return utils_text_classes_1.LanguageClass.shouldAddThinSpace(current, next) || utils_text_classes_1.CharClass.shouldAddThinSpace(current, next);
|
|
42
|
+
};
|
|
43
|
+
exports.shouldAddThinSpace = shouldAddThinSpace;
|
|
44
|
+
exports.default = insertSeparatorsToText;
|
|
45
|
+
//# sourceMappingURL=insert-separators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-separators.js","sourceRoot":"","sources":["../src/insert-separators.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAmC;AACnC,6DAA+D;AAC/D,6CAA6C;AAS7C,MAAM,sBAAsB,GAAG,CAAC,WAAmB,EAAE,QAAgB,EAAE,OAA4B,EAAU,EAAE;IAC7G,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;IACrD,MAAM,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAE/C,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACtF,MAAM,OAAO,GAAG,OAAO,CAAA;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;QAChD,OAAO,eAAe,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACzE,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA;AAOD,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAY,EAAE;IACjD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;IACtE,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAA;AACrE,CAAC,CAAA;AAwCQ,4CAAgB;AAhCzB,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAE,IAAI,GAAG,EAAE,EAAE,OAA4B,EAAU,EAAE;IAClG,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAA;IAEzB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAChF,OAAO,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,sBAAS,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAC5F,CAAC,CAAA;AA0B0B,wDAAsB;AAlBjD,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,IAAY,EAAkB,EAAE;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACzD,MAAM,EAAE,GAAG,IAAI,mBAAW,CAAC,YAAY,CAAC,CAAA;IACxC,MAAM,gBAAgB,GAAG,EAAE,CAAC,SAAS,EAAE,CAAA;IACvC,OAAO,gBAAgB,IAAI,gBAAgB,CAAC,QAAQ,KAAK,CAAC,CAAA;AAC5D,CAAC,CAAA;AAakD,oCAAY;AAL/D,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAE,IAAY,EAAW,EAAE;IACpE,OAAO,kCAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,8BAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACvG,CAAC,CAAA;AAGgE,gDAAkB;AADnF,kBAAe,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 2つの文字列引数を受け取り、変換後の文字列を返す関数の型定義です。
|
|
3
|
+
* この関数は、現在のノードの値と次のノードの値を元に、何らかの変換処理を行うことを想定しています。
|
|
4
|
+
*
|
|
5
|
+
* @param currentNodeValue - 現在のノードの値。
|
|
6
|
+
* @param nextNodeValue - 次のノードの値(存在する場合)。存在しない場合は空文字列を想定。
|
|
7
|
+
* @return 変換後の文字列。
|
|
8
|
+
*/
|
|
9
|
+
export type TransformFunction = (currentNodeValue: string, nextNodeValue: string, options: TypeSetttingOptions) => string
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 組版処理に関する設定オプションの型定義です。
|
|
13
|
+
*/
|
|
14
|
+
export interface TypeSetttingOptions {
|
|
15
|
+
/**
|
|
16
|
+
* HTML内のテキストにWBRタグを自動的に追加するかどうかを指定します。
|
|
17
|
+
* WBRタグは、必要に応じて改行の挿入を許可するために使用されます。
|
|
18
|
+
*/
|
|
19
|
+
addWbrToHtml: boolean
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* HTML内のテキストにTHIN SPACEを自動的に追加するかどうかを指定します。
|
|
23
|
+
* THIN SPACEは、視覚的なスペースを微調整するために使用されます。
|
|
24
|
+
*/
|
|
25
|
+
addThinSpaceToHtml: boolean
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* THIN SPACEの幅を指定します。
|
|
29
|
+
* 例えば'20%'と指定すると、THIN SPACEは通常のスペースの20%の幅になります。
|
|
30
|
+
*/
|
|
31
|
+
thinSpaceWidth: string
|
|
32
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const latinRegex: RegExp;
|
|
2
|
+
export declare const japaneseRegex: RegExp;
|
|
3
|
+
export declare const openingsRegex: RegExp;
|
|
4
|
+
export declare const closingsRegex: RegExp;
|
|
5
|
+
export declare const middleDotsRegex: RegExp;
|
|
6
|
+
export declare const noBreakRulesRegex: RegExp;
|
|
7
|
+
//# sourceMappingURL=utils-regex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-regex.d.ts","sourceRoot":"","sources":["../src/utils-regex.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,QAAqD,CAAA;AAK5E,eAAO,MAAM,aAAa,QAAwD,CAAA;AAKlF,eAAO,MAAM,aAAa,QAA8B,CAAA;AAKxD,eAAO,MAAM,aAAa,QAAsC,CAAA;AAKhE,eAAO,MAAM,eAAe,QAAU,CAAA;AAKtC,eAAO,MAAM,iBAAiB,QAE7B,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.noBreakRulesRegex = exports.middleDotsRegex = exports.closingsRegex = exports.openingsRegex = exports.japaneseRegex = exports.latinRegex = void 0;
|
|
4
|
+
exports.latinRegex = /[A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]+/;
|
|
5
|
+
exports.japaneseRegex = /[\p{scx=Hiragana}\p{scx=Katakana}|ヲ-゚\p{scx=Han}]+/u;
|
|
6
|
+
exports.openingsRegex = /(|[|{|〔|〈|《|「|『|【|〘|〖|“|‘/;
|
|
7
|
+
exports.closingsRegex = /)|]|}|〕|〉|》|」|』|】|〙|〗|”|’|、|,|。|./;
|
|
8
|
+
exports.middleDotsRegex = /・|:|;/;
|
|
9
|
+
exports.noBreakRulesRegex = new RegExp(`[${'—‥…_'}${String.fromCharCode(0x2500)}-${String.fromCharCode(0x257f)}]+`);
|
|
10
|
+
//# sourceMappingURL=utils-regex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-regex.js","sourceRoot":"","sources":["../src/utils-regex.ts"],"names":[],"mappings":";;;AAGa,QAAA,UAAU,GAAG,kDAAkD,CAAA;AAK/D,QAAA,aAAa,GAAG,qDAAqD,CAAA;AAKrE,QAAA,aAAa,GAAG,2BAA2B,CAAA;AAK3C,QAAA,aAAa,GAAG,mCAAmC,CAAA;AAKnD,QAAA,eAAe,GAAG,OAAO,CAAA;AAKzB,QAAA,iBAAiB,GAAG,IAAI,MAAM,CACzC,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAC5E,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare const wbr = "<wbr>";
|
|
2
|
+
declare const thinSpace: (width: string) => string;
|
|
3
|
+
declare const applyWbrStyle: (text: string) => string;
|
|
4
|
+
declare const applyLatinClass: (segment: string) => string;
|
|
5
|
+
declare const applyNoBreakStyle: (segment: string) => string;
|
|
6
|
+
export { wbr, thinSpace, applyWbrStyle, applyLatinClass, applyNoBreakStyle };
|
|
7
|
+
//# sourceMappingURL=utils-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-tags.d.ts","sourceRoot":"","sources":["../src/utils-tags.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,GAAG,UAAU,CAAA;AAOnB,QAAA,MAAM,SAAS,UAAW,MAAM,WAG/B,CAAA;AAOD,QAAA,MAAM,aAAa,SAAU,MAAM,WAElC,CAAA;AAQD,QAAA,MAAM,eAAe,YAAa,MAAM,WAGvC,CAAA;AAQD,QAAA,MAAM,iBAAiB,YAAa,MAAM,WAGzC,CAAA;AAED,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyNoBreakStyle = exports.applyLatinClass = exports.applyWbrStyle = exports.thinSpace = exports.wbr = void 0;
|
|
4
|
+
const classnamePrefix = 'typeset';
|
|
5
|
+
const wbr = '<wbr>';
|
|
6
|
+
exports.wbr = wbr;
|
|
7
|
+
const thinSpace = (width) => {
|
|
8
|
+
const THIN_SPACE = String.fromCharCode(0x2009);
|
|
9
|
+
return `<span style="font-size: ${width}; user-select:none;" aria-hidden="true" data-nosnippet="">${THIN_SPACE}</span>`;
|
|
10
|
+
};
|
|
11
|
+
exports.thinSpace = thinSpace;
|
|
12
|
+
const applyWbrStyle = (text) => {
|
|
13
|
+
return `<span style="word-break: keep-all; overflow-wrap: anywhere;">${text}</span>`;
|
|
14
|
+
};
|
|
15
|
+
exports.applyWbrStyle = applyWbrStyle;
|
|
16
|
+
const applyLatinClass = (segment) => {
|
|
17
|
+
const classname = classnamePrefix + '-latin';
|
|
18
|
+
return `<span class="${classname}">${segment}</span>`;
|
|
19
|
+
};
|
|
20
|
+
exports.applyLatinClass = applyLatinClass;
|
|
21
|
+
const applyNoBreakStyle = (segment) => {
|
|
22
|
+
const classname = classnamePrefix + '-no-breaks';
|
|
23
|
+
return `<span class="${classname}" style="letter-spacing: 0">${segment}</span>`;
|
|
24
|
+
};
|
|
25
|
+
exports.applyNoBreakStyle = applyNoBreakStyle;
|
|
26
|
+
//# sourceMappingURL=utils-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-tags.js","sourceRoot":"","sources":["../src/utils-tags.ts"],"names":[],"mappings":";;;AAAA,MAAM,eAAe,GAAG,SAAS,CAAA;AAKjC,MAAM,GAAG,GAAG,OAAO,CAAA;AA2CV,kBAAG;AApCZ,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IAC9C,OAAO,2BAA2B,KAAK,6DAA6D,UAAU,SAAS,CAAA;AACzH,CAAC,CAAA;AAiCa,8BAAS;AA1BvB,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;IACrC,OAAO,gEAAgE,IAAI,SAAS,CAAA;AACtF,CAAC,CAAA;AAwBwB,sCAAa;AAhBtC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE;IAC1C,MAAM,SAAS,GAAW,eAAe,GAAG,QAAQ,CAAA;IACpD,OAAO,gBAAgB,SAAS,KAAK,OAAO,SAAS,CAAA;AACvD,CAAC,CAAA;AAauC,0CAAe;AALvD,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,EAAE;IAC5C,MAAM,SAAS,GAAW,eAAe,GAAG,YAAY,CAAA;IACxD,OAAO,gBAAgB,SAAS,+BAA+B,OAAO,SAAS,CAAA;AACjF,CAAC,CAAA;AAEwD,8CAAiB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const CharClass: {
|
|
2
|
+
shouldNotBreak: (segment: string) => boolean;
|
|
3
|
+
shouldAddThinSpace: (current: string, next: string) => boolean;
|
|
4
|
+
};
|
|
5
|
+
declare const LanguageClass: {
|
|
6
|
+
isLatin: (segment: string) => boolean;
|
|
7
|
+
isJapanese: (segment: string) => boolean;
|
|
8
|
+
isDifferentLanguageClass: (current: string, next: string) => boolean;
|
|
9
|
+
shouldAddThinSpace: (current: string, next: string) => boolean;
|
|
10
|
+
};
|
|
11
|
+
export { CharClass, LanguageClass };
|
|
12
|
+
//# sourceMappingURL=utils-text-classes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-text-classes.d.ts","sourceRoot":"","sources":["../src/utils-text-classes.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,SAAS;8BAMa,MAAM,KAAG,OAAO;kCAUZ,MAAM,QAAQ,MAAM,KAAG,OAAO;CAgC7D,CAAA;AAOD,QAAA,MAAM,aAAa;uBAME,MAAM,KAAG,OAAO;0BASb,MAAM,KAAG,OAAO;wCAUF,MAAM,QAAQ,MAAM,KAAG,OAAO;kCAapC,MAAM,QAAQ,MAAM,KAAG,OAAO;CAG7D,CAAA;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.LanguageClass = exports.CharClass = void 0;
|
|
27
|
+
const utils = __importStar(require("./utils-regex"));
|
|
28
|
+
const CharClass = {
|
|
29
|
+
shouldNotBreak: (segment) => {
|
|
30
|
+
return utils.noBreakRulesRegex.test(segment);
|
|
31
|
+
},
|
|
32
|
+
shouldAddThinSpace: (current, next) => {
|
|
33
|
+
const settings = {
|
|
34
|
+
openings: {
|
|
35
|
+
regex: utils.openingsRegex,
|
|
36
|
+
hasSpaceBefore: true,
|
|
37
|
+
hasSpaceAfter: false,
|
|
38
|
+
},
|
|
39
|
+
closings: {
|
|
40
|
+
regex: utils.closingsRegex,
|
|
41
|
+
hasSpaceBefore: false,
|
|
42
|
+
hasSpaceAfter: true,
|
|
43
|
+
},
|
|
44
|
+
middleDots: {
|
|
45
|
+
regex: utils.middleDotsRegex,
|
|
46
|
+
hasSpaceBefore: true,
|
|
47
|
+
hasSpaceAfter: true,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
for (const { regex, hasSpaceBefore, hasSpaceAfter } of Object.values(settings)) {
|
|
51
|
+
if (hasSpaceBefore && regex.test(next) && !regex.test(current)) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
if (hasSpaceAfter && regex.test(current) && !regex.test(next)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
exports.CharClass = CharClass;
|
|
62
|
+
const LanguageClass = {
|
|
63
|
+
isLatin: (segment) => {
|
|
64
|
+
return utils.latinRegex.test(segment);
|
|
65
|
+
},
|
|
66
|
+
isJapanese: (segment) => {
|
|
67
|
+
return utils.japaneseRegex.test(segment);
|
|
68
|
+
},
|
|
69
|
+
isDifferentLanguageClass: (current, next) => {
|
|
70
|
+
return ((LanguageClass.isJapanese(current) && LanguageClass.isLatin(next)) ||
|
|
71
|
+
(LanguageClass.isLatin(current) && LanguageClass.isJapanese(next)));
|
|
72
|
+
},
|
|
73
|
+
shouldAddThinSpace: (current, next) => {
|
|
74
|
+
return LanguageClass.isDifferentLanguageClass(current, next);
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
exports.LanguageClass = LanguageClass;
|
|
78
|
+
//# sourceMappingURL=utils-text-classes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-text-classes.js","sourceRoot":"","sources":["../src/utils-text-classes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAsC;AAOtC,MAAM,SAAS,GAAG;IAMhB,cAAc,EAAE,CAAC,OAAe,EAAW,EAAE;QAC3C,OAAO,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAQD,kBAAkB,EAAE,CAAC,OAAe,EAAE,IAAY,EAAW,EAAE;QAC7D,MAAM,QAAQ,GAAG;YACf,QAAQ,EAAE;gBACR,KAAK,EAAE,KAAK,CAAC,aAAa;gBAC1B,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,KAAK;aACrB;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,KAAK,CAAC,aAAa;gBAC1B,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,IAAI;aACpB;YACD,UAAU,EAAE;gBACV,KAAK,EAAE,KAAK,CAAC,eAAe;gBAC5B,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;aACpB;SACF,CAAA;QAED,KAAK,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAE/E,IAAI,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/D,OAAO,IAAI,CAAA;YACb,CAAC;YAED,IAAI,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9D,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF,CAAA;AAkDQ,8BAAS;AA3ClB,MAAM,aAAa,GAAG;IAMpB,OAAO,EAAE,CAAC,OAAe,EAAW,EAAE;QACpC,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAOD,UAAU,EAAE,CAAC,OAAe,EAAW,EAAE;QACvC,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;IAQD,wBAAwB,EAAE,CAAC,OAAe,EAAE,IAAY,EAAW,EAAE;QACnE,OAAO,CACL,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACnE,CAAA;IACH,CAAC;IAQD,kBAAkB,EAAE,CAAC,OAAe,EAAE,IAAY,EAAW,EAAE;QAC7D,OAAO,aAAa,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9D,CAAC;CACF,CAAA;AAEmB,sCAAa"}
|
package/dist/win.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"win.d.ts","sourceRoot":"","sources":["../src/win.ts"],"names":[],"mappings":";;AASA,QAAA,MAAM,GAAG,0DAQL,CAAA;AAEJ,eAAe,GAAG,CAAA"}
|
package/dist/win.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsdom_1 = require("jsdom");
|
|
4
|
+
const win = (() => {
|
|
5
|
+
if (typeof window !== 'undefined') {
|
|
6
|
+
return window;
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
return new jsdom_1.JSDOM().window;
|
|
10
|
+
}
|
|
11
|
+
})();
|
|
12
|
+
exports.default = win;
|
|
13
|
+
//# sourceMappingURL=win.js.map
|
package/dist/win.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"win.js","sourceRoot":"","sources":["../src/win.ts"],"names":[],"mappings":";;AAAA,iCAA6B;AAS7B,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE;IAChB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAElC,OAAO,MAAM,CAAA;IACf,CAAC;SAAM,CAAC;QAEN,OAAO,IAAI,aAAK,EAAE,CAAC,MAAM,CAAA;IAC3B,CAAC;AACH,CAAC,CAAC,EAAE,CAAA;AAEJ,kBAAe,GAAG,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "palt-typesetting",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A Japanese typesetting library, primarily focused on proportional spacing (font-feature-settings: 'palt').",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist/**/*"
|
|
8
|
+
],
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/yamatoiizuka/palt-typesetting.git"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"clean": "rm -rf ./dist",
|
|
15
|
+
"copy": "mkdir -p ./dist/types && cp -R ./src/types/* ./dist/types",
|
|
16
|
+
"prebuild": "npm run clean && npm run copy",
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"test": "jest"
|
|
19
|
+
},
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "Yamato Iizuka",
|
|
22
|
+
"email": "me@yamatoiizuka.com"
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"jsdom": "^23.0.1",
|
|
27
|
+
"linebreak": "^1.1.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/jest": "^29.5.11",
|
|
31
|
+
"@types/jsdom": "^21.1.6",
|
|
32
|
+
"@types/node": "^20",
|
|
33
|
+
"babel-jest": "^29.7.0",
|
|
34
|
+
"eslint": "^8",
|
|
35
|
+
"jest": "^29.7.0",
|
|
36
|
+
"ts-jest": "^29.1.1",
|
|
37
|
+
"typescript": "^5"
|
|
38
|
+
}
|
|
39
|
+
}
|