123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- var Mode = require('./mode')
- var Utils = require('./utils')
- function KanjiData (data) {
- this.mode = Mode.KANJI
- this.data = data
- }
- KanjiData.getBitsLength = function getBitsLength (length) {
- return length * 13
- }
- KanjiData.prototype.getLength = function getLength () {
- return this.data.length
- }
- KanjiData.prototype.getBitsLength = function getBitsLength () {
- return KanjiData.getBitsLength(this.data.length)
- }
- KanjiData.prototype.write = function (bitBuffer) {
- var i
- // In the Shift JIS system, Kanji characters are represented by a two byte combination.
- // These byte values are shifted from the JIS X 0208 values.
- // JIS X 0208 gives details of the shift coded representation.
- for (i = 0; i < this.data.length; i++) {
- var value = Utils.toSJIS(this.data[i])
- // For characters with Shift JIS values from 0x8140 to 0x9FFC:
- if (value >= 0x8140 && value <= 0x9FFC) {
- // Subtract 0x8140 from Shift JIS value
- value -= 0x8140
- // For characters with Shift JIS values from 0xE040 to 0xEBBF
- } else if (value >= 0xE040 && value <= 0xEBBF) {
- // Subtract 0xC140 from Shift JIS value
- value -= 0xC140
- } else {
- throw new Error(
- 'Invalid SJIS character: ' + this.data[i] + '\n' +
- 'Make sure your charset is UTF-8')
- }
- // Multiply most significant byte of result by 0xC0
- // and add least significant byte to product
- value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)
- // Convert result to a 13-bit binary string
- bitBuffer.put(value, 13)
- }
- }
- module.exports = KanjiData
|