def self.parse_cell_spec(line, pos = :start)
spec = (pos == :end ? {} : nil)
rest = line
if m = line.match(REGEXP[:table_cellspec][pos])
spec = {}
return [spec, line] if m[0].chomp.empty?
rest = (pos == :start ? m.post_match : m.pre_match)
if m[1]
colspec, rowspec = m[1].split '.'
colspec = colspec.to_s.empty? ? 1 : colspec.to_i
rowspec = rowspec.to_s.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.to_s.empty? && Table::ALIGNMENTS[:h].has_key?(colspec)
spec['halign'] = Table::ALIGNMENTS[:h][colspec]
end
if !rowspec.to_s.empty? && Table::ALIGNMENTS[:v].has_key?(rowspec)
spec['valign'] = Table::ALIGNMENTS[:v][rowspec]
end
end
if m[4] && Table::TEXT_STYLES.has_key?(m[4])
spec['style'] = Table::TEXT_STYLES[m[4]]
end
end
[spec, rest]
end