improve documentation
diff --git a/src/prettify/PrettifyParser.java b/src/prettify/PrettifyParser.java
index 041189a..c02bc71 100644
--- a/src/prettify/PrettifyParser.java
+++ b/src/prettify/PrettifyParser.java
@@ -9,12 +9,19 @@
 import syntaxhighlight.Parser;
 
 /**
+ * The prettify parser for syntax highlight.
  * @author Chan Wai Shing <cws1989@gmail.com>
  */
 public class PrettifyParser implements Parser {
 
+  /**
+   * The prettify parser.
+   */
   protected Prettify prettify;
 
+  /**
+   * Constructor.
+   */
   public PrettifyParser() {
     prettify = new Prettify();
   }
@@ -28,11 +35,10 @@
 
     List<ParseResult> returnList = new ArrayList<ParseResult>();
 
-    Integer startPos = 0, endPos = 0;
     // apply style according to the style list
     for (int i = 0, iEnd = decorations.size(); i < iEnd; i += 2) {
-      endPos = i + 2 < iEnd ? (Integer) decorations.get(i + 2) : content.length();
-      startPos = (Integer) decorations.get(i);
+      int endPos = i + 2 < iEnd ? (Integer) decorations.get(i + 2) : content.length();
+      int startPos = (Integer) decorations.get(i);
       returnList.add(new ParseResult(startPos, endPos - startPos, Arrays.asList(new String[]{(String) decorations.get(i + 1)})));
     }
 
diff --git a/src/prettify/example/Example.java b/src/prettify/example/Example.java
index 33f4df3..a5ea2f4 100644
--- a/src/prettify/example/Example.java
+++ b/src/prettify/example/Example.java
@@ -90,8 +90,9 @@
         long start, end;
         start = System.currentTimeMillis();
 
-        // initialize the parser
+        // the Prettify parser
         Parser parser = new PrettifyParser();
+
         // use Default theme
         SyntaxHighlighter highlighter = new SyntaxHighlighter(parser, new ThemeDefault());
         // set the line number count from 10 instead of 1
diff --git a/src/syntaxhighlight/JTextComponentRowHeader.java b/src/syntaxhighlight/JTextComponentRowHeader.java
index 2e76e8e..ffcf383 100644
--- a/src/syntaxhighlight/JTextComponentRowHeader.java
+++ b/src/syntaxhighlight/JTextComponentRowHeader.java
@@ -1,16 +1,23 @@
-// Copyright (C) 2011 Chan Wai Shing
+// Copyright (c) 2012 Chan Wai Shing
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
 //
-//      http://www.apache.org/licenses/LICENSE-2.0
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
 //
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package syntaxhighlight;
 
 import java.awt.Color;
@@ -38,11 +45,10 @@
 import javax.swing.text.JTextComponent;
 
 /**
- * A row header panel for JScrollPane.
- * It is used with JTextComponent for line number displaying.
- * Currently it only accept fixed-height line.
- * The usage of this class is not limited to this syntax highlighter, it can be 
- * used on all JTextComponent.
+ * A row header panel for {@link JScrollPane} showing the line numbers of 
+ * {@link JTextComponent}.
+ * 
+ * The text lines in {@link JTextComponent} must be fixed height.
  * 
  * @author Chan Wai Shing <cws1989@gmail.com>
  */
@@ -52,31 +58,31 @@
   private static final long serialVersionUID = 1L;
   /**
    * The anti-aliasing setting of the line number text. See
-   * {@link java.awt.RenderingHints}.
+   * {@link RenderingHints}.
    */
-  private Object textAntiAliasing = RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT;
+  protected Object textAntiAliasing = RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT;
   /**
-   * The color of the border that joint the gutter and the script text panel.
+   * The color of the border that joint the gutter and the script text area.
    */
-  private Color borderColor = new Color(184, 184, 184);
+  protected Color borderColor = new Color(184, 184, 184);
   /**
    * The background of the row when it is highlighted.
    */
-  private Color highlightedColor = Color.black;
+  protected Color highlightedColor = Color.black;
   /**
    * The minimum padding from 'the leftmost of the line number text' to 
    * 'the left margin'.
    */
-  private int paddingLeft = 7;
+  protected int paddingLeft = 7;
   /**
    * The minimum padding from 'the rightmost of the line number text' to 
    * 'the right margin' (not to the gutter border).
    */
-  private int paddingRight = 2;
+  protected int paddingRight = 2;
   /**
-   * The width of the border that joint the gutter and the script text panel.
+   * The width of the border that joint the gutter and the script text area.
    */
-  private int borderWidth = 1;
+  protected int borderWidth = 1;
   /**
    * The JScrollPane that it be added into.
    */
@@ -110,17 +116,17 @@
    * The line number offset. E.g. set offset to 9 will make the first line 
    * number to appear at line 1 + 9 = 10
    */
-  private int lineNumberOffset;
+  protected int lineNumberOffset;
   /**
    * The list of line numbers that indicate which lines are needed to be 
    * highlighted.
    */
-  private final List<Integer> highlightedLineList;
+  protected final List<Integer> highlightedLineList;
   /**
    * Indicator indicate whether it is listening to the document change events 
    * or not.
    */
-  private boolean listenToDocumentUpdate;
+  protected boolean listenToDocumentUpdate;
 
   /**
    * Constructor.
@@ -377,7 +383,7 @@
   }
 
   /**
-   * The color of the border that joint the gutter and the script text panel.
+   * The color of the border that joint the gutter and the script text area.
    * @return the color
    */
   public Color getBorderColor() {
@@ -385,7 +391,7 @@
   }
 
   /**
-   * The color of the border that joint the gutter and the script text panel.
+   * The color of the border that joint the gutter and the script text area.
    * @param borderColor the color
    */
   public void setBorderColor(Color borderColor) {
@@ -459,7 +465,7 @@
   }
 
   /**
-   * The width of the border that joint the gutter and the script text panel.
+   * The width of the border that joint the gutter and the script text area.
    * 
    * @return the width in pixel
    */
@@ -468,7 +474,7 @@
   }
 
   /**
-   * The width of the border that joint the gutter and the script text panel.
+   * The width of the border that joint the gutter and the script text area.
    * 
    * @param borderWidth the width in pixel
    */
