]>
git.saurik.com Git - utf16js.git/blob - utf16.js
b76fc714864106a53a8b96fc1e7ec75c281a14a6
1 if (typeof define
!== 'function') { var define
= require('amdefine')(module
) }
3 define(function(require
) {
5 var utf16 = function(string
) {
7 this.length
= utf16
.strlen(string
);
10 utf16
.decode = function(string
, points
) {
11 if (typeof points
=== "undefined")
14 for (var i
= 0, e
= string
.length
; i
!= e
; ++i
) {
15 var unit
= string
.charCodeAt(i
);
16 var part
= unit
& 0xfc00;
19 else if (part
!= 0xd800)
24 var next
= string
.charCodeAt(i
);
25 if ((next
& 0xfc00) != 0xdc00)
27 points
.push(0x10000 | (unit
& 0x03ff) << 10 | next
& 0x03ff);
34 utf16
.encode = function(points
) {
36 for (var i
= 0, e
= points
.length
; i
!= e
; ++i
) {
37 var point
= points
[i
];
42 units
.push(0xd800 | (0xffc00 & point
) >> 10, 0xdc00 | 0x03ff & point
);
44 } return String
.fromCharCode
.apply(String
, units
);
47 utf16
.fromCharCode = function() {
48 return new utf16(utf16
.encode(arguments
), arguments
.length
);
51 utf16
.adjust = function(mode
, string
, after
) {
52 var before
= after
.slice();
53 var offset
= 0, index
= 0;
55 var check = function() {
56 var from = mode
? index : offset
;
57 var to
= mode
? offset : index
;
59 for (var o
= 0, l
= after
.length
; o
!= l
; ++o
)
60 if (before
[o
] == from) {
66 for (var e
= string
.length
; index
!= e
; ++index
) {
69 var unit
= string
.charCodeAt(index
);
70 var part
= unit
& 0xfc00;
74 else if (part
!= 0xd800);
75 else if (++index
== e
)
78 var next
= string
.charCodeAt(index
);
79 if ((next
& 0xfc00) != 0xdc00)
90 utf16
.point2unit = function(string
, offsets
) {
91 return utf16
.adjust(false, string
, offsets
);
94 utf16
.unit2point = function(string
, offsets
) {
95 return utf16
.adjust(true, string
, offsets
);
98 utf16
.charAt = function(string
, offset
) {
99 return utf16
.substring(string
, offset
, offset
+ 1);
102 utf16
.charCodeAt = function(string
, offset
) {
103 var char = utf16
.charAt(string
, offset
);
104 if (char.length
!= 2)
105 return char.charCodeAt(0);
106 return 0x10000 | (char.charCodeAt(0) & 0x03ff) << 10 | char.charCodeAt(1) & 0x03ff
109 utf16
.strlen = function(string
) {
110 return utf16
.unit2point(string
, [string
.length
])[0];
113 utf16
.substr = function(string
, start
, length
) {
115 if (typeof length
!== "undefined")
116 stop
= start
+ length
;
117 return utf16
.substring(string
, start
, stop
);
120 utf16
.substring = function(string
, start
, stop
) {
121 var range
= utf16
.point2unit(string
, [start
, stop
]);
122 return string
.substring(range
[0], range
[1]);
125 utf16
.prototype.charAt = function(index
) {
126 return new utf16(utf16
.charAt(this.string
, index
));
129 utf16
.prototype.charCodeAt = function(index
) {
130 return utf16
.charCodeAt(this.string
, index
);
133 utf16
.prototype.substr = function(start
, length
) {
134 return new utf16(utf16
.substr(this.string
, start
, length
));
137 utf16
.prototype.substring = function(start
, end
) {
138 return new utf16(utf16
.substring(this.string
, start
, end
));
141 utf16
.prototype.toString = function() {