[Htmlparser-cvs] htmlparser/src/org/htmlparser/lexer Cursor.java,1.6,1.7 Lexer.java,1.7,1.8 Page.jav
Brought to you by:
derrickoswald
Update of /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer In directory sc8-pr-cvs1:/tmp/cvs-serv24483/src/org/htmlparser/lexer Modified Files: Cursor.java Lexer.java Page.java PageIndex.java Source.java Stream.java package.html Log Message: Add style checking target to ant build script: ant checkstyle It uses a jar from http://checkstyle.sourceforge.net which is dropped in the lib directory. The rules are in the file htmlparser_checks.xml in the src directory. Added lexerapplications package with Tabby as the first app. It performs whitespace manipulation on source files to follow the style rules. This reduced the number of style violations to roughly 14,000. There are a few issues with the style checker that need to be resolved before it should be taken too seriously. For example: It thinks all method arguments should be final, even if they are modified by the code (which the compiler frowns on). It complains about long lines, even when there is no possibility of wrapping the line, i.e. a URL in a comment that's more than 80 characters long. It considers all naked integers as 'magic numbers', even when they are obvious, i.e. the 4 corners of a box. It complains about whitespace following braces, even in array initializers, i.e. X[][] = { {a, b} { } } But it points out some really interesting things, even if you don't agree with the style guidelines, so it's worth a look. Index: Cursor.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/Cursor.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Cursor.java 8 Sep 2003 02:26:28 -0000 1.6 --- Cursor.java 10 Sep 2003 03:38:18 -0000 1.7 *************** *** 11,15 **** // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software --- 11,15 ---- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software *************** *** 18,31 **** // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // --- 18,31 ---- // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // *************** *** 45,49 **** */ protected int mPosition; ! /** * This cursor's page. --- 45,49 ---- */ protected int mPosition; ! /** * This cursor's page. *************** *** 114,118 **** } } ! public String toString () { --- 114,118 ---- } } ! public String toString () { *************** *** 120,124 **** int column; StringBuffer ret; ! ret = new StringBuffer (9 * 3 + 3); // three ints and delimiters ret.append (getPosition ()); --- 120,124 ---- int column; StringBuffer ret; ! ret = new StringBuffer (9 * 3 + 3); // three ints and delimiters ret.append (getPosition ()); *************** *** 130,134 **** ret.append (column); ret.append ("]"); ! return (ret.toString ()); } --- 130,134 ---- ret.append (column); ret.append ("]"); ! return (ret.toString ()); } *************** *** 147,150 **** return (getPosition () - r.getPosition ()); } ! } --- 147,150 ---- return (getPosition () - r.getPosition ()); } ! } Index: Lexer.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/Lexer.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Lexer.java 8 Sep 2003 02:26:28 -0000 1.7 --- Lexer.java 10 Sep 2003 03:38:18 -0000 1.8 *************** *** 11,15 **** // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software --- 11,15 ---- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software *************** *** 18,31 **** // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // --- 18,31 ---- // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // *************** *** 164,168 **** int end; StringNode ret; ! cursor = mCursor.dup (); done = false; --- 164,168 ---- int end; StringNode ret; ! cursor = mCursor.dup (); done = false; *************** *** 312,316 **** int length; TagNode ret; ! cursor = mCursor.dup (); // sanity check --- 312,316 ---- int length; TagNode ret; ! cursor = mCursor.dup (); // sanity check *************** *** 447,451 **** * which occupies more than one line --><p> * </code> ! * White space is not permitted between the markup declaration * open delimiter("<!") and the comment open delimiter ("--"), * but is permitted between the comment close delimiter ("--") and --- 447,451 ---- * which occupies more than one line --><p> * </code> ! * White space is not permitted between the markup declaration * open delimiter("<!") and the comment open delimiter ("--"), * but is permitted between the comment close delimiter ("--") and *************** *** 481,485 **** int length; RemarkNode ret; ! cursor = mCursor.dup (); // sanity check --- 481,485 ---- int length; RemarkNode ret; ! cursor = mCursor.dup (); // sanity check Index: Page.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/Page.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** Page.java 8 Sep 2003 02:26:28 -0000 1.12 --- Page.java 10 Sep 2003 03:38:18 -0000 1.13 *************** *** 11,15 **** // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software --- 11,15 ---- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software *************** *** 18,31 **** // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // --- 18,31 ---- // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // *************** *** 225,229 **** i = mSource.read (); if (-1 == i) ! { // do nothing } --- 225,229 ---- i = mSource.read (); if (-1 == i) ! { // do nothing } *************** *** 269,273 **** String string; String ret; ! ret = DEFAULT_CHARSET; string = connection.getHeaderField (CONTENT_TYPE_STRING); --- 269,273 ---- String string; String ret; ! ret = DEFAULT_CHARSET; string = connection.getHeaderField (CONTENT_TYPE_STRING); *************** *** 312,316 **** { index = content.indexOf (CHARSET_STRING); ! if (index != -1) { --- 312,316 ---- { index = content.indexOf (CHARSET_STRING); ! if (index != -1) { *************** *** 362,366 **** { String ret; ! try { --- 362,366 ---- { String ret; ! try { *************** *** 403,407 **** + _default); } ! return (ret); } --- 403,407 ---- + _default); } ! return (ret); } *************** *** 439,446 **** { StringBuffer ret; ! ret = new StringBuffer (Math.abs (end - start)); getText (ret, start, end); ! return (ret.toString ()); } --- 439,446 ---- { StringBuffer ret; ! ret = new StringBuffer (Math.abs (end - start)); getText (ret, start, end); ! return (ret.toString ()); } *************** *** 478,485 **** { StringBuffer ret; ! ret = new StringBuffer (mSource.mOffset); getText (ret); ! return (ret.toString ()); } --- 478,485 ---- { StringBuffer ret; ! ret = new StringBuffer (mSource.mOffset); getText (ret); ! return (ret.toString ()); } Index: PageIndex.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/PageIndex.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** PageIndex.java 8 Sep 2003 02:26:28 -0000 1.7 --- PageIndex.java 10 Sep 2003 03:38:18 -0000 1.8 *************** *** 11,15 **** // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software --- 11,15 ---- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software *************** *** 18,31 **** // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // --- 18,31 ---- // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com ! // ! // This class was contributed by // Derrick Oswald // *************** *** 46,50 **** * does not incur the overhead of an <code>Integer</code> object per element. */ ! public class PageIndex implements Sortable { /** --- 46,50 ---- * does not incur the overhead of an <code>Integer</code> object per element. */ ! public class PageIndex implements Sortable { /** *************** *** 52,61 **** */ protected static final int mIncrement = 100; ! /** * The number of valid elements. */ protected int mCount; ! /** * The elements. --- 52,61 ---- */ protected static final int mIncrement = 100; ! /** * The number of valid elements. */ protected int mCount; ! /** * The elements. *************** *** 77,81 **** mIndices = new int[mIncrement]; mCount = 0; ! } /** --- 77,81 ---- mIndices = new int[mIncrement]; mCount = 0; ! } /** *************** *** 89,93 **** mIndices[0] = cursor; mCount = 1; ! } /** --- 89,93 ---- mIndices[0] = cursor; mCount = 1; ! } /** *************** *** 102,106 **** mIndices = cursors; mCount = cursors.length; ! } /** --- 102,106 ---- mIndices = cursors; mCount = cursors.length; ! } /** *************** *** 130,134 **** return (mIndices.length); } ! /** * Add an element to the list --- 130,134 ---- return (mIndices.length); } ! /** * Add an element to the list *************** *** 149,155 **** if (!((ret < size ()) && (position == mIndices[ret]))) insertElementAt (position, ret); ! return (ret); ! } /** --- 149,155 ---- if (!((ret < size ()) && (position == mIndices[ret]))) insertElementAt (position, ret); ! return (ret); ! } /** *************** *** 162,166 **** { return (add (new Cursor (getPage (), cursor))); ! } /** --- 162,166 ---- { return (add (new Cursor (getPage (), cursor))); ! } /** *************** *** 178,182 **** if ((i < size ()) && (cursor.getPosition () == mIndices[i])) removeElementAt (i); ! } /** --- 178,182 ---- if ((i < size ()) && (cursor.getPosition () == mIndices[i])) removeElementAt (i); ! } /** *************** *** 187,191 **** { remove (new Cursor (getPage (), cursor)); ! } /** --- 187,191 ---- { remove (new Cursor (getPage (), cursor)); ! } /** *************** *** 197,201 **** { return (mIndices[index]); ! } /** --- 197,201 ---- { return (mIndices[index]); ! } /** *************** *** 207,211 **** { int ret; ! ret = Sort.bsearch (this, cursor); // handle line transition, the search returns the index if it matches --- 207,211 ---- { int ret; ! ret = Sort.bsearch (this, cursor); // handle line transition, the search returns the index if it matches *************** *** 215,219 **** if ((ret < mCount) && (cursor.getPosition () == mIndices[ret])) ret++; ! return (ret); } --- 215,219 ---- if ((ret < mCount) && (cursor.getPosition () == mIndices[ret])) ret++; ! return (ret); } *************** *** 244,248 **** else previous = 0; ! return (cursor.getPosition () - previous); } --- 244,248 ---- else previous = 0; ! return (cursor.getPosition () - previous); } *************** *** 267,273 **** int[] ret = new int[size ()]; System.arraycopy (mIndices, 0, ret, 0, size ()); ! return (ret); ! } /** --- 267,273 ---- int[] ret = new int[size ()]; System.arraycopy (mIndices, 0, ret, 0, size ()); ! return (ret); ! } /** *************** *** 279,283 **** { return (Sort.bsearch (this, new Cursor (getPage (), cursor))); ! } /** --- 279,283 ---- { return (Sort.bsearch (this, new Cursor (getPage (), cursor))); ! } /** *************** *** 291,295 **** { return (Sort.bsearch (this, new Cursor (getPage (), cursor), first, last)); ! } /** --- 291,295 ---- { return (Sort.bsearch (this, new Cursor (getPage (), cursor), first, last)); ! } /** *************** *** 320,324 **** mIndices[index] = cursor; mCount++; ! } /** --- 320,324 ---- mIndices[index] = cursor; mCount++; ! } /** *************** *** 333,337 **** mCount--; } ! // // Sortable interface --- 333,337 ---- mCount--; } ! // // Sortable interface *************** *** 345,349 **** { return (0); ! } /** --- 345,349 ---- { return (0); ! } /** *************** *** 355,359 **** { return (mCount - 1); ! } /** --- 355,359 ---- { return (mCount - 1); ! } /** *************** *** 362,366 **** * @param reuse If this argument is not null, it is an object * acquired from a previous fetch that is no longer needed and ! * may be returned as the result if it makes mores sense to alter * and return it than to fetch or create a new element. That is, the * reuse object is garbage and may be used to avoid allocating a new --- 362,366 ---- * @param reuse If this argument is not null, it is an object * acquired from a previous fetch that is no longer needed and ! * may be returned as the result if it makes mores sense to alter * and return it than to fetch or create a new element. That is, the * reuse object is garbage and may be used to avoid allocating a new *************** *** 382,386 **** return (ret); ! } /** --- 382,386 ---- return (ret); ! } /** Index: Source.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/Source.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Source.java 8 Sep 2003 02:26:28 -0000 1.7 --- Source.java 10 Sep 2003 03:38:18 -0000 1.8 *************** *** 11,15 **** // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software --- 11,15 ---- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software *************** *** 18,27 **** // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com --- 18,27 ---- // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com *************** *** 44,48 **** * <li>the fetching of bytes from the connection's input stream may be asynchronous</li> * <li>the character set may be changed, which resets the input stream</li> ! * */ public class Source extends Reader --- 44,48 ---- * <li>the fetching of bytes from the connection's input stream may be asynchronous</li> * <li>the character set may be changed, which resets the input stream</li> ! * */ public class Source extends Reader *************** *** 52,56 **** */ public static int BUFFER_SIZE = 16384; ! /** * Return value when no more characters are left. --- 52,56 ---- */ public static int BUFFER_SIZE = 16384; ! /** * Return value when no more characters are left. *************** *** 211,215 **** { int ret; ! if (mLevel - mOffset < 1) { --- 211,215 ---- { int ret; ! if (mLevel - mOffset < 1) { *************** *** 224,231 **** else ret = mBuffer[mOffset++]; ! return (ret); } ! /** * Read characters into a portion of an array. This method will block --- 224,231 ---- else ret = mBuffer[mOffset++]; ! return (ret); } ! /** * Read characters into a portion of an array. This method will block *************** *** 259,263 **** mOffset += ret; } ! return (ret); } --- 259,263 ---- mOffset += ret; } ! return (ret); } *************** *** 272,276 **** * @exception IOException If an I/O error occurs. */ ! public int read (char[] cbuf) throws IOException { --- 272,276 ---- * @exception IOException If an I/O error occurs. */ ! public int read (char[] cbuf) throws IOException { *************** *** 299,305 **** mOffset = 0; } ! /** ! * Tell whether this stream supports the mark() operation. * @return <code>true</code> if and only if this stream supports the mark operation. */ --- 299,305 ---- mOffset = 0; } ! /** ! * Tell whether this stream supports the mark() operation. * @return <code>true</code> if and only if this stream supports the mark operation. */ *************** *** 308,312 **** return (true); } ! /** * Mark the present position in the stream. Subsequent calls to reset() --- 308,312 ---- return (true); } ! /** * Mark the present position in the stream. Subsequent calls to reset() *************** *** 323,327 **** mMark = mOffset; } ! /** * Tell whether this stream is ready to be read. --- 323,327 ---- mMark = mOffset; } ! /** * Tell whether this stream is ready to be read. *************** *** 337,341 **** return (mOffset < mLevel); } ! /** * Skip characters. --- 337,341 ---- return (mOffset < mLevel); } ! /** * Skip characters. *************** *** 363,370 **** mOffset += ret; } ! return (ret); } ! // // Methods not in your Daddy's Reader --- 363,370 ---- mOffset += ret; } ! return (ret); } ! // // Methods not in your Daddy's Reader Index: Stream.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/Stream.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Stream.java 8 Sep 2003 02:26:28 -0000 1.5 --- Stream.java 10 Sep 2003 03:38:18 -0000 1.6 *************** *** 11,15 **** // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software --- 11,15 ---- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. ! // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software *************** *** 18,27 **** // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com --- 18,27 ---- // For any questions or suggestions, you can write to me at : // Email :so...@in... ! // ! // Postal Address : // Somik Raha // Extreme Programmer & Coach // Industrial Logic Corporation ! // 2583 Cedar Street, Berkeley, // CA 94708, USA // Website : http://www.industriallogic.com *************** *** 35,39 **** /** * Provides for asynchronous fetching from a stream. ! * */ public class Stream extends InputStream implements Runnable --- 35,39 ---- /** * Provides for asynchronous fetching from a stream. ! * */ public class Stream extends InputStream implements Runnable *************** *** 148,152 **** } else ! { if (mBuffer.length - mLevel < BUFFER_SIZE / 2) buffer = new byte[Math.max (mBuffer.length * 2, mBuffer.length + mIn.available ())]; --- 148,152 ---- } else ! { if (mBuffer.length - mLevel < BUFFER_SIZE / 2) buffer = new byte[Math.max (mBuffer.length * 2, mBuffer.length + mIn.available ())]; *************** *** 259,266 **** else ret = EOF; ! return (ret); } ! /** * Returns the number of bytes that can be read (or skipped over) from --- 259,266 ---- else ret = EOF; ! return (ret); } ! /** * Returns the number of bytes that can be read (or skipped over) from *************** *** 276,280 **** return (mLevel - mOffset); } ! /** * Closes this input stream and releases any system resources associated --- 276,280 ---- return (mLevel - mOffset); } ! /** * Closes this input stream and releases any system resources associated *************** *** 295,299 **** mMark = -1; } ! /** * Repositions this stream to the position at the time the --- 295,299 ---- mMark = -1; } ! /** * Repositions this stream to the position at the time the *************** *** 345,349 **** mOffset = 0; } ! /** * Tests if this input stream supports the <code>mark</code> and --- 345,349 ---- mOffset = 0; } ! /** * Tests if this input stream supports the <code>mark</code> and *************** *** 362,366 **** return (true); } ! /** * Marks the current position in this input stream. A subsequent call to --- 362,366 ---- return (true); } ! /** * Marks the current position in this input stream. A subsequent call to Index: package.html =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/package.html,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** package.html 8 Sep 2003 02:26:28 -0000 1.5 --- package.html 10 Sep 2003 03:38:18 -0000 1.6 *************** *** 19,23 **** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. ! You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software --- 19,23 ---- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. ! You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software *************** *** 26,38 **** For any questions or suggestions, you can write to me at : Email :so...@in... ! ! Postal Address : Somik Raha Extreme Programmer & Coach Industrial Logic Corporation ! 2583 Cedar Street, Berkeley, CA 94708, USA Website : http://www.industriallogic.com ! --> <TITLE>Lexer Package</TITLE> --- 26,38 ---- For any questions or suggestions, you can write to me at : Email :so...@in... ! ! Postal Address : Somik Raha Extreme Programmer & Coach Industrial Logic Corporation ! 2583 Cedar Street, Berkeley, CA 94708, USA Website : http://www.industriallogic.com ! --> <TITLE>Lexer Package</TITLE> *************** *** 105,109 **** but instead simply contain offsets into a single large buffer that contains the text read from the HTML source. Even within tags, the attributes list can ! contain whitespace, thus there is no lost whitespace or text formatting either outside or within tags. Upper and lower case text is preserved. <DT>Line Endings --- 105,109 ---- but instead simply contain offsets into a single large buffer that contains the text read from the HTML source. Even within tags, the attributes list can ! contain whitespace, thus there is no lost whitespace or text formatting either outside or within tags. Upper and lower case text is preserved. <DT>Line Endings *************** *** 127,131 **** all that's needed for a low level parse of the HTML source. In previous implementations, the attributes were parsed on a second scan after the initial ! tag was extracted. <DT>Two Jars <DD>For elementary operations at the node level, a minimalist jar file containing --- 127,131 ---- all that's needed for a low level parse of the HTML source. In previous implementations, the attributes were parsed on a second scan after the initial ! tag was extracted. <DT>Two Jars <DD>For elementary operations at the node level, a minimalist jar file containing |