1 package org.apache.maven.doxia.module.fo;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.doxia.sink.Sink;
23
24
25
26
27
28
29
30
31 public class NumberedListItem
32 {
33
34
35 private static final String[] DECIMALS =
36 {
37 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
38 "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
39 "21", "22", "23", "24", "25", "26"
40 };
41
42
43 private static final String[] LOWER_ALPHAS =
44 {
45 "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
46 "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
47 "u", "v", "w", "x", "y", "z"
48 };
49
50
51 private static final String[] UPPER_ALPHAS =
52 {
53 "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
54 "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
55 "U", "V", "W", "X", "Y", "Z"
56 };
57
58
59 private static final String[] LOWER_ROMANS =
60 {
61 "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix", "x",
62 "xi", "xii", "xiii", "xiv", "xv", "xvi", "xvii", "xviii", "xix", "xx",
63 "xxi", "xxii", "xxiii", "xxiv", "xxv", "xxvi"
64 };
65
66
67 private static final String[] UPPER_ROMANS =
68 {
69 "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X",
70 "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX",
71 "XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI"
72 };
73
74
75 private int count;
76
77
78 private final int format;
79
80
81
82
83
84
85
86 public NumberedListItem( int itemFormat )
87 {
88 if ( !isValidItemFormat( itemFormat ) )
89 {
90 throw new IllegalArgumentException( "Unknown item format!" );
91 }
92
93 this.format = itemFormat;
94 this.count = 0;
95 }
96
97
98
99
100
101
102 public int count()
103 {
104 return count;
105 }
106
107
108
109
110
111
112 public int format()
113 {
114 return format;
115 }
116
117
118
119
120 public void next()
121 {
122 count++;
123 }
124
125
126
127
128
129
130 public String getListItemSymbol()
131 {
132 int j = count() - 1;
133
134 if ( j < 0 )
135 {
136 j = 0;
137 }
138 else if ( j > DECIMALS.length - 1 )
139 {
140 j = DECIMALS.length - 1;
141 }
142
143 String symbol;
144
145 switch ( format() )
146 {
147 case Sink.NUMBERING_UPPER_ALPHA:
148 symbol = UPPER_ALPHAS[j];
149 break;
150 case Sink.NUMBERING_LOWER_ALPHA:
151 symbol = LOWER_ALPHAS[j];
152 break;
153 case Sink.NUMBERING_UPPER_ROMAN:
154 symbol = UPPER_ROMANS[j];
155 break;
156 case Sink.NUMBERING_LOWER_ROMAN:
157 symbol = LOWER_ROMANS[j];
158 break;
159 case Sink.NUMBERING_DECIMAL:
160 default:
161 symbol = DECIMALS[j];
162 }
163
164 return symbol + ".";
165 }
166
167
168
169
170
171
172
173
174 private boolean isValidItemFormat( int itemFormat )
175 {
176 return ( ( itemFormat == Sink.NUMBERING_UPPER_ALPHA )
177 || ( itemFormat == Sink.NUMBERING_LOWER_ALPHA )
178 || ( itemFormat == Sink.NUMBERING_UPPER_ROMAN )
179 || ( itemFormat == Sink.NUMBERING_LOWER_ROMAN )
180 || ( itemFormat == Sink.NUMBERING_DECIMAL ) );
181 }
182
183 }