];\r
\r
function bidi(text, startLevel) {\r
+ function isOdd(i) {\r
+ return (i & 1) != 0;\r
+ }\r
+\r
+ function isEven(i) {\r
+ return (i & 1) == 0;\r
+ }\r
+\r
+ function findUnequal(arr, start, value) {\r
+ var j;\r
+ for (var j = start, jj = arr.length; j < jj; ++j) {\r
+ if (arr[j] != value)\r
+ return j;\r
+ }\r
+ return j;\r
+ }\r
+\r
+ function setValues(arr, start, end, value) {\r
+ for (var j = start; j < end; ++j) {\r
+ arr[j] = value;\r
+ }\r
+ }\r
+\r
+ function reverseValues(arr, start, end) {\r
+ for (var i = start, j = end - 1; i < j; ++i, --j) {\r
+ var temp = arr[i];\r
+ arr[i] = arr[j];\r
+ arr[j] = temp;\r
+ }\r
+ }\r
+\r
+ function mirrorGlyphs(c) {\r
+ /*\r
+ # BidiMirroring-1.txt\r
+ 0028; 0029 # LEFT PARENTHESIS\r
+ 0029; 0028 # RIGHT PARENTHESIS\r
+ 003C; 003E # LESS-THAN SIGN\r
+ 003E; 003C # GREATER-THAN SIGN\r
+ 005B; 005D # LEFT SQUARE BRACKET\r
+ 005D; 005B # RIGHT SQUARE BRACKET\r
+ 007B; 007D # LEFT CURLY BRACKET\r
+ 007D; 007B # RIGHT CURLY BRACKET\r
+ 00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\r
+ 00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\r
+ */\r
+ switch (c) {\r
+ case '(':\r
+ return ')';\r
+ case ')':\r
+ return '(';\r
+ case '<':\r
+ return '>';\r
+ case '>':\r
+ return '<';\r
+ case ']':\r
+ return '[';\r
+ case '[':\r
+ return ']';\r
+ case '}':\r
+ return '{';\r
+ case '{':\r
+ return '}';\r
+ case '\u00AB':\r
+ return '\u00BB';\r
+ case '\u00BB':\r
+ return '\u00AB';\r
+ default:\r
+ return c;\r
+ }\r
+ }\r
+\r
var str = text.str;\r
var strLength = str.length;\r
- if (strLength == 0) return str;\r
+ if (strLength == 0)\r
+ return str;\r
\r
// get types, fill arrays\r
\r
text.direction = 'ltr';\r
return str;\r
}\r
- else if (startLevel == -1) {\r
+\r
+ if (startLevel == -1) {\r
if ((strLength / numBidi) < 0.3) {\r
text.direction = 'ltr';\r
startLevel = 0;\r
\r
var lastType = sor;\r
for (var i = 0; i < strLength; ++i) {\r
- if (types[i] == 'NSM') types[i] = lastType;\r
- else lastType = types[i];\r
+ if (types[i] == 'NSM')\r
+ types[i] = lastType;\r
+ else\r
+ lastType = types[i];\r
}\r
\r
/*\r
\r
for (var i = 0; i < strLength; ++i) {\r
var t = types[i];\r
- if (t == 'AL') types[i] = 'R';\r
+ if (t == 'AL')\r
+ types[i] = 'R';\r
}\r
\r
/*\r
if (types[i] == 'EN') {\r
// do before\r
for (var j = i - 1; j >= 0; --j) {\r
- if (types[j] == 'ET')\r
- types[j] = 'EN';\r
- else break;\r
+ if (types[j] != 'ET')\r
+ break;\r
+ types[j] = 'EN';\r
}\r
// do after\r
for (var j = i + 1; j < strLength; --j) {\r
- if (types[j] == 'ET')\r
- types[j] = 'EN';\r
- else break;\r
+ if (types[j] != 'ET')\r
+ break;\r
+ types[j] = 'EN';\r
}\r
}\r
}\r
if (isEven(levels[i])) {\r
if (t == 'R') {\r
levels[i] += 1;\r
- }\r
- else if (t == 'AN' || t == 'EN') {\r
+ } else if (t == 'AN' || t == 'EN') {\r
levels[i] += 2;\r
}\r
- }\r
- else { // isOdd, so\r
+ } else { // isOdd, so\r
if (t == 'L' || t == 'AN' || t == 'EN') {\r
levels[i] += 1;\r
}\r
for (var level = highestLevel; level >= lowestOddLevel; --level) {\r
// find segments to reverse\r
var start = -1;\r
- for (var i = 0; i < levels.length; ++i) {\r
+ for (var i = 0, ii = levels.length; i < ii; ++i) {\r
if (levels[i] < level) {\r
if (start >= 0) {\r
reverseValues(chars, start, i);\r
start = -1;\r
}\r
- }\r
- else if (start < 0) {\r
+ } else if (start < 0) {\r
start = i;\r
}\r
}\r
}\r
return result;\r
}\r
-\r
-function isOdd(i) {\r
- return (i & 1) != 0;\r
-}\r
-\r
-function isEven(i) {\r
- return (i & 1) == 0;\r
-}\r
-\r
-function findUnequal(arr, start, value) {\r
- var j;\r
- for (var j = start; j < arr.length; ++j) {\r
- if (arr[j] != value) return j;\r
- }\r
- return j;\r
-}\r
-\r
-function setValues(arr, start, end, value) {\r
- for (var j = start; j < end; ++j) {\r
- arr[j] = value;\r
- }\r
-}\r
-\r
-function reverseValues(arr, start, end) {\r
- for (var i = start, j = end - 1; i < j; ++i, --j) {\r
- var temp = arr[i];\r
- arr[i] = arr[j];\r
- arr[j] = temp;\r
- }\r
-}\r
-\r
-function mirrorGlyphs(c) {\r
- /*\r
- # BidiMirroring-1.txt\r
- 0028; 0029 # LEFT PARENTHESIS\r
- 0029; 0028 # RIGHT PARENTHESIS\r
- 003C; 003E # LESS-THAN SIGN\r
- 003E; 003C # GREATER-THAN SIGN\r
- 005B; 005D # LEFT SQUARE BRACKET\r
- 005D; 005B # RIGHT SQUARE BRACKET\r
- 007B; 007D # LEFT CURLY BRACKET\r
- 007D; 007B # RIGHT CURLY BRACKET\r
- 00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\r
- 00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\r
- */\r
- switch (c) {\r
- case '(':\r
- return ')';\r
- case ')':\r
- return '(';\r
- case '<':\r
- return '>';\r
- case '>':\r
- return '<';\r
- case ']':\r
- return '[';\r
- case '[':\r
- return ']';\r
- case '}':\r
- return '{';\r
- case '{':\r
- return '}';\r
- case '\u00AB':\r
- return '\u00BB';\r
- case '\u00BB':\r
- return '\u00AB';\r
- default:\r
- return c;\r
- }\r
-}\r
-\r