def self.parse_cellspec(line, pos = :end, delimiter = nil)
m, rest = nil, ''
if pos == :start
if line.include? delimiter
spec_part, rest = line.split delimiter, 2
if (m = CellSpecStartRx.match spec_part)
return [{}, rest] if m[0].empty?
else
return [nil, line]
end
else
return [nil, line]
end
else
if (m = CellSpecEndRx.match line)
return [{}, line.rstrip] if m[0].lstrip.empty?
rest = m.pre_match
else
return [{}, line]
end
end
spec = {}
if m[1]
colspec, rowspec = m[1].split '.'
colspec = colspec.nil_or_empty? ? 1 : colspec.to_i
rowspec = rowspec.nil_or_empty? ? 1 : rowspec.to_i
if m[2] == '+'
spec['colspan'] = colspec unless colspec == 1
spec['rowspan'] = rowspec unless rowspec == 1
elsif m[2] == '*'
spec['repeatcol'] = colspec unless colspec == 1
end
end
if m[3]
colspec, rowspec = m[3].split '.'
if !colspec.nil_or_empty? && TableCellHorzAlignments.key?(colspec)
spec['halign'] = TableCellHorzAlignments[colspec]
end
if !rowspec.nil_or_empty? && TableCellVertAlignments.key?(rowspec)
spec['valign'] = TableCellVertAlignments[rowspec]
end
end
if m[4] && TableCellStyles.key?(m[4])
spec['style'] = TableCellStyles[m[4]]
end
[spec, rest]
end