html2canvas-pro 2.1.0 → 2.1.1

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.
Files changed (186) hide show
  1. package/dist/html2canvas-pro.esm.js +21 -7
  2. package/dist/html2canvas-pro.esm.js.map +1 -1
  3. package/dist/html2canvas-pro.js +21 -7
  4. package/dist/html2canvas-pro.js.map +1 -1
  5. package/dist/html2canvas-pro.min.js +3 -3
  6. package/dist/lib/core/cache-storage.js +2 -2
  7. package/dist/lib/core/features.js +2 -2
  8. package/dist/lib/render/canvas/background-renderer.js +6 -0
  9. package/dist/lib/render/canvas/canvas-renderer.js +5 -1
  10. package/dist/lib/render/canvas/foreignobject-renderer.js +5 -1
  11. package/package.json +3 -11
  12. package/dist/lib/invariant.js +0 -9
  13. package/dist/types/invariant.d.ts +0 -1
  14. package/src/__tests__/index.ts +0 -99
  15. package/src/config.ts +0 -107
  16. package/src/core/__mocks__/cache-storage.ts +0 -1
  17. package/src/core/__mocks__/context.ts +0 -19
  18. package/src/core/__mocks__/features.ts +0 -8
  19. package/src/core/__mocks__/logger.ts +0 -17
  20. package/src/core/__tests__/cache-storage.test.ts +0 -205
  21. package/src/core/__tests__/cache-storage.ts +0 -278
  22. package/src/core/__tests__/logger.ts +0 -29
  23. package/src/core/__tests__/validator.ts +0 -359
  24. package/src/core/bitwise.ts +0 -1
  25. package/src/core/cache-storage.ts +0 -315
  26. package/src/core/context.ts +0 -31
  27. package/src/core/debugger.ts +0 -32
  28. package/src/core/features.ts +0 -222
  29. package/src/core/logger.ts +0 -64
  30. package/src/core/origin-checker.ts +0 -57
  31. package/src/core/performance-monitor.ts +0 -241
  32. package/src/core/render-element.ts +0 -272
  33. package/src/core/util.ts +0 -1
  34. package/src/core/validator.ts +0 -593
  35. package/src/css/index.ts +0 -427
  36. package/src/css/layout/__mocks__/bounds.ts +0 -6
  37. package/src/css/layout/bounds.ts +0 -79
  38. package/src/css/layout/text.ts +0 -161
  39. package/src/css/property-descriptor.ts +0 -49
  40. package/src/css/property-descriptors/__tests__/background-tests.ts +0 -65
  41. package/src/css/property-descriptors/__tests__/clip-path.test.ts +0 -280
  42. package/src/css/property-descriptors/__tests__/font-family.ts +0 -25
  43. package/src/css/property-descriptors/__tests__/image-rendering-integration.test.ts +0 -153
  44. package/src/css/property-descriptors/__tests__/image-rendering-performance.test.ts +0 -175
  45. package/src/css/property-descriptors/__tests__/image-rendering.test.ts +0 -72
  46. package/src/css/property-descriptors/__tests__/paint-order.ts +0 -87
  47. package/src/css/property-descriptors/__tests__/text-shadow.ts +0 -94
  48. package/src/css/property-descriptors/__tests__/transform-tests.ts +0 -18
  49. package/src/css/property-descriptors/background-clip.ts +0 -30
  50. package/src/css/property-descriptors/background-color.ts +0 -9
  51. package/src/css/property-descriptors/background-image.ts +0 -27
  52. package/src/css/property-descriptors/background-origin.ts +0 -31
  53. package/src/css/property-descriptors/background-position.ts +0 -38
  54. package/src/css/property-descriptors/background-repeat.ts +0 -44
  55. package/src/css/property-descriptors/background-size.ts +0 -27
  56. package/src/css/property-descriptors/border-color.ts +0 -13
  57. package/src/css/property-descriptors/border-radius.ts +0 -19
  58. package/src/css/property-descriptors/border-style.ts +0 -34
  59. package/src/css/property-descriptors/border-width.ts +0 -20
  60. package/src/css/property-descriptors/box-shadow.ts +0 -60
  61. package/src/css/property-descriptors/clip-path.ts +0 -271
  62. package/src/css/property-descriptors/color.ts +0 -9
  63. package/src/css/property-descriptors/content.ts +0 -26
  64. package/src/css/property-descriptors/counter-increment.ts +0 -43
  65. package/src/css/property-descriptors/counter-reset.ts +0 -36
  66. package/src/css/property-descriptors/direction.ts +0 -23
  67. package/src/css/property-descriptors/display.ts +0 -117
  68. package/src/css/property-descriptors/duration.ts +0 -14
  69. package/src/css/property-descriptors/float.ts +0 -29
  70. package/src/css/property-descriptors/font-family.ts +0 -38
  71. package/src/css/property-descriptors/font-size.ts +0 -9
  72. package/src/css/property-descriptors/font-style.ts +0 -25
  73. package/src/css/property-descriptors/font-variant.ts +0 -12
  74. package/src/css/property-descriptors/font-weight.ts +0 -26
  75. package/src/css/property-descriptors/image-rendering.ts +0 -33
  76. package/src/css/property-descriptors/letter-spacing.ts +0 -25
  77. package/src/css/property-descriptors/line-break.ts +0 -22
  78. package/src/css/property-descriptors/line-height.ts +0 -22
  79. package/src/css/property-descriptors/list-style-image.ts +0 -19
  80. package/src/css/property-descriptors/list-style-position.ts +0 -22
  81. package/src/css/property-descriptors/list-style-type.ts +0 -179
  82. package/src/css/property-descriptors/margin.ts +0 -13
  83. package/src/css/property-descriptors/mix-blend-mode.ts +0 -35
  84. package/src/css/property-descriptors/object-fit.ts +0 -39
  85. package/src/css/property-descriptors/opacity.ts +0 -15
  86. package/src/css/property-descriptors/overflow-wrap.ts +0 -22
  87. package/src/css/property-descriptors/overflow.ts +0 -34
  88. package/src/css/property-descriptors/padding.ts +0 -14
  89. package/src/css/property-descriptors/paint-order.ts +0 -42
  90. package/src/css/property-descriptors/position.ts +0 -30
  91. package/src/css/property-descriptors/quotes.ts +0 -57
  92. package/src/css/property-descriptors/rotate.ts +0 -34
  93. package/src/css/property-descriptors/text-align.ts +0 -26
  94. package/src/css/property-descriptors/text-decoration-color.ts +0 -9
  95. package/src/css/property-descriptors/text-decoration-line.ts +0 -38
  96. package/src/css/property-descriptors/text-decoration-style.ts +0 -32
  97. package/src/css/property-descriptors/text-decoration-thickness.ts +0 -30
  98. package/src/css/property-descriptors/text-overflow.ts +0 -23
  99. package/src/css/property-descriptors/text-shadow.ts +0 -52
  100. package/src/css/property-descriptors/text-transform.ts +0 -27
  101. package/src/css/property-descriptors/text-underline-offset.ts +0 -27
  102. package/src/css/property-descriptors/transform-origin.ts +0 -29
  103. package/src/css/property-descriptors/transform.ts +0 -74
  104. package/src/css/property-descriptors/visibility.ts +0 -25
  105. package/src/css/property-descriptors/webkit-line-clamp.ts +0 -30
  106. package/src/css/property-descriptors/webkit-text-stroke-color.ts +0 -8
  107. package/src/css/property-descriptors/webkit-text-stroke-width.ts +0 -15
  108. package/src/css/property-descriptors/word-break.ts +0 -25
  109. package/src/css/property-descriptors/writing-mode.ts +0 -37
  110. package/src/css/property-descriptors/z-index.ts +0 -27
  111. package/src/css/syntax/__tests__/tokernizer-tests.ts +0 -29
  112. package/src/css/syntax/parser.ts +0 -188
  113. package/src/css/syntax/tokenizer.ts +0 -822
  114. package/src/css/type-descriptor.ts +0 -7
  115. package/src/css/types/__tests__/color-tests.ts +0 -147
  116. package/src/css/types/__tests__/image-tests.ts +0 -239
  117. package/src/css/types/angle.ts +0 -86
  118. package/src/css/types/color-math.ts +0 -22
  119. package/src/css/types/color-spaces/a98.ts +0 -86
  120. package/src/css/types/color-spaces/p3.ts +0 -92
  121. package/src/css/types/color-spaces/pro-photo.ts +0 -87
  122. package/src/css/types/color-spaces/rec2020.ts +0 -90
  123. package/src/css/types/color-spaces/srgb.ts +0 -87
  124. package/src/css/types/color-utilities.ts +0 -452
  125. package/src/css/types/color.ts +0 -485
  126. package/src/css/types/functions/-prefix-linear-gradient.ts +0 -35
  127. package/src/css/types/functions/-prefix-radial-gradient.ts +0 -106
  128. package/src/css/types/functions/-webkit-gradient.ts +0 -69
  129. package/src/css/types/functions/__tests__/radial-gradient.ts +0 -69
  130. package/src/css/types/functions/counter.ts +0 -511
  131. package/src/css/types/functions/gradient.ts +0 -206
  132. package/src/css/types/functions/linear-gradient.ts +0 -28
  133. package/src/css/types/functions/radial-gradient.ts +0 -101
  134. package/src/css/types/image.ts +0 -120
  135. package/src/css/types/index.ts +0 -1
  136. package/src/css/types/length-percentage.ts +0 -137
  137. package/src/css/types/length.ts +0 -7
  138. package/src/css/types/time.ts +0 -20
  139. package/src/dom/__mocks__/document-cloner.ts +0 -22
  140. package/src/dom/__tests__/dom-normalizer.test.ts +0 -133
  141. package/src/dom/__tests__/element-container.test.ts +0 -129
  142. package/src/dom/document-cloner.ts +0 -929
  143. package/src/dom/dom-normalizer.ts +0 -133
  144. package/src/dom/element-container.ts +0 -75
  145. package/src/dom/elements/li-element-container.ts +0 -10
  146. package/src/dom/elements/ol-element-container.ts +0 -12
  147. package/src/dom/elements/select-element-container.ts +0 -10
  148. package/src/dom/elements/textarea-element-container.ts +0 -9
  149. package/src/dom/node-parser.ts +0 -177
  150. package/src/dom/node-type-guards.ts +0 -70
  151. package/src/dom/replaced-elements/canvas-element-container.ts +0 -15
  152. package/src/dom/replaced-elements/iframe-element-container.ts +0 -55
  153. package/src/dom/replaced-elements/image-element-container.ts +0 -16
  154. package/src/dom/replaced-elements/index.ts +0 -5
  155. package/src/dom/replaced-elements/input-element-container.ts +0 -105
  156. package/src/dom/replaced-elements/pseudo-elements.ts +0 -0
  157. package/src/dom/replaced-elements/svg-element-container.ts +0 -23
  158. package/src/dom/text-container.ts +0 -42
  159. package/src/global.d.ts +0 -19
  160. package/src/index.ts +0 -82
  161. package/src/invariant.ts +0 -5
  162. package/src/options.ts +0 -55
  163. package/src/render/__tests__/object-fit.test.ts +0 -85
  164. package/src/render/background.ts +0 -298
  165. package/src/render/bezier-curve.ts +0 -47
  166. package/src/render/border.ts +0 -165
  167. package/src/render/bound-curves.ts +0 -388
  168. package/src/render/box-sizing.ts +0 -31
  169. package/src/render/canvas/__tests__/background-renderer.test.ts +0 -72
  170. package/src/render/canvas/__tests__/border-renderer.test.ts +0 -24
  171. package/src/render/canvas/__tests__/effects-renderer.test.ts +0 -32
  172. package/src/render/canvas/__tests__/text-renderer.test.ts +0 -471
  173. package/src/render/canvas/background-renderer.ts +0 -271
  174. package/src/render/canvas/border-renderer.ts +0 -224
  175. package/src/render/canvas/canvas-path.ts +0 -31
  176. package/src/render/canvas/canvas-renderer.ts +0 -641
  177. package/src/render/canvas/effects-renderer.ts +0 -130
  178. package/src/render/canvas/foreignobject-renderer.ts +0 -53
  179. package/src/render/canvas/text-renderer.ts +0 -700
  180. package/src/render/effects.ts +0 -75
  181. package/src/render/font-metrics.ts +0 -72
  182. package/src/render/object-fit.ts +0 -100
  183. package/src/render/path.ts +0 -37
  184. package/src/render/renderer-interface.ts +0 -28
  185. package/src/render/stacking-context.ts +0 -386
  186. package/src/render/vector.ts +0 -19
