Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Java HTML Tidy - JTidy
* HTML parser and pretty printer
*
* Copyright (c) 1998-2000 World Wide Web Consortium (Massachusetts
* Institute of Technology, Institut National de Recherche en
* Informatique et en Automatique, Keio University). All Rights
* Reserved.
*
* Contributing Author(s):
*
* Dave Raggett
* Andy Quick (translation to Java)
* Gary L Peskin (Java development)
* Sami Lempinen (release management)
* Fabrizio Giustina
*
* The contributing author(s) would like to thank all those who
* helped with testing, bug fixes, and patience. This wouldn't
* have been possible without all of you.
*
* COPYRIGHT NOTICE:
*
* This software and documentation is provided "as is," and
* the copyright holders and contributing author(s) make no
* representations or warranties, express or implied, including
* but not limited to, warranties of merchantability or fitness
* for any particular purpose or that the use of the software or
* documentation will not infringe any third party patents,
* copyrights, trademarks or other rights.
*
* The copyright holders and contributing author(s) will not be
* liable for any direct, indirect, special or consequential damages
* arising out of any use of the software or documentation, even if
* advised of the possibility of such damage.
*
* Permission is hereby granted to use, copy, modify, and distribute
* this source code, or portions hereof, documentation and executables,
* for any purpose, without fee, subject to the following restrictions:
*
* 1. The origin of this source code must not be misrepresented.
* 2. Altered versions must be plainly marked as such and must
* not be misrepresented as being the original source.
* 3. This Copyright notice may not be removed or altered from any
* source or altered source distribution.
*
* The copyright holders and contributing author(s) specifically
* permit, without fee, and encourage the use of this source code
* as a component for supporting the Hypertext Markup Language in
* commercial products. If you use this source code in a product,
* acknowledgment is not required but would be appreciated.
*
*/
package org.w3c.tidy5;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.io.Writer;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* Read configuration file and manage configuration properties. Configuration files associate a property name with a
* value. The format is that of a Java .properties file.
* @author Dave Raggett [email protected]
* @author Andy Quick [email protected] (translation to Java)
* @author Fabrizio Giustina
* @version $Revision: 817 $ ($Author: steffenyount $)
*/
public class Configuration implements Serializable
{
/**
* character encoding = RAW.
* @deprecated use Tidy.setRawOut(true) for raw output
*/
public static final int RAW = 0;
/**
* character encoding = ASCII.
* @deprecated
*/
public static final int ASCII = 1;
/**
* character encoding = LATIN1.
* @deprecated
*/
public static final int LATIN1 = 2;
/**
* character encoding = UTF8.
* @deprecated
*/
public static final int UTF8 = 3;
/**
* character encoding = ISO2022.
* @deprecated
*/
public static final int ISO2022 = 4;
/**
* character encoding = MACROMAN.
* @deprecated
*/
public static final int MACROMAN = 5;
/**
* character encoding = UTF16LE.
* @deprecated
*/
public static final int UTF16LE = 6;
/**
* character encoding = UTF16BE.
* @deprecated
*/
public static final int UTF16BE = 7;
/**
* character encoding = UTF16.
* @deprecated
*/
public static final int UTF16 = 8;
/**
* character encoding = WIN1252.
* @deprecated
*/
public static final int WIN1252 = 9;
/**
* character encoding = BIG5.
* @deprecated
*/
public static final int BIG5 = 10;
/**
* character encoding = SHIFTJIS.
* @deprecated
*/
public static final int SHIFTJIS = 11;
/**
* Convert from deprecated tidy encoding constant to standard java encoding name.
*/
private final String[] ENCODING_NAMES = new String[]{"raw", // rawOut, it will not be mapped to a java encoding
"ASCII",
"ISO8859_1",
"UTF8",
"JIS",
"MacRoman",
"UnicodeLittle",
"UnicodeBig",
"Unicode",
"Cp1252",
"Big5",
"SJIS"};
/**
* treatment of doctype: omit.
* @todo should be an enumeration DocTypeMode
*/
public static final int DOCTYPE_OMIT = 0;
/**
* treatment of doctype: auto.
*/
public static final int DOCTYPE_AUTO = 1;
/**
* treatment of doctype: strict.
*/
public static final int DOCTYPE_STRICT = 2;
/**
* treatment of doctype: loose.
*/
public static final int DOCTYPE_LOOSE = 3;
/**
* treatment of doctype: user.
*/
public static final int DOCTYPE_USER = 4;
/**
* Keep last duplicate attribute.
* @todo should be an enumeration DupAttrMode
*/
public static final int KEEP_LAST = 0;
/**
* Keep first duplicate attribute.
*/
public static final int KEEP_FIRST = 1;
/**
* Map containg all the valid configuration options and the related parser. Tag entry contains String(option
* name)-Flag instance.
*/
private static final Map OPTIONS = new HashMap();
/**
* serial version UID for this class.
*/
private static final long serialVersionUID = -4955155037138560842L;
static
{
addConfigOption(new Flag("indent-spaces", "spaces", ParsePropertyImpl.INT));
addConfigOption(new Flag("wrap", "wraplen", ParsePropertyImpl.INT));
addConfigOption(new Flag("show-errors", "showErrors", ParsePropertyImpl.INT));
addConfigOption(new Flag("tab-size", "tabsize", ParsePropertyImpl.INT));
addConfigOption(new Flag("wrap-attributes", "wrapAttVals", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("wrap-script-literals", "wrapScriptlets", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("wrap-sections", "wrapSection", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("wrap-asp", "wrapAsp", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("wrap-jste", "wrapJste", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("wrap-php", "wrapPhp", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("literal-attributes", "literalAttribs", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("show-body-only", "bodyOnly", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("fix-uri", "fixUri", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("lower-literals", "lowerLiterals", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("hide-comments", "hideComments", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("indent-cdata", "indentCdata", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("force-output", "forceOutput", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("ascii-chars", "asciiChars", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("join-classes", "joinClasses", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("join-styles", "joinStyles", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("escape-cdata", "escapeCdata", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("replace-color", "replaceColor", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("quiet", "quiet", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("tidy-mark", "tidyMark", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("indent-attributes", "indentAttributes", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("hide-endtags", "hideEndTags", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("input-xml", "xmlTags", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("output-xml", "xmlOut", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("output-html", "htmlOut", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("output-xhtml", "xHTML", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("add-xml-pi", "xmlPi", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("add-xml-decl", "xmlPi", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("assume-xml-procins", "xmlPIs", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("uppercase-tags", "upperCaseTags", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("uppercase-attributes", "upperCaseAttrs", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("bare", "makeBare", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("clean", "makeClean", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("logical-emphasis", "logicalEmphasis", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("word-2000", "word2000", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("drop-empty-paras", "dropEmptyParas", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("drop-font-tags", "dropFontTags", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("drop-proprietary-attributes", "dropProprietaryAttributes", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("enclose-text", "encloseBodyText", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("enclose-block-text", "encloseBlockText", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("add-xml-space", "xmlSpace", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("fix-bad-comments", "fixComments", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("split", "burstSlides", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("break-before-br", "breakBeforeBR", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("numeric-entities", "numEntities", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("quote-marks", "quoteMarks", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("quote-nbsp", "quoteNbsp", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("quote-ampersand", "quoteAmpersand", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("write-back", "writeback", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("keep-time", "keepFileTimes", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("show-warnings", "showWarnings", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("ncr", "ncr", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("fix-backslash", "fixBackslash", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("gnu-emacs", "emacs", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("only-errors", "onlyErrors", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("output-raw", "rawOut", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("trim-empty-elements", "trimEmpty", ParsePropertyImpl.BOOL));
addConfigOption(new Flag("markup", "onlyErrors", ParsePropertyImpl.INVBOOL));
addConfigOption(new Flag("char-encoding", null, ParsePropertyImpl.CHAR_ENCODING));
addConfigOption(new Flag("input-encoding", null, ParsePropertyImpl.CHAR_ENCODING));
addConfigOption(new Flag("output-encoding", null, ParsePropertyImpl.CHAR_ENCODING));
addConfigOption(new Flag("error-file", "errfile", ParsePropertyImpl.NAME));
addConfigOption(new Flag("slide-style", "slidestyle", ParsePropertyImpl.NAME));
addConfigOption(new Flag("language", "language", ParsePropertyImpl.NAME));
addConfigOption(new Flag("new-inline-tags", null, ParsePropertyImpl.TAGNAMES));
addConfigOption(new Flag("new-blocklevel-tags", null, ParsePropertyImpl.TAGNAMES));
addConfigOption(new Flag("new-empty-tags", null, ParsePropertyImpl.TAGNAMES));
addConfigOption(new Flag("new-pre-tags", null, ParsePropertyImpl.TAGNAMES));
addConfigOption(new Flag("doctype", "docTypeStr", ParsePropertyImpl.DOCTYPE));
addConfigOption(new Flag("repeated-attributes", "duplicateAttrs", ParsePropertyImpl.REPEATED_ATTRIBUTES));
addConfigOption(new Flag("alt-text", "altText", ParsePropertyImpl.STRING));
addConfigOption(new Flag("indent", "indentContent", ParsePropertyImpl.INDENT));
addConfigOption(new Flag("css-prefix", "cssPrefix", ParsePropertyImpl.CSS1SELECTOR));
addConfigOption(new Flag("newline", null, ParsePropertyImpl.NEWLINE));
}
/**
* default indentation.
*/
protected int spaces = 2;
/**
* default wrap margin (68).
*/
protected int wraplen = 68;
/**
* default tab size (8).
*/
protected int tabsize = 8;
/**
* see doctype property.
*/
protected int docTypeMode = DOCTYPE_AUTO;
/**
* Keep first or last duplicate attribute.
*/
protected int duplicateAttrs = KEEP_LAST;
/**
* default text for alt attribute.
*/
protected String altText;
/**
* style sheet for slides.
* @deprecated does nothing
*/
protected String slidestyle;
/**
* RJ language property.
*/
protected String language; // #431953
/**
* user specified doctype.
*/
protected String docTypeStr;
/**
* file name to write errors to.
*/
protected String errfile;
/**
* if true then output tidied markup.
*/
protected boolean writeback;
/**
* if true normal output is suppressed.
*/
protected boolean onlyErrors;
/**
* however errors are always shown.
*/
protected boolean showWarnings = true;
/**
* no 'Parsing X', guessed DTD or summary.
*/
protected boolean quiet;
/**
* indent content of appropriate tags.
*/
protected boolean indentContent;
/**
* does text/block level content effect indentation.
*/
protected boolean smartIndent;
/**
* suppress optional end tags.
*/
protected boolean hideEndTags;
/**
* treat input as XML.
*/
protected boolean xmlTags;
/**
* create output as XML.
*/
protected boolean xmlOut;
/**
* output extensible HTML.
*/
protected boolean xHTML;
/**
* output plain-old HTML, even for XHTML input. Yes means set explicitly.
*/
protected boolean htmlOut;
/**
* add <?xml?> for XML docs.
*/
protected boolean xmlPi;
/**
* output tags in upper not lower case.
*/
protected boolean upperCaseTags;
/**
* output attributes in upper not lower case.
*/
protected boolean upperCaseAttrs;
/**
* remove presentational clutter.
*/
protected boolean makeClean;
/**
* Make bare HTML: remove Microsoft cruft.
*/
protected boolean makeBare;
/**
* replace i by em and b by strong.
*/
protected boolean logicalEmphasis;
/**
* discard presentation tags.
*/
protected boolean dropFontTags;
/**
* discard proprietary attributes.
*/
protected boolean dropProprietaryAttributes;
/**
* discard empty p elements.
*/
protected boolean dropEmptyParas = true;
/**
* fix comments with adjacent hyphens.
*/
protected boolean fixComments = true;
/**
* trim empty elements.
*/
protected boolean trimEmpty = true;
/**
* o/p newline before br or not?
*/
protected boolean breakBeforeBR;
/**
* create slides on each h2 element.
*/
protected boolean burstSlides;
/**
* use numeric entities.
*/
protected boolean numEntities;
/**
* output " marks as ".
*/
protected boolean quoteMarks;
/**
* output non-breaking space as entity.
*/
protected boolean quoteNbsp = true;
/**
* output naked ampersand as &.
*/
protected boolean quoteAmpersand = true;
/**
* wrap within attribute values.
*/
protected boolean wrapAttVals;
/**
* wrap within JavaScript string literals.
*/
protected boolean wrapScriptlets;
/**
* wrap within CDATA section tags.
*/
protected boolean wrapSection = true;
/**
* wrap within ASP pseudo elements.
*/
protected boolean wrapAsp = true;
/**
* wrap within JSTE pseudo elements.
*/
protected boolean wrapJste = true;
/**
* wrap within PHP pseudo elements.
*/
protected boolean wrapPhp = true;
/**
* fix URLs by replacing \ with /.
*/
protected boolean fixBackslash = true;
/**
* newline+indent before each attribute.
*/
protected boolean indentAttributes;
/**
* If set to yes PIs must end with ?>.
*/
protected boolean xmlPIs;
/**
* if set to yes adds xml:space attr as needed.
*/
protected boolean xmlSpace;
/**
* if yes text at body is wrapped in p's.
*/
protected boolean encloseBodyText;
/**
* if yes text in blocks is wrapped in p's.
*/
protected boolean encloseBlockText;
/**
* if yes last modied time is preserved.
*/
protected boolean keepFileTimes = true;
/**
* draconian cleaning for Word2000.
*/
protected boolean word2000;
/**
* add meta element indicating tidied doc.
*/
protected boolean tidyMark = true;
/**
* if true format error output for GNU Emacs.
*/
protected boolean emacs;
/**
* if true attributes may use newlines.
*/
protected boolean literalAttribs;
/**
* output BODY content only.
*/
protected boolean bodyOnly;
/**
* properly escape URLs.
*/
protected boolean fixUri = true;
/**
* folds known attribute values to lower case.
*/
protected boolean lowerLiterals = true;
/**
* replace hex color attribute values with names.
*/
protected boolean replaceColor;
/**
* hides all (real) comments in output.
*/
protected boolean hideComments;
/**
* indent CDATA sections.
*/
protected boolean indentCdata;
/**
* output document even if errors were found.
*/
protected boolean forceOutput;
/**
* number of errors to put out.
*/
protected int showErrors = 6;
/**
* convert quotes and dashes to nearest ASCII char.
*/
protected boolean asciiChars = true;
/**
* join multiple class attributes.
*/
protected boolean joinClasses;
/**
* join multiple style attributes.
*/
protected boolean joinStyles = true;
/**
* replace CDATA sections with escaped text.
*/
protected boolean escapeCdata = true;
/**
* allow numeric character references.
*/
protected boolean ncr = true; // #431953
/**
* CSS class naming for -clean option.
*/
protected String cssPrefix;
/**
* char encoding used when replacing illegal SGML chars, regardless of specified encoding.
*/
protected String replacementCharEncoding = "WIN1252"; // by default
/**
* TagTable associated with this Configuration.
*/
protected TagTable tt;
/**
* Report instance. Used for messages.
*/
protected Report report;
/**
* track what types of tags user has defined to eliminate unnecessary searches.
*/
protected int definedTags;
/**
* bytes for the newline marker.
*/
protected char[] newline = (System.getProperty("line.separator")).toCharArray();
/**
* Input character encoding (defaults to "ISO8859_1").
*/
private String inCharEncoding = "ISO8859_1";
/**
* Output character encoding (defaults to "ASCII").
*/
private String outCharEncoding = "ASCII";
/**
* Avoid mapping values > 127 to entities.
*/
protected boolean rawOut;
/**
* configuration properties.
*/
private transient Properties properties = new Properties();
/**
* Instantiates a new Configuration. This method should be called by Tidy only.
* @param report Report instance
*/
protected Configuration(Report report)
{
this.report = report;
}
/**
* adds a config option to the map.
* @param flag configuration options added
*/
private static void addConfigOption(Flag flag)
{
OPTIONS.put(flag.getName(), flag);
}
/**
* adds configuration Properties.
* @param p Properties
*/
public void addProps(Properties p)
{
Enumeration propEnum = p.propertyNames();
while (propEnum.hasMoreElements())
{
String key = (String) propEnum.nextElement();
String value = p.getProperty(key);
properties.put(key, value);
}
parseProps();
}
/**
* Parses a property file.
* @param filename file name
*/
public void parseFile(String filename)
{
try
{
properties.load(new FileInputStream(filename));
}
catch (IOException e)
{
System.err.println(filename + " " + e.toString());
return;
}
parseProps();
}
/**
* Is the given String a valid configuration flag?
* @param name configuration parameter name
* @return true if the given String is a valid config option
*/
public static boolean isKnownOption(String name)
{
return name != null && OPTIONS.containsKey(name);
}
/**
* Parses the configuration properties file.
*/
private void parseProps()
{
Iterator iterator = properties.keySet().iterator();
while (iterator.hasNext())
{
String key = (String) iterator.next();
Flag flag = (Flag) OPTIONS.get(key);
if (flag == null)
{
report.unknownOption(key);
continue;
}
String stringValue = properties.getProperty(key);
Object value = flag.getParser().parse(stringValue, key, this);
if (flag.getLocation() != null)
{
try
{
flag.getLocation().set(this, value);
}
catch (IllegalArgumentException e)
{
throw new RuntimeException("IllegalArgumentException during config initialization for field "
+ key
+ "with value ["
+ value
+ "]: "
+ e.getMessage());
}
catch (IllegalAccessException e)
{
throw new RuntimeException("IllegalArgumentException during config initialization for field "
+ key
+ "with value ["
+ value
+ "]: "
+ e.getMessage());
}
}
}
}
/**
* Ensure that config is self consistent.
*/
public void adjust()
{
if (encloseBlockText)
{
encloseBodyText = true;
}
// avoid the need to set IndentContent when SmartIndent is set
if (smartIndent)
{
indentContent = true;
}
// disable wrapping
if (wraplen == 0)
{
wraplen = 0x7FFFFFFF;
}
// Word 2000 needs o:p to be declared as inline
if (word2000)
{
definedTags |= Dict.TAGTYPE_INLINE;
tt.defineTag(Dict.TAGTYPE_INLINE, "o:p");
}
// #480701 disable XHTML output flag if both output-xhtml and xml are set
if (xmlTags)
{
xHTML = false;
}
// XHTML is written in lower case
if (xHTML)
{
xmlOut = true;
upperCaseTags = false;
upperCaseAttrs = false;
}
// if XML in, then XML out
if (xmlTags)
{
xmlOut = true;
xmlPIs = true;
}
// #427837 - fix by Dave Raggett 02 Jun 01
// generate if the output character encoding is Latin-1 etc.
if (!"UTF8".equals(getOutCharEncodingName()) && !"ASCII".equals(getOutCharEncodingName()) && xmlOut)
{
xmlPi = true;
}
// XML requires end tags
if (xmlOut)
{
quoteAmpersand = true;
hideEndTags = false;
}
}
/**
* prints available configuration options.
* @param errout where to write
* @param showActualConfiguration print actual configuration values
*/
public void printConfigOptions(Writer errout, boolean showActualConfiguration)
{
String pad = " ";
try
{
errout.write("\nConfiguration File Settings:\n\n");
if (showActualConfiguration)
{
errout.write("Name Type Current Value\n");
}
else
{
errout.write("Name Type Allowable values\n");
}
errout.write("=========================== ========= ========================================\n");
Flag configItem;
// sort configuration options
List values = new ArrayList(OPTIONS.values());
Collections.sort(values);
Iterator iterator = values.iterator();
while (iterator.hasNext())
{
configItem = (Flag) iterator.next();
errout.write(configItem.getName());
errout.write(pad, 0, 28 - configItem.getName().length());
errout.write(configItem.getParser().getType());
errout.write(pad, 0, 11 - configItem.getParser().getType().length());
if (showActualConfiguration)
{
Field field = configItem.getLocation();
Object actualValue = null;
if (field != null)
{
try
{
actualValue = field.get(this);
}
catch (IllegalArgumentException e1)
{
// should never happen
throw new RuntimeException("IllegalArgument when reading field " + field.getName());
}
catch (IllegalAccessException e1)
{
// should never happen
throw new RuntimeException("IllegalAccess when reading field " + field.getName());
}
}
errout.write(configItem.getParser().getFriendlyName(configItem.getName(), actualValue, this));
}
else
{
errout.write(configItem.getParser().getOptionValues());
}
errout.write("\n");
}
errout.flush();
}
catch (IOException e)
{
throw new RuntimeException(e.getMessage());
}
}
/**
* A configuration option.
*/
static class Flag implements Comparable
{
/**
* option name.
*/
private String name;
/**
* field name.
*/
private String fieldName;
/**
* Field where the evaluated value is saved.
*/
private Field location;
/**
* Parser for the configuration property.
*/
private ParseProperty parser;
/**
* Instantiates a new Flag.
* @param name option name
* @param fieldName field name (can be null)
* @param parser parser for property
*/
Flag(String name, String fieldName, ParseProperty parser)
{
this.fieldName = fieldName;
this.name = name;
this.parser = parser;
}
/**
* Getter for location.
* @return Returns the location.
*/
public Field getLocation()
{
// lazy initialization to speed up loading
if (fieldName != null && this.location == null)
{
try
{
this.location = Configuration.class.getDeclaredField(fieldName);
}
catch (NoSuchFieldException e)
{
throw new RuntimeException("NoSuchField exception during config initialization for field "
+ fieldName);
}
catch (SecurityException e)
{
throw new RuntimeException("Security exception during config initialization for field "
+ fieldName
+ ": "
+ e.getMessage());
}
}
return this.location;
}
/**
* Getter for name.
* @return Returns the name.
*/
public String getName()
{
return this.name;
}
/**
* Getter for parser.
* @return Returns the parser.
*/
public ParseProperty getParser()
{
return this.parser;
}
/**
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object obj)
{
return this.name.equals(((Flag) obj).name);
}
/**
* @see java.lang.Object#hashCode()
*/
public int hashCode()
{
// returning the hashCode of String, to be consistent with equals and compareTo
return this.name.hashCode();
}
/**
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Object o)
{
return this.name.compareTo(((Flag) o).name);
}
}
/**
* Getter for inCharEncodingName.
* @return Returns the inCharEncodingName.
*/
protected String getInCharEncodingName()
{
return this.inCharEncoding;
}
/**
* Setter for inCharEncodingName.
* @param encoding The inCharEncodingName to set.
*/
protected void setInCharEncodingName(String encoding)
{
String javaEncoding = EncodingNameMapper.toJava(encoding);
if (javaEncoding != null)
{
this.inCharEncoding = javaEncoding;
}
}
/**
* Getter for outCharEncodingName.
* @return Returns the outCharEncodingName.
*/
protected String getOutCharEncodingName()
{
return this.outCharEncoding;
}
/**
* Setter for outCharEncodingName.
* @param encoding The outCharEncodingName to set.
*/
protected void setOutCharEncodingName(String encoding)
{
String javaEncoding = EncodingNameMapper.toJava(encoding);
if (javaEncoding != null)
{
this.outCharEncoding = javaEncoding;
}
}
/**
* Setter for inOutCharEncodingName.
* @param encoding The CharEncodingName to set.
*/
protected void setInOutEncodingName(String encoding)
{
setInCharEncodingName(encoding);
setOutCharEncodingName(encoding);
}
/**
* Setter for outCharEncoding.
* @param encoding The outCharEncoding to set.
* @deprecated use setOutCharEncodingName(String)
*/
protected void setOutCharEncoding(int encoding)
{
setOutCharEncodingName(convertCharEncoding(encoding));
}
/**
* Setter for inCharEncoding.
* @param encoding The inCharEncoding to set.
* @deprecated use setInCharEncodingName(String)
*/
protected void setInCharEncoding(int encoding)
{
setInCharEncodingName(convertCharEncoding(encoding));
}
/**
* Convert a char encoding from the deprecated tidy constant to a standard java encoding name.
* @param code encoding code
* @return encoding name
*/
protected String convertCharEncoding(int code)
{
if (code != 0 && code < ENCODING_NAMES.length)
{
return ENCODING_NAMES[code];
}
return null;
}
}