Skip to content

Commit

Permalink
resolves asciidoctor#491 support reversed option on ordered list
Browse files Browse the repository at this point in the history
- implement pred method for String
- implement pred method for RomanNumeral
- call pred method instead of next if reversed option is set on list
- switch to integer value below first char or roman numeral in sequence
  • Loading branch information
mojavelinux committed Aug 7, 2016
1 parent 003ae90 commit 99aa655
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 3 deletions.
7 changes: 5 additions & 2 deletions lib/asciidoctor-pdf/converter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -657,7 +657,9 @@ def convert_olist node
else
'1'
end
if (skip = (node.attr 'start', 1).to_i - 1) > 0
start = (node.attr 'start', nil, false) || ((node.option? 'reversed') ? node.items.size : 1)
# TODO support negative start values
if (skip = start.to_i - 1) > 0
skip.times { list_number = list_number.next }
end
@list_numbers << list_number
Expand Down Expand Up @@ -732,7 +734,8 @@ def convert_outline_list_item node, complex = false
end
end
when :olist
@list_numbers << (index = @list_numbers.pop).next
dir = (node.parent.option? 'reversed') ? :pred : :next
@list_numbers << ((index = @list_numbers.pop).public_send dir)
marker = %(#{index}.)
else
warn %(asciidoctor: WARNING: unknown list type #{list_type.inspect})
Expand Down
1 change: 1 addition & 0 deletions lib/asciidoctor-pdf/core_ext.rb
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
require_relative 'core_ext/array'
require_relative 'core_ext/numeric'
require_relative 'core_ext/string'
11 changes: 11 additions & 0 deletions lib/asciidoctor-pdf/core_ext/string.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class String
def pred
begin
# integers
%(#{(Integer self) - 1})
rescue ::ArgumentError
# chars (lower alpha, upper alpha, lower greek)
([65, 97, 945].include? ord) ? '0' : ([ord - 1].pack 'U*')
end
end unless respond_to? :pred
end
9 changes: 8 additions & 1 deletion lib/asciidoctor-pdf/roman_numeral.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@ def to_s
end

def to_r
roman = RomanNumeral.int_to_roman @integer_value
if (int = @integer_value) <= 0
return int.to_s
end
roman = RomanNumeral.int_to_roman int
@letter_case == :lower ? roman.downcase : roman
end

Expand All @@ -79,6 +82,10 @@ def next!
self
end

def pred
RomanNumeral.new @integer_value - 1, @letter_case
end

def self.int_to_roman value
result = ''
BaseDigits.keys.reverse.each do |ival|
Expand Down

0 comments on commit 99aa655

Please # to comment.