pdf.js
Version:
A PDF generation library for Node.js
140 lines (110 loc) • 3.67 kB
text/coffeescript
class Data
constructor: ( = []) ->
= 0
= .length
readByte: ->
[ ++]
writeByte: (byte) ->
[ ++] = byte
byteAt: (index) ->
[index]
readBool: ->
return !!
writeBool: (val) ->
if val then 1 else 0
readUInt32: ->
b1 = << 24
b2 = << 16
b3 = << 8
b4 =
b1 | b2 | b3 | b4
writeUInt32: (val) ->
(val >>> 24) & 0xff
(val >> 16) & 0xff
(val >> 8) & 0xff
val & 0xff
readInt32: ->
int =
if int >= 0x80000000 then int - 0x100000000 else int
writeInt32: (val) ->
val += 0x100000000 if val < 0
val
readUInt16: ->
b1 = << 8
b2 =
b1 | b2
writeUInt16: (val) ->
(val >> 8) & 0xff
val & 0xff
readInt16: ->
int =
if int >= 0x8000 then int - 0x10000 else int
writeInt16: (val) ->
val += 0x10000 if val < 0
val
readString: (length) ->
ret = []
for i in [0...length]
ret[i] = String.fromCharCode
return ret.join ''
writeString: (val) ->
for i in [0...val.length]
val.charCodeAt(i)
stringAt: ( , length) ->
length
readShort: ->
writeShort: (val) ->
val
readLongLong: ->
b1 =
b2 =
b3 =
b4 =
b5 =
b6 =
b7 =
b8 =
if b1 & 0x80 # sign -> avoid overflow
return ((b1 ^ 0xff) * 0x100000000000000 +
(b2 ^ 0xff) * 0x1000000000000 +
(b3 ^ 0xff) * 0x10000000000 +
(b4 ^ 0xff) * 0x100000000 +
(b5 ^ 0xff) * 0x1000000 +
(b6 ^ 0xff) * 0x10000 +
(b7 ^ 0xff) * 0x100 +
(b8 ^ 0xff) + 1) * -1
return b1 * 0x100000000000000 +
b2 * 0x1000000000000 +
b3 * 0x10000000000 +
b4 * 0x100000000 +
b5 * 0x1000000 +
b6 * 0x10000 +
b7 * 0x100 +
b8
writeLongLong: (val) ->
high = Math.floor(val / 0x100000000)
low = val & 0xffffffff
(high >> 24) & 0xff
(high >> 16) & 0xff
(high >> 8) & 0xff
high & 0xff
(low >> 24) & 0xff
(low >> 16) & 0xff
(low >> 8) & 0xff
low & 0xff
readInt: ->
writeInt: (val) ->
val
slice: (start, end) ->
.slice start, end
read: (bytes) ->
buf = []
for i in [0...bytes]
buf.push
return buf
write: (bytes) ->
for byte in bytes
byte
module.exports = Data