punctilio 0.2.1 → 0.2.2
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/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/symbols.d.ts +2 -9
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +77 -60
- package/dist/symbols.js.map +1 -1
- package/package.json +1 -1
package/dist/constants.d.ts
CHANGED
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuClB,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,iBAAiB,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuClB,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,iBAAiB,WAAW,CAAA;AACzC,eAAO,MAAM,yBAAyB,QAA2D,CAAA"}
|
package/dist/constants.js
CHANGED
|
@@ -55,4 +55,5 @@ export const UNICODE_SYMBOLS = {
|
|
|
55
55
|
* Uses Unicode Private Use Area character U+E000.
|
|
56
56
|
*/
|
|
57
57
|
export const DEFAULT_SEPARATOR = "\uE000";
|
|
58
|
+
export const ESCAPED_DEFAULT_SEPARATOR = DEFAULT_SEPARATOR.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
58
59
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,QAAQ;IACxB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,QAAQ;IACrB,UAAU,EAAE,QAAQ;IACpB,gBAAgB,EAAE,QAAQ;IAC1B,WAAW,EAAE,QAAQ;IACrB,UAAU,EAAE,QAAQ;IACpB,aAAa,EAAE,QAAQ;IACvB,KAAK,EAAE,QAAQ;IACf,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,iBAAiB,EAAE,QAAQ;IAC3B,kBAAkB,EAAE,QAAQ;IAC5B,iBAAiB,EAAE,QAAQ;IAC3B,kBAAkB,EAAE,QAAQ;CACpB,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,QAAQ;IACxB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,QAAQ;IACrB,UAAU,EAAE,QAAQ;IACpB,gBAAgB,EAAE,QAAQ;IAC1B,WAAW,EAAE,QAAQ;IACrB,UAAU,EAAE,QAAQ;IACpB,aAAa,EAAE,QAAQ;IACvB,KAAK,EAAE,QAAQ;IACf,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,iBAAiB,EAAE,QAAQ;IAC3B,kBAAkB,EAAE,QAAQ;IAC5B,iBAAiB,EAAE,QAAQ;IAC3B,kBAAkB,EAAE,QAAQ;CACpB,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAA;AACzC,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA"}
|
package/dist/symbols.d.ts
CHANGED
|
@@ -49,13 +49,6 @@ export declare function multiplication(text: string, options?: SymbolOptions): s
|
|
|
49
49
|
/**
|
|
50
50
|
* Converts ASCII mathematical symbols to proper Unicode equivalents.
|
|
51
51
|
*
|
|
52
|
-
* Handles:
|
|
53
|
-
* - "!=" → "≠"
|
|
54
|
-
* - "+-" or "+/-" → "±"
|
|
55
|
-
* - "<=" → "≤"
|
|
56
|
-
* - ">=" → "≥"
|
|
57
|
-
* - "~=" or "=~" → "≈"
|
|
58
|
-
*
|
|
59
52
|
* @example
|
|
60
53
|
* ```ts
|
|
61
54
|
* mathSymbols("x != y and a <= b")
|
|
@@ -111,7 +104,7 @@ export declare function arrows(text: string, options?: SymbolOptions): string;
|
|
|
111
104
|
* // → "Water boils at 212 °F"
|
|
112
105
|
* ```
|
|
113
106
|
*/
|
|
114
|
-
export declare function degrees(text: string): string;
|
|
107
|
+
export declare function degrees(text: string, options?: SymbolOptions): string;
|
|
115
108
|
/**
|
|
116
109
|
* Converts straight quotes after numbers to prime marks.
|
|
117
110
|
*
|
|
@@ -150,7 +143,7 @@ export declare function primeMarks(text: string, options?: SymbolOptions): strin
|
|
|
150
143
|
* // → "About ¾ complete"
|
|
151
144
|
* ```
|
|
152
145
|
*/
|
|
153
|
-
export declare function fractions(text: string): string;
|
|
146
|
+
export declare function fractions(text: string, options?: SymbolOptions): string;
|
|
154
147
|
/**
|
|
155
148
|
* Applies all symbol transformations.
|
|
156
149
|
*
|
package/dist/symbols.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AA4BD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AA4BD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAW1E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAkBhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAShD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAyBxE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAWzE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CA+B5E;AAwBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAkB3E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CASjF"}
|
package/dist/symbols.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module symbols
|
|
8
8
|
*/
|
|
9
|
-
import { UNICODE_SYMBOLS,
|
|
9
|
+
import { UNICODE_SYMBOLS, ESCAPED_DEFAULT_SEPARATOR } from "./constants.js";
|
|
10
10
|
/**
|
|
11
11
|
* Escapes special regex characters in a string.
|
|
12
12
|
*/
|
|
@@ -24,7 +24,9 @@ const { ELLIPSIS, MULTIPLICATION, NOT_EQUAL, PLUS_MINUS, COPYRIGHT, REGISTERED,
|
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
export function ellipsis(text, options = {}) {
|
|
27
|
-
const chr =
|
|
27
|
+
const chr = options.separator
|
|
28
|
+
? escapeRegex(options.separator)
|
|
29
|
+
: ESCAPED_DEFAULT_SEPARATOR;
|
|
28
30
|
const pattern = new RegExp(`\\.${chr}?\\.${chr}?\\.`, "g");
|
|
29
31
|
text = text.replace(pattern, ELLIPSIS);
|
|
30
32
|
text = text.replace(new RegExp(`${ELLIPSIS}(?=\\w)`, "gu"), `${ELLIPSIS} `);
|
|
@@ -48,7 +50,9 @@ export function ellipsis(text, options = {}) {
|
|
|
48
50
|
* ```
|
|
49
51
|
*/
|
|
50
52
|
export function multiplication(text, options = {}) {
|
|
51
|
-
const chr =
|
|
53
|
+
const chr = options.separator
|
|
54
|
+
? escapeRegex(options.separator)
|
|
55
|
+
: ESCAPED_DEFAULT_SEPARATOR;
|
|
52
56
|
// Dimensions with spaces: preserve spacing
|
|
53
57
|
const loosePattern = new RegExp(`(\\d${chr}?)\\s+[xX*]\\s+(${chr}?\\d)`, "g");
|
|
54
58
|
text = text.replace(loosePattern, `$1 ${MULTIPLICATION} $2`);
|
|
@@ -63,13 +67,6 @@ export function multiplication(text, options = {}) {
|
|
|
63
67
|
/**
|
|
64
68
|
* Converts ASCII mathematical symbols to proper Unicode equivalents.
|
|
65
69
|
*
|
|
66
|
-
* Handles:
|
|
67
|
-
* - "!=" → "≠"
|
|
68
|
-
* - "+-" or "+/-" → "±"
|
|
69
|
-
* - "<=" → "≤"
|
|
70
|
-
* - ">=" → "≥"
|
|
71
|
-
* - "~=" or "=~" → "≈"
|
|
72
|
-
*
|
|
73
70
|
* @example
|
|
74
71
|
* ```ts
|
|
75
72
|
* mathSymbols("x != y and a <= b")
|
|
@@ -80,24 +77,24 @@ export function multiplication(text, options = {}) {
|
|
|
80
77
|
* ```
|
|
81
78
|
*/
|
|
82
79
|
export function mathSymbols(text) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
80
|
+
return text
|
|
81
|
+
.replace(/!=/g, NOT_EQUAL)
|
|
82
|
+
.replace(/\+\/-/g, PLUS_MINUS)
|
|
83
|
+
.replace(/\+-/g, PLUS_MINUS)
|
|
84
|
+
.replace(/<=/g, LESS_EQUAL)
|
|
85
|
+
.replace(/>=/g, GREATER_EQUAL)
|
|
86
|
+
.replace(/~=/g, APPROXIMATE)
|
|
87
|
+
.replace(/=~/g, APPROXIMATE);
|
|
91
88
|
}
|
|
92
89
|
/**
|
|
93
90
|
* Converts ASCII representations of copyright, registered, and trademark
|
|
94
91
|
* symbols to proper Unicode characters.
|
|
95
92
|
*/
|
|
96
93
|
export function legalSymbols(text) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
94
|
+
return text
|
|
95
|
+
.replace(/\(c\)/gi, COPYRIGHT)
|
|
96
|
+
.replace(/\(r\)/gi, REGISTERED)
|
|
97
|
+
.replace(/\(tm\)/gi, TRADEMARK);
|
|
101
98
|
}
|
|
102
99
|
/**
|
|
103
100
|
* Converts arrow character sequences to Unicode arrows.
|
|
@@ -120,12 +117,15 @@ export function legalSymbols(text) {
|
|
|
120
117
|
* ```
|
|
121
118
|
*/
|
|
122
119
|
export function arrows(text, options = {}) {
|
|
123
|
-
const chr =
|
|
120
|
+
const chr = options.separator
|
|
121
|
+
? escapeRegex(options.separator)
|
|
122
|
+
: ESCAPED_DEFAULT_SEPARATOR;
|
|
124
123
|
// Bidirectional arrow first (to avoid partial matches)
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
// Matches <-> or <--> with optional separator, requires boundary context
|
|
125
|
+
text = text.replace(new RegExp(`(?<=[\\s${chr}]|^)<-{1,2}${chr}?>(?=[\\s${chr}]|$)`, "g"), ARROW_LEFT_RIGHT);
|
|
126
|
+
// Right arrow: -> or --> with boundary context
|
|
127
127
|
text = text.replace(new RegExp(`(?<=[\\s${chr}]|^)-{1,2}>(?=[\\s${chr}]|$)`, "g"), ARROW_RIGHT);
|
|
128
|
-
// Left arrow
|
|
128
|
+
// Left arrow: <- or <-- with boundary context
|
|
129
129
|
text = text.replace(new RegExp(`(?<=[\\s${chr}]|^)<-{1,2}(?=[\\s${chr}]|$)`, "g"), ARROW_LEFT);
|
|
130
130
|
return text;
|
|
131
131
|
}
|
|
@@ -148,12 +148,13 @@ export function arrows(text, options = {}) {
|
|
|
148
148
|
* // → "Water boils at 212 °F"
|
|
149
149
|
* ```
|
|
150
150
|
*/
|
|
151
|
-
export function degrees(text) {
|
|
151
|
+
export function degrees(text, options = {}) {
|
|
152
|
+
const chr = options.separator
|
|
153
|
+
? escapeRegex(options.separator)
|
|
154
|
+
: ESCAPED_DEFAULT_SEPARATOR;
|
|
152
155
|
// Temperature with optional space before C or F
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
});
|
|
156
|
-
return text;
|
|
156
|
+
// Handles separator between digit and unit
|
|
157
|
+
return text.replace(new RegExp(`(\\d${chr}?) ?([CF])\\b`, "gi"), (_, num, unit) => `${num} ${DEGREE}${unit.toUpperCase()}`);
|
|
157
158
|
}
|
|
158
159
|
/**
|
|
159
160
|
* Converts straight quotes after numbers to prime marks.
|
|
@@ -175,22 +176,48 @@ export function degrees(text) {
|
|
|
175
176
|
* ```
|
|
176
177
|
*/
|
|
177
178
|
export function primeMarks(text, options = {}) {
|
|
178
|
-
const chr =
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
const chr = options.separator
|
|
180
|
+
? escapeRegex(options.separator)
|
|
181
|
+
: ESCAPED_DEFAULT_SEPARATOR;
|
|
182
|
+
// Single prime: Matches digit + optional separator + apostrophe
|
|
183
|
+
// Lookahead ensures it's followed by: another digit, double quote, end of string, or punctuation
|
|
184
|
+
// Examples: 5' (feet), 30' (arcminutes)
|
|
181
185
|
const singlePrimePattern = new RegExp(`(\\d${chr}?)'(?=${chr}?(?:\\d|"|$|[\\s.,;:!?)]))`, "g");
|
|
182
186
|
text = text.replace(singlePrimePattern, `$1${PRIME}`);
|
|
183
|
-
// Double prime
|
|
184
|
-
//
|
|
187
|
+
// Double prime Pattern 1: Feet-inches pattern
|
|
188
|
+
// Matches: prime symbol + optional separator + digit + optional separator + double quote
|
|
189
|
+
// Examples: 5′10" or 5'10" → 5′10″
|
|
185
190
|
const feetInchesPattern = new RegExp(`(${PRIME}${chr}?\\d${chr}?)"`, "g");
|
|
186
191
|
text = text.replace(feetInchesPattern, `$1${DOUBLE_PRIME}`);
|
|
187
|
-
// Pattern 2: Standalone inches
|
|
188
|
-
//
|
|
189
|
-
//
|
|
192
|
+
// Double prime Pattern 2: Standalone inches
|
|
193
|
+
// Negative lookbehind: ensures no opening quote within 20 chars before the digit
|
|
194
|
+
// Negative lookahead: ensures not followed by word characters
|
|
195
|
+
// Matches: 12" wide ✓, but not: "Term 1" ✗
|
|
190
196
|
const standaloneInchesPattern = new RegExp(`(?<!["\u201C]${chr}?[^"${chr}]{0,20})(\\d${chr}?)"(?!${chr}?[\\w])`, "g");
|
|
191
197
|
text = text.replace(standaloneInchesPattern, `$1${DOUBLE_PRIME}`);
|
|
192
198
|
return text;
|
|
193
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Map of ASCII fractions to Unicode fraction characters.
|
|
202
|
+
* Pre-computed to avoid repeated object allocation.
|
|
203
|
+
*/
|
|
204
|
+
const FRACTION_MAP = {
|
|
205
|
+
"1/4": UNICODE_SYMBOLS.FRACTION_1_4,
|
|
206
|
+
"1/2": UNICODE_SYMBOLS.FRACTION_1_2,
|
|
207
|
+
"3/4": UNICODE_SYMBOLS.FRACTION_3_4,
|
|
208
|
+
"1/3": UNICODE_SYMBOLS.FRACTION_1_3,
|
|
209
|
+
"2/3": UNICODE_SYMBOLS.FRACTION_2_3,
|
|
210
|
+
"1/5": UNICODE_SYMBOLS.FRACTION_1_5,
|
|
211
|
+
"2/5": UNICODE_SYMBOLS.FRACTION_2_5,
|
|
212
|
+
"3/5": UNICODE_SYMBOLS.FRACTION_3_5,
|
|
213
|
+
"4/5": UNICODE_SYMBOLS.FRACTION_4_5,
|
|
214
|
+
"1/6": UNICODE_SYMBOLS.FRACTION_1_6,
|
|
215
|
+
"5/6": UNICODE_SYMBOLS.FRACTION_5_6,
|
|
216
|
+
"1/8": UNICODE_SYMBOLS.FRACTION_1_8,
|
|
217
|
+
"3/8": UNICODE_SYMBOLS.FRACTION_3_8,
|
|
218
|
+
"5/8": UNICODE_SYMBOLS.FRACTION_5_8,
|
|
219
|
+
"7/8": UNICODE_SYMBOLS.FRACTION_7_8,
|
|
220
|
+
};
|
|
194
221
|
/**
|
|
195
222
|
* Converts common fractions to Unicode fraction characters.
|
|
196
223
|
*
|
|
@@ -209,27 +236,17 @@ export function primeMarks(text, options = {}) {
|
|
|
209
236
|
* // → "About ¾ complete"
|
|
210
237
|
* ```
|
|
211
238
|
*/
|
|
212
|
-
export function fractions(text) {
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
"
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
"1/6": UNICODE_SYMBOLS.FRACTION_1_6,
|
|
224
|
-
"5/6": UNICODE_SYMBOLS.FRACTION_5_6,
|
|
225
|
-
"1/8": UNICODE_SYMBOLS.FRACTION_1_8,
|
|
226
|
-
"3/8": UNICODE_SYMBOLS.FRACTION_3_8,
|
|
227
|
-
"5/8": UNICODE_SYMBOLS.FRACTION_5_8,
|
|
228
|
-
"7/8": UNICODE_SYMBOLS.FRACTION_7_8,
|
|
229
|
-
};
|
|
230
|
-
for (const [ascii, unicode] of Object.entries(fractionMap)) {
|
|
231
|
-
const pattern = new RegExp(`(?<!\\d)${ascii.replace("/", "\\/")}(?!\\d)`, "g");
|
|
232
|
-
text = text.replace(pattern, unicode);
|
|
239
|
+
export function fractions(text, options = {}) {
|
|
240
|
+
const chr = options.separator
|
|
241
|
+
? escapeRegex(options.separator)
|
|
242
|
+
: ESCAPED_DEFAULT_SEPARATOR;
|
|
243
|
+
for (const [ascii, unicode] of Object.entries(FRACTION_MAP)) {
|
|
244
|
+
// Negative lookbehind/lookahead: ensures fraction is not part of a larger number
|
|
245
|
+
// Named captures preserve separators before and after the slash
|
|
246
|
+
const [numerator, denominator] = ascii.split("/");
|
|
247
|
+
const pattern = new RegExp(`(?<!\\d)${numerator}(?<sepBefore>${chr}?)/(?<sepAfter>${chr}?)${denominator}(?!\\d)`, "g");
|
|
248
|
+
// Preserve separators around the fraction Unicode character
|
|
249
|
+
text = text.replace(pattern, `$<sepBefore>${unicode}$<sepAfter>`);
|
|
233
250
|
}
|
|
234
251
|
return text;
|
|
235
252
|
}
|
package/dist/symbols.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"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"}
|