Hello.
I have only looked into words dictionary, and not actually tried something.
I see there is a number style in the page number options pane. If you have tried get the page number out of the page number on a page, but can’t get in its displayed format, then you’ll have to generate the page number symbol, like roman numeral, or character, or number of i’s.
This is really a much better way to have things organized, than having to access pages by their displayed page number.
Roman numerals are easy:
on romanNumeralString for aNumber
local s
set s to ""
repeat while aNumber > 0
if aNumber ≥ 1000 then
set {s, aNumber} to {s & "M", aNumber - 1000}
else if aNumber ≥ 900 then
set {s, aNumber} to {s & "CM", aNumber - 900}
else if aNumber ≥ 500 then
set {s, aNumber} to {s & "D", aNumber - 500}
else if aNumber ≥ 400 then
set {s, aNumber} to {s & "CD", aNumber - 400}
else if aNumber ≥ 100 then
set {s, aNumber} to {s & "C", aNumber - 100}
else if aNumber ≥ 90 then
set {s, aNumber} to {s & "XC", aNumber - 90}
else if aNumber ≥ 50 then
set {s, aNumber} to {s & "L", aNumber - 50}
else if aNumber ≥ 40 then
set {s, aNumber} to {s & "XL", aNumber - 40}
else if aNumber ≥ 10 then
set {s, aNumber} to {s & "X", aNumber - 10}
else if aNumber ≥ 9 then
set {s, aNumber} to {s & "IX", aNumber - 9}
else if aNumber ≥ 5 then
set {s, aNumber} to {s & "V", aNumber - 5}
else if aNumber ≥ 4 then
set {s, aNumber} to {s & "IV", aNumber - 4}
else if aNumber ≥ 1 then
set {s, aNumber} to {s & "I", aNumber - 1}
end if
end repeat
return s
end romanNumeralString
The handlers you’ll need for A-Z and such are equally easy. This should get you started, should you need it:
set a to "A"'s id
set b to character id (a + 1)
Edit
For the hell of it, or in case you have to convert the other way around, here is one that converts a roman numeral string to a number:
on romanNumeralToInteger for aRomanNumeral
local i, aNumber, l
set {i, aNumber, l} to {1, 0, length of aRomanNumeral}
repeat while i ≤ l
if (offset of "M" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 1000, i + 1}
else if ((l - i + 1) ≥ 2 and (offset of "CM" in (text i thru -1 of aRomanNumeral))) = 1 then
set {aNumber, i} to {aNumber + 900, i + 2}
else if (offset of "D" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 500, i + 1}
else if (l - i + 1) ≥ 2 and (offset of "CD" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 400, i + 2}
else if (offset of "C" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 100, i + 1}
else if (l - i + 1) ≥ 2 and (offset of "XC" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 90, i + 2}
else if (offset of "L" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 50, i + 1}
else if (l - i + 1) ≥ 2 and (offset of "XL" in (text i thru -1 of aRomanNumeral = 1)) then
set {aNumber, i} to {aNumber + 40, i + 2}
else if (offset of "X" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 10, i + 1}
else if (l - i + 1) ≥ 2 and (offset of "IX" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 9, i + 2}
else if (offset of "V" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 5, i + 1}
else if (l - i + 1) ≥ 2 and (offset of "IV" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 4, i + 2}
else if (offset of "I" in (text i thru -1 of aRomanNumeral)) = 1 then
set {aNumber, i} to {aNumber + 1, i + 1}
end if
end repeat
return aNumber
end romanNumeralToInteger