Class | Origami::Filter::ASCII85 |
In: |
sources/parser/filters.rb
|
Parent: | Object |
Decodes the given data encoded in base85.
string: | The data to decode. |
# File sources/parser/filters.rb, line 349 349: def decode(string) 350: 351: input = (string.include?(EOD) ? string[0..string.index(EOD) - 1] : string).delete(" \f\t\r\n\0") 352: 353: i = 0 354: result = "" 355: while i < input.size do 356: 357: if input.length - i < 5 358: then 359: if input.length - i == 1 then raise InvalidASCII85String, "Invalid length" end 360: 361: addend = 5 - (input.length - i) 362: input << "u" * addend 363: else 364: addend = 0 365: end 366: 367: if input[i] == ?z 368: inblock = 0 369: else 370: 371: inblock = 0 372: outblock = "" 373: 374: # Checking if this string is in base85 375: 5.times { |j| 376: if input[i+j] > ?u or input[i+j] < ?! 377: raise InvalidASCII85String, string 378: else 379: inblock += (input[i+j] - ?!) * 85 ** (4 - j) 380: end 381: } 382: 383: if inblock > 2**32 - 1 384: raise InvalidASCII85String, "Invalid value" 385: end 386: 387: end 388: 389: 4.times do |p| 390: c = inblock / 256 ** (3 - p) 391: outblock << c.chr 392: 393: inblock -= c * 256 ** (3 - p) 394: end 395: 396: if addend != 0 397: outblock = outblock[0, 4 - addend] 398: end 399: 400: result << outblock 401: 402: i = i + 5 403: end 404: 405: result 406: end
Encodes given data into base85.
stream: | The data to encode. |
# File sources/parser/filters.rb, line 306 306: def encode(stream) 307: 308: i = 0 309: code = "" 310: input = stream.dup 311: 312: while i < input.size do 313: 314: if input.length - i < 4 315: addend = 4 - (input.length - i) 316: input << "\0" * addend 317: else 318: addend = 0 319: end 320: 321: inblock = (input[i] * 256**3 + input[i+1] * 256**2 + input[i+2] * 256 + input[i+3]) 322: outblock = "" 323: 324: 5.times do |p| 325: c = inblock / 85 ** (4 - p) 326: outblock << (?! + c).chr 327: 328: inblock -= c * 85 ** (4 - p) 329: end 330: 331: if outblock == "!!!!!" and addend == 0 then outblock = "z" end 332: 333: if addend != 0 334: outblock = outblock[0,(4 - addend) + 1] 335: end 336: 337: code << outblock 338: 339: i = i + 4 340: end 341: 342: code 343: end