Changeset 1747 for trunk/docx4j
- Timestamp:
- 01/11/12 01:25:00 (5 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/model/listnumbering/ListNumberingDefinition.java
r1746 r1747 161 161 162 162 List<Numbering.Num.LvlOverride> levelOverrideNodes = numNode.getLvlOverride(); 163 if (levelOverrideNodes != null) 164 { 165 /* 166 * <w:lvlOverride w:ilvl="0"> 167 <w:startOverride w:val="10"/> 168 </w:lvlOverride> 169 */ 170 for (Numbering.Num.LvlOverride overrideNode : levelOverrideNodes) 171 { 172 log.debug("found LvlOverride " + XmlUtils.marshaltoString(overrideNode, true)); 173 if (overrideNode.getIlvl() != null) 174 { 175 String overrideLevelId = overrideNode.getIlvl().toString(); //getAttributeValue(node, "w:ilvl"); 176 log.debug(".. " + overrideLevelId ); 177 178 if (!overrideLevelId.equals("") ) 179 { 180 // Is there a w:startOverride? 181 // This is given effect the first time the instance is encountered in the document 182 StartOverride startOverride = overrideNode.getStartOverride(); 183 if (startOverride!=null 184 && startOverride.getVal()!=null) { 185 this.levels.get(overrideLevelId).setStartValue(startOverride.getVal().subtract(BigInteger.ONE)); 186 log.debug("level " + overrideLevelId + "starts at " + startOverride.getVal() ); 187 } 188 } 189 } 190 // Lvl ilvl = overrideNode.getLvl(); 191 // if (ilvl != null) 192 // { 193 // this.levels.get(overrideLevelId).SetOverrides(overrideLevelId); 194 // } 195 } 196 } 163 if (levelOverrideNodes != null) { 164 /* 165 * <w:lvlOverride w:ilvl="0"> <w:startOverride w:val="10"/> 166 * </w:lvlOverride> 167 */ 168 for (Numbering.Num.LvlOverride overrideNode : levelOverrideNodes) { 169 log.debug("found LvlOverride " 170 + XmlUtils.marshaltoString(overrideNode, true)); 171 172 if (overrideNode.getIlvl() == null) { 173 log.warn("Missing @w:ilvl! " + XmlUtils.marshaltoString(overrideNode, true)); 174 } else { 175 String overrideLevelId = overrideNode.getIlvl().toString(); 176 log.debug(".. " + overrideLevelId); 177 178 if (!overrideLevelId.equals("")) { 179 // Is there a w:startOverride? 180 // This is only given effect the first time the instance 181 // is encountered in the document 182 StartOverride startOverride = overrideNode.getStartOverride(); 183 if (startOverride != null 184 && startOverride.getVal() != null) { 185 186 this.levels.get(overrideLevelId).setStartValue( 187 startOverride.getVal().subtract(BigInteger.ONE)); 188 log.debug("level " + overrideLevelId + "starts at " + startOverride.getVal()); 189 } 190 } 191 192 Lvl lvl = overrideNode.getLvl(); 193 if (lvl != null) { 194 this.levels.get(overrideLevelId).SetOverrides(lvl); 195 } 196 197 } 198 199 } 200 } 197 201 } 198 202 } … … 246 250 } 247 251 248 /// <summary> 249 /// returns a String containing the current state of the counters, up to the indicated level 250 /// </summary> 251 /// <param name="level"></param> 252 /// <returns></returns> 252 /** 253 * returns a String containing the current state of the counters, up to the indicated level 254 * 255 * @param level 256 * @return 257 */ 253 258 public String GetCurrentNumberString(String level) 254 259 { 255 260 ListLevel controllingLvl = this.levels.get( level ); 256 261 257 boolean isLegal = controllingLvl.getJaxbAbstractLvl().getIsLgl() !=null 262 boolean isLegal = level.equals("1") 263 && controllingLvl.getJaxbAbstractLvl().getIsLgl() !=null 258 264 && controllingLvl.getJaxbAbstractLvl().getIsLgl().isVal(); 259 log.debug("isLegal: " + isLegal); 265 /* 266 * Explanation of <w:isLgl/> 267 * 268 * COnsider Word (2010)'s built-in legal numbering: 269 * 270 * <w:abstractNum w:abstractNumId="2"> 271 <w:nsid w:val="78220137"/> 272 <w:multiLevelType w:val="multilevel"/> 273 <w:tmpl w:val="0DE0BCC2"/> 274 <w:lvl w:ilvl="0"> 275 <w:start w:val="1"/> 276 <w:numFmt w:val="upperRoman"/> 277 <w:pStyle w:val="Heading1"/> 278 <w:lvlText w:val="Article %1."/> 279 <w:lvlJc w:val="left"/> 280 <w:pPr> 281 <w:ind w:left="0" w:firstLine="0"/> 282 </w:pPr> 283 </w:lvl> 284 <w:lvl w:ilvl="1"> 285 <w:start w:val="1"/> 286 <w:numFmt w:val="decimalZero"/> 287 <w:pStyle w:val="Heading2"/> 288 <w:isLgl/> <---------------- 289 <w:lvlText w:val="Section %1.%2"/> 290 <w:lvlJc w:val="left"/> 291 <w:pPr> 292 <w:ind w:left="0" w:firstLine="0"/> 293 </w:pPr> 294 </w:lvl> 295 <w:lvl w:ilvl="2"> 296 <w:start w:val="1"/> 297 <w:numFmt w:val="lowerLetter"/> 298 <w:pStyle w:val="Heading3"/> 299 <w:lvlText w:val="(%3)"/> 300 <w:lvlJc w:val="left"/> 301 <w:pPr> 302 <w:ind w:left="720" w:hanging="432"/> 303 </w:pPr> 304 </w:lvl> 305 306 * Notice <w:isLgl/> at @w:ilvl="1". This produces: 307 * 308 * Article I. 309 * Section 1.01 310 * 311 * Without it, you'd get: 312 * 313 * Article I. 314 * Section I.01 315 * 316 * In other words, the default numbering behaviour is to 317 * format a level using the w:numFmt specified in that level. 318 * w:isLgl overrides that behaviour, and uses decimal 319 * numbering for ilvl 0. w:isLgl only seems to have 320 * any effect in Word 2010 when specified at ilvl 1 321 * (I tried it at a deeper level, and is behaved as if 322 * not present at all). 323 */ 260 324 261 325 String formatString = controllingLvl.getLevelText(); … … 277 341 int levelId = Integer.parseInt(formatStringLevel) - 1; 278 342 ListLevel lvl = this.levels.get( Integer.toString(levelId) ); 279 if (level.equals("" + levelId) // this bit is the actual level 280 && lvl.getNumFmt().equals( NumberFormat.DECIMAL_ZERO )) { // Where this level sets <w:isLgl>, what other formats are to be respected? 281 result.append(lvl.getCurrentValueFormatted() ); 282 } else if (isLegal ) { 283 // Use normal decimal numbering 343 if (levelId==0 && isLegal ) { 344 // Special case: Use normal decimal numbering 284 345 result.append(lvl.getCurrentValueUnformatted() ); 285 346
Note: See TracChangeset
for help on using the changeset viewer.
