[Htmlparser-cvs] htmlparser/src/org/htmlparser/scanners ScriptScanner.java,1.27,1.28
Brought to you by:
derrickoswald
From: <so...@us...> - 2003-06-17 01:32:09
|
Update of /cvsroot/htmlparser/htmlparser/src/org/htmlparser/scanners In directory sc8-pr-cvs1:/tmp/cvs-serv5705/src/org/htmlparser/scanners Modified Files: ScriptScanner.java Log Message: created ScriptScannerHelper to allow thread safety in ScriptScanner Index: ScriptScanner.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/scanners/ScriptScanner.java,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** ScriptScanner.java 17 Jun 2003 00:43:56 -0000 1.27 --- ScriptScanner.java 17 Jun 2003 01:32:06 -0000 1.28 *************** *** 32,35 **** --- 32,36 ---- ///////////////////////// import org.htmlparser.*; + import org.htmlparser.parserHelper.*; import org.htmlparser.tags.*; import org.htmlparser.tags.data.*; *************** *** 43,55 **** private static final String MATCH_NAME [] = {"SCRIPT"}; private static final String ENDERS [] = {"BODY", "HTML"}; ! private int endTagLoc; ! private Tag endTag; ! private Tag startTag; ! private int startingPos; ! private boolean sameLine; ! private boolean endTagFound; ! private NodeReader reader; ! private StringBuffer scriptContents; public ScriptScanner() { super("",MATCH_NAME,ENDERS); --- 44,50 ---- private static final String MATCH_NAME [] = {"SCRIPT"}; private static final String ENDERS [] = {"BODY", "HTML"}; ! ! public ScriptScanner() { super("",MATCH_NAME,ENDERS); *************** *** 77,88 **** throws ParserException { try { ! this.reader = nodeReader; ! int startLine = reader.getLastLineNumber(); ! startTag = tag; ! extractScriptTagFrom(currLine); ! if (isScriptEndTagNotFound()) { ! createScriptEndTag(tag, currLine); ! } ! return createScriptTagUsing(url, currLine, startLine); } --- 72,78 ---- throws ParserException { try { ! ScriptScannerHelper helper = ! new ScriptScannerHelper(tag,url,nodeReader,currLine, this); ! return helper.scan(); } *************** *** 92,231 **** } - private Tag createScriptTagUsing(String url, String currLine, int startLine) { - return createTag( - new TagData( - startTag.elementBegin(), - endTag.elementEnd(), - startLine, - reader.getLastLineNumber(), - startTag.getText(), - currLine, - url, - false - ), new CompositeTagData( - startTag,endTag,createChildrenNodeList() - ) - ); - } - - private NodeList createChildrenNodeList() { - NodeList childrenNodeList = new NodeList(); - childrenNodeList.add( - new StringNode( - scriptContents, - startTag.elementEnd(), - endTag.elementBegin()-1 - ) - ); - return childrenNodeList; - } - - private void createScriptEndTag(Tag tag, String currLine) { - // If end tag doesn't exist, create one - String endTagName = tag.getTagName(); - int endTagBegin = reader.getLastReadPosition()+1 ; - int endTagEnd = endTagBegin + endTagName.length() + 2; - endTag = new EndTag( - new TagData( - endTagBegin, - endTagEnd, - endTagName, - currLine - ) - ); - } - - private boolean isScriptEndTagNotFound() { - return endTag == null; - } - - private void extractScriptTagFrom(String currLine) throws ParserException { - String line = null; - scriptContents = new StringBuffer(); - endTagFound = false; - - endTag = null; - line = currLine; - sameLine = true; - startingPos = startTag.elementEnd(); - do { - doExtractionOfScriptContentsFrom(line); - if (!endTagFound) { - line = reader.getNextLine(); - startingPos = 0; - } - if (sameLine) - sameLine = false; - } - while (line!=null && !endTagFound); - } - - private void doExtractionOfScriptContentsFrom(String line) throws ParserException { - endTagLoc = line.toUpperCase().indexOf(getEndTag(),startingPos); - findStartingAndEndingLocations(line); - - if (endTagLoc!=-1) { - extractEndTagFrom(line); - } else { - continueParsing(line); - } - } - - private void continueParsing(String line) { - if (sameLine) - scriptContents.append( - line.substring( - startTag.elementEnd()+1 - ) - ); - else { - scriptContents.append(Parser.getLineSeparator()); - scriptContents.append(line); - } - } - - private void extractEndTagFrom(String line) throws ParserException { - endTagFound = true; - endTag = (EndTag)EndTag.find(line,endTagLoc); - if (sameLine) - scriptContents.append( - getCodeBetweenStartAndEndTags( - line, - startTag, - endTagLoc) - ); - else { - scriptContents.append(Parser.getLineSeparator()); - scriptContents.append(line.substring(0,endTagLoc)); - } - - reader.setPosInLine(endTag.elementEnd()); - } - - private void findStartingAndEndingLocations(String line) { - while (endTagLoc>0 && isThisEndTagLocationFalseMatch(line, endTagLoc)) { - startingPos = endTagLoc+getEndTag().length(); - endTagLoc = line.toUpperCase().indexOf(getEndTag(), startingPos); - } - } - - public String getCodeBetweenStartAndEndTags( - String line, - Tag startTag, - int endTagLoc) throws ParserException { - try { - - return line.substring( - startTag.elementEnd()+1, - endTagLoc - ); - } - catch (Exception e) { - StringBuffer msg = new StringBuffer("Error in getCodeBetweenStartAndEndTags():\n"); - msg.append("substring starts at: "+(startTag.elementEnd()+1)).append("\n"); - msg.append("substring ends at: "+(endTagLoc)); - throw new ParserException(msg.toString(),e); - } - } /** --- 82,85 ---- *************** *** 238,247 **** } ! private boolean isThisEndTagLocationFalseMatch(String line, int endTagLoc) { ! if (endTagLoc+getEndTag().length() > line.length()-1) return false; ! char charAfterSuspectedEndTag = ! line.charAt(endTagLoc+getEndTag().length()); ! return charAfterSuspectedEndTag=='"' || charAfterSuspectedEndTag=='\''; ! } } --- 92,96 ---- } ! } |