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.

Files changed (169) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +18515 -11402
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +48266 -37137
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/external/url/url-lib.js +627 -0
  10. package/image_decoders/pdf.image_decoders.js +11350 -0
  11. package/image_decoders/pdf.image_decoders.js.map +1 -0
  12. package/image_decoders/pdf.image_decoders.min.js +1 -0
  13. package/lib/core/annotation.js +587 -242
  14. package/lib/core/arithmetic_decoder.js +275 -245
  15. package/lib/core/bidi.js +65 -6
  16. package/lib/core/ccitt.js +173 -18
  17. package/lib/core/ccitt_stream.js +15 -6
  18. package/lib/core/cff_parser.js +433 -61
  19. package/lib/core/charsets.js +5 -4
  20. package/lib/core/chunked_stream.js +400 -152
  21. package/lib/core/cmap.js +326 -87
  22. package/lib/core/colorspace.js +874 -594
  23. package/lib/core/core_utils.js +147 -0
  24. package/lib/core/crypto.js +290 -45
  25. package/lib/core/document.js +560 -268
  26. package/lib/core/encodings.js +19 -10
  27. package/lib/core/evaluator.js +1005 -360
  28. package/lib/core/font_renderer.js +331 -97
  29. package/lib/core/fonts.js +812 -195
  30. package/lib/core/function.js +284 -71
  31. package/lib/core/glyphlist.js +4 -3
  32. package/lib/core/image.js +169 -62
  33. package/lib/core/image_utils.js +111 -0
  34. package/lib/core/jbig2.js +479 -66
  35. package/lib/core/jbig2_stream.js +19 -8
  36. package/lib/core/jpeg_stream.js +38 -13
  37. package/lib/core/jpg.js +253 -29
  38. package/lib/core/jpx.js +396 -6
  39. package/lib/core/jpx_stream.js +18 -6
  40. package/lib/core/metrics.js +15 -15
  41. package/lib/core/murmurhash3.js +56 -34
  42. package/lib/core/obj.js +1354 -488
  43. package/lib/core/operator_list.js +144 -31
  44. package/lib/core/parser.js +539 -191
  45. package/lib/core/pattern.js +148 -14
  46. package/lib/core/pdf_manager.js +323 -133
  47. package/lib/core/primitives.js +111 -24
  48. package/lib/core/ps_parser.js +134 -45
  49. package/lib/core/standard_fonts.js +17 -17
  50. package/lib/core/stream.js +313 -34
  51. package/lib/core/type1_parser.js +143 -13
  52. package/lib/core/unicode.js +32 -5
  53. package/lib/core/worker.js +217 -190
  54. package/lib/core/worker_stream.js +277 -0
  55. package/lib/display/annotation_layer.js +450 -133
  56. package/lib/display/api.js +1597 -784
  57. package/lib/display/api_compatibility.js +11 -13
  58. package/lib/display/canvas.js +360 -44
  59. package/lib/display/content_disposition.js +83 -32
  60. package/lib/display/display_utils.js +747 -0
  61. package/lib/display/fetch_stream.js +221 -90
  62. package/lib/display/font_loader.js +468 -236
  63. package/lib/display/metadata.js +38 -16
  64. package/lib/display/network.js +635 -428
  65. package/lib/display/network_utils.js +32 -19
  66. package/lib/display/node_stream.js +367 -175
  67. package/lib/display/pattern_helper.js +81 -31
  68. package/lib/display/svg.js +1235 -519
  69. package/lib/display/text_layer.js +153 -29
  70. package/lib/display/transport_stream.js +345 -94
  71. package/lib/display/webgl.js +64 -18
  72. package/lib/display/worker_options.js +5 -4
  73. package/lib/display/xml_parser.js +166 -53
  74. package/lib/examples/node/domstubs.js +60 -4
  75. package/lib/pdf.js +36 -14
  76. package/lib/pdf.worker.js +5 -3
  77. package/lib/shared/compatibility.js +158 -564
  78. package/lib/shared/global_scope.js +2 -2
  79. package/lib/shared/is_node.js +4 -4
  80. package/lib/shared/message_handler.js +521 -0
  81. package/lib/shared/streams_polyfill.js +21 -17
  82. package/lib/shared/url_polyfill.js +56 -0
  83. package/lib/shared/util.js +243 -710
  84. package/lib/test/unit/annotation_spec.js +870 -401
  85. package/lib/test/unit/api_spec.js +657 -345
  86. package/lib/test/unit/bidi_spec.js +7 -7
  87. package/lib/test/unit/cff_parser_spec.js +54 -11
  88. package/lib/test/unit/clitests_helper.js +10 -8
  89. package/lib/test/unit/cmap_spec.js +95 -41
  90. package/lib/test/unit/colorspace_spec.js +115 -63
  91. package/lib/test/unit/core_utils_spec.js +191 -0
  92. package/lib/test/unit/crypto_spec.js +17 -5
  93. package/lib/test/unit/custom_spec.js +43 -55
  94. package/lib/test/unit/display_svg_spec.js +34 -18
  95. package/lib/test/unit/display_utils_spec.js +273 -0
  96. package/lib/test/unit/document_spec.js +8 -13
  97. package/lib/test/unit/encodings_spec.js +25 -45
  98. package/lib/test/unit/evaluator_spec.js +38 -15
  99. package/lib/test/unit/fetch_stream_spec.js +109 -0
  100. package/lib/test/unit/function_spec.js +17 -5
  101. package/lib/test/unit/jasmine-boot.js +33 -20
  102. package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
  103. package/lib/test/unit/metadata_spec.js +71 -11
  104. package/lib/test/unit/murmurhash3_spec.js +3 -3
  105. package/lib/test/unit/network_spec.js +19 -54
  106. package/lib/test/unit/network_utils_spec.js +91 -14
  107. package/lib/test/unit/node_stream_spec.js +56 -32
  108. package/lib/test/unit/parser_spec.js +162 -71
  109. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  110. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  111. package/lib/test/unit/pdf_history_spec.js +21 -9
  112. package/lib/test/unit/primitives_spec.js +53 -20
  113. package/lib/test/unit/stream_spec.js +12 -4
  114. package/lib/test/unit/test_utils.js +273 -56
  115. package/lib/test/unit/testreporter.js +21 -3
  116. package/lib/test/unit/type1_parser_spec.js +8 -6
  117. package/lib/test/unit/ui_utils_spec.js +454 -16
  118. package/lib/test/unit/unicode_spec.js +18 -15
  119. package/lib/test/unit/util_spec.js +87 -128
  120. package/lib/web/annotation_layer_builder.js +39 -22
  121. package/lib/web/app.js +1290 -588
  122. package/lib/web/app_options.js +100 -62
  123. package/lib/web/base_viewer.js +511 -182
  124. package/lib/web/chromecom.js +261 -117
  125. package/lib/web/debugger.js +166 -22
  126. package/lib/web/download_manager.js +32 -13
  127. package/lib/web/firefox_print_service.js +20 -10
  128. package/lib/web/firefoxcom.js +315 -80
  129. package/lib/web/genericcom.js +89 -30
  130. package/lib/web/genericl10n.js +142 -30
  131. package/lib/web/grab_to_pan.js +28 -4
  132. package/lib/web/interfaces.js +170 -47
  133. package/lib/web/overlay_manager.js +235 -85
  134. package/lib/web/password_prompt.js +22 -14
  135. package/lib/web/pdf_attachment_viewer.js +38 -18
  136. package/lib/web/pdf_cursor_tools.js +39 -16
  137. package/lib/web/pdf_document_properties.js +255 -136
  138. package/lib/web/pdf_find_bar.js +84 -40
  139. package/lib/web/pdf_find_controller.js +495 -184
  140. package/lib/web/pdf_find_utils.js +111 -0
  141. package/lib/web/pdf_history.js +190 -53
  142. package/lib/web/pdf_link_service.js +138 -77
  143. package/lib/web/pdf_outline_viewer.js +122 -46
  144. package/lib/web/pdf_page_view.js +191 -67
  145. package/lib/web/pdf_presentation_mode.js +99 -34
  146. package/lib/web/pdf_print_service.js +61 -13
  147. package/lib/web/pdf_rendering_queue.js +28 -9
  148. package/lib/web/pdf_sidebar.js +141 -81
  149. package/lib/web/pdf_sidebar_resizer.js +42 -16
  150. package/lib/web/pdf_single_page_viewer.js +74 -66
  151. package/lib/web/pdf_thumbnail_view.js +104 -33
  152. package/lib/web/pdf_thumbnail_viewer.js +66 -26
  153. package/lib/web/pdf_viewer.component.js +112 -32
  154. package/lib/web/pdf_viewer.js +91 -52
  155. package/lib/web/preferences.js +284 -89
  156. package/lib/web/secondary_toolbar.js +165 -40
  157. package/lib/web/text_layer_builder.js +134 -59
  158. package/lib/web/toolbar.js +78 -43
  159. package/lib/web/ui_utils.js +462 -136
  160. package/lib/web/view_history.js +215 -67
  161. package/lib/web/viewer_compatibility.js +4 -13
  162. package/package.json +5 -4
  163. package/web/pdf_viewer.css +79 -11
  164. package/web/pdf_viewer.js +6107 -3748
  165. package/web/pdf_viewer.js.map +1 -1
  166. package/lib/display/dom_utils.js +0 -309
  167. package/lib/test/unit/dom_utils_spec.js +0 -89
  168. package/lib/test/unit/fonts_spec.js +0 -81
  169. 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 2017 Mozilla Foundation
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
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.bidi = undefined;
27
+ exports.bidi = bidi;
28
28
 
29
- var _util = require('../shared/util');
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
+ }