Index: jrst2/src/java/org/codelutin/jrst/ReStructuredText.java diff -u jrst2/src/java/org/codelutin/jrst/ReStructuredText.java:1.12 jrst2/src/java/org/codelutin/jrst/ReStructuredText.java:1.13 --- jrst2/src/java/org/codelutin/jrst/ReStructuredText.java:1.12 Wed May 23 17:16:20 2007 +++ jrst2/src/java/org/codelutin/jrst/ReStructuredText.java Thu May 24 09:58:45 2007 @@ -23,9 +23,9 @@ * Created: 27 oct. 06 11:10:30 * * @author poussin - * @version $Revision: 1.12 $ + * @version $Revision: 1.13 $ * - * Last update: $Date: 2007/05/23 17:16:20 $ + * Last update: $Date: 2007/05/24 09:58:45 $ * by : $Author: sletellier $ */ @@ -183,7 +183,7 @@ public static final Pattern REGEX_STRONG = Pattern.compile("\\*\\*(.+?)\\*\\*"); public static final Pattern REGEX_LITERAL = Pattern.compile("``(.+?)``"); public static final Pattern REGEX_REFERENCE = Pattern.compile("(http://[-/%#[\\&&&[^(>)]]\\._\\w]+\\w+)((\\W|&|$)+)"); - public static final Pattern REGEX_INLINE_REFERENCE = Pattern.compile("`(.+) \\<\\;(http://[-/%#&\\._\\w]+)(\\>\\;)`_"); + public static final Pattern REGEX_INLINE_REFERENCE = Pattern.compile("`(.+) \\<\\;(http://[-/%#&\\._\\w]+)(\\>\\;)`"); public static final Pattern REGEX_EMAIL = Pattern.compile("(^|[^_\\w])([-\\._\\w]+@[-\\._\\w]+)([^-\\._\\w]|$)"); public static final Pattern REGEX_FOOTNOTE_REFERENCE = Pattern.compile("\\[(#|[0-9]|\\*)\\w*\\]_"); //"\\[([0-9]+?|#)\\]"); @@ -196,7 +196,7 @@ public static final Pattern REGEX_INLINE = Pattern.compile("(.*?)"); public static final Pattern REGEX_PROBLEMATIC = Pattern.compile("(.*?)"); public static final Pattern REGEX_GENERATED = Pattern.compile("(.*?)"); - public static final Pattern REGEX_HYPERLINK_REFERENCE = Pattern.compile("(\\`[^_<>]+\\`_)|('[^_<>]+'_)|([\\S]+[^\\s<>\\.]+_)"); + public static final Pattern REGEX_HYPERLINK_REFERENCE = Pattern.compile("(\\`[^_<>]+\\`_\\W)|('[^_<>]+'_\\W)|([\\S]+[^\\s<>\\.]+_\\W)"); public static final Pattern REGEX_ANONYMOUS_HYPERLINK_REFERENCE = Pattern.compile("(\\`[^<>`]+\\`__)|([\\w]+[^`\\s<>]+__)"); } Index: jrst2/src/java/org/codelutin/jrst/JRSTReader.java diff -u jrst2/src/java/org/codelutin/jrst/JRSTReader.java:1.28 jrst2/src/java/org/codelutin/jrst/JRSTReader.java:1.29 --- jrst2/src/java/org/codelutin/jrst/JRSTReader.java:1.28 Wed May 23 17:16:20 2007 +++ jrst2/src/java/org/codelutin/jrst/JRSTReader.java Thu May 24 09:58:45 2007 @@ -23,9 +23,9 @@ * Created: 27 oct. 06 00:15:34 * * @author poussin - * @version $Revision: 1.28 $ + * @version $Revision: 1.29 $ * - * Last update: $Date: 2007/05/23 17:16:20 $ + * Last update: $Date: 2007/05/24 09:58:45 $ * by : $Author: sletellier $ */ @@ -300,6 +300,7 @@ private static LinkedList eTarget = new LinkedList(); static LinkedList eTargetAnonymous = new LinkedList(); + static LinkedList eTargetAnonymousCopy = new LinkedList(); private static LinkedList eTitle = new LinkedList(); @@ -362,6 +363,7 @@ JRSTLexer lexer = new JRSTLexer(reader); try { Element root = composeDocument(lexer); + Document result = DocumentHelper.createDocument(); result.setRootElement(root); // remove all level attribute @@ -388,6 +390,7 @@ } } }); + return result; } catch (Exception eee) { log.error(_("JRST parsing error line {0} char {1}:\n{2}", lexer @@ -551,15 +554,14 @@ LinkedList listItem = lexer.peekTargetAnonymous(); if (listItem != null) { for (Element e : listItem) { - Element anonym = result.addElement(TARGET); + Element anonym = DocumentHelper.createElement(TARGET); anonym.addAttribute("anonymous", "1"); idMax++; anonym.addAttribute("id", "id" + idMax); anonym.addAttribute("refuri", e.attributeValue("refuri") - .replaceAll("`|_", "").trim()); - + .trim()); eTargetAnonymous.add(anonym); - + eTargetAnonymousCopy.add(anonym); } } @@ -813,6 +815,10 @@ lexer.remove(); Element list = composeTarget(item); parent.add(list); + } else if (itemEquals("targetAnonymous",item)){ + lexer.remove(); + Element list = composeTargetAnonymous(item); + parent.add(list); } else if (itemEquals("footnotes", item)) { lexer.remove(); Element[] list = composeFootnote(item); @@ -884,7 +890,16 @@ return item; } - + /** + * @param item + * @return Element + */ + private Element composeTargetAnonymous(Element item) { + Element result=null; + result =eTargetAnonymousCopy.getFirst(); + eTargetAnonymousCopy.removeFirst(); + return result; + } /** * @param item * @return Element @@ -1695,7 +1710,6 @@ // mechanisme as literal for that matcher = REGEX_INLINE_REFERENCE.matcher(text); index = 0; - while (matcher.find()) { int start = matcher.start(); int end = matcher.end(); @@ -1707,7 +1721,7 @@ text = text.substring(0, start) + "``" + key + "``" + text.substring(end); } - + // do all substitution inline text = REGEX_EMAIL.matcher(text).replaceAll( "$1<" + REFERENCE + " refuri='mailto:$2'>$2$1"); text = REGEX_REFERENCE.matcher(text).replaceAll( "<" + REFERENCE + " refuri='$1'>$1$2"); - + matcher = REGEX_FOOTNOTE_REFERENCE.matcher(text); while (matcher.find()) { String txtDebut = text.substring(0, matcher.start()); @@ -1860,13 +1874,13 @@ text = txtDebut + anonym.asXML() + txtFin; matcher = REGEX_ANONYMOUS_HYPERLINK_REFERENCE.matcher(text); } - + matcher = REGEX_HYPERLINK_REFERENCE.matcher(text); while (matcher.find()) { String txtDebut = text.substring(0, matcher.start()); String txtFin = text.substring(matcher.end(), text.length()); String ref = text.substring(matcher.start(), matcher.end() - 1); - ref = ref.replaceAll("'", ""); + ref = ref.replaceAll("('|_)", ""); ref = ref.replaceAll("[\\W&&[^-]]", " ").trim(); Element hyper = DocumentHelper.createElement("reference"); hyper.addAttribute("name", ref); @@ -1884,6 +1898,7 @@ hyper.setText(ref); text = txtDebut + hyper.asXML() + txtFin; matcher = REGEX_HYPERLINK_REFERENCE.matcher(text); + } // substitution reference matcher = REGEX_SUBSTITUTION_REFERENCE.matcher(text); @@ -1905,9 +1920,10 @@ begin = text.length(); text += end; matcher = REGEX_SUBSTITUTION_REFERENCE.matcher(text); + } - + // undo substitution in LITERAL matcher = REGEX_LITERAL.matcher(text); while (matcher.find()) { @@ -1916,10 +1932,11 @@ String tempKey = matcher.group(1); text = start + temporaries.get(tempKey) + end; + } Element result = DocumentHelper.parseText("" + text + "") .getRootElement(); - + e.setText(""); e.appendContent(result); } Index: jrst2/src/java/org/codelutin/jrst/JRSTLexer.java diff -u jrst2/src/java/org/codelutin/jrst/JRSTLexer.java:1.24 jrst2/src/java/org/codelutin/jrst/JRSTLexer.java:1.25 --- jrst2/src/java/org/codelutin/jrst/JRSTLexer.java:1.24 Wed May 23 17:16:20 2007 +++ jrst2/src/java/org/codelutin/jrst/JRSTLexer.java Thu May 24 09:58:45 2007 @@ -23,9 +23,9 @@ * Created: 28 oct. 06 00:44:20 * * @author poussin - * @version $Revision: 1.24 $ + * @version $Revision: 1.25 $ * - * Last update: $Date: 2007/05/23 17:16:20 $ + * Last update: $Date: 2007/05/24 09:58:45 $ * by : $Author: sletellier $ */ @@ -460,6 +460,9 @@ result = peekFieldList(); } if (result == null) { + result = peekTargetAnonymousBody(); + } + if (result == null) { result = peekLiteralBlock(); } if (result == null) { @@ -494,9 +497,7 @@ if (line.matches("^\\s*.. "+FOOTER+":: .*")){ result= DocumentHelper.createElement("remove").addAttribute("level", ""+level(line)); } - if (line.matches("^\\s*__ .+$|^\\s*\\.\\. __\\:.+$")){ - result= DocumentHelper.createElement("remove").addAttribute("level", ""+level(line)); - } + } endPeek(); return result; @@ -1836,7 +1837,26 @@ endPeek(); return result; } - + /** + * .. __: http://www.python.org + * @return Element + * @throws IOException + */ + private Element peekTargetAnonymousBody() throws IOException{ + beginPeek(); + Element result = null; + String line=in.readLine(); + if (line!=null){ + if (line.matches("^\\s*__ .+$|^\\s*\\.\\. __\\:.+$")){ + result = DocumentHelper.createElement("targetAnonymous"); + result.addAttribute("level", ""+level(line)); + + } + } + + endPeek(); + return result; + } /** * .. * comment