Class: Axlsx::RichTextRun

Inherits:
Object
  • Object
show all
Includes:
OptionsParser
Defined in:
lib/axlsx/workbook/worksheet/rich_text_run.rb

Overview

The RichTextRun class creates and self serializing text run.

Constant Summary collapse

INLINE_STYLES =

A list of allowed inline style attributes used for validation

[:font_name, :charset,
:family, :b, :i, :strike, :outline,
:shadow, :condense, :extend, :u,
:vertAlign, :sz, :color, :scheme].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from OptionsParser

#parse_options

Constructor Details

#initialize(value, options = {}) ⇒ RichTextRun



16
17
18
19
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 16

def initialize(value, options = {})
  self.value = value
  parse_options(options)
end

Instance Attribute Details

#bBoolean

The inline bold property for the cell



81
82
83
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 81

def b
  @b
end

#cellObject

Returns the value of attribute cell.



25
26
27
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 25

def cell
  @cell
end

#charsetString

The inline charset property for the cell As far as I can tell, this is pretty much ignored. However, based on the spec it should be one of the following: 0  ANSI_CHARSET 1 DEFAULT_CHARSET 2 SYMBOL_CHARSET 77 MAC_CHARSET 128 SHIFTJIS_CHARSET 129  HANGUL_CHARSET 130  JOHAB_CHARSET 134  GB2312_CHARSET 136  CHINESEBIG5_CHARSET 161  GREEK_CHARSET 162  TURKISH_CHARSET 163  VIETNAMESE_CHARSET 177  HEBREW_CHARSET 178  ARABIC_CHARSET 186  BALTIC_CHARSET 204  RUSSIAN_CHARSET 222  THAI_CHARSET 238  EASTEUROPE_CHARSET 255  OEM_CHARSET



58
59
60
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 58

def charset
  @charset
end

#colorColor

The inline color property for the cell



157
158
159
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 157

def color
  @color
end

#condenseBoolean

The inline condense property for the cell



126
127
128
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 126

def condense
  @condense
end

#extendBoolean

The inline extend property for the cell



135
136
137
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 135

def extend
  @extend
end

#familyInteger

The inline family property for the cell 1 Roman 2 Swiss 3 Modern 4 Script 5 Decorative



72
73
74
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 72

def family
  @family
end

#font_nameString

The inline font_name property for the cell



29
30
31
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 29

def font_name
  @font_name
end

#iBoolean

The inline italic property for the cell



90
91
92
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 90

def i
  @i
end

#outlineBoolean

The inline outline property for the cell



108
109
110
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 108

def outline
  @outline
end

#schemeSymbol

The inline scheme property for the cell this must be one of [:none, major, minor]



187
188
189
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 187

def scheme
  @scheme
end

#shadowBoolean

The inline shadow property for the cell



117
118
119
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 117

def shadow
  @shadow
end

#strikeBoolean

The inline strike property for the cell



99
100
101
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 99

def strike
  @strike
end

#szInteter

The inline sz property for the cell



166
167
168
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 166

def sz
  @sz
end

#uBoolean, String

Note:

true is for backwards compatibility and is reassigned to :single

The inline underline property for the cell. It must be one of :none, :single, :double, :singleAccounting, :doubleAccounting, true



147
148
149
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 147

def u
  @u
end

#valueObject

Returns the value of attribute value.



8
9
10
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 8

def value
  @value
end

#vertAlignSymbol

The inline vertical alignment property for the cell this must be one of [:baseline, :subscript, :superscript]



176
177
178
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 176

def vertAlign
  @vertAlign
end

Instance Method Details

#autowidth(widtharray) ⇒ Array

Tries to work out the width of the longest line in the run



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 198

def autowidth(widtharray)
  return if value.nil?

  if styles.cellXfs[style].alignment && styles.cellXfs[style].alignment.wrap_text
    first = true
    value.to_s.split(/\r?\n/, -1).each do |line|
      if first
        first = false
      else
        widtharray << 0
      end
      widtharray[-1] += string_width(line, font_size)
    end
  else
    widtharray[-1] += string_width(value.to_s, font_size)
  end
  widtharray
end

#set_run_style(validator, attr, value) ⇒ Object

Utility method for setting inline style attributes



218
219
220
221
222
223
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 218

def set_run_style(validator, attr, value)
  return unless INLINE_STYLES.include?(attr.to_sym)

  Axlsx.send(validator, value) unless validator.nil?
  instance_variable_set :"@#{attr}", value
end

#to_xml_string(str = +'')) ⇒ String

Serializes the RichTextRun



228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
# File 'lib/axlsx/workbook/worksheet/rich_text_run.rb', line 228

def to_xml_string(str = +'')
  valid = RichTextRun::INLINE_STYLES
  data = Axlsx.instance_values_for(self).transform_keys(&:to_sym)
  data = data.select { |key, value| !value.nil? && valid.include?(key) }

  str << '<r><rPr>'
  data.each do |key, val|
    case key
    when :font_name
      str << '<rFont val="' << font_name << '"/>'
    when :color
      str << val.to_xml_string
    else
      str << '<' << key.to_s << ' val="' << xml_value(val) << '"/>'
    end
  end
  clean_value = Axlsx.trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx.sanitize(@value.to_s))
  str << '</rPr><t>' << clean_value << '</t></r>'
end