📄 verbatim.java
字号:
LineCountEmitter lcEmitter = new LineCountEmitter(); rtf.replay(lcEmitter); int numLines = lcEmitter.lineCount(); int listingModulus = numLines < modulus ? 1 : modulus; double log10numLines = Math.log(numLines) / Math.log(10); int listingWidth = width < log10numLines+1 ? (int) Math.floor(log10numLines + 1) : width; Controller controller = context.getController(); NamePool namePool = controller.getNamePool(); NumberLinesEmitter nlEmitter = new NumberLinesEmitter(controller, namePool, startinglinenumber, listingModulus, listingWidth, separator, foStylesheet); rtf.replay(nlEmitter); return nlEmitter.getResultTreeFragment(); } catch (TransformerException e) { // This "can't" happen. System.out.println("Transformer Exception in numberLines"); return rtf; } } /** * <p>Setup the parameters associated with callouts</p> * * <p>This method queries the stylesheet for the variables * associated with line numbering. It is called automatically before * callouts are processed. The context is used to retrieve the values, * this allows templates to redefine these variables.</p> * * <p>The following variables are queried. If the variables do not * exist, builtin defaults will be used (but you may also get a bunch * of messages from the Java interpreter).</p> * * <dl> * <dt><code>callout.graphics</code></dt> * <dd>Are we using callout graphics? A value of 0 or "" is false, * any other value is true. If callout graphics are not used, the * parameters related to graphis are not queried.</dd> * <dt><code>callout.graphics.path</code></dt> * <dd>Specifies the path to callout graphics.</dd> * <dt><code>callout.graphics.extension</code></dt> * <dd>Specifies the extension ot use for callout graphics.</dd> * <dt><code>callout.graphics.number.limit</code></dt> * <dd>Identifies the largest number that can be represented as a * graphic. Larger callout numbers will be represented using text.</dd> * <dt><code>callout.defaultcolumn</code></dt> * <dd>Specifies the default column for callout bullets that do not * specify a column.</dd> * <dt><code>stylesheet.result.type</code></dt> * <dd>Specifies the stylesheet result type. The value is either 'fo' * (for XSL Formatting Objects) or it isn't. (builtin default: html).</dd> * </dl> * * @param context The current stylesheet context * */ private static void setupCallouts(Context context) { NamePool namePool = context.getController().getNamePool(); boolean useGraphics = false; boolean useUnicode = false; int unicodeStart = 49; int unicodeMax = 0; String unicodeFont = ""; // Hardcoded defaults defaultColumn = 60; graphicsPath = null; graphicsExt = null; graphicsMax = 0; foStylesheet = false; calloutsSetup = true; Value variable = null; String varString = null; // Get the stylesheet type varString = getVariable(context, "stylesheet.result.type"); foStylesheet = (varString.equals("fo")); // Get the default column varString = getVariable(context, "callout.defaultcolumn"); try { defaultColumn = Integer.parseInt(varString); } catch (NumberFormatException nfe) { System.out.println("$callout.defaultcolumn is not a number: " + varString); } // Use graphics at all? varString = getVariable(context, "callout.graphics"); useGraphics = !(varString.equals("0") || varString.equals("")); // Use unicode at all? varString = getVariable(context, "callout.unicode"); useUnicode = !(varString.equals("0") || varString.equals("")); if (useGraphics) { // Get the graphics path varString = getVariable(context, "callout.graphics.path"); graphicsPath = varString; // Get the graphics extension varString = getVariable(context, "callout.graphics.extension"); graphicsExt = varString; // Get the number limit varString = getVariable(context, "callout.graphics.number.limit"); try { graphicsMax = Integer.parseInt(varString); } catch (NumberFormatException nfe) { System.out.println("$callout.graphics.number.limit is not a number: " + varString); graphicsMax = 0; } fCallout = new FormatGraphicCallout(namePool, graphicsPath, graphicsExt, graphicsMax, foStylesheet); } else if (useUnicode) { // Get the starting character varString = getVariable(context, "callout.unicode.start.character"); try { unicodeStart = Integer.parseInt(varString); } catch (NumberFormatException nfe) { System.out.println("$callout.unicode.start.character is not a number: " + varString); unicodeStart = 48; } // Get the number limit varString = getVariable(context, "callout.unicode.number.limit"); try { unicodeMax = Integer.parseInt(varString); } catch (NumberFormatException nfe) { System.out.println("$callout.unicode.number.limit is not a number: " + varString); unicodeStart = 0; } // Get the font unicodeFont = getVariable(context, "callout.unicode.font"); if (unicodeFont == null) { unicodeFont = ""; } fCallout = new FormatUnicodeCallout(namePool, unicodeFont, unicodeStart, unicodeMax, foStylesheet); } else { fCallout = new FormatTextCallout(namePool, foStylesheet); } } /** * <p>Insert text callouts into a verbatim environment.</p> * * <p>This method examines the <tt>areaset</tt> and <tt>area</tt> elements * in the supplied <tt>areaspec</tt> and decorates the supplied * result tree fragment with appropriate callout markers.</p> * * <p>If a <tt>label</tt> attribute is supplied on an <tt>area</tt>, * its content will be used for the label, otherwise the callout * number will be used, surrounded by parenthesis. Callout numbers may * also be represented as graphics. Callouts are * numbered in document order. All of the <tt>area</tt>s in an * <tt>areaset</tt> get the same number.</p> * * <p>Only the <tt>linecolumn</tt> and <tt>linerange</tt> units are * supported. If no unit is specifed, <tt>linecolumn</tt> is assumed. * If only a line is specified, the callout decoration appears in * the defaultColumn. Lines will be padded with blanks to reach the * necessary column, but callouts that are located beyond the last * line of the verbatim environment will be ignored.</p> * * <p>Callouts are inserted before the character at the line/column * where they are to occur.</p> * * <p>If graphical callouts are used, and the callout number is less * than or equal to the $callout.graphics.number.limit, the following image * will be generated for HTML: * * <pre> * <img src="$callout.graphics.path/999$callout.graphics.ext" * alt="conumber"> * </pre> * * If the $stylesheet.result.type is 'fo', the following image will * be generated: * * <pre> * <fo:external-graphic src="$callout.graphics.path/999$callout.graphics.ext"/> * </pre> * * <p>If the callout number exceeds $callout.graphics.number.limit, * the callout will be the callout number surrounded by * parenthesis.</p> * * @param context The stylesheet context. * @param areaspecNodeList The source node set that contains the areaspec. * @param rtf_ns The result tree fragment of the verbatim environment. * * @return The modified result tree fragment. */ public static NodeSetValue insertCallouts (Context context, NodeList areaspecNodeList, NodeSetValue rtf_ns) { FragmentValue rtf = (FragmentValue) rtf_ns; setupCallouts(context); try { Controller controller = context.getController(); NamePool namePool = controller.getNamePool(); CalloutEmitter cEmitter = new CalloutEmitter(controller, namePool, defaultColumn, foStylesheet, fCallout); cEmitter.setupCallouts(areaspecNodeList); rtf.replay(cEmitter); return cEmitter.getResultTreeFragment(); } catch (TransformerException e) { // This "can't" happen. System.out.println("Transformer Exception in insertCallouts"); return rtf; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -