Re: [Htmlparser-developer] Page.getLine() seems broken.
                
                Brought to you by:
                
                    derrickoswald
                    
                
            
            
        
        
        
    | 
      
      
      From: Derrick O. <Der...@Ro...> - 2005-09-29 11:24:46
      
     | 
| Sorry, I fired from the hip in a hurry and didn't even see the attachment.
I'll give it a better look when I get some time.
Matthew Buckett wrote:
> Derrick Oswald wrote:
>
>> It's zero based, unlike the usual text editor counting.
>
>
> Yeah, but I'm passing in the position:
>
>     Page.getLine(int position)
>           Get the text line the position of the cursor lies on.
>
> So if I parse "line0\nline1\nline2\n".
> then call page.getLine(8) I should get back "line1\n" but I get 
> "line2\n";
>
> row(8) correctly gives back 1 (zero based line number). But 
> mIndex.elementAt(1) returns the end of row 1 (position 12) then the 
> line is incremented and mIndex.elementAt(2) returns the end of row 2 
> (position 18). This is then passed to getText which returns the text 
> for the last row.
>
> Try the tests without the patch and they fail. Are you saying my tests 
> should fail?
>
>> Matthew Buckett wrote:
>>
>>> Page.getLine always seems to return the previous line. Attached are 
>>> some  tests that show this. It seems that the documentation on 
>>> PageIndex says it should be the index the the first character of the 
>>> line but it is actually set as being the position of the newline.
>>>
>>> I've attached a fix to Page.getLine() that makes it work but I don't 
>>> know if the correct fix change PageIndex so that the index of the 
>>> start of the line is put in it instead.
>>>
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> Index: Page.java
>>> ===================================================================
>>> RCS file: 
>>> /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/Page.java,v
>>> retrieving revision 1.51
>>> diff -u -r1.51 Page.java
>>> --- Page.java    20 Jun 2005 01:56:32 -0000    1.51
>>> +++ Page.java    28 Sep 2005 16:16:14 -0000
>>> @@ -1106,12 +1106,12 @@
>>>         size = mIndex.size ();
>>>         if (line < size)
>>>         {
>>> -            start = mIndex.elementAt (line);
>>> -            line++;
>>> -            if (line <= size)
>>> -                end = mIndex.elementAt (line);
>>> +            end = mIndex.elementAt (line);
>>> +            line--;
>>> +            if (line >= 0)
>>> +                start = mIndex.elementAt (line);
>>>             else
>>> -                end = mSource.offset ();
>>> +                start = 0;
>>>         }
>>>         else // current line
>>>         {
>>>  
>>>
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> /* 
>>> ======================================================================
>>> The Bodington System Software License, Version 1.0
>>
>
> Sorry Eclipse was still configured for the wrong project...
>
>
>>> package org.htmlparser.tests;
>>>
>>> import junit.framework.TestCase;
>>>
>>> import org.htmlparser.Node;
>>> import org.htmlparser.Parser;
>>> import org.htmlparser.filters.TagNameFilter;
>>> import org.htmlparser.util.NodeList;
>>> import org.htmlparser.util.ParserException;
>>>
>>> public class LineTests extends TestCase
>>> {
>>>    public void testGetLine1() throws ParserException   {
>>>        Parser parser = getParser();
>>>        NodeList list = parser.parse(new TagNameFilter("h1"));
>>>        Node node = list.elementAt(0);
>>>        assertEquals("<h1>Line 1</h1>\n", node.getPage().getLine(
>>>            node.getStartPosition()));
>>>    }
>>>       public void testGetLine2() throws ParserException   {
>>>        Parser parser = getParser();
>>>        NodeList list = parser.parse(new TagNameFilter("h2"));
>>>        Node node = list.elementAt(0);
>>>        assertEquals("<h2>Line 2</h2>\n", node.getPage().getLine(
>>>            node.getStartPosition()));
>>>    }
>>>       public void testGetLine3() throws ParserException   {
>>>        Parser parser = getParser();
>>>        NodeList list = parser.parse(new TagNameFilter("h3"));
>>>        Node node = list.elementAt(0);
>>>        assertEquals("<h3>Line 3</h3>\n", node.getPage().getLine(
>>>            node.getStartPosition()));
>>>    }
>>>       public Parser getParser()
>>>    {
>>>        Parser parser = new Parser();
>>>        try
>>>        {
>>>            parser.setInputHTML(
>>>                "<h1>Line 1</h1>\n"+
>>>                "<h2>Line 2</h2>\n"+
>>>                "<h3>Line 3</h3>\n"
>>>                );
>>>        }
>>>        catch (ParserException e)
>>>        {
>>>            fail("Failed to parse");
>>>        }
>>>        return parser;
>>>    }
>>> }
>>>  
>>>
>>
>>
>>
>> -------------------------------------------------------
>> This SF.Net email is sponsored by:
>> Power Architecture Resource Center: Free content, downloads, 
>> discussions,
>> and more. http://solutions.newsforge.com/ibmarch.tmpl
>> _______________________________________________
>> Htmlparser-developer mailing list
>> Htm...@li...
>> https://lists.sourceforge.net/lists/listinfo/htmlparser-developer
>>
>>
>
>
 |