@@ -1,69 +0,0 @@
1
- import { deepStrictEqual } from 'assert';
2
- import { CSSFunction, Parser } from '../../../syntax/parser';
3
- import { radialGradient } from '../radial-gradient';
4
- import { CSSImageType, CSSRadialExtent, CSSRadialShape } from '../../image';
5
- import { color } from '../../color';
6
- import { TokenType } from '../../../syntax/tokenizer';
7
- import { FIFTY_PERCENT, HUNDRED_PERCENT } from '../../length-percentage';
8
- import { Context } from '../../../../core/context';
9
-
10
- const parse = (value: string) => radialGradient({} as Context, (Parser.parseValues(value)[0] as CSSFunction).values);
11
- const colorParse = (value: string) => color.parse({} as Context, Parser.parseValue(value));
12
-
13
- describe('functions', () => {
14
- describe('radial-gradient', () => {
15
- describe('parsing', () => {
16
- it('radial-gradient(circle closest-side, #3f87a6, #ebf8e1, #f69d3c)', () =>
17
- deepStrictEqual(parse('radial-gradient(ellipse closest-side, #3f87a6, #ebf8e1, #f69d3c)'), {
18
- type: CSSImageType.RADIAL_GRADIENT,
19
- shape: CSSRadialShape.ELLIPSE,
20
- size: CSSRadialExtent.CLOSEST_SIDE,
21
- position: [],
22
- stops: [
23
- { color: colorParse('#3f87a6'), stop: null },
24
- { color: colorParse('#ebf8e1'), stop: null },
25
- { color: colorParse('#f69d3c'), stop: null }
26
- ]
27
- }));
28
- it('radial-gradient(circle at center, red 0, blue, green 100%)', () =>
29
- deepStrictEqual(parse('radial-gradient(circle at center, red 0, blue, green 100%)'), {
30
- type: CSSImageType.RADIAL_GRADIENT,
31
- shape: CSSRadialShape.CIRCLE,
32
- size: CSSRadialExtent.FARTHEST_CORNER,
33
- position: [FIFTY_PERCENT],
34
- stops: [
35
- { color: colorParse('red'), stop: { type: TokenType.NUMBER_TOKEN, number: 0, flags: 4 } },
36
- { color: colorParse('blue'), stop: null },
37
- {
38
- color: colorParse('green'),
39
- stop: { type: TokenType.PERCENTAGE_TOKEN, number: 100, flags: 4 }
40
- }
41
- ]
42
- }));
43
- it('radial-gradient(circle at 100%, #333, #333 50%, #eee 75%, #333 75%)', () =>
44
- deepStrictEqual(parse('radial-gradient(circle at 100%, #333, #333 50%, #eee 75%, #333 75%)'), {
45
- type: CSSImageType.RADIAL_GRADIENT,
46
- shape: CSSRadialShape.CIRCLE,
47
- size: CSSRadialExtent.FARTHEST_CORNER,
48
- position: [HUNDRED_PERCENT],
49
- stops: [
50
- { color: colorParse('#333'), stop: null },
51
- { color: colorParse('#333'), stop: { type: TokenType.PERCENTAGE_TOKEN, number: 50, flags: 4 } },
52
- { color: colorParse('#eee'), stop: { type: TokenType.PERCENTAGE_TOKEN, number: 75, flags: 4 } },
53
- { color: colorParse('#333'), stop: { type: TokenType.PERCENTAGE_TOKEN, number: 75, flags: 4 } }
54
- ]
55
- }));
56
- it('radial-gradient(20px, red, blue)', () =>
57
- deepStrictEqual(parse('radial-gradient(20px, red, blue)'), {
58
- type: CSSImageType.RADIAL_GRADIENT,
59
- shape: CSSRadialShape.CIRCLE,
60
- size: [{ type: TokenType.DIMENSION_TOKEN, number: 20, flags: 4, unit: 'px' }],
61
- position: [],
62
- stops: [
63
- { color: colorParse('red'), stop: null },
64
- { color: colorParse('blue'), stop: null }
65
- ]
66
- }));
67
- });
68
- });
69
- });
@@ -1,511 +0,0 @@
1
- import { LIST_STYLE_TYPE } from '../../property-descriptors/list-style-type';
2
- import { fromCodePoint } from 'css-line-break';
3
- import { contains } from '../../../core/bitwise';
4
- import { CSSParsedCounterDeclaration } from '../../index';
5
-
6
- export class CounterState {
7
- private readonly counters: { [key: string]: number[] } = {};
8
-
9
- getCounterValue(name: string): number {
10
- const counter = this.counters[name];
11
-
12
- if (counter && counter.length) {
13
- return counter[counter.length - 1];
14
- }
15
- return 1;
16
- }
17
-
18
- getCounterValues(name: string): readonly number[] {
19
- const counter = this.counters[name];
20
- return counter ? counter : [];
21
- }
22
-
23
- pop(counters: string[]): void {
24
- counters.forEach((counter) => this.counters[counter].pop());
25
- }
26
-
27
- parse(style: CSSParsedCounterDeclaration): string[] {
28
- const counterIncrement = style.counterIncrement;
29
- const counterReset = style.counterReset;
30
- let canReset = true;
31
-
32
- if (counterIncrement !== null) {
33
- counterIncrement.forEach((entry) => {
34
- const counter = this.counters[entry.counter];
35
- if (counter && entry.increment !== 0) {
36
- canReset = false;
37
- if (!counter.length) {
38
- counter.push(1);
39
- }
40
- counter[Math.max(0, counter.length - 1)] += entry.increment;
41
- }
42
- });
43
- }
44
-
45
- const counterNames: string[] = [];
46
- if (canReset) {
47
- counterReset.forEach((entry) => {
48
- let counter = this.counters[entry.counter];
49
- counterNames.push(entry.counter);
50
- if (!counter) {
51
- counter = this.counters[entry.counter] = [];
52
- }
53
- counter.push(entry.reset);
54
- });
55
- }
56
-
57
- return counterNames;
58
- }
59
- }
60
-
61
- interface CounterSymbols {
62
- integers: number[];
63
- values: string[];
64
- }
65
-
66
- const ROMAN_UPPER: CounterSymbols = {
67
- integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],
68
- values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
69
- };
70
-
71
- const ARMENIAN: CounterSymbols = {
72
- integers: [
73
- 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70,
74
- 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
75
- ],
76
- values: [
77
- 'Ք',
78
- 'Փ',
79
- 'Ւ',
80
- 'Ց',
81
- 'Ր',
82
- 'Տ',
83
- 'Վ',
84
- 'Ս',
85
- 'Ռ',
86
- 'Ջ',
87
- 'Պ',
88
- 'Չ',
89
- 'Ո',
90
- 'Շ',
91
- 'Ն',
92
- 'Յ',
93
- 'Մ',
94
- 'Ճ',
95
- 'Ղ',
96
- 'Ձ',
97
- 'Հ',
98
- 'Կ',
99
- 'Ծ',
100
- 'Խ',
101
- 'Լ',
102
- 'Ի',
103
- 'Ժ',
104
- 'Թ',
105
- 'Ը',
106
- 'Է',
107
- 'Զ',
108
- 'Ե',
109
- 'Դ',
110
- 'Գ',
111
- 'Բ',
112
- 'Ա'
113
- ]
114
- };
115
-
116
- const HEBREW: CounterSymbols = {
117
- integers: [
118
- 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,
119
- 19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
120
- ],
121
- values: [
122
- 'י׳',
123
- 'ט׳',
124
- 'ח׳',
125
- 'ז׳',
126
- 'ו׳',
127
- 'ה׳',
128
- 'ד׳',
129
- 'ג׳',
130
- 'ב׳',
131
- 'א׳',
132
- 'ת',
133
- 'ש',
134
- 'ר',
135
- 'ק',
136
- 'צ',
137
- 'פ',
138
- 'ע',
139
- 'ס',
140
- 'נ',
141
- 'מ',
142
- 'ל',
143
- 'כ',
144
- 'יט',
145
- 'יח',
146
- 'יז',
147
- 'טז',
148
- 'טו',
149
- 'י',
150
- 'ט',
151
- 'ח',
152
- 'ז',
153
- 'ו',
154
- 'ה',
155
- 'ד',
156
- 'ג',
157
- 'ב',
158
- 'א'
159
- ]
160
- };
161
-
162
- const GEORGIAN: CounterSymbols = {
163
- integers: [
164
- 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90,
165
- 80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
166
- ],
167
- values: [
168
- 'ჵ',
169
- 'ჰ',
170
- 'ჯ',
171
- 'ჴ',
172
- 'ხ',
173
- 'ჭ',
174
- 'წ',
175
- 'ძ',
176
- 'ც',
177
- 'ჩ',
178
- 'შ',
179
- 'ყ',
180
- 'ღ',
181
- 'ქ',
182
- 'ფ',
183
- 'ჳ',
184
- 'ტ',
185
- 'ს',
186
- 'რ',
187
- 'ჟ',
188
- 'პ',
189
- 'ო',
190
- 'ჲ',
191
- 'ნ',
192
- 'მ',
193
- 'ლ',
194
- 'კ',
195
- 'ი',
196
- 'თ',
197
- 'ჱ',
198
- 'ზ',
199
- 'ვ',
200
- 'ე',
201
- 'დ',
202
- 'გ',
203
- 'ბ',
204
- 'ა'
205
- ]
206
- };
207
-
208
- const createAdditiveCounter = (
209
- value: number,
210
- min: number,
211
- max: number,
212
- symbols: CounterSymbols,
213
- fallback: LIST_STYLE_TYPE,
214
- suffix: string
215
- ) => {
216
- if (value < min || value > max) {
217
- return createCounterText(value, fallback, suffix.length > 0);
218
- }
219
-
220
- return (
221
- symbols.integers.reduce((string, integer, index) => {
222
- while (value >= integer) {
223
- value -= integer;
224
- string += symbols.values[index];
225
- }
226
- return string;
227
- }, '') + suffix
228
- );
229
- };
230
-
231
- const createCounterStyleWithSymbolResolver = (
232
- value: number,
233
- codePointRangeLength: number,
234
- isNumeric: boolean,
235
- resolver: (codePoint: number) => string
236
- ): string => {
237
- let string = '';
238
-
239
- do {
240
- if (!isNumeric) {
241
- value--;
242
- }
243
- string = resolver(value) + string;
244
- value /= codePointRangeLength;
245
- } while (value * codePointRangeLength >= codePointRangeLength);
246
-
247
- return string;
248
- };
249
-
250
- const createCounterStyleFromRange = (
251
- value: number,
252
- codePointRangeStart: number,
253
- codePointRangeEnd: number,
254
- isNumeric: boolean,
255
- suffix: string
256
- ): string => {
257
- const codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;
258
-
259
- return (
260
- (value < 0 ? '-' : '') +
261
- (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, (codePoint) =>
262
- fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart)
263
- ) +
264
- suffix)
265
- );
266
- };
267
-
268
- const createCounterStyleFromSymbols = (value: number, symbols: string, suffix = '. '): string => {
269
- const codePointRangeLength = symbols.length;
270
- return (
271
- createCounterStyleWithSymbolResolver(
272
- Math.abs(value),
273
- codePointRangeLength,
274
- false,
275
- (codePoint) => symbols[Math.floor(codePoint % codePointRangeLength)]
276
- ) + suffix
277
- );
278
- };
279
-
280
- const CJK_ZEROS = 1 << 0;
281
- const CJK_TEN_COEFFICIENTS = 1 << 1;
282
- const CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;
283
- const CJK_HUNDRED_COEFFICIENTS = 1 << 3;
284
-
285
- const createCJKCounter = (
286
- value: number,
287
- numbers: string,
288
- multipliers: string,
289
- negativeSign: string,
290
- suffix: string,
291
- flags: number
292
- ): string => {
293
- if (value < -9999 || value > 9999) {
294
- return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0);
295
- }
296
- let tmp = Math.abs(value);
297
- let string = suffix;
298
-
299
- if (tmp === 0) {
300
- return numbers[0] + string;
301
- }
302
-
303
- for (let digit = 0; tmp > 0 && digit <= 4; digit++) {
304
- const coefficient = tmp % 10;
305
-
306
- if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {
307
- string = numbers[coefficient] + string;
308
- } else if (
309
- coefficient > 1 ||
310
- (coefficient === 1 && digit === 0) ||
311
- (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||
312
- (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||
313
- (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))
314
- ) {
315
- string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;
316
- } else if (coefficient === 1 && digit > 0) {
317
- string = multipliers[digit - 1] + string;
318
- }
319
- tmp = Math.floor(tmp / 10);
320
- }
321
-
322
- return (value < 0 ? negativeSign : '') + string;
323
- };
324
-
325
- const CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';
326
- const CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';
327
- const JAPANESE_NEGATIVE = 'マイナス';
328
- const KOREAN_NEGATIVE = '마이너스';
329
-
330
- export const createCounterText = (value: number, type: LIST_STYLE_TYPE, appendSuffix: boolean): string => {
331
- const defaultSuffix = appendSuffix ? '. ' : '';
332
- const cjkSuffix = appendSuffix ? '、' : '';
333
- const koreanSuffix = appendSuffix ? ', ' : '';
334
- const spaceSuffix = appendSuffix ? ' ' : '';
335
- switch (type) {
336
- case LIST_STYLE_TYPE.DISC:
337
- return '•' + spaceSuffix;
338
- case LIST_STYLE_TYPE.CIRCLE:
339
- return '◦' + spaceSuffix;
340
- case LIST_STYLE_TYPE.SQUARE:
341
- return '◾' + spaceSuffix;
342
- case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:
343
- const string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);
344
- return string.length < 4 ? `0${string}` : string;
345
- case LIST_STYLE_TYPE.CJK_DECIMAL:
346
- return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);
347
- case LIST_STYLE_TYPE.LOWER_ROMAN:
348
- return createAdditiveCounter(
349
- value,
350
- 1,
351
- 3999,
352
- ROMAN_UPPER,
353
- LIST_STYLE_TYPE.DECIMAL,
354
- defaultSuffix
355
- ).toLowerCase();
356
- case LIST_STYLE_TYPE.UPPER_ROMAN:
357
- return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
358
- case LIST_STYLE_TYPE.LOWER_GREEK:
359
- return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);
360
- case LIST_STYLE_TYPE.LOWER_ALPHA:
361
- return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);
362
- case LIST_STYLE_TYPE.UPPER_ALPHA:
363
- return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);
364
- case LIST_STYLE_TYPE.ARABIC_INDIC:
365
- return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);
366
- case LIST_STYLE_TYPE.ARMENIAN:
367
- case LIST_STYLE_TYPE.UPPER_ARMENIAN:
368
- return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
369
- case LIST_STYLE_TYPE.LOWER_ARMENIAN:
370
- return createAdditiveCounter(
371
- value,
372
- 1,
373
- 9999,
374
- ARMENIAN,
375
- LIST_STYLE_TYPE.DECIMAL,
376
- defaultSuffix
377
- ).toLowerCase();
378
- case LIST_STYLE_TYPE.BENGALI:
379
- return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);
380
- case LIST_STYLE_TYPE.CAMBODIAN:
381
- case LIST_STYLE_TYPE.KHMER:
382
- return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);
383
- case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:
384
- return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);
385
- case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:
386
- return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);
387
- case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:
388
- case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:
389
- return createCJKCounter(
390
- value,
391
- '零一二三四五六七八九',
392
- CHINESE_INFORMAL_MULTIPLIERS,
393
- '負',
394
- cjkSuffix,
395
- CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS
396
- );
397
- case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:
398
- return createCJKCounter(
399
- value,
400
- '零壹貳參肆伍陸柒捌玖',
401
- CHINESE_FORMAL_MULTIPLIERS,
402
- '負',
403
- cjkSuffix,
404
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS
405
- );
406
- case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:
407
- return createCJKCounter(
408
- value,
409
- '零一二三四五六七八九',
410
- CHINESE_INFORMAL_MULTIPLIERS,
411
- '负',
412
- cjkSuffix,
413
- CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS
414
- );
415
- case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:
416
- return createCJKCounter(
417
- value,
418
- '零壹贰叁肆伍陆柒捌玖',
419
- CHINESE_FORMAL_MULTIPLIERS,
420
- '负',
421
- cjkSuffix,
422
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS
423
- );
424
- case LIST_STYLE_TYPE.JAPANESE_INFORMAL:
425
- return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);
426
- case LIST_STYLE_TYPE.JAPANESE_FORMAL:
427
- return createCJKCounter(
428
- value,
429
- '零壱弐参四伍六七八九',
430
- '拾百千万',
431
- JAPANESE_NEGATIVE,
432
- cjkSuffix,
433
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
434
- );
435
- case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:
436
- return createCJKCounter(
437
- value,
438
- '영일이삼사오육칠팔구',
439
- '십백천만',
440
- KOREAN_NEGATIVE,
441
- koreanSuffix,
442
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
443
- );
444
- case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:
445
- return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);
446
- case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:
447
- return createCJKCounter(
448
- value,
449
- '零壹貳參四五六七八九',
450
- '拾百千',
451
- KOREAN_NEGATIVE,
452
- koreanSuffix,
453
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
454
- );
455
- case LIST_STYLE_TYPE.DEVANAGARI:
456
- return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);
457
- case LIST_STYLE_TYPE.GEORGIAN:
458
- return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
459
- case LIST_STYLE_TYPE.GUJARATI:
460
- return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);
461
- case LIST_STYLE_TYPE.GURMUKHI:
462
- return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);
463
- case LIST_STYLE_TYPE.HEBREW:
464
- return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);
465
- case LIST_STYLE_TYPE.HIRAGANA:
466
- return createCounterStyleFromSymbols(
467
- value,
468
- 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん'
469
- );
470
- case LIST_STYLE_TYPE.HIRAGANA_IROHA:
471
- return createCounterStyleFromSymbols(
472
- value,
473
- 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす'
474
- );
475
- case LIST_STYLE_TYPE.KANNADA:
476
- return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);
477
- case LIST_STYLE_TYPE.KATAKANA:
478
- return createCounterStyleFromSymbols(
479
- value,
480
- 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン',
481
- cjkSuffix
482
- );
483
- case LIST_STYLE_TYPE.KATAKANA_IROHA:
484
- return createCounterStyleFromSymbols(
485
- value,
486
- 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス',
487
- cjkSuffix
488
- );
489
- case LIST_STYLE_TYPE.LAO:
490
- return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);
491
- case LIST_STYLE_TYPE.MONGOLIAN:
492
- return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);
493
- case LIST_STYLE_TYPE.MYANMAR:
494
- return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);
495
- case LIST_STYLE_TYPE.ORIYA:
496
- return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);
497
- case LIST_STYLE_TYPE.PERSIAN:
498
- return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);
499
- case LIST_STYLE_TYPE.TAMIL:
500
- return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);
501
- case LIST_STYLE_TYPE.TELUGU:
502
- return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);
503
- case LIST_STYLE_TYPE.THAI:
504
- return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);
505
- case LIST_STYLE_TYPE.TIBETAN:
506
- return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);
507
- case LIST_STYLE_TYPE.DECIMAL:
508
- default:
509
- return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);
510
- }
511
- };