Index: jrst2/src/java/org/codelutin/jrst/JRSTReader.java diff -u jrst2/src/java/org/codelutin/jrst/JRSTReader.java:1.21 jrst2/src/java/org/codelutin/jrst/JRSTReader.java:1.22 --- jrst2/src/java/org/codelutin/jrst/JRSTReader.java:1.21 Thu May 10 16:13:49 2007 +++ jrst2/src/java/org/codelutin/jrst/JRSTReader.java Fri May 11 16:19:06 2007 @@ -23,9 +23,9 @@ * Created: 27 oct. 06 00:15:34 * * @author poussin - * @version $Revision: 1.21 $ + * @version $Revision: 1.22 $ * - * Last update: $Date: 2007/05/10 16:13:49 $ + * Last update: $Date: 2007/05/11 16:19:06 $ * by : $Author: sletellier $ */ @@ -163,7 +163,7 @@ */ /** - * Le principe est d'utiliser les methodes peek* {@link JRSTLexer} pour prendre + * * Le principe est d'utiliser les methodes peek* {@link JRSTLexer} pour prendre * l'element que l'on attend, si la methode retourne null ou un autre element * et bien c que ce n'est pas le bon choix, cela veut dire que l'element courant * est fini d'etre lu (plus de paragraphe dans la section par exemple) ou @@ -181,7 +181,7 @@ * de cette facon les methods isUpperLevel et isSameLevel fonctionne pour * tous les elements de la meme facon * - * + *
  * abbreviation
  * acronym
  * address (done)
@@ -361,12 +361,12 @@
             Element root = composeDocument(lexer);
             Document result = DocumentHelper.createDocument();
             result.setRootElement(root);
-            
             // remove all level attribute
             root.accept(new VisitorSupport() {
                 public void visit(Element e) {
                     e.addAttribute("level", null);
                     String type = e.attributeValue("type");
+                    
                     boolean done = false;
                     if (type!=null){
                         if (type.equals("contents")){
@@ -439,19 +439,21 @@
         e.addAttribute("name",value);
         result.addElement("title").setText(titleValue);
         result.add(composeLineContent(title));
+        e.setText("");
         e.appendContent(result);
     }
 
     private Element composeLineContent(LinkedList title) {
         Element result = DocumentHelper.createElement(BULLET_LIST);
+        Element item = null;
         while (!title.isEmpty()){
             boolean done=false;
             Element e = title.getFirst();
-            Element item = null;
-            title.removeFirst();
             int level = Integer.parseInt(e.attributeValue("level"));
             LinkedList child = new LinkedList();
-            while (level==0 && !done){
+            
+            if (level==0 && !done){
+                title.removeFirst();
                 item = result.addElement(LIST_ITEM);
                 Element para = item.addElement(PARAGRAPH);
                 Element reference = para.addElement(REFERENCE);
@@ -460,31 +462,24 @@
                 reference.addAttribute("refid", text.replaceAll("\\W+", " ").trim().toLowerCase().replaceAll("\\W+", "-"));
                 reference.addAttribute("inline","true");
                 reference.setText(text.trim());
-                if (!title.isEmpty()){
-                    e = title.getFirst();
-                    title.removeFirst();
-                    level = Integer.parseInt(e.attributeValue("level"));
-                }
-                else
-                    done=true;
+               
             }
-            while (level>0 && !done){
-                e.addAttribute("level", ""+(level-1));
-                child.add(e);
-                if (!title.isEmpty()){
-                    e = title.getFirst();
+            else{
+                do{
+                    e.addAttribute("level", ""+(level-1));
+                    child.add(e);
                     title.removeFirst();
-                    level = Integer.parseInt(e.attributeValue("level"));
-                }
-                else
-                    done=true;
-            }
-            if (child!=null){
+                    if (!title.isEmpty()){
+                        e = title.getFirst();
+                        level = Integer.parseInt(e.attributeValue("level"));
+                    } 
+                }while (!title.isEmpty() && level>0 && !done);
+            
                 if (item!=null)
                     item.add(composeLineContent(child)); // Appel recursif
                 else
                     result.add(composeLineContent(child)); // Appel recursif
-            }    
+            }
         }
         return result;
     }
@@ -518,8 +513,11 @@
         if (itemEquals(TITLE, item)) {
             lexer.remove();
             Element title = result.addElement(TITLE);
+            String txt = item.getText();
+            result.addAttribute("id", txt.replaceAll("\\W"," ").toLowerCase().trim().replaceAll(" ", "-"));
+            result.addAttribute("name", txt.toLowerCase().replaceAll("\\W", " ").trim());
             copyLevel(item, title);
-            title.addAttribute("inline", "true").setText(item.getText());
+            title.addAttribute("inline", "true").setText(txt);
         }
         
         // skip blank line
@@ -530,8 +528,11 @@
         if (itemEquals(TITLE, item)) {
             lexer.remove();
             Element subtitle = result.addElement(SUBTITLE);
+            String txt = item.getText();
+            subtitle.addAttribute("id", txt.replaceAll("\\W"," ").toLowerCase().trim().replaceAll(" ", "-"));
+            subtitle.addAttribute("name",txt.toLowerCase().replaceAll("\\W", " ").trim());
             copyLevel(item, subtitle);DocumentHelper.createElement("footnotes");
-            subtitle.addAttribute("inline", "true").setText(item.getText());
+            subtitle.addAttribute("inline", "true").setText(txt);
         }
         
         // skip blank line
@@ -542,6 +543,7 @@
         
         Element documentinfo = null;
         while (itemEquals(DOCINFO, item) || itemEquals(FIELD_LIST, item)) {
+            
         	if (documentinfo == null) {
                 documentinfo = result.addElement(DOCINFO);
             }
@@ -584,9 +586,10 @@
                 lexer.remove();
             }
             // skip blank line
-            skipBlankLine(lexer);
+            //skipBlankLine(lexer);
             
             item = lexer.peekDocInfo();
+            
         }
         
         // l'abstract du doc
@@ -658,6 +661,10 @@
             	lexer.remove();
             	Element list = composeTopic(item);
             	parent.add(list);
+            } else if (itemEquals(TRANSITION, item)) {
+                lexer.remove();
+                Element para = parent.addElement(TRANSITION);
+                copyLevel(item, para);
             } else if (itemEquals(PARAGRAPH, item)) {
                 lexer.remove();
                 Element para = parent.addElement(PARAGRAPH);
@@ -671,10 +678,6 @@
                 lexer.remove();
                 Element subst = composeSubstitutionDefinition(item);
                 parent.add(subst);
-            } else if (itemEquals(TRANSITION, item)) {
-                lexer.remove();
-                Element para = parent.addElement(TRANSITION);
-                copyLevel(item, para);
             } else if (itemEquals(LITERAL_BLOCK, item)) {
                 lexer.remove();
                 Element para = parent.addElement(LITERAL_BLOCK);