[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 ----
}
!
}
|