Module | Spreadsheet::Excel::Writer::Biff8 |
In: |
lib/spreadsheet/excel/writer/biff8.rb
|
This Module collects writer methods such as unicode_string that are specific to Biff8. This Module is likely to be expanded as Support for older Versions of Excel grows and methods get moved here for disambiguation.
Encode string into a Biff8 Unicode String Header and Body.
# File lib/spreadsheet/excel/writer/biff8.rb, line 42 42: def _unicode_string string, count_length=1 43: data = internal string 44: size = data.send(@@bytesize) / 2 45: fmt = count_length == 1 ? 'C2' : 'vC' 46: data, wide = compress_unicode_string data 47: opts = wide 48: header = [ 49: size, # Length of the string (character count, ln) 50: opts, # Option flags: 51: # Bit Mask Contents 52: # 0 0x01 Character compression (ccompr): 53: # 0 = Compressed (8-bit characters) 54: # 1 = Uncompressed (16-bit characters) 55: # 2 0x04 Asian phonetic settings (phonetic): 56: # 0 = Does not contain Asian phonetic settings 57: # 1 = Contains Asian phonetic settings 58: # 3 0x08 Rich-Text settings (richtext): 59: # 0 = Does not contain Rich-Text settings 60: # 1 = Contains Rich-Text settings 61: #0x00,# (optional, only if richtext=1) Number of Rich-Text 62: # formatting runs (rt) 63: #0x00,# (optional, only if phonetic=1) Size of Asian phonetic 64: # settings block (in bytes, sz) 65: ].pack fmt 66: data << '' # (optional, only if richtext=1) 67: # List of rt formatting runs (➜ 3.2) 68: data << '' # (optional, only if phonetic=1) 69: # Asian Phonetic Settings Block (➜ 3.4.2) 70: [header, data, wide] 71: end
Check whether the string data can be compressed (i.e. every second byte is a Null-byte) and perform compression. Returns the data and compression_status (0/1)
# File lib/spreadsheet/excel/writer/biff8.rb, line 16 16: def compress_unicode_string data 17: compressed = '' 18: expect_null = false 19: data.each_byte do |byte| 20: if expect_null 21: if byte != 0 22: return [data, 1] # 1 => Data consists of wide Chars 23: end 24: expect_null = false 25: else 26: compressed << byte 27: expect_null = true 28: end 29: end 30: [compressed, 0] # 0 => Data consists of compressed Chars 31: end
Encode string into a Biff8 Unicode String. Header and body are encoded separately by _unicode_string. This method simply combines the two.
# File lib/spreadsheet/excel/writer/biff8.rb, line 35 35: def unicode_string string, count_length=1 36: header, data, _ = _unicode_string string, count_length 37: header << data 38: end