Support for links without a label.

If no link label is specified, it is now computed from the link.
This commit is contained in:
Cedric Priscal
2015-03-18 18:01:13 -07:00
parent 9405be0f43
commit cb1a18268e

View File

@@ -560,7 +560,7 @@ public class TeXDoclet extends Doclet {
os.println("\\thispagestyle{empty}"); os.println("\\thispagestyle{empty}");
os.println("\\markboth{Introduction}{Introduction}"); os.println("\\markboth{Introduction}{Introduction}");
printTags(root.inlineTags()); printTags(null, root.inlineTags());
os.println("}"); os.println("}");
} }
@@ -673,7 +673,7 @@ public class TeXDoclet extends Doclet {
// Package comments // Package comments
if (pkg.pkgDoc.inlineTags().length > 0) { if (pkg.pkgDoc.inlineTags().length > 0) {
printTags(pkg.pkgDoc.inlineTags()); printTags(pkg.pkgDoc, pkg.pkgDoc.inlineTags());
if (useHr) { if (useHr) {
os.println("\\mbox{}\\\\ \\rule{\\hsize}{.7mm}"); os.println("\\mbox{}\\\\ \\rule{\\hsize}{.7mm}");
@@ -976,7 +976,7 @@ public class TeXDoclet extends Doclet {
os.print("\\entityintro{" os.print("\\entityintro{"
+ HTMLtoLaTeXBackEnd.fixText(cd.name()) + "}" + "{" + HTMLtoLaTeXBackEnd.fixText(cd.name()) + "}" + "{"
+ refName(makeRefKey(cd.qualifiedName())) + "}" + "{"); + refName(makeRefKey(cd.qualifiedName())) + "}" + "{");
printTags(cd.firstSentenceTags()); printTags(cd.containingPackage(), cd.firstSentenceTags());
os.println("}"); os.println("}");
} }
} }
@@ -1111,7 +1111,7 @@ public class TeXDoclet extends Doclet {
os.println("\\vskip .1in "); os.println("\\vskip .1in ");
if (cd.inlineTags().length > 0) { if (cd.inlineTags().length > 0) {
printTags(cd.inlineTags()); printTags(cd.containingPackage(), cd.inlineTags());
os.println("\\vskip .1in "); os.println("\\vskip .1in ");
} }
@@ -1413,7 +1413,7 @@ public class TeXDoclet extends Doclet {
os.println("\\begin{itemize}"); os.println("\\begin{itemize}");
if (f.inlineTags().length > 0) { if (f.inlineTags().length > 0) {
os.println("\\item{\\vskip -.9ex "); os.println("\\item{\\vskip -.9ex ");
printTags(f.inlineTags()); printTags(f.containingPackage(), f.inlineTags());
os.println("}"); os.println("}");
} }
@@ -1472,7 +1472,7 @@ public class TeXDoclet extends Doclet {
os.print("}"); os.print("}");
} }
os.print(" "); os.print(" ");
printTags(mem.firstSentenceTags()); printTags(mem.containingPackage(), mem.firstSentenceTags());
os.println("\\\\"); os.println("\\\\");
} }
os.println("\\end{verse}"); os.println("\\end{verse}");
@@ -1507,7 +1507,7 @@ public class TeXDoclet extends Doclet {
os.print("}"); os.print("}");
} }
os.print(" "); os.print(" ");
printTags(mem.firstSentenceTags()); printTags(mem.containingPackage(), mem.firstSentenceTags());
os.println("\\\\"); os.println("\\\\");
} }
os.println("\\end{verse}"); os.println("\\end{verse}");
@@ -1703,7 +1703,7 @@ public class TeXDoclet extends Doclet {
os.print("\\refdefined{" + refName(makeRefKey(classname)) + "}"); os.print("\\refdefined{" + refName(makeRefKey(classname)) + "}");
os.println("} }\n"); os.println("} }\n");
} }
printTags(mem.inlineTags()); printTags(mem.containingPackage(), mem.inlineTags());
os.println("\n}"); os.println("\n}");
} }
@@ -1721,7 +1721,7 @@ public class TeXDoclet extends Doclet {
os.print(TRUETYPE os.print(TRUETYPE
+ HTMLtoLaTeXBackEnd.fixText(params[j].parameterName()) + HTMLtoLaTeXBackEnd.fixText(params[j].parameterName())
+ "}" + " -- "); + "}" + " -- ");
printTags(params[j].inlineTags()); printTags(mem.containingPackage(), params[j].inlineTags());
os.println("}"); os.println("}");
} }
os.println(" \\end{itemize}"); os.println(" \\end{itemize}");
@@ -1738,7 +1738,7 @@ public class TeXDoclet extends Doclet {
} }
os.println("\\item{" + BOLD + " Returns} -- "); os.println("\\item{" + BOLD + " Returns} -- ");
for (int j = 0; j < ret.length; ++j) { for (int j = 0; j < ret.length; ++j) {
printTags(ret[j].inlineTags()); printTags(mem.containingPackage(), ret[j].inlineTags());
os.println(" "); os.println(" ");
} }
os.println("}%end item"); os.println("}%end item");
@@ -1763,7 +1763,7 @@ public class TeXDoclet extends Doclet {
} }
os.print(" \\item{\\vskip -.6ex " + TRUETYPE os.print(" \\item{\\vskip -.6ex " + TRUETYPE
+ HTMLtoLaTeXBackEnd.fixText(ename) + "} -- "); + HTMLtoLaTeXBackEnd.fixText(ename) + "} -- ");
printTags(excp[j].inlineTags()); printTags(mem.containingPackage(), excp[j].inlineTags());
os.println("}"); os.println("}");
} }
os.println(" \\end{itemize}"); os.println(" \\end{itemize}");
@@ -1975,7 +1975,7 @@ public class TeXDoclet extends Doclet {
/** /**
* Prints a sequence of tags obtained from e.g. com.sun.javadoc.Doc.tags(). * Prints a sequence of tags obtained from e.g. com.sun.javadoc.Doc.tags().
*/ */
static void printTags(Tag[] tags) { static void printTags(PackageDoc this_package, Tag[] tags) {
String htmlstr = new String(); String htmlstr = new String();
for (int i = 0; i < tags.length; i++) { for (int i = 0; i < tags.length; i++) {
@@ -1983,21 +1983,28 @@ public class TeXDoclet extends Doclet {
SeeTag link = (SeeTag) tags[i]; SeeTag link = (SeeTag) tags[i];
String linkstr = ""; String linkstr = "";
String label;
if (link.referencedMember() != null) { if (link.referencedMember() != null) {
MemberDoc member = link.referencedMember();
linkstr = member.qualifiedName();
label = classRelativeIdentifier(member.containingClass(), member.name());
if (link.referencedMember() instanceof ExecutableMemberDoc) { if (link.referencedMember() instanceof ExecutableMemberDoc) {
ExecutableMemberDoc m = (ExecutableMemberDoc) link // If the member is a method, append the method signature
.referencedMember(); ExecutableMemberDoc m = (ExecutableMemberDoc) member;
linkstr = m.qualifiedName() + m.signature(); linkstr += m.signature();
} else { label += m.flatSignature();
linkstr = link.referencedMember().qualifiedName();
} }
} else if (link.referencedClass() != null) { } else if (link.referencedClass() != null) {
linkstr = link.referencedClass().qualifiedName(); linkstr = link.referencedClass().qualifiedName();
label = packageRelativIdentifier(this_package, link.referencedClass().name());
} else if (link.referencedPackage() != null) { } else if (link.referencedPackage() != null) {
linkstr = link.referencedPackage().name(); linkstr = link.referencedPackage().name();
label = linkstr;
} else {
label = "";
} }
if (linkstr.equals("")) { if (linkstr.isEmpty()) {
htmlstr += link.text(); htmlstr += link.text();
} else { } else {
// Encapsulate the link in a "TEX" tag and let // Encapsulate the link in a "TEX" tag and let
@@ -2007,7 +2014,10 @@ public class TeXDoclet extends Doclet {
htmlstr += "\\hyperlink{" htmlstr += "\\hyperlink{"
+ refName(makeRefKey(linkstr)) + "}{"; + refName(makeRefKey(linkstr)) + "}{";
} }
htmlstr += HTMLtoLaTeXBackEnd.fixText(link.label()); if (!link.label().isEmpty()) {
label = link.label();
}
htmlstr += HTMLtoLaTeXBackEnd.fixText(label);
if (hyperref) { if (hyperref) {
htmlstr += "}"; htmlstr += "}";
} }
@@ -2059,13 +2069,34 @@ public class TeXDoclet extends Doclet {
* The identifier to be made relative. * The identifier to be made relative.
*/ */
static String packageRelativIdentifier(PackageDoc doc, String str) { static String packageRelativIdentifier(PackageDoc doc, String str) {
if (str.startsWith(doc.name() + ".")) { if (doc != null && str.startsWith(doc.name() + ".")) {
return str.substring(doc.name().length() + 1); return str.substring(doc.name().length() + 1);
} else { } else {
return str; return str;
} }
} }
/**
* Returns a class relative identifier.
*
* @param doc
* The class the identifier should be relative to.
* @param str
* The identifier to be made relative.
*/
static String classRelativeIdentifier(ClassDoc doc, String str) {
if (str.startsWith(doc.name())) {
// This is a member or a method of the same class
return str.substring(doc.name().length() + 1);
} else if (str.startsWith(doc.containingPackage().name())) {
// This is a member or a method of a different class but from the same package
return str.substring(doc.name().length() + 1);
} else {
// This is a member or a method from a different package, cannot be simplified
return str;
}
}
/** /**
* Prints a "see also" tag. * Prints a "see also" tag.
* *