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

Returns a new instance of 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

Returns:

  • (Boolean)


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

Returns:

  • (String)


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

Returns:



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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Integer)


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

Returns:

  • (String)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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]

Returns:

  • (Symbol)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Inteter)


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 compatability and is reassigned to :single

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

Returns:

  • (Boolean)
  • (String)


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]

Returns:

  • (Symbol)


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

Parameters:

  • widtharray (Array)

    this array is populated with the widths of each line in the run.

Returns:

  • (Array)


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

Parameters:

  • str (String) (defaults to: +''))

Returns:

  • (String)


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