@@ -523,10 +529,19 @@
   /**
    * Add highlighted line.
    * @param lineNumber the line number to highlight
+   * @return see the return value of {@link List#add(Object)}
    */
-  public void addHighlightedLine(int lineNumber) {
-    highlightedLineList.add(lineNumber);
+  public boolean addHighlightedLine(int lineNumber) {
+    boolean returnValue = highlightedLineList.add(lineNumber);
     repaint();
+    return returnValue;
+  }
+
+  /**
+   * Clear highlighted lines.
+   */
+  public void clearHighlightedLine() {
+    highlightedLineList.clear();
   }
 
   /**
diff --git a/src/syntaxhighlight/ParseResult.java b/src/syntaxhighlight/ParseResult.java
index a731c73..5080288 100644
--- a/src/syntaxhighlight/ParseResult.java
+++ b/src/syntaxhighlight/ParseResult.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 Chan Wai Shing
+// Copyright (c) 2012 Chan Wai Shing
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -26,32 +26,36 @@
 import java.util.List;
 
 /**
- * Matched result, it will be generated when parsing the content.
+ * The parser parsed result.
+ * 
+ * This class include the information needed to highlight the syntax. 
+ * Information includes where the content located in the document (offset and 
+ * length) and what style(s) should be applied on that segment of content.
  * 
  * @author Chan Wai Shing <cws1989@gmail.com>
  */
 public class ParseResult {
 
   /**
-   * The start position in the document for this matched result.
+   * The start position of the content.
    */
   protected int offset;
   /**
-   * The length of the matched result.
+   * The length of the content.
    */
   protected int length;
   /**
-   * The style key for this matched result, see {@link syntaxhighlighter.theme}.
+   * The style keys of the content. The style at higher index of the list will 
+   * override the style of the lower index.
    */
   protected List<String> styleKeys;
 
   /**
    * Constructor.
    * 
-   * @param offset the position in the document for this matched result
-   * @param length the length of the matched result.
-   * @param styleKeys the style key for this matched result, cannot be null, see 
-   * {@link syntaxhighlighter.theme}
+   * @param offset the start position of the content
+   * @param length the length of the content
+   * @param styleKeys the style keys of the content
    */
   public ParseResult(int offset, int length, List<String> styleKeys) {
     this.offset = offset;
@@ -60,37 +64,42 @@
   }
 
   /**
-   * The position in the document for this matched result.
-   * @return the offset in the document
+   * The start position of the content.
+   * @return the start position of the content
    */
   public int getOffset() {
     return offset;
   }
 
   /**
-   * The position in the document for this matched result.
-   * @param offset the offset in the document
+   * The start position of the content.
+   * @param offset the start position of the content
    */
   public void setOffset(int offset) {
     this.offset = offset;
   }
 
   /**
-   * The length of the matched result.
-   * @return the length
+   * The length of the content.
+   * @return the length of the content
    */
   public int getLength() {
     return length;
   }
 
   /**
-   * The length of the matched result.
-   * @param length the length
+   * The length of the content.
+   * @param length the length of the content
    */
   public void setLength(int length) {
     this.length = length;
   }
 
+  /**
+   * Get the style keys represented by one string key, see 
+   * {@link Theme#getStylesAttributeSet(String)}.
+   * @return the style keys of the content
+   */
   public String getStyleKeysString() {
     StringBuilder sb = new StringBuilder(10);
     for (int i = 0, iEnd = styleKeys.size(); i < iEnd; i++) {
@@ -102,18 +111,35 @@
     return sb.toString();
   }
 
+  /**
+   * The style keys of the content.
+   * @param styleKeys the style keys of the content
+   */
   public void setStyleKeys(List<String> styleKeys) {
     this.styleKeys = new ArrayList<String>(styleKeys);
   }
 
+  /**
+   * The style keys of the content.
+   * @param styleKey the style key
+   * @return see the return value of {@link List#add(Object)}
+   */
   public boolean addStyleKey(String styleKey) {
     return styleKeys.add(styleKey);
   }
 
+  /**
+   * The style keys of the content.
+   * @param styleKey the style key
+   * @return see the return value of {@link List#remove(Object)}
+   */
   public boolean removeStyleKey(String styleKey) {
     return styleKeys.remove(styleKey);
   }
 
+  /**
+   * The style keys of the content.
+   */
   public void clearStyleKeys() {
     styleKeys.clear();
   }
@@ -126,6 +152,9 @@
     return new ArrayList<String>(styleKeys);
   }
 
+  /**
+   * {@inheritDoc}
+   */
   @Override
   public String toString() {
     StringBuilder sb = new StringBuilder();
diff --git a/src/syntaxhighlight/Parser.java b/src/syntaxhighlight/Parser.java
index 41eee05..73a1ecf 100644
--- a/src/syntaxhighlight/Parser.java
+++ b/src/syntaxhighlight/Parser.java
@@ -1,9 +1,29 @@
+// Copyright (c) 2012 Chan Wai Shing
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package syntaxhighlight;
 
 import java.util.List;
 
 /**
- * The parser interface for syntax highlight.
+ * The parser for syntax highlight.
  * 
  * @author Chan Wai Shing <cws1989@gmail.com>
  */
@@ -11,7 +31,8 @@
 
   /**
    * Parse the {@code content} and return the parsed result.
-   * @param fileExtension the file extension of the content, null means not provided
+   * @param fileExtension the file extension of the content, null means not 
+   * provided
    * @param content the content
    * @return the parsed result
    */
diff --git a/src/syntaxhighlight/Style.java b/src/syntaxhighlight/Style.java
index 88f4531..4b58e91 100644
--- a/src/syntaxhighlight/Style.java
+++ b/src/syntaxhighlight/Style.java
@@ -1,16 +1,23 @@
-// Copyright (C) 2012 Chan Wai Shing
+// Copyright (c) 2012 Chan Wai Shing
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
 //
-//      http://www.apache.org/licenses/LICENSE-2.0
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
 //
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package syntaxhighlight;
 
 import java.awt.Color;
@@ -24,16 +31,34 @@
  */
 public class Style implements Cloneable {
 
+  /**
+   * It indicate whether the {@link #attributeSet} has updated after any style 
+   * changes.
+   */
   protected boolean changed;
+  /**
+   * The {@link AttributeSet} representation of this style.
+   */
   protected SimpleAttributeSet attributeSet;
-  //
+  /**
+   * Font bold.
+   */
   protected boolean bold;
+  /**
+   * Font color.
+   */
   protected Color color;
   /**
    * The background color, null means no background color is set.
    */
   protected Color background;
+  /**
+   * Font underline.
+   */
   protected boolean underline;
+  /**
+   * Font italic.
+   */
   protected boolean italic;
 
   /**
@@ -61,8 +86,8 @@
   }
 
   /**
-   * Get the AttributeSet from this style.
-   * @return the AttributeSet
+   * Get the {@link AttributeSet} of this style.
+   * @return the {@link AttributeSet}
    */
   public SimpleAttributeSet getAttributeSet() {
     if (changed) {
@@ -89,7 +114,7 @@
 
   /**
    * Set the background color.
-   * @param background input null means do not set the background
+   * @param background null means do not set the background
    */
   public void setBackground(Color background) {
     changed = true;
@@ -192,7 +217,7 @@
     sb.append(", ");
     sb.append("color: ").append(color);
     sb.append(", ");
-    sb.append("bg: ").append(background);
+    sb.append("background: ").append(background);
     sb.append(", ");
     sb.append("underline: ").append(underline);
     sb.append(", ");
diff --git a/src/syntaxhighlight/SyntaxHighlighter.java b/src/syntaxhighlight/SyntaxHighlighter.java
index df9638a..e948acc 100644
--- a/src/syntaxhighlight/SyntaxHighlighter.java
+++ b/src/syntaxhighlight/SyntaxHighlighter.java
@@ -1,16 +1,23 @@
-// Copyright (C) 2011 Chan Wai Shing
+// Copyright (c) 2012 Chan Wai Shing
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
 //
-//      http://www.apache.org/licenses/LICENSE-2.0
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
 //
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 package syntaxhighlight;
 
 import java.io.File;
@@ -29,7 +36,7 @@
 
   private static final long serialVersionUID = 1L;
   /**
-   * The script text panel.
+   * The script text area.
    */
   protected SyntaxHighlighterPane highlighter;
   /**
@@ -41,7 +48,7 @@
    */
   protected Theme theme;
   /**
-   * The Prettify object.
+   * The parser.
    */
   protected Parser parser;
   /**
@@ -51,8 +58,7 @@
 
   /**
    * Constructor.
-   * 
-   * @param parser 
+   * @param parser the parser to use
    * @param theme the theme for the syntax highlighter
    */
   public SyntaxHighlighter(Parser parser, Theme theme) {
@@ -61,8 +67,7 @@
 
   /**
    * Constructor.
-   * 
-   * @param parser 
+   * @param parser the parser to use
    * @param theme the theme for the syntax highlighter
    * @param highlighterPane the script text pane of the syntax highlighter
    */
@@ -110,9 +115,9 @@
   }
 
   /**
-   * Get the SyntaxHighlighterPane (the script text panel).
-   * <b>Note: Normally should not operate on the SyntaxHighlighterPane directly.</b>
-   * 
+   * Get the SyntaxHighlighterPane (the script text area).
+   * <b>Note: Normally should not operate on the SyntaxHighlighterPane 
+   * directly.</b>
    * @return the SyntaxHighlighterPane
    */
   public SyntaxHighlighterPane getHighlighter() {
@@ -123,7 +128,6 @@
    * Get the JTextComponentRowHeader, the line number panel.
    * <b>Note: Normally should not operate on the JTextComponentRowHeader 
    * directly.</b>
-   * 
    * @return the JTextComponentRowHeader
    */
   public JTextComponentRowHeader getHighlighterRowHeader() {
@@ -132,7 +136,6 @@
 
   /**
    * Get current theme.
-   * 
    * @return the current theme
    */
   public Theme getTheme() {
@@ -143,7 +146,6 @@
    * Set the theme.
    * Setting the theme will not re-parse the content, but will clear and apply 
    * the new theme on the script text pane.
-   * 
    * @param theme the theme
    */
   public void setTheme(Theme theme) {
@@ -161,7 +163,6 @@
   /**
    * Set the line number of the first line. E.g. if set 10, the line number will 
    * start count from 10 instead of 1.
-   * 
    * @param firstLine the line number of the first line
    */
   public void setFirstLine(int firstLine) {
@@ -171,7 +172,6 @@
 
   /**
    * Get the list of highlighted lines.
-   * 
    * @return a copy of the list
    */
   public List<Integer> getHighlightedLineList() {
@@ -181,7 +181,6 @@
   /**
    * Set highlighted lines. Note that this will clear all previous recorded 
    * highlighted lines.
-   * 
    * @param highlightedLineList the list that contain the highlighted lines, 
    * null means highlight no lines
    */
@@ -192,7 +191,6 @@
 
   /**
    * Add highlighted line.
-   * 
    * @param lineNumber the line number to highlight
    */
   public void addHighlightedLine(int lineNumber) {
@@ -202,7 +200,6 @@
 
   /**
    * Check the visibility of the gutter.
-   * 
    * @return true if the gutter is visible, false if not
    */
   public boolean isGutterVisible() {
@@ -211,7 +208,6 @@
 
   /**
    * Set the visibility of the gutter.
-   * 
    * @param visible true to make visible, false to hide it
    */
   public void setGutterVisible(boolean visible) {
@@ -226,7 +222,6 @@
 
   /**
    * Check the status of the mouse-over highlight effect. Default is on.
-   * 
    * @return true if turned on, false if turned off
    */
   public boolean isHighlightOnMouseOver() {
@@ -236,9 +231,8 @@
   /**
    * Set turn on the mouse-over highlight effect or not.
    * If set true, there will be a highlight effect on the line that the mouse 
-   * cursor currently is pointing on (on the script text panel only, not on the 
+   * cursor currently is pointing on (on the script text area only, not on the 
    * line number panel).
-   * 
    * @param highlightWhenMouseOver true to turn on, false to turn off
    */
   public void setHighlightOnMouseOver(boolean highlightWhenMouseOver) {
@@ -248,9 +242,7 @@
   /**
    * Set the content of the syntax highlighter. Better set it last after setting 
    * all other settings.
-   * 
    * @param file the file to read
-   * 
    * @throws IOException error occurred when reading the file
    */
   public void setContent(File file) throws IOException {
@@ -260,7 +252,6 @@
   /**
    * Set the content of the syntax highlighter. It is better to set other 
    * settings first and set this the last.
-   * 
    * @param content the content to set, null means no content
    */
   public void setContent(String content) {
@@ -271,11 +262,8 @@
 
   /**
    * Get the string content of a file.
-   * 
    * @param file the file to retrieve the content from
-   * 
    * @return the string content
-   * 
    * @throws IOException error occured when reading the file
    */
   protected static String readFile(File file) throws IOException {
diff --git a/src/syntaxhighlight/SyntaxHighlighterPane.java b/src/syntaxhighlight/SyntaxHighlighterPane.java
index 482b87f..95aa1d4 100644
--- a/src/syntaxhighlight/SyntaxHighlighterPane.java
+++ b/src/syntaxhighlight/SyntaxHighlighterPane.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 Chan Wai Shing
+// Copyright (c) 2012 Chan Wai Shing
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -411,7 +411,7 @@
    * @param offset the offset
    */
   public void setLineNumberOffset(int offset) {
-    lineNumberOffset = Math.max(lineNumberOffset, offset);
+    lineNumberOffset = Math.max(0, offset);
     repaint();
   }
 
@@ -449,7 +449,7 @@
   /**
    * Set turn on the mouse-over highlight effect or not. Default is on.
    * If set true, there will be a highlight effect on the line that the mouse 
-   * cursor currently is pointing on (on the script text panel only, not on the 
+   * cursor currently is pointing on (on the script text area only, not on the 
    * line number panel).
    * 
    * @param highlightWhenMouseOver true to turn on, false to turn off
diff --git a/src/syntaxhighlight/Theme.java b/src/syntaxhighlight/Theme.java
index 0449e15..d4ab764 100644
--- a/src/syntaxhighlight/Theme.java
+++ b/src/syntaxhighlight/Theme.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 Chan Wai Shing
+// Copyright (c) 2012 Chan Wai Shing
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
@@ -28,10 +28,12 @@
 import javax.swing.text.SimpleAttributeSet;
 
 /**
- * Theme for the syntax highlighter.
- * To make a new theme, either extending this class of initiate this class 
- * and set the parameter by the setter. For the default value, please refer to 
- * the constructor.
+ * Theme for the {@link SyntaxHighlighterPane} and 
+ * {@link JTextComponentRowHeader}.
+ * 
+ * To make a new theme, either extending this class or initiate this class and 
+ * set parameters using setters. For the default value, find the comment of the 
+ * constructor.
  * 
  * @author Chan Wai Shing <cws1989@gmail.com>
  */
@@ -58,11 +60,11 @@
    */
   protected Color gutterText;
   /**
-   * The color of the border that joint the gutter and the script text panel.
+   * The color of the border that joint the gutter and the script text area.
    */
   protected Color gutterBorderColor;
   /**
-   * The width of the border that joint the gutter and the script text panel.
+   * The width of the border that joint the gutter and the script text area.
    */
   protected int gutterBorderWidth;
   /**
@@ -79,7 +81,17 @@
    * 'the right margin' (not to the gutter border).
    */
   protected int gutterTextPaddingRight;
+  /**
+   * Text area.
+   */
+  /**
+   * The default style. When the style requested by {@link #getStyle(String)} 
+   * not exist, this will be returned.
+   */
   protected Style plain;
+  /**
+   * The styles of this theme.
+   */
   protected Map<String, Style> styles;
 
   /**
@@ -118,7 +130,7 @@
 
   /**
    * Apply the theme to the row header panel.
-   * @param rowHeader the row header to apply theme on
+   * @param rowHeader the row header to apply the theme on
    */
   public void setTheme(JTextComponentRowHeader rowHeader) {
     rowHeader.setBackground(background);
@@ -132,6 +144,10 @@
     rowHeader.setPaddingRight(gutterTextPaddingRight);
   }
 
+  /**
+   * Set the default style.
+   * @param plain the style
+   */
   public void setPlain(Style plain) {
     if (plain == null) {
       throw new NullPointerException("argument 'plain' cannot be null");
@@ -139,15 +155,25 @@
     this.plain = plain;
   }
 
+  /**
+   * Get the default style.
+   * @return the style
+   */
   public Style getPlain() {
     return plain;
   }
 
-  public SimpleAttributeSet getStyleAttributeSet(String styleKeys) {
+  /**
+   * Get the {@link AttributeSet} of {@code styleKeys}. For more than one 
+   * styles, separate the styles by space, e.g. 'plain comments'.
+   * @param styleKeys the style keys with keys separated by space
+   * @return the combined {@link AttributeSet}
+   */
+  public SimpleAttributeSet getStylesAttributeSet(String styleKeys) {
     if (styleKeys.indexOf(' ') != -1) {
       SimpleAttributeSet returnAttributeSet = new SimpleAttributeSet();
-      String[] keys = styleKeys.split(" ");
-      for (String _key : keys) {
+      String[] _keys = styleKeys.split(" ");
+      for (String _key : _keys) {
         returnAttributeSet.addAttributes(getStyle(_key).getAttributeSet());
       }
       return returnAttributeSet;
@@ -156,32 +182,48 @@
     }
   }
 
+  /**
+   * Add style.
+   * @param styleKey the keyword of the style
+   * @param style the style
+   * @return see the return value of {@link Map#put(Object, Object)}
+   */
   public Style addStyle(String styleKey, Style style) {
     return styles.put(styleKey, style);
   }
 
+  /**
+   * Remove style by keyword.
+   * @param styleKey the keyword of the style
+   * @return see the return value of {@link Map#remove(Object)}
+   */
   public Style removeStyle(String styleKey) {
     return styles.remove(styleKey);
   }
 
   /**
-   * Get the {@link syntaxhighlighter.theme.Style} by keyword.
-   * 
+   * Get the style by keyword.
    * @param key the keyword
-   * 
    * @return the {@link syntaxhighlighter.theme.Style} related to the 
-   * {@code key}; if the style related to the <code>key</code> not exist, 
-   * the style of 'plain' will return.
+   * {@code key}; if the style related to the {@code key} not exist, the 
+   * style of 'plain' will return.
    */
   public Style getStyle(String key) {
     Style returnStyle = styles.get(key);
     return returnStyle != null ? returnStyle : plain;
   }
 
+  /**
+   * Get all styles.
+   * @return the styles
+   */
   public Map<String, Style> getStyles() {
     return new HashMap<String, Style>(styles);
   }
 
+  /**
+   * Clear all styles.
+   */
   public void clearStyles() {
     styles.clear();
   }
@@ -263,7 +305,7 @@
   }
 
   /**
-   * The color of the border that joint the gutter and the script text panel.
+   * The color of the border that joint the gutter and the script text area.
    * @return the color
    */
   public Color getGutterBorderColor() {
@@ -271,7 +313,7 @@
   }
 
   /**
-   * The color of the border that joint the gutter and the script text panel.
+   * The color of the border that joint the gutter and the script text area.
    * @param gutterBorderColor the color
    */
   public void setGutterBorderColor(Color gutterBorderColor) {
@@ -282,7 +324,7 @@
   }
 
   /**
-   * The width of the border that joint the gutter and the script text panel.
+   * The width of the border that joint the gutter and the script text area.
    * @return the width in pixel
    */
   public int getGutterBorderWidth() {
@@ -290,7 +332,7 @@
   }
 
   /**
-   * The width of the border that joint the gutter and the script text panel.
+   * The width of the border that joint the gutter and the script text area.
    * @param gutterBorderWidth in pixel
    */
   public void setGutterBorderWidth(int gutterBorderWidth) {
@@ -376,16 +418,17 @@
   public String toString() {
     StringBuilder sb = new StringBuilder();
 
+    sb.append("[");
     sb.append(getClass().getName());
     sb.append(": ");
     sb.append("font: ").append(getFont());
-    sb.append(", ");
+    sb.append("; ");
     sb.append("background: ").append(getBackground());
-    sb.append(", ");
+    sb.append("; ");
     sb.append("highlightedBackground: ").append(getHighlightedBackground());
-    sb.append(", ");
+    sb.append("; ");
     sb.append("gutterText: ").append(getGutterText());
-    sb.append(", ");
+    sb.append("; ");
     sb.append("gutterBorderColor: ").append(getGutterBorderColor());
     sb.append(", ");
     sb.append("gutterBorderWidth: ").append(getGutterBorderWidth());
@@ -395,6 +438,12 @@
     sb.append("gutterTextPaddingLeft: ").append(getGutterTextPaddingLeft());
     sb.append(", ");
     sb.append("gutterTextPaddingRight: ").append(getGutterTextPaddingRight());
+    sb.append(", ");
+    sb.append("styles: ");
+    for (String _key : styles.keySet()) {
+      sb.append(_key).append(":").append(styles.get(_key));
+    }
+    sb.append("]");
 
     return sb.toString();
   }