001: /*
002: * Author: Chris Seguin
003: *
004: * This software has been developed under the copyleft
005: * rules of the GNU General Public License. Please
006: * consult the GNU General Public License for more
007: * details about use and distribution of this software.
008: */
009: package org.acm.seguin.print.text;
010:
011: import java.awt.Color;
012: import java.awt.Font;
013: import java.awt.FontMetrics;
014: import java.awt.Graphics;
015: import org.acm.seguin.util.TextFormatter;
016:
017: /**
018: * Prints a single line
019: *
020: *@author Chris Seguin
021: */
022: public class PropertyLinePrinter extends LinePrinter {
023: private Font lineNo;
024: private Font normal;
025: private Font keyword;
026: private Font comment;
027:
028: /**
029: * Constructor for the PropertyLinePrinter object
030: */
031: public PropertyLinePrinter() {
032: normal = null;
033: keyword = null;
034: comment = null;
035: lineNo = null;
036: }
037:
038: /**
039: * Sets the FontSize attribute of the LinePrinter object
040: *
041: *@param value The new FontSize value
042: */
043: public void setFontSize(int value) {
044: if (fontSize != value) {
045: super .setFontSize(value);
046:
047: normal = null;
048: keyword = null;
049: comment = null;
050: lineNo = null;
051: }
052: }
053:
054: /**
055: * Initializes the graphics object to begin printing
056: *
057: *@param g the graphics object
058: */
059: public void init(Graphics g) {
060: if (normal == null) {
061: normal = new Font("SansSerif", Font.PLAIN, fontSize);
062: keyword = new Font("SansSerif", Font.BOLD, fontSize);
063: comment = new Font("SansSerif", Font.ITALIC, fontSize);
064: lineNo = new Font("Monospaced", Font.PLAIN, fontSize);
065: }
066: g.setColor(Color.black);
067: g.setFont(normal);
068: }
069:
070: /**
071: * Prints the line
072: *
073: *@param g The graphics device
074: *@param line The string to print
075: *@param x The x location on the graphics device
076: *@param y The y location on the graphics device
077: *@param set The set of lines
078: *@param index The line we are printing
079: */
080: public void print(Graphics g, String line, int x, int y,
081: LineSet set, int index) {
082: String output = TextFormatter.rightJustifyNumber(index + 1, 5)
083: + ": ";
084: g.setFont(lineNo);
085: FontMetrics fm = g.getFontMetrics();
086: g.drawString(output, x, y);
087:
088: x = x + fm.stringWidth(output);
089:
090: // Decide next part
091: if (line.length() < 1) {
092: return;
093: }
094:
095: if (line.charAt(0) == '#') {
096: g.setFont(comment);
097: g.drawString(line, x, y);
098: return;
099: }
100:
101: int equalsIndex = line.indexOf('=');
102: if (equalsIndex > 0) {
103: String keywordString = line.substring(0, equalsIndex);
104: String valueString = line.substring(equalsIndex + 1);
105:
106: g.setFont(keyword);
107: g.drawString(keywordString, x, y);
108: fm = g.getFontMetrics();
109: x = x + fm.stringWidth(keywordString);
110:
111: g.setColor(Color.gray);
112: g.drawString("=", x, y);
113: x = x + fm.stringWidth("=");
114:
115: g.setFont(normal);
116: g.setColor(Color.black);
117: g.drawString(valueString, x, y);
118: return;
119: }
120:
121: g.drawString(line, x, y);
122: }
123: }
|