Changeset 1715 for trunk/docx4j


Ignore:
Timestamp:
11/16/11 13:53:09 (6 months ago)
Author:
jharrop
Message:

Start of support for conversion of HTML UL and OL.

  • Will now add a bulleted or numbered list definition to the NDP (though without regard to CSS definition). FIXME: in Importer, test for null NDP.

Supporting methods in NDP (add a numbering definition, unmarshall default numbering)

Location:
trunk/docx4j/src/main/java/org/docx4j
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/docx4j/src/main/java/org/docx4j/convert/in/css/Importer.java

    r1708 r1715  
    88import java.util.List; 
    99import java.util.Map; 
     10 
     11import javax.xml.bind.JAXBException; 
    1012 
    1113import org.apache.log4j.Logger; 
     
    7274     
    7375    private RelationshipsPart rp; 
    74      
    75     private Importer(RelationshipsPart rp) { 
    76         this.rp = rp; 
    77     } 
    78  
    79     public static List<Object> convert(File file, RelationshipsPart rp) throws IOException { 
     76    private NumberingDefinitionsPart ndp; 
     77     
     78    private ListHelper listHelper; 
     79     
     80    private Importer(RelationshipsPart rp, NumberingDefinitionsPart ndp) { 
     81        this.rp  = rp;           
     82        this.ndp = ndp;          
     83        listHelper = new ListHelper(); 
     84    } 
     85 
     86    public static List<Object> convert(File file, RelationshipsPart rp, NumberingDefinitionsPart ndp) throws IOException { 
    8087 
    8188        DocxRenderer renderer = new DocxRenderer(); 
     
    8390        renderer.layout(); 
    8491                     
    85         Importer importer = new Importer(rp); 
     92        Importer importer = new Importer(rp, ndp); 
    8693        importer.traverse(renderer.getRootBox(), ""); 
    8794         
     
    8996    } 
    9097     
    91     public static List<Object> convert(String uri, RelationshipsPart rp) { 
     98    public static List<Object> convert(String uri, RelationshipsPart rp, NumberingDefinitionsPart ndp) { 
    9299         
    93100        DocxRenderer renderer = new DocxRenderer(); 
     
    95102        renderer.layout(); 
    96103                     
    97         Importer importer = new Importer(rp); 
     104        Importer importer = new Importer(rp, ndp); 
    98105        importer.traverse(renderer.getRootBox(), ""); 
    99106         
     
    101108    } 
    102109 
    103     public static List<Object> convertFromString(String content, RelationshipsPart rp) { 
     110    public static List<Object> convertFromString(String content, RelationshipsPart rp, NumberingDefinitionsPart ndp) { 
    104111         
    105112        DocxRenderer renderer = new DocxRenderer(); 
     
    107114        renderer.layout(); 
    108115                     
    109         Importer importer = new Importer(rp); 
     116        Importer importer = new Importer(rp, ndp); 
    110117        importer.traverse(renderer.getRootBox(), ""); 
    111118         
     
    203210                            if (e.getNodeName().equals("li")) { 
    204211                                 
    205                                 log.info( cssMap.get("list-style-type" )   ); 
    206212                                 
    207                                 // TODO: code to generate appropriate numbering on first use, and store it in map 
    208                                 // Then we can just fetch it. 
    209  
    210                                     paraStillEmpty = false; 
    211                                      
    212                                     // Create and add <w:numPr> 
    213                                     NumPr numPr =  Context.getWmlObjectFactory().createPPrBaseNumPr(); 
    214                                     currentP.getPPr().setNumPr(numPr); 
    215  
    216                                     // The <w:numId> element 
    217                                     NumId numIdElement = Context.getWmlObjectFactory().createPPrBaseNumPrNumId(); 
    218                                     numPr.setNumId(numIdElement); 
    219                                     numIdElement.setVal(BigInteger.valueOf(1)); 
    220                                      
    221                                     // The <w:ilvl> element 
    222                                     Ilvl ilvlElement = Context.getWmlObjectFactory().createPPrBaseNumPrIlvl(); 
    223                                     numPr.setIlvl(ilvlElement); 
    224                                     ilvlElement.setVal(BigInteger.valueOf(0)); 
    225                                          
    226                                     // TMP: don't let this override our numbering 
    227                                     currentP.getPPr().setInd(null); 
    228                                      
     213                                Numbering.Num num = null; 
     214                                try { 
     215                                        if ( cssMap.get("list-style-type" ).getCssText().equals("decimal")) { 
     216                                                num = listHelper.getOrderedList(ndp); 
     217                                        } 
     218                                        if (cssMap.get("list-style-type" ).getCssText().equals("disc")) { 
     219                                                num = listHelper.getUnorderedList(ndp); 
     220                                        } 
     221                                         
     222                                        // TODO: support other list-style-type 
     223                                         
     224                                        // TODO: generate list definitions based on CSS  
     225                                        // (and multiple list definitions) 
     226                                         
     227                                } catch (JAXBException je) { 
     228                                        // Shouldn't happen 
     229                                        je.printStackTrace(); 
     230                                        log.error(e); 
     231                                } 
     232 
     233                                if (num==null) { 
     234                                        log.warn( "No support for list-style-type: "  
     235                                                        + cssMap.get("list-style-type" ).getCssText()   );  // eg decimal, disc 
     236                                         
     237                                } else { 
     238 
     239                                            paraStillEmpty = false; 
     240                                             
     241                                            // Create and add <w:numPr> 
     242                                            NumPr numPr =  Context.getWmlObjectFactory().createPPrBaseNumPr(); 
     243                                            currentP.getPPr().setNumPr(numPr); 
     244         
     245                                            // The <w:numId> element 
     246                                            NumId numIdElement = Context.getWmlObjectFactory().createPPrBaseNumPrNumId(); 
     247                                            numPr.setNumId(numIdElement); 
     248                                            numIdElement.setVal( num.getNumId() ); // point to the correct list 
     249                                             
     250                                            // The <w:ilvl> element 
     251                                            Ilvl ilvlElement = Context.getWmlObjectFactory().createPPrBaseNumPrIlvl(); 
     252                                            numPr.setIlvl(ilvlElement); 
     253                                            ilvlElement.setVal(BigInteger.valueOf(0)); 
     254                                                 
     255                                            // TMP: don't let this override our numbering 
     256                                            currentP.getPPr().setInd(null); 
     257                                } 
    229258                            } 
    230259                             
     
    473502                NumberingDefinitionsPart ndp = new NumberingDefinitionsPart(); 
    474503                wordMLPackage.getMainDocumentPart().addTargetPart(ndp); 
    475                 ndp.setJaxbElement( (Numbering) XmlUtils.unmarshalString(initialNumbering) );            
     504                ndp.unmarshalDefaultNumbering();                 
    476505                 
    477506                wordMLPackage.getMainDocumentPart().getContent().addAll(  
    478                                 convert(f, wordMLPackage.getMainDocumentPart().getRelationshipsPart() ) ); 
     507                                convert(f, wordMLPackage.getMainDocumentPart().getRelationshipsPart(), ndp ) ); 
    479508                 
    480509                System.out.println( 
     
    485514  } 
    486515 
    487         static final String initialNumbering = "<w:numbering xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\">" 
    488           +"<w:abstractNum w:abstractNumId=\"0\">" 
    489             +"<w:nsid w:val=\"16892FB7\"/>" 
    490             +"<w:multiLevelType w:val=\"hybridMultilevel\"/>" 
    491             +"<w:tmpl w:val=\"5A4EB96A\"/>" 
    492             +"<w:lvl w:ilvl=\"0\" w:tplc=\"0C090001\">" 
    493               +"<w:start w:val=\"1\"/>" 
    494               +"<w:numFmt w:val=\"bullet\"/>" 
    495               +"<w:lvlText w:val=\"\"/>" 
    496               +"<w:lvlJc w:val=\"left\"/>" 
    497               +"<w:pPr>" 
    498                 +"<w:ind w:left=\"720\" w:hanging=\"360\"/>" 
    499               +"</w:pPr>" 
    500               +"<w:rPr>" 
    501                 +"<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>" 
    502               +"</w:rPr>" 
    503             +"</w:lvl>" 
    504             +"<w:lvl w:ilvl=\"1\" w:tplc=\"0C090003\" w:tentative=\"1\">" 
    505               +"<w:start w:val=\"1\"/>" 
    506               +"<w:numFmt w:val=\"bullet\"/>" 
    507               +"<w:lvlText w:val=\"o\"/>" 
    508               +"<w:lvlJc w:val=\"left\"/>" 
    509               +"<w:pPr>" 
    510                 +"<w:ind w:left=\"1440\" w:hanging=\"360\"/>" 
    511               +"</w:pPr>" 
    512               +"<w:rPr>" 
    513                 +"<w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/>" 
    514               +"</w:rPr>" 
    515             +"</w:lvl>" 
    516             +"<w:lvl w:ilvl=\"2\" w:tplc=\"0C090005\" w:tentative=\"1\">" 
    517               +"<w:start w:val=\"1\"/>" 
    518               +"<w:numFmt w:val=\"bullet\"/>" 
    519               +"<w:lvlText w:val=\"\"/>" 
    520               +"<w:lvlJc w:val=\"left\"/>" 
    521               +"<w:pPr>" 
    522                 +"<w:ind w:left=\"2160\" w:hanging=\"360\"/>" 
    523               +"</w:pPr>" 
    524               +"<w:rPr>" 
    525                 +"<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>" 
    526               +"</w:rPr>" 
    527             +"</w:lvl>" 
    528             +"<w:lvl w:ilvl=\"3\" w:tplc=\"0C090001\" w:tentative=\"1\">" 
    529               +"<w:start w:val=\"1\"/>" 
    530               +"<w:numFmt w:val=\"bullet\"/>" 
    531               +"<w:lvlText w:val=\"\"/>" 
    532               +"<w:lvlJc w:val=\"left\"/>" 
    533               +"<w:pPr>" 
    534                 +"<w:ind w:left=\"2880\" w:hanging=\"360\"/>" 
    535               +"</w:pPr>" 
    536               +"<w:rPr>" 
    537                 +"<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>" 
    538               +"</w:rPr>" 
    539             +"</w:lvl>" 
    540             +"<w:lvl w:ilvl=\"4\" w:tplc=\"0C090003\" w:tentative=\"1\">" 
    541               +"<w:start w:val=\"1\"/>" 
    542               +"<w:numFmt w:val=\"bullet\"/>" 
    543               +"<w:lvlText w:val=\"o\"/>" 
    544               +"<w:lvlJc w:val=\"left\"/>" 
    545               +"<w:pPr>" 
    546                 +"<w:ind w:left=\"3600\" w:hanging=\"360\"/>" 
    547               +"</w:pPr>" 
    548               +"<w:rPr>" 
    549                 +"<w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/>" 
    550               +"</w:rPr>" 
    551             +"</w:lvl>" 
    552             +"<w:lvl w:ilvl=\"5\" w:tplc=\"0C090005\" w:tentative=\"1\">" 
    553               +"<w:start w:val=\"1\"/>" 
    554               +"<w:numFmt w:val=\"bullet\"/>" 
    555               +"<w:lvlText w:val=\"\"/>" 
    556               +"<w:lvlJc w:val=\"left\"/>" 
    557               +"<w:pPr>" 
    558                 +"<w:ind w:left=\"4320\" w:hanging=\"360\"/>" 
    559               +"</w:pPr>" 
    560               +"<w:rPr>" 
    561                 +"<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>" 
    562               +"</w:rPr>" 
    563             +"</w:lvl>" 
    564             +"<w:lvl w:ilvl=\"6\" w:tplc=\"0C090001\" w:tentative=\"1\">" 
    565               +"<w:start w:val=\"1\"/>" 
    566               +"<w:numFmt w:val=\"bullet\"/>" 
    567               +"<w:lvlText w:val=\"\"/>" 
    568               +"<w:lvlJc w:val=\"left\"/>" 
    569               +"<w:pPr>" 
    570                 +"<w:ind w:left=\"5040\" w:hanging=\"360\"/>" 
    571               +"</w:pPr>" 
    572               +"<w:rPr>" 
    573                 +"<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>" 
    574               +"</w:rPr>" 
    575             +"</w:lvl>" 
    576             +"<w:lvl w:ilvl=\"7\" w:tplc=\"0C090003\" w:tentative=\"1\">" 
    577               +"<w:start w:val=\"1\"/>" 
    578               +"<w:numFmt w:val=\"bullet\"/>" 
    579               +"<w:lvlText w:val=\"o\"/>" 
    580               +"<w:lvlJc w:val=\"left\"/>" 
    581               +"<w:pPr>" 
    582                 +"<w:ind w:left=\"5760\" w:hanging=\"360\"/>" 
    583               +"</w:pPr>" 
    584               +"<w:rPr>" 
    585                 +"<w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:cs=\"Courier New\" w:hint=\"default\"/>" 
    586               +"</w:rPr>" 
    587             +"</w:lvl>" 
    588             +"<w:lvl w:ilvl=\"8\" w:tplc=\"0C090005\" w:tentative=\"1\">" 
    589               +"<w:start w:val=\"1\"/>" 
    590               +"<w:numFmt w:val=\"bullet\"/>" 
    591               +"<w:lvlText w:val=\"\"/>" 
    592               +"<w:lvlJc w:val=\"left\"/>" 
    593               +"<w:pPr>" 
    594                 +"<w:ind w:left=\"6480\" w:hanging=\"360\"/>" 
    595               +"</w:pPr>" 
    596               +"<w:rPr>" 
    597                 +"<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>" 
    598               +"</w:rPr>" 
    599             +"</w:lvl>" 
    600           +"</w:abstractNum>" 
    601           +"<w:abstractNum w:abstractNumId=\"1\">" 
    602             +"<w:nsid w:val=\"7E706046\"/>" 
    603             +"<w:multiLevelType w:val=\"hybridMultilevel\"/>" 
    604             +"<w:tmpl w:val=\"336E8F2C\"/>" 
    605             +"<w:lvl w:ilvl=\"0\" w:tplc=\"0C09000F\">" 
    606               +"<w:start w:val=\"1\"/>" 
    607               +"<w:numFmt w:val=\"decimal\"/>" 
    608               +"<w:lvlText w:val=\"%1.\"/>" 
    609               +"<w:lvlJc w:val=\"left\"/>" 
    610               +"<w:pPr>" 
    611                 +"<w:ind w:left=\"720\" w:hanging=\"360\"/>" 
    612               +"</w:pPr>" 
    613             +"</w:lvl>" 
    614             +"<w:lvl w:ilvl=\"1\" w:tplc=\"0C090019\" w:tentative=\"1\">" 
    615               +"<w:start w:val=\"1\"/>" 
    616               +"<w:numFmt w:val=\"lowerLetter\"/>" 
    617               +"<w:lvlText w:val=\"%2.\"/>" 
    618               +"<w:lvlJc w:val=\"left\"/>" 
    619               +"<w:pPr>" 
    620                 +"<w:ind w:left=\"1440\" w:hanging=\"360\"/>" 
    621               +"</w:pPr>" 
    622             +"</w:lvl>" 
    623             +"<w:lvl w:ilvl=\"2\" w:tplc=\"0C09001B\" w:tentative=\"1\">" 
    624               +"<w:start w:val=\"1\"/>" 
    625               +"<w:numFmt w:val=\"lowerRoman\"/>" 
    626               +"<w:lvlText w:val=\"%3.\"/>" 
    627               +"<w:lvlJc w:val=\"right\"/>" 
    628               +"<w:pPr>" 
    629                 +"<w:ind w:left=\"2160\" w:hanging=\"180\"/>" 
    630               +"</w:pPr>" 
    631             +"</w:lvl>" 
    632             +"<w:lvl w:ilvl=\"3\" w:tplc=\"0C09000F\" w:tentative=\"1\">" 
    633               +"<w:start w:val=\"1\"/>" 
    634               +"<w:numFmt w:val=\"decimal\"/>" 
    635               +"<w:lvlText w:val=\"%4.\"/>" 
    636               +"<w:lvlJc w:val=\"left\"/>" 
    637               +"<w:pPr>" 
    638                 +"<w:ind w:left=\"2880\" w:hanging=\"360\"/>" 
    639               +"</w:pPr>" 
    640             +"</w:lvl>" 
    641             +"<w:lvl w:ilvl=\"4\" w:tplc=\"0C090019\" w:tentative=\"1\">" 
    642               +"<w:start w:val=\"1\"/>" 
    643               +"<w:numFmt w:val=\"lowerLetter\"/>" 
    644               +"<w:lvlText w:val=\"%5.\"/>" 
    645               +"<w:lvlJc w:val=\"left\"/>" 
    646               +"<w:pPr>" 
    647                 +"<w:ind w:left=\"3600\" w:hanging=\"360\"/>" 
    648               +"</w:pPr>" 
    649             +"</w:lvl>" 
    650             +"<w:lvl w:ilvl=\"5\" w:tplc=\"0C09001B\" w:tentative=\"1\">" 
    651               +"<w:start w:val=\"1\"/>" 
    652               +"<w:numFmt w:val=\"lowerRoman\"/>" 
    653               +"<w:lvlText w:val=\"%6.\"/>" 
    654               +"<w:lvlJc w:val=\"right\"/>" 
    655               +"<w:pPr>" 
    656                 +"<w:ind w:left=\"4320\" w:hanging=\"180\"/>" 
    657               +"</w:pPr>" 
    658             +"</w:lvl>" 
    659             +"<w:lvl w:ilvl=\"6\" w:tplc=\"0C09000F\" w:tentative=\"1\">" 
    660               +"<w:start w:val=\"1\"/>" 
    661               +"<w:numFmt w:val=\"decimal\"/>" 
    662               +"<w:lvlText w:val=\"%7.\"/>" 
    663               +"<w:lvlJc w:val=\"left\"/>" 
    664               +"<w:pPr>" 
    665                 +"<w:ind w:left=\"5040\" w:hanging=\"360\"/>" 
    666               +"</w:pPr>" 
    667             +"</w:lvl>" 
    668             +"<w:lvl w:ilvl=\"7\" w:tplc=\"0C090019\" w:tentative=\"1\">" 
    669               +"<w:start w:val=\"1\"/>" 
    670               +"<w:numFmt w:val=\"lowerLetter\"/>" 
    671               +"<w:lvlText w:val=\"%8.\"/>" 
    672               +"<w:lvlJc w:val=\"left\"/>" 
    673               +"<w:pPr>" 
    674                 +"<w:ind w:left=\"5760\" w:hanging=\"360\"/>" 
    675               +"</w:pPr>" 
    676             +"</w:lvl>" 
    677             +"<w:lvl w:ilvl=\"8\" w:tplc=\"0C09001B\" w:tentative=\"1\">" 
    678               +"<w:start w:val=\"1\"/>" 
    679               +"<w:numFmt w:val=\"lowerRoman\"/>" 
    680               +"<w:lvlText w:val=\"%9.\"/>" 
    681               +"<w:lvlJc w:val=\"right\"/>" 
    682               +"<w:pPr>" 
    683                 +"<w:ind w:left=\"6480\" w:hanging=\"180\"/>" 
    684               +"</w:pPr>" 
    685             +"</w:lvl>" 
    686           +"</w:abstractNum>" 
    687           +"<w:num w:numId=\"1\">" 
    688             +"<w:abstractNumId w:val=\"1\"/>" 
    689           +"</w:num>" 
    690           +"<w:num w:numId=\"2\">" 
    691             +"<w:abstractNumId w:val=\"0\"/>" 
    692           +"</w:num>" 
    693         +"</w:numbering>"; 
    694516     
    695517} 
  • trunk/docx4j/src/main/java/org/docx4j/model/datastorage/BindingHandler.java

    r1706 r1715  
    3434import org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart; 
    3535import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; 
     36import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart; 
    3637import org.docx4j.openpackaging.parts.opendope.XPathsPart; 
    3738import org.docx4j.openpackaging.parts.relationships.Namespaces; 
     
    276277                                log.info("Unescaped: " + unescaped); 
    277278                                 
    278                                 List<Object> results = Importer.convertFromString(unescaped, sourcePart.getRelationshipsPart() ); 
     279                                NumberingDefinitionsPart ndp = null; 
     280                                if (sourcePart instanceof MainDocumentPart) { 
     281                                        ndp = ((MainDocumentPart)sourcePart).getNumberingDefinitionsPart(); 
     282                                }                                
     283                                 
     284                                List<Object> results = Importer.convertFromString(unescaped, sourcePart.getRelationshipsPart(), ndp ); 
    279285                                log.info("Got results: " + results.size() ); 
    280286                                 
  • trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/NumberingDefinitionsPart.java

    r1610 r1715  
    305305        } 
    306306         
     307        /** 
     308         * Add the specified definition, allocating it a new w:abstractNumId. 
     309         *  
     310         * Also create and add an associated ListNumberingDefinition, and return 
     311         * the w:numId of this associated ListNumberingDefinition (since that is 
     312         * what you are likely to use in the document).  
     313         *  
     314         * @param abstractNum 
     315         * @return 
     316         */ 
     317        public Numbering.Num addAbstractListNumberingDefinition(Numbering.AbstractNum abstractNum) { 
     318                 
     319                ////////////////////////////////////////////// 
     320                // Numbering.AbstractNum abstractNum 
     321                 
     322                // Generate a unique w:abstractNumId for it 
     323                int nextId = getAbstractListDefinitions().size();                
     324        do { 
     325                nextId++;                
     326        } while (getAbstractListDefinitions().containsKey( "" + nextId ));       
     327        abstractNum.setAbstractNumId( BigInteger.valueOf(nextId) ); 
     328         
     329        // Add it to our JAXB object 
     330        this.jaxbElement.getAbstractNum().add(abstractNum); 
     331         
     332        // Add it to our hashmap 
     333        AbstractListNumberingDefinition absNumDef = new AbstractListNumberingDefinition(abstractNum); 
     334        abstractListDefinitions.put(absNumDef.getID(), absNumDef); 
     335 
     336                ////////////////////////////////////////////// 
     337                // Numbering.Num num 
     338         
     339        // Now make an associated ListNumberingDefinition 
     340                //      <w:num w:numId="1"> 
     341                //        <w:abstractNumId w:val="1"/> 
     342                //      </w:num>"         
     343        Numbering.Num num = Context.wmlObjectFactory.createNumberingNum(); 
     344        Numbering.Num.AbstractNumId abstractNumId = Context.wmlObjectFactory.createNumberingNumAbstractNumId(); 
     345        abstractNumId.setVal(BigInteger.valueOf(nextId) ); 
     346        num.setAbstractNumId(abstractNumId); 
     347         
     348        nextId = getInstanceListDefinitions().size();            
     349        do { 
     350                nextId++;                
     351        } while (getInstanceListDefinitions().containsKey( "" + nextId ));       
     352        num.setNumId( BigInteger.valueOf(nextId) );   
     353         
     354        // Add it to our JAXB object 
     355        this.jaxbElement.getNum().add(num); 
     356         
     357        // Add it to our hashmap 
     358        ListNumberingDefinition listDef = new ListNumberingDefinition(num, abstractListDefinitions); 
     359        instanceListDefinitions.put(listDef.getListNumberId(), listDef); 
     360         
     361        //  
     362        return num; 
     363                 
     364        } 
     365         
     366    public Numbering unmarshalDefaultNumbering() throws JAXBException { 
     367                          
     368                java.io.InputStream is = null; 
     369                try { 
     370                        is = org.docx4j.utils.ResourceUtils.getResource( 
     371                                        "org/docx4j/openpackaging/parts/WordprocessingML/numbering.xml"); 
     372                } catch (IOException e) { 
     373                        // TODO Auto-generated catch block 
     374                        e.printStackTrace(); 
     375                }                
     376         
     377        return unmarshal( is );    // side-effect is to set jaxbElement          
     378    } 
    307379 
    308380} 
  • trunk/docx4j/src/main/java/org/docx4j/wml/Numbering.java

    r546 r1715  
    422422        "lvl" 
    423423    }) 
     424    @XmlRootElement(name = "abstractNum")     
    424425    public static class AbstractNum 
    425426        implements Child 
Note: See TracChangeset for help on using the changeset viewer.