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