package example.helloworld; import org.seamless.xhtml.XHTML; import example.util.DocletTest; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class CustomizingAnchorOptions extends DocletTest { /** * Disabling Javadoc titles * <p> * When Lemma reads your Javadoc comment, it will use the "first sentence" (as defined by Javadoc) of the * comment as the title of the citation section. For example, {@link HelloWorld the HelloWorld class shown previously} * has the first sentence title "Just print a hello.". Lemma will remove the period at the end of the first * sentence automatically. You can disable this behavior with the {@code read-title} option: * </p> * <a class="citation" href="example/helloworld/example02_input.xhtml" style="include: LABEL">Citation</a> * <p> * Your Javadoc comment is now cited as it is, with no special treatment of the "first sentence". Alternatively, * you can use the {@code title} attribute of the anchor to override any "first sentence" title: * </p> * <a class="citation" href="example/helloworld/example03_input.xhtml" style="include: LABEL">Citation</a> */ @Test public void javadocCustomTitle() throws Exception { XHTML output = getTemplatePipeline().execute( parseDocument("example/helloworld/example02_input.xhtml") ); assertEquals( getParser().print(output), getContent("example/helloworld/example02_output.xhtml") ); output = getTemplatePipeline().execute( parseDocument("example/helloworld/example03_input.xhtml") ); assertEquals( getParser().print(output), getContent("example/helloworld/example03_output.xhtml") ); } /** * Including and excluding Javacode fragments * <p> * A {@code javacode://} citation which references a Java package, class, or method, will by default * include all lines of code of that package, class, or method. Very often you only want a fragment of the * code lines cited. First, you have to declare the fragments with line comments in your Java source file: * </p> * <a class="citation" href="javacode://example.helloworld.HelloWorld" id="javacode_HelloWorld_raw" style="clean-labels: false">Citation</a> * <p> * Within this Java source file, three fragments have been declared. The first two fragment are multi-line block * fragments, the third is a single-line fragment. The rules are: A line comment starting with a {@code // DOC:} prefix marks * the beginning of a fragment. The {@code DOC:} prefix is followed by a <em>fragment label</em>, which has to * match the following regular expression: {@code [A-Z_-]+[0-9]*} If the label is not repeated in a subsequent * line, the fragment only includes a single line. If the label is repeated in a subsequent line, all lines in * between and including the labeled lines are considered part of the same multi-line fragment block. A fragment * label comment can be placed in an empty line or at the end of a line, after content you wish to include in * the fragment. * </p> * <p> * You can now use the labeled fragments to selectively include and/or exclude content in citations: * </p> * <a class="citation" href="example/helloworld/example04_input.xhtml" style="include: LABEL">Citation</a> * <p> * This citation only includes the two named fragments, producing the following output: * </p> * <a class="citation" href="example/helloworld/example04_output.xhtml" style="include: LABEL;">Citation</a> * <p> * Exclusion of fragments occurs after inclusion, as the following example demonstrates: * </p> * <a class="citation" href="example/helloworld/example05_input.xhtml" style="include: LABEL">Citation</a> * <p> * The excluded fragment is now missing from the output: * </p> * <a class="citation" href="example/helloworld/example05_output.xhtml" style="include: LABEL;">Citation</a> */ @Test public void javacodeFragments() throws Exception { XHTML output = getTemplatePipeline().execute( parseDocument("example/helloworld/example04_input.xhtml") ); assertEquals( getParser().print(output), getContent("example/helloworld/example04_output.xhtml") ); output = getTemplatePipeline().execute( parseDocument("example/helloworld/example05_input.xhtml") ); assertEquals( getParser().print(output), getContent("example/helloworld/example05_output.xhtml") ); } /** * Removing fragment labels * <p> * Lemma will automatically remove any fragment labels - the specially formatted comments - from cited * content. It is sometimes useful, for example to document the actual usage of Lemma, to keep the * fragment labels in a piece of cited source code. For example, given the same {@code HelloWorld} class marked * with three fragments from the previous example, the following citation would preserve the labels: * </p> * <a class="citation" href="example/helloworld/example06_input.xhtml" style="include: LABEL">Citation</a> * <p> * This produces the following output: * </p> * <a class="citation" href="example/helloworld/example06_output.xhtml" style="include: LABEL;">Citation</a> * <p> * As a special case, you can also preserve only the fragment labels within a fragment block, and still * remove the labels that defined the actual fragment block: * </p> * <a class="citation" href="example/helloworld/example07_input.xhtml" style="include: LABEL">Citation</a> * <a class="citation" href="example/helloworld/example07_output.xhtml" style="include: LABEL;">Citation</a> */ @Test public void javacodeCleanLabels() throws Exception { XHTML output = getTemplatePipeline().execute( parseDocument("example/helloworld/example06_input.xhtml") ); assertEquals( getParser().print(output), getContent("example/helloworld/example06_output.xhtml") ); output = getTemplatePipeline().execute( parseDocument("example/helloworld/example07_input.xhtml") ); assertEquals( getParser().print(output), getContent("example/helloworld/example07_output.xhtml") ); } }