Class: Asciidoctor::Table::Cell
- Inherits:
-
AbstractBlock
- Object
- AbstractNode
- AbstractBlock
- Asciidoctor::Table::Cell
- Defined in:
- lib/asciidoctor/table.rb
Overview
Methods for managing the a cell in an AsciiDoc table.
Constant Summary collapse
- DOUBLE_LF =
LF * 2
Constants included from Substitutors
Substitutors::CAN, Substitutors::CGI, Substitutors::DEL, Substitutors::ESC_R_SB, Substitutors::HighlightedPassSlotRx, Substitutors::PASS_END, Substitutors::PASS_START, Substitutors::PLUS, Substitutors::PassSlotRx, Substitutors::QuotedTextSniffRx, Substitutors::RS, Substitutors::R_SB, Substitutors::SUB_GROUPS, Substitutors::SUB_HINTS, Substitutors::SUB_OPTIONS, Substitutors::SpecialCharsRx, Substitutors::SpecialCharsTr
Instance Attribute Summary collapse
-
#colspan ⇒ Object
An Integer of the number of columns this cell will span (default: nil).
-
#rowspan ⇒ Object
An Integer of the number of rows this cell will span (default: nil).
Attributes inherited from AbstractBlock
#blocks, #caption, #content_model, #level, #numeral, #source_location, #style, #subs
Attributes inherited from AbstractNode
#attributes, #context, #document, #id, #node_name, #parent
Instance Method Summary collapse
-
#content ⇒ Object
Handles the body data (tbody, tfoot), applying styles and partitioning into paragraphs.
-
#file ⇒ Object
Get the source file where this block started.
-
#initialize(column, cell_text, attributes = {}, opts = {}) ⇒ Cell
constructor
A new instance of Cell.
-
#lineno ⇒ Object
Get the source line number where this block started.
- #lines ⇒ Object
- #source ⇒ Object
-
#text ⇒ Object
Get the String text of this cell with substitutions applied.
-
#text=(val) ⇒ Object
Set the String text.
- #to_s ⇒ Object
Methods inherited from AbstractBlock
#<<, #alt, #assign_caption, #block?, #blocks?, #captioned_title, #context=, #convert, #find_by, #inline?, #list_marker_keyword, #next_adjacent_block, #number, #remove_sub, #sections, #sections?, #sub?, #title, #title=, #title?, #xreftext
Methods inherited from AbstractNode
#add_role, #attr, #attr?, #block?, #converter, #enabled_options, #generate_data_uri, #generate_data_uri_from_uri, #has_role?, #icon_uri, #image_uri, #inline?, #is_uri?, #media_uri, #normalize_asset_path, #normalize_system_path, #normalize_web_path, #option?, #read_asset, #read_contents, #reftext, #reftext?, #remove_attr, #remove_role, #role, #role?, #roles, #set_attr, #set_option, #update_attributes
Methods included from Substitutors
#apply_header_subs, #apply_normal_subs, #apply_reftext_subs, #apply_subs, #expand_subs, #extract_passthroughs, #highlight_source, #resolve_block_subs, #resolve_lines_to_highlight, #resolve_pass_subs, #resolve_subs, #restore_passthroughs, #sub_attributes, #sub_callouts, #sub_macros, #sub_post_replacements, #sub_quotes, #sub_replacements, #sub_source, #sub_specialchars
Methods included from Logging
#logger, #message_with_context
Constructor Details
#initialize(column, cell_text, attributes = {}, opts = {}) ⇒ Cell
Returns a new instance of Cell.
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 |
# File 'lib/asciidoctor/table.rb', line 238 def initialize column, cell_text, attributes = {}, opts = {} super column, :table_cell @source_location = opts[:cursor].dup if @document.sourcemap if column cell_style = column.attributes['style'] unless (in_header_row = column.table.header_row?) # REVIEW feels hacky to inherit all attributes from column update_attributes column.attributes end # NOTE if attributes is defined, we know this is a psv cell; implies text needs to be stripped if attributes if attributes.empty? @colspan = @rowspan = nil else @colspan, @rowspan = (attributes.delete 'colspan'), (attributes.delete 'rowspan') # TODO delete style attribute from @attributes if set cell_style = attributes['style'] || cell_style unless in_header_row update_attributes attributes end if cell_style == :asciidoc asciidoc = true inner_document_cursor = opts[:cursor] if (cell_text = cell_text.rstrip).start_with? LF lines_advanced = 1 lines_advanced += 1 while (cell_text = cell_text.slice 1, cell_text.length).start_with? LF # NOTE this only works if we remain in the same file inner_document_cursor.advance lines_advanced else cell_text = cell_text.lstrip end elsif cell_style == :literal literal = true cell_text = cell_text.rstrip # QUESTION should we use same logic as :asciidoc cell? strip leading space if text doesn't start with newline? cell_text = cell_text.slice 1, cell_text.length while cell_text.start_with? LF else normal_psv = true # NOTE AsciidoctorJ uses nil cell_text to create an empty cell cell_text = cell_text ? cell_text.strip : '' end else @colspan = @rowspan = nil if cell_style == :asciidoc asciidoc = true inner_document_cursor = opts[:cursor] end end # NOTE only true for non-header rows if asciidoc # FIXME hide doctitle from nested document; temporary workaround to fix # nested document seeing doctitle and assuming it has its own document title parent_doctitle = @document.attributes.delete('doctitle') # NOTE we need to process the first line of content as it may not have been processed # the included content cannot expect to match conditional terminators in the remaining # lines of table cell content, it must be self-contained logic # QUESTION should we reset cell_text to nil? # QUESTION is is faster to check for :: before splitting? inner_document_lines = cell_text.split LF, -1 if (unprocessed_line1 = inner_document_lines[0]).include? '::' preprocessed_lines = (PreprocessorReader.new @document, [unprocessed_line1]).readlines unless unprocessed_line1 == preprocessed_lines[0] && preprocessed_lines.size < 2 inner_document_lines.shift inner_document_lines.unshift(*preprocessed_lines) unless preprocessed_lines.empty? end end unless inner_document_lines.empty? @inner_document = Document.new inner_document_lines, standalone: false, parent: @document, cursor: inner_document_cursor @document.attributes['doctitle'] = parent_doctitle unless parent_doctitle.nil? @subs = nil elsif literal @content_model = :verbatim @subs = BASIC_SUBS else if normal_psv && (cell_text.start_with? '[[') && LeadingInlineAnchorRx =~ cell_text Parser.catalog_inline_anchor $1, $2, self, opts[:cursor], @document end @content_model = :simple @subs = NORMAL_SUBS end @text = cell_text @style = cell_style end |
Instance Attribute Details
#colspan ⇒ Object
An Integer of the number of columns this cell will span (default: nil)
227 228 229 |
# File 'lib/asciidoctor/table.rb', line 227 def colspan @colspan end |
#rowspan ⇒ Object
An Integer of the number of rows this cell will span (default: nil)
230 231 232 |
# File 'lib/asciidoctor/table.rb', line 230 def rowspan @rowspan end |
Instance Method Details
#content ⇒ Object
Handles the body data (tbody, tfoot), applying styles and partitioning into paragraphs
This method should not be used for cells in the head row or that have the literal or verse style.
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 |
# File 'lib/asciidoctor/table.rb', line 345 def content if (cell_style = @style) == :asciidoc @inner_document.convert elsif @text.include? DOUBLE_LF (text.split BlankLineRx).map do |para| cell_style && cell_style != :header ? (Inline.new parent, :quoted, para, type: cell_style).convert : para end elsif (subbed_text = text).empty? [] elsif cell_style && cell_style != :header [(Inline.new parent, :quoted, subbed_text, type: cell_style).convert] else [subbed_text] end end |
#file ⇒ Object
Get the source file where this block started
370 371 372 |
# File 'lib/asciidoctor/table.rb', line 370 def file @source_location && @source_location.file end |
#lineno ⇒ Object
Get the source line number where this block started
375 376 377 |
# File 'lib/asciidoctor/table.rb', line 375 def lineno @source_location && @source_location.lineno end |
#lines ⇒ Object
361 362 363 |
# File 'lib/asciidoctor/table.rb', line 361 def lines @text.split LF end |
#source ⇒ Object
365 366 367 |
# File 'lib/asciidoctor/table.rb', line 365 def source @text end |
#text ⇒ Object
Get the String text of this cell with substitutions applied.
Used for cells in the head row as well as text-only (non-AsciiDoc) cells in the foot row and body.
This method shouldn’t be used for cells that have the AsciiDoc style.
327 328 329 |
# File 'lib/asciidoctor/table.rb', line 327 def text apply_subs @text, @subs end |
#text=(val) ⇒ Object
Set the String text.
This method shouldn’t be used for cells that have the AsciiDoc style.
336 337 338 |
# File 'lib/asciidoctor/table.rb', line 336 def text= val @text = val end |
#to_s ⇒ Object
379 380 381 |
# File 'lib/asciidoctor/table.rb', line 379 def to_s "#{super.to_s} - [text: #@text, colspan: #{@colspan || 1}, rowspan: #{@rowspan || 1}, attributes: #@attributes]" end |