@@ -391,7 +391,7 @@ static String javaName(Path file1) {
return name.endsWith(".java") ? name.substring(0, name.length() - 5) : null;
}

private static Pattern WORDS = Pattern.compile("\\w+");
private static final Pattern WORDS = Pattern.compile("(\\w+)|(//.*)\n|(\"[^\"]*\")");
static String boldJavaKeywords(String text, Map<String,String> imports, Set<String> packages) {
Matcher m = WORDS.matcher(text);
StringBuffer sb = new StringBuffer();
@@ -454,6 +454,14 @@ static String boldJavaKeywords(String text, Map<String,String> imports, Set<Stri
append = "<b>" + m.group(0) + "</b>";
break;
default:
if (m.group(0).startsWith("//")) {
append = "<em>" + m.group(0).substring(0, m.group(0).length() - 1) + "</em>\n";
break;
}
if (m.group(0).startsWith("\"")) {
append = "<em>" + m.group(0) + "</em>";
break;
}
String fqn;
fqn = imports.get(m.group(0));
if (fqn == null) {
@@ -473,6 +481,7 @@ static String boldJavaKeywords(String text, Map<String,String> imports, Set<Stri
append = "{@link " + fqn + "}";
}
}
append = append.replace("\\", "\\\\");
m.appendReplacement(sb, append);
}
m.appendTail(sb);
@@ -525,6 +534,35 @@ boolean isHiddingAnnotation(String name) {
return this.hiddenAnno != null && this.hiddenAnno.contains(name);
}

static int findMissingIndentation(String unclosedText) {
int closed = 0;
int i = unclosedText.length() - 1;
while (i >= 0) {
char ch = unclosedText.charAt(i--);
if (ch == '}') {
closed++;
}
if (ch == '{') {
if (closed-- == 0) {
break;
}
}
}
int spaces = 0;
while (i >= 0) {
char ch = unclosedText.charAt(i--);
if (ch == ' ') {
spaces++;
continue;
}
if (ch == '\n' || ch == '\r') {
break;
}
spaces = 0;
}
return spaces;
}

private final class Item implements CharSequence {

private StringBuilder sb = new StringBuilder();
@@ -591,6 +629,10 @@ public String toString(boolean finish, Map<String,String> imports, Set<String> p
int end = countChar(sb, '}');
if (finish) {
for (int i = 0; i < open - end; i++) {
int missingBraceIndent = findMissingIndentation(sb.toString());
while (missingBraceIndent-- > 0) {
sb.append(" ");
}
sb.append("}\n");
}
}
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.apidesign.javadoc</groupId>
<artifactId>pom</artifactId>
<version>0.11</version>
<version>0.20</version>
<packaging>pom</packaging>
<name>Codesnippet Javadoc Doclet</name>
<parent>
@@ -30,7 +30,7 @@
<connection>scm:git:https://github.com/jtulach/codesnippet4javadoc.git</connection>
<developerConnection>scm:git:https://github.com/jtulach/codesnippet4javadoc.git</developerConnection>
<url>https://github.com/jtulach/codesnippet4javadoc</url>
<tag>release-0.11</tag>
<tag>release-0.20</tag>
</scm>
<repositories>
<repository>
@@ -110,6 +110,7 @@
</build>
<modules>
<module>doclet</module>
<module>doclet-test</module>
<module>testing</module>
</modules>
<dependencyManagement>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.apidesign.javadoc</groupId>
<artifactId>pom</artifactId>
<version>0.11</version>
<version>0.20</version>
</parent>
<artifactId>testing</artifactId>
<name>Codesnippet for Javadoc Tests</name>