too many fixes to enumerate
git-svn-id: svn://10.0.0.236/trunk@6598 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -1001,6 +1001,88 @@ PRBool CNavDTD::CanContainFormElement(eHTMLTags aParent,eHTMLTags aChild) const
|
||||
return result;
|
||||
}
|
||||
|
||||
/***********************************************************************************
|
||||
The following tables determine the set of elements each tag can contain...
|
||||
***********************************************************************************/
|
||||
|
||||
static char gTagSet1[]={
|
||||
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_address, eHTMLTag_applet,
|
||||
eHTMLTag_blink, eHTMLTag_b, eHTMLTag_basefont, eHTMLTag_bdo,
|
||||
eHTMLTag_big,
|
||||
eHTMLTag_blockquote,eHTMLTag_br, eHTMLTag_button, eHTMLTag_center,
|
||||
eHTMLTag_cite, eHTMLTag_code, eHTMLTag_dfn, eHTMLTag_dir,
|
||||
eHTMLTag_div, eHTMLTag_dl, eHTMLTag_em, eHTMLTag_fieldset,
|
||||
eHTMLTag_embed,
|
||||
eHTMLTag_font, eHTMLTag_form, eHTMLTag_h1, eHTMLTag_h2,
|
||||
eHTMLTag_h3, eHTMLTag_h4, eHTMLTag_h5, eHTMLTag_h6,
|
||||
eHTMLTag_hr, eHTMLTag_i, eHTMLTag_iframe, eHTMLTag_img,
|
||||
eHTMLTag_input, eHTMLTag_isindex,
|
||||
|
||||
eHTMLTag_kbd, eHTMLTag_label, eHTMLTag_li,
|
||||
eHTMLTag_map, eHTMLTag_menu, eHTMLTag_newline, eHTMLTag_nobr,
|
||||
eHTMLTag_noframes, eHTMLTag_noscript,
|
||||
eHTMLTag_object, eHTMLTag_ol, eHTMLTag_p, eHTMLTag_pre,
|
||||
eHTMLTag_q, eHTMLTag_s, eHTMLTag_strike,
|
||||
eHTMLTag_samp, eHTMLTag_script, eHTMLTag_select, eHTMLTag_small,
|
||||
eHTMLTag_spacer, eHTMLTag_span, eHTMLTag_strong,
|
||||
eHTMLTag_sub, eHTMLTag_sup, eHTMLTag_table, eHTMLTag_text,
|
||||
|
||||
eHTMLTag_textarea, eHTMLTag_tt, eHTMLTag_u, eHTMLTag_ul,
|
||||
eHTMLTag_userdefined, eHTMLTag_var, eHTMLTag_wbr,
|
||||
eHTMLTag_whitespace,
|
||||
0};
|
||||
|
||||
static char gTagSet2[]={
|
||||
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_applet, eHTMLTag_blink,
|
||||
eHTMLTag_b,
|
||||
eHTMLTag_basefont, eHTMLTag_bdo, eHTMLTag_big, eHTMLTag_br,
|
||||
eHTMLTag_button, eHTMLTag_cite, eHTMLTag_code, eHTMLTag_dfn,
|
||||
eHTMLTag_div, eHTMLTag_em, eHTMLTag_font, eHTMLTag_hr,
|
||||
eHTMLTag_embed,
|
||||
eHTMLTag_i, eHTMLTag_iframe, eHTMLTag_img, eHTMLTag_input,
|
||||
eHTMLTag_kbd,
|
||||
|
||||
eHTMLTag_label, eHTMLTag_map, eHTMLTag_newline, eHTMLTag_nobr,
|
||||
eHTMLTag_object, eHTMLTag_p,
|
||||
eHTMLTag_q, eHTMLTag_s, eHTMLTag_strike,
|
||||
eHTMLTag_samp, eHTMLTag_script, eHTMLTag_select, eHTMLTag_small,
|
||||
eHTMLTag_spacer, eHTMLTag_span, eHTMLTag_strong,
|
||||
eHTMLTag_sub, eHTMLTag_sup, eHTMLTag_text, eHTMLTag_textarea,
|
||||
|
||||
eHTMLTag_table,// XXX kipp was here
|
||||
|
||||
eHTMLTag_tt, eHTMLTag_u, eHTMLTag_userdefined, eHTMLTag_var,
|
||||
eHTMLTag_wbr, eHTMLTag_whitespace,
|
||||
0};
|
||||
|
||||
static char gTagSet3[]={
|
||||
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_applet, eHTMLTag_blink,
|
||||
eHTMLTag_b,
|
||||
eHTMLTag_bdo, eHTMLTag_big, eHTMLTag_br, eHTMLTag_blockquote,
|
||||
eHTMLTag_body, eHTMLTag_caption, eHTMLTag_center, eHTMLTag_cite,
|
||||
eHTMLTag_code, eHTMLTag_dd, eHTMLTag_del, eHTMLTag_dfn,
|
||||
eHTMLTag_div, eHTMLTag_dt, eHTMLTag_em, eHTMLTag_fieldset,
|
||||
eHTMLTag_embed,
|
||||
eHTMLTag_font, eHTMLTag_form, eHTMLTag_h1, eHTMLTag_h2,
|
||||
eHTMLTag_h3, eHTMLTag_h4, eHTMLTag_h5, eHTMLTag_h6,
|
||||
eHTMLTag_i, eHTMLTag_iframe, eHTMLTag_ins, eHTMLTag_kbd,
|
||||
|
||||
eHTMLTag_label, eHTMLTag_legend, eHTMLTag_li, eHTMLTag_newline,
|
||||
|
||||
eHTMLTag_noframes,
|
||||
eHTMLTag_noscript, eHTMLTag_object, eHTMLTag_p, eHTMLTag_pre,
|
||||
eHTMLTag_q, eHTMLTag_s, eHTMLTag_strike,
|
||||
eHTMLTag_samp, eHTMLTag_small, eHTMLTag_spacer,
|
||||
eHTMLTag_span, eHTMLTag_strong, eHTMLTag_sub, eHTMLTag_sup,
|
||||
eHTMLTag_td, eHTMLTag_text,
|
||||
|
||||
eHTMLTag_th, eHTMLTag_tt, eHTMLTag_u, eHTMLTag_userdefined,
|
||||
eHTMLTag_var, eHTMLTag_wbr, eHTMLTag_whitespace,
|
||||
0};
|
||||
|
||||
/***********************************************************************************
|
||||
The preceeding tables determine the set of elements each tag can contain...
|
||||
***********************************************************************************/
|
||||
|
||||
/**
|
||||
* This method is called to determine whether or not a tag
|
||||
@@ -1015,81 +1097,6 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) {
|
||||
|
||||
PRBool result=PR_FALSE;
|
||||
|
||||
static char gTagSet1[]={
|
||||
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_address, eHTMLTag_applet,
|
||||
eHTMLTag_blink, eHTMLTag_b, eHTMLTag_basefont, eHTMLTag_bdo,
|
||||
eHTMLTag_big,
|
||||
eHTMLTag_blockquote,eHTMLTag_br, eHTMLTag_button, eHTMLTag_center,
|
||||
eHTMLTag_cite, eHTMLTag_code, eHTMLTag_dfn, eHTMLTag_dir,
|
||||
eHTMLTag_div, eHTMLTag_dl, eHTMLTag_em, eHTMLTag_fieldset,
|
||||
eHTMLTag_embed,
|
||||
eHTMLTag_font, eHTMLTag_form, eHTMLTag_h1, eHTMLTag_h2,
|
||||
eHTMLTag_h3, eHTMLTag_h4, eHTMLTag_h5, eHTMLTag_h6,
|
||||
eHTMLTag_hr, eHTMLTag_i, eHTMLTag_iframe, eHTMLTag_img,
|
||||
eHTMLTag_input, eHTMLTag_isindex,
|
||||
|
||||
eHTMLTag_kbd, eHTMLTag_label, eHTMLTag_li,
|
||||
eHTMLTag_map, eHTMLTag_menu, eHTMLTag_newline, eHTMLTag_nobr,
|
||||
eHTMLTag_noframes, eHTMLTag_noscript,
|
||||
eHTMLTag_object, eHTMLTag_ol, eHTMLTag_p, eHTMLTag_pre,
|
||||
eHTMLTag_q, eHTMLTag_s, eHTMLTag_strike,
|
||||
eHTMLTag_samp, eHTMLTag_script, eHTMLTag_select, eHTMLTag_small,
|
||||
eHTMLTag_spacer, eHTMLTag_span, eHTMLTag_strong,
|
||||
eHTMLTag_sub, eHTMLTag_sup, eHTMLTag_table, eHTMLTag_text,
|
||||
|
||||
eHTMLTag_textarea, eHTMLTag_tt, eHTMLTag_u, eHTMLTag_ul,
|
||||
eHTMLTag_userdefined, eHTMLTag_var,
|
||||
eHTMLTag_whitespace,
|
||||
0};
|
||||
|
||||
static char gTagSet2[]={
|
||||
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_applet, eHTMLTag_blink,
|
||||
eHTMLTag_b,
|
||||
eHTMLTag_basefont, eHTMLTag_bdo, eHTMLTag_big, eHTMLTag_br,
|
||||
eHTMLTag_button, eHTMLTag_cite, eHTMLTag_code, eHTMLTag_dfn,
|
||||
eHTMLTag_div, eHTMLTag_em, eHTMLTag_font, eHTMLTag_hr,
|
||||
eHTMLTag_embed,
|
||||
eHTMLTag_i, eHTMLTag_iframe, eHTMLTag_img, eHTMLTag_input,
|
||||
eHTMLTag_kbd,
|
||||
|
||||
eHTMLTag_label, eHTMLTag_map, eHTMLTag_newline, eHTMLTag_nobr,
|
||||
eHTMLTag_object, eHTMLTag_p,
|
||||
eHTMLTag_q, eHTMLTag_s, eHTMLTag_strike,
|
||||
eHTMLTag_samp, eHTMLTag_script, eHTMLTag_select, eHTMLTag_small,
|
||||
eHTMLTag_spacer, eHTMLTag_span, eHTMLTag_strong,
|
||||
eHTMLTag_sub, eHTMLTag_sup, eHTMLTag_text, eHTMLTag_textarea,
|
||||
|
||||
eHTMLTag_table,// XXX kipp was here
|
||||
|
||||
eHTMLTag_tt, eHTMLTag_u, eHTMLTag_userdefined, eHTMLTag_var,
|
||||
eHTMLTag_whitespace,
|
||||
0};
|
||||
|
||||
static char gTagSet3[]={
|
||||
eHTMLTag_a, eHTMLTag_acronym, eHTMLTag_applet, eHTMLTag_blink,
|
||||
eHTMLTag_b,
|
||||
eHTMLTag_bdo, eHTMLTag_big, eHTMLTag_br, eHTMLTag_blockquote,
|
||||
eHTMLTag_body, eHTMLTag_caption, eHTMLTag_center, eHTMLTag_cite,
|
||||
eHTMLTag_code, eHTMLTag_dd, eHTMLTag_del, eHTMLTag_dfn,
|
||||
eHTMLTag_div, eHTMLTag_dt, eHTMLTag_em, eHTMLTag_fieldset,
|
||||
eHTMLTag_embed,
|
||||
eHTMLTag_font, eHTMLTag_form, eHTMLTag_h1, eHTMLTag_h2,
|
||||
eHTMLTag_h3, eHTMLTag_h4, eHTMLTag_h5, eHTMLTag_h6,
|
||||
eHTMLTag_i, eHTMLTag_iframe, eHTMLTag_ins, eHTMLTag_kbd,
|
||||
|
||||
eHTMLTag_label, eHTMLTag_legend, eHTMLTag_li, eHTMLTag_newline,
|
||||
|
||||
eHTMLTag_noframes,
|
||||
eHTMLTag_noscript, eHTMLTag_object, eHTMLTag_p, eHTMLTag_pre,
|
||||
eHTMLTag_q, eHTMLTag_s, eHTMLTag_strike,
|
||||
eHTMLTag_samp, eHTMLTag_small, eHTMLTag_spacer,
|
||||
eHTMLTag_span, eHTMLTag_strong, eHTMLTag_sub, eHTMLTag_sup,
|
||||
eHTMLTag_td, eHTMLTag_text,
|
||||
|
||||
eHTMLTag_th, eHTMLTag_tt, eHTMLTag_u, eHTMLTag_userdefined,
|
||||
eHTMLTag_var, eHTMLTag_whitespace,
|
||||
0};
|
||||
|
||||
//This hack code is here because we don't yet know what to do
|
||||
//with userdefined tags... XXX Hack
|
||||
if(eHTMLTag_userdefined==aChild) // XXX Hack: For now...
|
||||
@@ -1150,7 +1157,16 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) {
|
||||
case eHTMLTag_tt:
|
||||
case eHTMLTag_u:
|
||||
case eHTMLTag_var:
|
||||
result=PRBool(0!=strchr(gTagSet1,aChild));
|
||||
{
|
||||
static char listtags[]={eHTMLTag_li,0};
|
||||
|
||||
if(0!=strchr(listtags,aChild)) {
|
||||
//This code was added to enforce the rule that listitems autoclose prior listitems.
|
||||
//Stylistic tags (including <A>) that get in the way are simply out of luck.
|
||||
result=false;
|
||||
}
|
||||
else result=PRBool(0!=strchr(gTagSet1,aChild));
|
||||
}
|
||||
break;
|
||||
|
||||
case eHTMLTag_blockquote:
|
||||
@@ -1173,14 +1189,24 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) {
|
||||
case eHTMLTag_colgroup:
|
||||
break; //singletons can't contain anything...
|
||||
|
||||
case eHTMLTag_dd:
|
||||
case eHTMLTag_dt:
|
||||
{
|
||||
static char datalistTags[]={eHTMLTag_dt,eHTMLTag_dd,0};
|
||||
|
||||
if(0!=strchr(datalistTags,aChild)) {
|
||||
result=PR_TRUE;
|
||||
}
|
||||
else result=PRBool(0!=strchr(gTagSet1,aChild)); break;
|
||||
}
|
||||
break;
|
||||
|
||||
case eHTMLTag_dd:
|
||||
case eHTMLTag_div:
|
||||
result=PRBool(0!=strchr(gTagSet1,aChild)); break;
|
||||
|
||||
case eHTMLTag_dl:
|
||||
{
|
||||
char okTags[]={eHTMLTag_dd,eHTMLTag_dt,eHTMLTag_whitespace,eHTMLTag_newline,0};
|
||||
char okTags[]={eHTMLTag_dd,eHTMLTag_dt,eHTMLTag_whitespace,eHTMLTag_newline,eHTMLTag_p,0};
|
||||
result=PRBool(0!=strchr(okTags,aChild));
|
||||
}
|
||||
break;
|
||||
@@ -1232,6 +1258,11 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) {
|
||||
break;
|
||||
|
||||
case eHTMLTag_iframe:/* XXX wrong */
|
||||
if(eHTMLTag_frame==aChild)
|
||||
result=PR_FALSE;
|
||||
else result=PRBool(0!=strchr(gTagSet1,aChild));
|
||||
break;
|
||||
|
||||
case eHTMLTag_label:
|
||||
case eHTMLTag_legend:/* XXX not sure */
|
||||
result=PRBool(0!=strchr(gTagSet1,aChild)); break;
|
||||
@@ -1284,9 +1315,18 @@ PRBool CNavDTD::CanContain(PRInt32 aParent,PRInt32 aChild) {
|
||||
result=PRBool(eHTMLTag_option!=aChild); break;
|
||||
|
||||
case eHTMLTag_p:
|
||||
if(eHTMLTag_p==aChild)
|
||||
result=PR_FALSE;
|
||||
else result=PRBool(0!=strchr(gTagSet2,aChild)); break;
|
||||
{
|
||||
static char datalistTags[]={eHTMLTag_dt,eHTMLTag_dd,0};
|
||||
|
||||
if(eHTMLTag_p==aChild)
|
||||
result=PR_FALSE;
|
||||
else if(0!=strchr(datalistTags,aChild)) {
|
||||
//we now allow DT/DD inside a paragraph, so long as a DL is open...
|
||||
if(PR_TRUE==HasOpenContainer(eHTMLTag_dl))
|
||||
result=PR_TRUE;
|
||||
}
|
||||
else result=PRBool(0!=strchr(gTagSet2,aChild)); break;
|
||||
}
|
||||
break;
|
||||
|
||||
case eHTMLTag_object:
|
||||
@@ -1456,7 +1496,7 @@ PRBool CNavDTD::CanOmit(eHTMLTags aParent,eHTMLTags aChild) const {
|
||||
break;
|
||||
|
||||
case eHTMLTag_entity:
|
||||
switch((eHTMLTags)aParent) {
|
||||
switch(aParent) {
|
||||
case eHTMLTag_tr: case eHTMLTag_table:
|
||||
case eHTMLTag_thead: case eHTMLTag_tfoot:
|
||||
case eHTMLTag_tbody:
|
||||
@@ -1466,6 +1506,11 @@ PRBool CNavDTD::CanOmit(eHTMLTags aParent,eHTMLTags aChild) const {
|
||||
} //switch
|
||||
break;
|
||||
|
||||
case eHTMLTag_frame:
|
||||
if(eHTMLTag_iframe==aParent)
|
||||
result=PR_TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
if(eHTMLTag_unknown==aParent)
|
||||
result=PR_FALSE;
|
||||
@@ -2719,7 +2764,7 @@ CNavDTD::ConsumeContentToEndTag(const nsString& aString,
|
||||
* @return new token or null
|
||||
*/
|
||||
|
||||
static char gSpecialTags[]={ eHTMLTag_script, eHTMLTag_style, eHTMLTag_title, eHTMLTag_textarea, 0};
|
||||
static char gSkippedContentTags[]={ eHTMLTag_script, eHTMLTag_style, eHTMLTag_title, eHTMLTag_textarea, 0};
|
||||
|
||||
nsresult
|
||||
CNavDTD::ConsumeStartTag(PRUnichar aChar,CScanner& aScanner,CToken*& aToken) {
|
||||
@@ -2741,7 +2786,7 @@ CNavDTD::ConsumeStartTag(PRUnichar aChar,CScanner& aScanner,CToken*& aToken) {
|
||||
|
||||
eHTMLTags theTag=(eHTMLTags)aToken->GetTypeID();
|
||||
|
||||
if(0!=strchr(gSpecialTags,theTag)){
|
||||
if(0!=strchr(gSkippedContentTags,theTag)){
|
||||
|
||||
//Do special case handling for <script>, <style>, <title> or <textarea>...
|
||||
CToken* skippedToken=0;
|
||||
|
||||
@@ -519,6 +519,7 @@ PRInt32 CTextToken::GetTokenType(void) {
|
||||
*/
|
||||
nsresult CTextToken::Consume(PRUnichar, CScanner& aScanner) {
|
||||
static nsAutoString terminals("&<\r\n");
|
||||
mStringInit=PR_TRUE;
|
||||
nsresult result=aScanner.ReadUntil(mTextValue,terminals,PR_FALSE);
|
||||
return result;
|
||||
};
|
||||
@@ -581,6 +582,7 @@ nsresult CCommentToken::Consume(PRUnichar, CScanner& aScanner) {
|
||||
//if you're here, we're consuming a "short-form" comment
|
||||
mTextValue+=ch;
|
||||
result=aScanner.ReadUntil(mTextValue,terminals,PR_TRUE);
|
||||
mStringInit=PR_TRUE;
|
||||
return result;
|
||||
};
|
||||
|
||||
@@ -694,6 +696,7 @@ nsresult CNewlineToken::Consume(PRUnichar aChar, CScanner& aScanner) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
mStringInit=PR_TRUE;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -883,6 +886,7 @@ nsresult CAttributeToken::Consume(PRUnichar aChar, CScanner& aScanner) {
|
||||
mLastAttribute= PRBool((kGreaterThan==aChar) || (kEOF==result));
|
||||
}
|
||||
}
|
||||
mStringInit=PR_TRUE;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -966,6 +970,7 @@ nsresult CWhitespaceToken::Consume(PRUnichar aChar, CScanner& aScanner) {
|
||||
if(NS_OK==result) {
|
||||
mTextValue.StripChars("\r");
|
||||
}
|
||||
mStringInit=PR_TRUE;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1007,6 +1012,7 @@ nsresult CEntityToken::Consume(PRUnichar aChar, CScanner& aScanner) {
|
||||
if(aChar)
|
||||
mTextValue=aChar;
|
||||
nsresult result=ConsumeEntity(aChar,mTextValue,aScanner);
|
||||
mStringInit=PR_TRUE;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1341,10 +1347,8 @@ const char* CSkippedContentToken::GetClassName(void) {
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*
|
||||
* @update gess 3/25/98
|
||||
* @param
|
||||
* Retrieve the token type as an int.
|
||||
* @update gess 3/25/98
|
||||
* @return
|
||||
*/
|
||||
PRInt32 CSkippedContentToken::GetTokenType(void) {
|
||||
@@ -1352,11 +1356,14 @@ PRInt32 CSkippedContentToken::GetTokenType(void) {
|
||||
}
|
||||
|
||||
/*
|
||||
* Consume content until you find a sequence that matches
|
||||
* this objects mTextValue.
|
||||
* Consume content until you find an end sequence that matches
|
||||
* this objects current mTextValue. Note that this is complicated
|
||||
* by the fact that you can be parsing content that itself
|
||||
* contains quoted content of the same type (like <SCRIPT>).
|
||||
* That means we have to look for quote-pairs, and ignore the
|
||||
* content inside them.
|
||||
*
|
||||
* @update gess 3/25/98
|
||||
* @param aChar -- last char consumed from stream
|
||||
* @update gess 7/25/98
|
||||
* @param aScanner -- controller of underlying input source
|
||||
* @return error result
|
||||
*/
|
||||
@@ -1364,14 +1371,27 @@ nsresult CSkippedContentToken::Consume(PRUnichar,CScanner& aScanner) {
|
||||
PRBool done=PR_FALSE;
|
||||
nsresult result=NS_OK;
|
||||
nsString temp;
|
||||
int parens=0;
|
||||
char lastChar;
|
||||
|
||||
// while((!done) && (!aScanner.Eof())) {
|
||||
static nsAutoString terminals(">()");
|
||||
while((!done) && (NS_OK==result)) {
|
||||
static nsAutoString terminals(">");
|
||||
result=aScanner.ReadUntil(temp,terminals,PR_TRUE);
|
||||
done=PRBool(kNotFound!=temp.RFind(mTextValue,PR_TRUE));
|
||||
int len=temp.Length();
|
||||
lastChar=char(temp[len-1]);
|
||||
switch(lastChar){
|
||||
case kLeftParen:
|
||||
parens++; break;
|
||||
case kRightParen:
|
||||
parens--; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if((0==parens) && (kGreaterThan==lastChar))
|
||||
done=PRBool(kNotFound!=temp.RFind(mTextValue,PR_TRUE));
|
||||
}
|
||||
mTextValue=temp;
|
||||
mStringInit=PR_TRUE;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,6 @@ CScanner::CScanner(nsString& aFilename,PRBool aCreateStream) :
|
||||
{
|
||||
mIncremental=PR_TRUE;
|
||||
mOffset=0;
|
||||
mMarkPos=-1;
|
||||
mTotalRead=0;
|
||||
mOwnsStream=aCreateStream;
|
||||
mFileStream=0;
|
||||
@@ -93,7 +92,6 @@ CScanner::CScanner(nsString& aFilename,fstream& aStream,PRBool assumeOwnership)
|
||||
{
|
||||
mIncremental=PR_TRUE;
|
||||
mOffset=0;
|
||||
mMarkPos=-1;
|
||||
mTotalRead=0;
|
||||
mOwnsStream=assumeOwnership;
|
||||
mFileStream=&aStream;
|
||||
@@ -127,10 +125,11 @@ CScanner::~CScanner() {
|
||||
* @return
|
||||
*/
|
||||
PRInt32 CScanner::RewindToMark(void){
|
||||
mOffset=mMarkPos;
|
||||
mOffset=0;
|
||||
return mOffset;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Records current offset position in input stream. This allows us
|
||||
* to back up to this point if the need should arise, such as when
|
||||
@@ -141,32 +140,10 @@ PRInt32 CScanner::RewindToMark(void){
|
||||
* @return
|
||||
*/
|
||||
PRInt32 CScanner::Mark(void){
|
||||
mMarkPos=mOffset;
|
||||
return mMarkPos;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @update gess 5/12/98
|
||||
*/
|
||||
void _PreCompressBuffer(nsString& aBuffer,PRInt32& anOffset,PRInt32& aMarkPos){
|
||||
//To determine how much of our internal buffer to truncate,
|
||||
//we should check mMarkPos. That represents the point at which
|
||||
//we've guaranteed the client we can back up to, so make sure
|
||||
//you don't lose any of the data beyond that point.
|
||||
|
||||
PRInt32 len=aBuffer.Length();
|
||||
if((aMarkPos<len) && (aMarkPos>0)) {
|
||||
aBuffer.Cut(0,aMarkPos);
|
||||
anOffset-=aMarkPos;
|
||||
aMarkPos=0;
|
||||
}
|
||||
else if((anOffset==aMarkPos) && (0<aMarkPos)) {
|
||||
aBuffer.Truncate();
|
||||
anOffset=0;
|
||||
}
|
||||
// aMarkPos=0;
|
||||
if(mOffset>0)
|
||||
mBuffer.Cut(0,mOffset); //delete chars up to mark position
|
||||
mOffset=0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -178,7 +155,6 @@ void _PreCompressBuffer(nsString& aBuffer,PRInt32& anOffset,PRInt32& aMarkPos){
|
||||
* @return error code
|
||||
*/
|
||||
PRBool CScanner::Append(nsString& aBuffer) {
|
||||
_PreCompressBuffer(mBuffer,mOffset,mMarkPos);
|
||||
mBuffer.Append(aBuffer);
|
||||
mTotalRead+=aBuffer.Length();
|
||||
return PR_TRUE;
|
||||
@@ -192,7 +168,6 @@ PRBool CScanner::Append(nsString& aBuffer) {
|
||||
* @return
|
||||
*/
|
||||
PRBool CScanner::Append(const char* aBuffer, PRInt32 aLen){
|
||||
_PreCompressBuffer(mBuffer,mOffset,mMarkPos);
|
||||
mBuffer.Append(aBuffer,aLen);
|
||||
mTotalRead+=aLen;
|
||||
return PR_TRUE;
|
||||
@@ -207,8 +182,6 @@ PRBool CScanner::Append(const char* aBuffer, PRInt32 aLen){
|
||||
nsresult CScanner::FillBuffer(void) {
|
||||
nsresult anError=NS_OK;
|
||||
|
||||
_PreCompressBuffer(mBuffer,mOffset,mMarkPos);
|
||||
|
||||
if(!mFileStream) {
|
||||
//This is DEBUG code!!!!!! XXX DEBUG XXX
|
||||
//If you're here, it means someone tried to load a
|
||||
|
||||
@@ -259,7 +259,6 @@ class CScanner {
|
||||
nsString mBuffer;
|
||||
nsString mFilename;
|
||||
PRInt32 mOffset;
|
||||
PRInt32 mMarkPos;
|
||||
PRInt32 mTotalRead;
|
||||
PRBool mOwnsStream;
|
||||
PRBool mIncremental;
|
||||
|
||||
Reference in New Issue
Block a user