pdfjs-dist 2.0.489 → 2.2.228
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.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/CODE_OF_CONDUCT.md +15 -0
- package/bower.json +1 -1
- package/build/pdf.js +18515 -11402
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +48266 -37137
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/external/url/url-lib.js +627 -0
- package/image_decoders/pdf.image_decoders.js +11350 -0
- package/image_decoders/pdf.image_decoders.js.map +1 -0
- package/image_decoders/pdf.image_decoders.min.js +1 -0
- package/lib/core/annotation.js +587 -242
- package/lib/core/arithmetic_decoder.js +275 -245
- package/lib/core/bidi.js +65 -6
- package/lib/core/ccitt.js +173 -18
- package/lib/core/ccitt_stream.js +15 -6
- package/lib/core/cff_parser.js +433 -61
- package/lib/core/charsets.js +5 -4
- package/lib/core/chunked_stream.js +400 -152
- package/lib/core/cmap.js +326 -87
- package/lib/core/colorspace.js +874 -594
- package/lib/core/core_utils.js +147 -0
- package/lib/core/crypto.js +290 -45
- package/lib/core/document.js +560 -268
- package/lib/core/encodings.js +19 -10
- package/lib/core/evaluator.js +1005 -360
- package/lib/core/font_renderer.js +331 -97
- package/lib/core/fonts.js +812 -195
- package/lib/core/function.js +284 -71
- package/lib/core/glyphlist.js +4 -3
- package/lib/core/image.js +169 -62
- package/lib/core/image_utils.js +111 -0
- package/lib/core/jbig2.js +479 -66
- package/lib/core/jbig2_stream.js +19 -8
- package/lib/core/jpeg_stream.js +38 -13
- package/lib/core/jpg.js +253 -29
- package/lib/core/jpx.js +396 -6
- package/lib/core/jpx_stream.js +18 -6
- package/lib/core/metrics.js +15 -15
- package/lib/core/murmurhash3.js +56 -34
- package/lib/core/obj.js +1354 -488
- package/lib/core/operator_list.js +144 -31
- package/lib/core/parser.js +539 -191
- package/lib/core/pattern.js +148 -14
- package/lib/core/pdf_manager.js +323 -133
- package/lib/core/primitives.js +111 -24
- package/lib/core/ps_parser.js +134 -45
- package/lib/core/standard_fonts.js +17 -17
- package/lib/core/stream.js +313 -34
- package/lib/core/type1_parser.js +143 -13
- package/lib/core/unicode.js +32 -5
- package/lib/core/worker.js +217 -190
- package/lib/core/worker_stream.js +277 -0
- package/lib/display/annotation_layer.js +450 -133
- package/lib/display/api.js +1597 -784
- package/lib/display/api_compatibility.js +11 -13
- package/lib/display/canvas.js +360 -44
- package/lib/display/content_disposition.js +83 -32
- package/lib/display/display_utils.js +747 -0
- package/lib/display/fetch_stream.js +221 -90
- package/lib/display/font_loader.js +468 -236
- package/lib/display/metadata.js +38 -16
- package/lib/display/network.js +635 -428
- package/lib/display/network_utils.js +32 -19
- package/lib/display/node_stream.js +367 -175
- package/lib/display/pattern_helper.js +81 -31
- package/lib/display/svg.js +1235 -519
- package/lib/display/text_layer.js +153 -29
- package/lib/display/transport_stream.js +345 -94
- package/lib/display/webgl.js +64 -18
- package/lib/display/worker_options.js +5 -4
- package/lib/display/xml_parser.js +166 -53
- package/lib/examples/node/domstubs.js +60 -4
- package/lib/pdf.js +36 -14
- package/lib/pdf.worker.js +5 -3
- package/lib/shared/compatibility.js +158 -564
- package/lib/shared/global_scope.js +2 -2
- package/lib/shared/is_node.js +4 -4
- package/lib/shared/message_handler.js +521 -0
- package/lib/shared/streams_polyfill.js +21 -17
- package/lib/shared/url_polyfill.js +56 -0
- package/lib/shared/util.js +243 -710
- package/lib/test/unit/annotation_spec.js +870 -401
- package/lib/test/unit/api_spec.js +657 -345
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +54 -11
- package/lib/test/unit/clitests_helper.js +10 -8
- package/lib/test/unit/cmap_spec.js +95 -41
- package/lib/test/unit/colorspace_spec.js +115 -63
- package/lib/test/unit/core_utils_spec.js +191 -0
- package/lib/test/unit/crypto_spec.js +17 -5
- package/lib/test/unit/custom_spec.js +43 -55
- package/lib/test/unit/display_svg_spec.js +34 -18
- package/lib/test/unit/display_utils_spec.js +273 -0
- package/lib/test/unit/document_spec.js +8 -13
- package/lib/test/unit/encodings_spec.js +25 -45
- package/lib/test/unit/evaluator_spec.js +38 -15
- package/lib/test/unit/fetch_stream_spec.js +109 -0
- package/lib/test/unit/function_spec.js +17 -5
- package/lib/test/unit/jasmine-boot.js +33 -20
- package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
- package/lib/test/unit/metadata_spec.js +71 -11
- package/lib/test/unit/murmurhash3_spec.js +3 -3
- package/lib/test/unit/network_spec.js +19 -54
- package/lib/test/unit/network_utils_spec.js +91 -14
- package/lib/test/unit/node_stream_spec.js +56 -32
- package/lib/test/unit/parser_spec.js +162 -71
- package/lib/test/unit/pdf_find_controller_spec.js +230 -0
- package/lib/test/unit/pdf_find_utils_spec.js +63 -0
- package/lib/test/unit/pdf_history_spec.js +21 -9
- package/lib/test/unit/primitives_spec.js +53 -20
- package/lib/test/unit/stream_spec.js +12 -4
- package/lib/test/unit/test_utils.js +273 -56
- package/lib/test/unit/testreporter.js +21 -3
- package/lib/test/unit/type1_parser_spec.js +8 -6
- package/lib/test/unit/ui_utils_spec.js +454 -16
- package/lib/test/unit/unicode_spec.js +18 -15
- package/lib/test/unit/util_spec.js +87 -128
- package/lib/web/annotation_layer_builder.js +39 -22
- package/lib/web/app.js +1290 -588
- package/lib/web/app_options.js +100 -62
- package/lib/web/base_viewer.js +511 -182
- package/lib/web/chromecom.js +261 -117
- package/lib/web/debugger.js +166 -22
- package/lib/web/download_manager.js +32 -13
- package/lib/web/firefox_print_service.js +20 -10
- package/lib/web/firefoxcom.js +315 -80
- package/lib/web/genericcom.js +89 -30
- package/lib/web/genericl10n.js +142 -30
- package/lib/web/grab_to_pan.js +28 -4
- package/lib/web/interfaces.js +170 -47
- package/lib/web/overlay_manager.js +235 -85
- package/lib/web/password_prompt.js +22 -14
- package/lib/web/pdf_attachment_viewer.js +38 -18
- package/lib/web/pdf_cursor_tools.js +39 -16
- package/lib/web/pdf_document_properties.js +255 -136
- package/lib/web/pdf_find_bar.js +84 -40
- package/lib/web/pdf_find_controller.js +495 -184
- package/lib/web/pdf_find_utils.js +111 -0
- package/lib/web/pdf_history.js +190 -53
- package/lib/web/pdf_link_service.js +138 -77
- package/lib/web/pdf_outline_viewer.js +122 -46
- package/lib/web/pdf_page_view.js +191 -67
- package/lib/web/pdf_presentation_mode.js +99 -34
- package/lib/web/pdf_print_service.js +61 -13
- package/lib/web/pdf_rendering_queue.js +28 -9
- package/lib/web/pdf_sidebar.js +141 -81
- package/lib/web/pdf_sidebar_resizer.js +42 -16
- package/lib/web/pdf_single_page_viewer.js +74 -66
- package/lib/web/pdf_thumbnail_view.js +104 -33
- package/lib/web/pdf_thumbnail_viewer.js +66 -26
- package/lib/web/pdf_viewer.component.js +112 -32
- package/lib/web/pdf_viewer.js +91 -52
- package/lib/web/preferences.js +284 -89
- package/lib/web/secondary_toolbar.js +165 -40
- package/lib/web/text_layer_builder.js +134 -59
- package/lib/web/toolbar.js +78 -43
- package/lib/web/ui_utils.js +462 -136
- package/lib/web/view_history.js +215 -67
- package/lib/web/viewer_compatibility.js +4 -13
- package/package.json +5 -4
- package/web/pdf_viewer.css +79 -11
- package/web/pdf_viewer.js +6107 -3748
- package/web/pdf_viewer.js.map +1 -1
- package/lib/display/dom_utils.js +0 -309
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/test/unit/fonts_spec.js +0 -81
- package/lib/web/dom_events.js +0 -137
package/lib/core/bidi.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2019 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -19,36 +19,42 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
24
|
Object.defineProperty(exports, "__esModule", {
|
25
25
|
value: true
|
26
26
|
});
|
27
|
-
exports.bidi =
|
27
|
+
exports.bidi = bidi;
|
28
28
|
|
29
|
-
var _util = require(
|
29
|
+
var _util = require("../shared/util");
|
30
30
|
|
31
31
|
var baseTypes = ['BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'S', 'B', 'S', 'WS', 'B', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'B', 'B', 'B', 'S', 'WS', 'ON', 'ON', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'ON', 'ES', 'CS', 'ES', 'CS', 'CS', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'CS', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'B', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'CS', 'ON', 'ET', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'BN', 'ON', 'ON', 'ET', 'ET', 'EN', 'EN', 'ON', 'L', 'ON', 'ON', 'ON', 'EN', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'];
|
32
32
|
var arabicTypes = ['AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'ON', 'ON', 'AL', 'ET', 'ET', 'AL', 'CS', 'AL', 'ON', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', '', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'ET', 'AN', 'AN', 'AL', 'AL', 'AL', 'NSM', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AN', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'NSM', 'NSM', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL'];
|
33
|
+
|
33
34
|
function isOdd(i) {
|
34
35
|
return (i & 1) !== 0;
|
35
36
|
}
|
37
|
+
|
36
38
|
function isEven(i) {
|
37
39
|
return (i & 1) === 0;
|
38
40
|
}
|
41
|
+
|
39
42
|
function findUnequal(arr, start, value) {
|
40
43
|
for (var j = start, jj = arr.length; j < jj; ++j) {
|
41
44
|
if (arr[j] !== value) {
|
42
45
|
return j;
|
43
46
|
}
|
44
47
|
}
|
48
|
+
|
45
49
|
return j;
|
46
50
|
}
|
51
|
+
|
47
52
|
function setValues(arr, start, end, value) {
|
48
53
|
for (var j = start; j < end; ++j) {
|
49
54
|
arr[j] = value;
|
50
55
|
}
|
51
56
|
}
|
57
|
+
|
52
58
|
function reverseValues(arr, start, end) {
|
53
59
|
for (var i = start, j = end - 1; i < j; ++i, --j) {
|
54
60
|
var temp = arr[i];
|
@@ -56,49 +62,61 @@ function reverseValues(arr, start, end) {
|
|
56
62
|
arr[j] = temp;
|
57
63
|
}
|
58
64
|
}
|
65
|
+
|
59
66
|
function createBidiText(str, isLTR, vertical) {
|
60
67
|
return {
|
61
68
|
str: str,
|
62
69
|
dir: vertical ? 'ttb' : isLTR ? 'ltr' : 'rtl'
|
63
70
|
};
|
64
71
|
}
|
72
|
+
|
65
73
|
var chars = [];
|
66
74
|
var types = [];
|
75
|
+
|
67
76
|
function bidi(str, startLevel, vertical) {
|
68
77
|
var isLTR = true;
|
69
78
|
var strLength = str.length;
|
79
|
+
|
70
80
|
if (strLength === 0 || vertical) {
|
71
81
|
return createBidiText(str, isLTR, vertical);
|
72
82
|
}
|
83
|
+
|
73
84
|
chars.length = strLength;
|
74
85
|
types.length = strLength;
|
75
86
|
var numBidi = 0;
|
76
87
|
var i, ii;
|
88
|
+
|
77
89
|
for (i = 0; i < strLength; ++i) {
|
78
90
|
chars[i] = str.charAt(i);
|
79
91
|
var charCode = str.charCodeAt(i);
|
80
92
|
var charType = 'L';
|
93
|
+
|
81
94
|
if (charCode <= 0x00ff) {
|
82
95
|
charType = baseTypes[charCode];
|
83
96
|
} else if (0x0590 <= charCode && charCode <= 0x05f4) {
|
84
97
|
charType = 'R';
|
85
98
|
} else if (0x0600 <= charCode && charCode <= 0x06ff) {
|
86
99
|
charType = arabicTypes[charCode & 0xff];
|
100
|
+
|
87
101
|
if (!charType) {
|
88
102
|
(0, _util.warn)('Bidi: invalid Unicode character ' + charCode.toString(16));
|
89
103
|
}
|
90
104
|
} else if (0x0700 <= charCode && charCode <= 0x08AC) {
|
91
105
|
charType = 'AL';
|
92
106
|
}
|
107
|
+
|
93
108
|
if (charType === 'R' || charType === 'AL' || charType === 'AN') {
|
94
109
|
numBidi++;
|
95
110
|
}
|
111
|
+
|
96
112
|
types[i] = charType;
|
97
113
|
}
|
114
|
+
|
98
115
|
if (numBidi === 0) {
|
99
116
|
isLTR = true;
|
100
117
|
return createBidiText(str, isLTR);
|
101
118
|
}
|
119
|
+
|
102
120
|
if (startLevel === -1) {
|
103
121
|
if (numBidi / strLength < 0.3) {
|
104
122
|
isLTR = true;
|
@@ -108,14 +126,18 @@ function bidi(str, startLevel, vertical) {
|
|
108
126
|
startLevel = 1;
|
109
127
|
}
|
110
128
|
}
|
129
|
+
|
111
130
|
var levels = [];
|
131
|
+
|
112
132
|
for (i = 0; i < strLength; ++i) {
|
113
133
|
levels[i] = startLevel;
|
114
134
|
}
|
135
|
+
|
115
136
|
var e = isOdd(startLevel) ? 'R' : 'L';
|
116
137
|
var sor = e;
|
117
138
|
var eor = sor;
|
118
139
|
var lastType = sor;
|
140
|
+
|
119
141
|
for (i = 0; i < strLength; ++i) {
|
120
142
|
if (types[i] === 'NSM') {
|
121
143
|
types[i] = lastType;
|
@@ -123,92 +145,120 @@ function bidi(str, startLevel, vertical) {
|
|
123
145
|
lastType = types[i];
|
124
146
|
}
|
125
147
|
}
|
148
|
+
|
126
149
|
lastType = sor;
|
127
150
|
var t;
|
151
|
+
|
128
152
|
for (i = 0; i < strLength; ++i) {
|
129
153
|
t = types[i];
|
154
|
+
|
130
155
|
if (t === 'EN') {
|
131
156
|
types[i] = lastType === 'AL' ? 'AN' : 'EN';
|
132
157
|
} else if (t === 'R' || t === 'L' || t === 'AL') {
|
133
158
|
lastType = t;
|
134
159
|
}
|
135
160
|
}
|
161
|
+
|
136
162
|
for (i = 0; i < strLength; ++i) {
|
137
163
|
t = types[i];
|
164
|
+
|
138
165
|
if (t === 'AL') {
|
139
166
|
types[i] = 'R';
|
140
167
|
}
|
141
168
|
}
|
169
|
+
|
142
170
|
for (i = 1; i < strLength - 1; ++i) {
|
143
171
|
if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') {
|
144
172
|
types[i] = 'EN';
|
145
173
|
}
|
174
|
+
|
146
175
|
if (types[i] === 'CS' && (types[i - 1] === 'EN' || types[i - 1] === 'AN') && types[i + 1] === types[i - 1]) {
|
147
176
|
types[i] = types[i - 1];
|
148
177
|
}
|
149
178
|
}
|
179
|
+
|
150
180
|
for (i = 0; i < strLength; ++i) {
|
151
181
|
if (types[i] === 'EN') {
|
152
182
|
var j;
|
183
|
+
|
153
184
|
for (j = i - 1; j >= 0; --j) {
|
154
185
|
if (types[j] !== 'ET') {
|
155
186
|
break;
|
156
187
|
}
|
188
|
+
|
157
189
|
types[j] = 'EN';
|
158
190
|
}
|
191
|
+
|
159
192
|
for (j = i + 1; j < strLength; ++j) {
|
160
193
|
if (types[j] !== 'ET') {
|
161
194
|
break;
|
162
195
|
}
|
196
|
+
|
163
197
|
types[j] = 'EN';
|
164
198
|
}
|
165
199
|
}
|
166
200
|
}
|
201
|
+
|
167
202
|
for (i = 0; i < strLength; ++i) {
|
168
203
|
t = types[i];
|
204
|
+
|
169
205
|
if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS') {
|
170
206
|
types[i] = 'ON';
|
171
207
|
}
|
172
208
|
}
|
209
|
+
|
173
210
|
lastType = sor;
|
211
|
+
|
174
212
|
for (i = 0; i < strLength; ++i) {
|
175
213
|
t = types[i];
|
214
|
+
|
176
215
|
if (t === 'EN') {
|
177
216
|
types[i] = lastType === 'L' ? 'L' : 'EN';
|
178
217
|
} else if (t === 'R' || t === 'L') {
|
179
218
|
lastType = t;
|
180
219
|
}
|
181
220
|
}
|
221
|
+
|
182
222
|
for (i = 0; i < strLength; ++i) {
|
183
223
|
if (types[i] === 'ON') {
|
184
224
|
var end = findUnequal(types, i + 1, 'ON');
|
185
225
|
var before = sor;
|
226
|
+
|
186
227
|
if (i > 0) {
|
187
228
|
before = types[i - 1];
|
188
229
|
}
|
230
|
+
|
189
231
|
var after = eor;
|
232
|
+
|
190
233
|
if (end + 1 < strLength) {
|
191
234
|
after = types[end + 1];
|
192
235
|
}
|
236
|
+
|
193
237
|
if (before !== 'L') {
|
194
238
|
before = 'R';
|
195
239
|
}
|
240
|
+
|
196
241
|
if (after !== 'L') {
|
197
242
|
after = 'R';
|
198
243
|
}
|
244
|
+
|
199
245
|
if (before === after) {
|
200
246
|
setValues(types, i, end, before);
|
201
247
|
}
|
248
|
+
|
202
249
|
i = end - 1;
|
203
250
|
}
|
204
251
|
}
|
252
|
+
|
205
253
|
for (i = 0; i < strLength; ++i) {
|
206
254
|
if (types[i] === 'ON') {
|
207
255
|
types[i] = e;
|
208
256
|
}
|
209
257
|
}
|
258
|
+
|
210
259
|
for (i = 0; i < strLength; ++i) {
|
211
260
|
t = types[i];
|
261
|
+
|
212
262
|
if (isEven(levels[i])) {
|
213
263
|
if (t === 'R') {
|
214
264
|
levels[i] += 1;
|
@@ -221,20 +271,26 @@ function bidi(str, startLevel, vertical) {
|
|
221
271
|
}
|
222
272
|
}
|
223
273
|
}
|
274
|
+
|
224
275
|
var highestLevel = -1;
|
225
276
|
var lowestOddLevel = 99;
|
226
277
|
var level;
|
278
|
+
|
227
279
|
for (i = 0, ii = levels.length; i < ii; ++i) {
|
228
280
|
level = levels[i];
|
281
|
+
|
229
282
|
if (highestLevel < level) {
|
230
283
|
highestLevel = level;
|
231
284
|
}
|
285
|
+
|
232
286
|
if (lowestOddLevel > level && isOdd(level)) {
|
233
287
|
lowestOddLevel = level;
|
234
288
|
}
|
235
289
|
}
|
290
|
+
|
236
291
|
for (level = highestLevel; level >= lowestOddLevel; --level) {
|
237
292
|
var start = -1;
|
293
|
+
|
238
294
|
for (i = 0, ii = levels.length; i < ii; ++i) {
|
239
295
|
if (levels[i] < level) {
|
240
296
|
if (start >= 0) {
|
@@ -245,16 +301,19 @@ function bidi(str, startLevel, vertical) {
|
|
245
301
|
start = i;
|
246
302
|
}
|
247
303
|
}
|
304
|
+
|
248
305
|
if (start >= 0) {
|
249
306
|
reverseValues(chars, start, levels.length);
|
250
307
|
}
|
251
308
|
}
|
309
|
+
|
252
310
|
for (i = 0, ii = chars.length; i < ii; ++i) {
|
253
311
|
var ch = chars[i];
|
312
|
+
|
254
313
|
if (ch === '<' || ch === '>') {
|
255
314
|
chars[i] = '';
|
256
315
|
}
|
257
316
|
}
|
317
|
+
|
258
318
|
return createBidiText(chars.join(''), isLTR);
|
259
|
-
}
|
260
|
-
exports.bidi = bidi;
|
319
|
+
}
|