diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
index d76161d50d6..8db6833924e 100644
--- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
@@ -432,6 +432,122 @@ AddAttributes(const nsIParserNode& aNode,
return NS_OK;
}
+static nsresult
+MakeContentObject(nsHTMLTag aNodeType,
+ nsIAtom* aAtom,
+ nsIFormManager* aForm,
+ nsIWebShell* aWebShell,
+ nsIHTMLContent** aResult)
+{
+ nsresult rv = NS_OK;
+ switch (aNodeType) {
+ case eHTMLTag_a:
+ rv = NS_NewHTMLAnchor(aResult, aAtom);
+ break;
+ case eHTMLTag_applet:
+ rv = NS_NewHTMLApplet(aResult, aAtom);
+ break;
+ case eHTMLTag_area:
+ rv = NS_NewHTMLArea(aResult, aAtom);
+ break;
+ case eHTMLTag_base:
+ rv = NS_NewHTMLBase(aResult, aAtom);
+ break;
+ case eHTMLTag_basefont:
+ rv = NS_NewHTMLBaseFont(aResult, aAtom);
+ break;
+ case eHTMLTag_body:
+ rv = NS_NewBodyPart(aResult, aAtom);
+ break;
+ case eHTMLTag_br:
+ rv = NS_NewHTMLBR(aResult, aAtom);
+ break;
+ case eHTMLTag_caption:
+ rv = NS_NewTableCaptionPart(aResult, aAtom);
+ break;
+ case eHTMLTag_col:
+ rv = NS_NewTableColPart(aResult, aAtom);
+ break;
+ case eHTMLTag_colgroup:
+ rv = NS_NewTableColGroupPart(aResult, aAtom);
+ break;
+ case eHTMLTag_embed:
+ rv = NS_NewHTMLEmbed(aResult, aAtom);
+ break;
+// case eHTMLTag_form:
+// rv = NS_NewHTMLForm(aResult, aAtom);
+// break;
+ case eHTMLTag_frame:
+ rv = NS_NewHTMLFrame(aResult, aAtom, aWebShell);
+ break;
+ case eHTMLTag_frameset:
+ rv = NS_NewHTMLFrameset(aResult, aAtom, aWebShell);
+ break;
+ case eHTMLTag_hr:
+ rv = NS_NewHTMLHR(aResult, aAtom);
+ break;
+ case eHTMLTag_iframe:
+ rv = NS_NewHTMLIFrame(aResult, aAtom, aWebShell);
+ break;
+ case eHTMLTag_input:
+ rv = NS_NewHTMLInput(aResult, aAtom);
+ break;
+ case eHTMLTag_link:
+ rv = NS_NewHTMLLink(aResult, aAtom);
+ break;
+ case eHTMLTag_meta:
+ rv = NS_NewHTMLMeta(aResult, aAtom);
+ break;
+ case eHTMLTag_object:
+ rv = NS_NewHTMLObject(aResult, aAtom);
+ break;
+ case eHTMLTag_option:
+ rv = NS_NewHTMLOption(aResult, aAtom);
+ break;
+ case eHTMLTag_param:
+ rv = NS_NewHTMLParam(aResult, aAtom);
+ break;
+ case eHTMLTag_script:
+ rv = NS_NewHTMLScript(aResult, aAtom);
+ break;
+ case eHTMLTag_select:
+ rv = NS_NewHTMLSelect(aResult, aAtom, aForm);
+ break;
+ case eHTMLTag_spacer:
+ rv = NS_NewHTMLSpacer(aResult, aAtom);
+ break;
+ case eHTMLTag_style:
+ rv = NS_NewHTMLStyle(aResult, aAtom);
+ break;
+ case eHTMLTag_table:
+ rv = NS_NewTablePart(aResult, aAtom);
+ break;
+ case eHTMLTag_tbody:
+ case eHTMLTag_thead:
+ case eHTMLTag_tfoot:
+ rv = NS_NewTableRowGroupPart(aResult, aAtom);
+ break;
+ case eHTMLTag_td:
+ case eHTMLTag_th:
+ rv = NS_NewTableCellPart(aResult, aAtom);
+ break;
+ case eHTMLTag_tr:
+ rv = NS_NewTableRowPart(aResult, aAtom);
+ break;
+ case eHTMLTag_wbr:
+ rv = NS_NewHTMLWordBreak(aResult, aAtom);
+ break;
+ default:
+ rv = NS_NewHTMLContainer(aResult, aAtom);
+ break;
+
+ case eHTMLTag_title:
+ NS_NOTREACHED("illegal MakeContentObject call");
+ break;
+ }
+ return rv;
+}
+
/**
* Factory subroutine to create all of the html content objects.
*/
@@ -442,7 +558,7 @@ CreateContentObject(const nsIParserNode& aNode,
nsIWebShell* aWebShell,
nsIHTMLContent** aResult)
{
- // Find/create auto for the tag name
+ // Find/create atom for the tag name
nsAutoString tmp;
if (eHTMLTag_userdefined == aNodeType) {
tmp.Append(aNode.GetText());
@@ -456,48 +572,14 @@ CreateContentObject(const nsIParserNode& aNode,
return NS_ERROR_OUT_OF_MEMORY;
}
- // Create content object for the given tag
- nsresult rv = NS_OK;
+ // Make the content object
+ nsresult rv;
+
+ // XXX right now this code is here because we need aNode to create
+ // images, textareas and input form elements. As soon as all of the
+ // generic content code is in use, it can be moved up into
+ // MakeContentObject
switch (aNodeType) {
- case eHTMLTag_a:
- rv = NS_NewHTMLAnchor(aResult, atom);
- break;
- case eHTMLTag_applet:
- rv = NS_NewHTMLApplet(aResult, atom);
- break;
- case eHTMLTag_body:
- rv = NS_NewBodyPart(aResult, atom);
- break;
- case eHTMLTag_br:
- rv = NS_NewHTMLBR(aResult, atom);
- break;
- case eHTMLTag_caption:
- rv = NS_NewTableCaptionPart(aResult, atom);
- break;
- case eHTMLTag_col:
- rv = NS_NewTableColPart(aResult, atom);
- break;
- case eHTMLTag_colgroup:
- rv = NS_NewTableColGroupPart(aResult, atom);
- break;
- case eHTMLTag_embed:
- rv = NS_NewHTMLEmbed(aResult, atom);
- break;
-// case eHTMLTag_form:
-// rv = NS_NewHTMLForm(aResult, atom);
-// break;
- case eHTMLTag_frame:
- rv = NS_NewHTMLFrame(aResult, atom, aWebShell);
- break;
- case eHTMLTag_frameset:
- rv = NS_NewHTMLFrameset(aResult, atom, aWebShell);
- break;
- case eHTMLTag_hr:
- rv = NS_NewHTMLHR(aResult, atom);
- break;
- case eHTMLTag_iframe:
- rv = NS_NewHTMLIFrame(aResult, atom, aWebShell);
- break;
case eHTMLTag_img:
#ifdef XXX_ART_HACK
{
@@ -553,104 +635,67 @@ CreateContentObject(const nsIParserNode& aNode,
#endif /* XXX */
break;
case eHTMLTag_input:
- {
- nsAutoString val;
- if (FindAttribute(aNode, "type", val)) {
- if (val.EqualsIgnoreCase("submit")) {
- rv = NS_NewHTMLInputSubmit(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("reset")) {
- rv = NS_NewHTMLInputReset(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("button")) {
- rv = NS_NewHTMLInputButton(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("checkbox")) {
- rv = NS_NewHTMLInputCheckbox(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("file")) {
- rv = NS_NewHTMLInputFile(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("hidden")) {
- rv = NS_NewHTMLInputHidden(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("image")) {
- rv = NS_NewHTMLInputImage(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("password")) {
- rv = NS_NewHTMLInputPassword(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("radio")) {
- rv = NS_NewHTMLInputRadio(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("text")) {
- rv = NS_NewHTMLInputText(aResult, atom, aForm);
+ {
+ nsAutoString val;
+ if (FindAttribute(aNode, "type", val)) {
+ if (val.EqualsIgnoreCase("submit")) {
+ rv = NS_NewHTMLInputSubmit(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("reset")) {
+ rv = NS_NewHTMLInputReset(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("button")) {
+ rv = NS_NewHTMLInputButton(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("checkbox")) {
+ rv = NS_NewHTMLInputCheckbox(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("file")) {
+ rv = NS_NewHTMLInputFile(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("hidden")) {
+ rv = NS_NewHTMLInputHidden(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("image")) {
+ rv = NS_NewHTMLInputImage(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("password")) {
+ rv = NS_NewHTMLInputPassword(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("radio")) {
+ rv = NS_NewHTMLInputRadio(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("text")) {
+ rv = NS_NewHTMLInputText(aResult, atom, aForm);
+ }
+ else {
+ rv = NS_NewHTMLInputText(aResult, atom, aForm);
+ }
}
else {
rv = NS_NewHTMLInputText(aResult, atom, aForm);
}
}
- else {
- rv = NS_NewHTMLInputText(aResult, atom, aForm);
- }
- }
- break;
- case eHTMLTag_meta:
- rv = NS_NewHTMLMeta(aResult, atom);
- break;
- case eHTMLTag_object:
- rv = NS_NewHTMLObject(aResult, atom);
- break;
- case eHTMLTag_option:
- rv = NS_NewHTMLOption(aResult, atom);
- break;
- case eHTMLTag_select:
- rv = NS_NewHTMLSelect(aResult, atom, aForm);
- break;
- case eHTMLTag_spacer:
- rv = NS_NewHTMLSpacer(aResult, atom);
- break;
- case eHTMLTag_table:
- rv = NS_NewTablePart(aResult, atom);
- break;
- case eHTMLTag_tbody:
- case eHTMLTag_thead:
- case eHTMLTag_tfoot:
- rv = NS_NewTableRowGroupPart(aResult, atom);
- break;
- case eHTMLTag_td:
- case eHTMLTag_th:
- rv = NS_NewTableCellPart(aResult, atom);
break;
case eHTMLTag_textarea:
- {
- const nsString& content = aNode.GetSkippedContent();
- nsresult rv = NS_NewHTMLTextArea(aResult, atom, aForm);
- if (NS_OK == rv) {
- // If the text area has some content, give it to it now
- if (content.Length() > 0) {
- nsIFormControl* ctrl;
- rv = (*aResult)->QueryInterface(kIFormControlIID, (void **)&ctrl);
- if (NS_OK == rv) {
- ctrl->SetContent(content);
- NS_RELEASE(ctrl);
+ {
+ const nsString& content = aNode.GetSkippedContent();
+ nsresult rv = NS_NewHTMLTextArea(aResult, atom, aForm);
+ if (NS_OK == rv) {
+ // If the text area has some content, give it to it now
+ if (content.Length() > 0) {
+ nsIFormControl* ctrl;
+ rv = (*aResult)->QueryInterface(kIFormControlIID, (void **)&ctrl);
+ if (NS_OK == rv) {
+ ctrl->SetContent(content);
+ NS_RELEASE(ctrl);
+ }
}
}
}
- }
- break;
- case eHTMLTag_tr:
- rv = NS_NewTableRowPart(aResult, atom);
- break;
- case eHTMLTag_wbr:
- rv = NS_NewHTMLWordBreak(aResult, atom);
break;
default:
- rv = NS_NewHTMLContainer(aResult, atom);
- break;
-
- case eHTMLTag_title:
- NS_NOTREACHED("illegal CreateContentObject call");
+ rv = MakeContentObject(aNodeType, atom, aForm, aWebShell, aResult);
break;
}
NS_RELEASE(atom);
@@ -658,6 +703,27 @@ CreateContentObject(const nsIParserNode& aNode,
return rv;
}
+nsresult
+NS_CreateHTMLElement(nsIHTMLContent** aResult, const nsString& aTag)
+{
+ // Find tag in tag table
+ nsAutoString tmp(aTag);
+ tmp.ToUpperCase();
+ char cbuf[20];
+ tmp.ToCString(cbuf, sizeof(cbuf));
+ nsHTMLTag id = NS_TagToEnum(cbuf);
+ if (eHTMLTag_userdefined == id) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ // Create atom for tag and then create content object
+ nsIAtom* atom = NS_NewAtom(tmp);
+ nsresult rv = MakeContentObject(id, atom, nsnull, nsnull, aResult);
+ NS_RELEASE(atom);
+
+ return rv;
+}
+
//----------------------------------------------------------------------
SinkContext::SinkContext(HTMLContentSink* aSink)
diff --git a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
index d76161d50d6..8db6833924e 100644
--- a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
@@ -432,6 +432,122 @@ AddAttributes(const nsIParserNode& aNode,
return NS_OK;
}
+static nsresult
+MakeContentObject(nsHTMLTag aNodeType,
+ nsIAtom* aAtom,
+ nsIFormManager* aForm,
+ nsIWebShell* aWebShell,
+ nsIHTMLContent** aResult)
+{
+ nsresult rv = NS_OK;
+ switch (aNodeType) {
+ case eHTMLTag_a:
+ rv = NS_NewHTMLAnchor(aResult, aAtom);
+ break;
+ case eHTMLTag_applet:
+ rv = NS_NewHTMLApplet(aResult, aAtom);
+ break;
+ case eHTMLTag_area:
+ rv = NS_NewHTMLArea(aResult, aAtom);
+ break;
+ case eHTMLTag_base:
+ rv = NS_NewHTMLBase(aResult, aAtom);
+ break;
+ case eHTMLTag_basefont:
+ rv = NS_NewHTMLBaseFont(aResult, aAtom);
+ break;
+ case eHTMLTag_body:
+ rv = NS_NewBodyPart(aResult, aAtom);
+ break;
+ case eHTMLTag_br:
+ rv = NS_NewHTMLBR(aResult, aAtom);
+ break;
+ case eHTMLTag_caption:
+ rv = NS_NewTableCaptionPart(aResult, aAtom);
+ break;
+ case eHTMLTag_col:
+ rv = NS_NewTableColPart(aResult, aAtom);
+ break;
+ case eHTMLTag_colgroup:
+ rv = NS_NewTableColGroupPart(aResult, aAtom);
+ break;
+ case eHTMLTag_embed:
+ rv = NS_NewHTMLEmbed(aResult, aAtom);
+ break;
+// case eHTMLTag_form:
+// rv = NS_NewHTMLForm(aResult, aAtom);
+// break;
+ case eHTMLTag_frame:
+ rv = NS_NewHTMLFrame(aResult, aAtom, aWebShell);
+ break;
+ case eHTMLTag_frameset:
+ rv = NS_NewHTMLFrameset(aResult, aAtom, aWebShell);
+ break;
+ case eHTMLTag_hr:
+ rv = NS_NewHTMLHR(aResult, aAtom);
+ break;
+ case eHTMLTag_iframe:
+ rv = NS_NewHTMLIFrame(aResult, aAtom, aWebShell);
+ break;
+ case eHTMLTag_input:
+ rv = NS_NewHTMLInput(aResult, aAtom);
+ break;
+ case eHTMLTag_link:
+ rv = NS_NewHTMLLink(aResult, aAtom);
+ break;
+ case eHTMLTag_meta:
+ rv = NS_NewHTMLMeta(aResult, aAtom);
+ break;
+ case eHTMLTag_object:
+ rv = NS_NewHTMLObject(aResult, aAtom);
+ break;
+ case eHTMLTag_option:
+ rv = NS_NewHTMLOption(aResult, aAtom);
+ break;
+ case eHTMLTag_param:
+ rv = NS_NewHTMLParam(aResult, aAtom);
+ break;
+ case eHTMLTag_script:
+ rv = NS_NewHTMLScript(aResult, aAtom);
+ break;
+ case eHTMLTag_select:
+ rv = NS_NewHTMLSelect(aResult, aAtom, aForm);
+ break;
+ case eHTMLTag_spacer:
+ rv = NS_NewHTMLSpacer(aResult, aAtom);
+ break;
+ case eHTMLTag_style:
+ rv = NS_NewHTMLStyle(aResult, aAtom);
+ break;
+ case eHTMLTag_table:
+ rv = NS_NewTablePart(aResult, aAtom);
+ break;
+ case eHTMLTag_tbody:
+ case eHTMLTag_thead:
+ case eHTMLTag_tfoot:
+ rv = NS_NewTableRowGroupPart(aResult, aAtom);
+ break;
+ case eHTMLTag_td:
+ case eHTMLTag_th:
+ rv = NS_NewTableCellPart(aResult, aAtom);
+ break;
+ case eHTMLTag_tr:
+ rv = NS_NewTableRowPart(aResult, aAtom);
+ break;
+ case eHTMLTag_wbr:
+ rv = NS_NewHTMLWordBreak(aResult, aAtom);
+ break;
+ default:
+ rv = NS_NewHTMLContainer(aResult, aAtom);
+ break;
+
+ case eHTMLTag_title:
+ NS_NOTREACHED("illegal MakeContentObject call");
+ break;
+ }
+ return rv;
+}
+
/**
* Factory subroutine to create all of the html content objects.
*/
@@ -442,7 +558,7 @@ CreateContentObject(const nsIParserNode& aNode,
nsIWebShell* aWebShell,
nsIHTMLContent** aResult)
{
- // Find/create auto for the tag name
+ // Find/create atom for the tag name
nsAutoString tmp;
if (eHTMLTag_userdefined == aNodeType) {
tmp.Append(aNode.GetText());
@@ -456,48 +572,14 @@ CreateContentObject(const nsIParserNode& aNode,
return NS_ERROR_OUT_OF_MEMORY;
}
- // Create content object for the given tag
- nsresult rv = NS_OK;
+ // Make the content object
+ nsresult rv;
+
+ // XXX right now this code is here because we need aNode to create
+ // images, textareas and input form elements. As soon as all of the
+ // generic content code is in use, it can be moved up into
+ // MakeContentObject
switch (aNodeType) {
- case eHTMLTag_a:
- rv = NS_NewHTMLAnchor(aResult, atom);
- break;
- case eHTMLTag_applet:
- rv = NS_NewHTMLApplet(aResult, atom);
- break;
- case eHTMLTag_body:
- rv = NS_NewBodyPart(aResult, atom);
- break;
- case eHTMLTag_br:
- rv = NS_NewHTMLBR(aResult, atom);
- break;
- case eHTMLTag_caption:
- rv = NS_NewTableCaptionPart(aResult, atom);
- break;
- case eHTMLTag_col:
- rv = NS_NewTableColPart(aResult, atom);
- break;
- case eHTMLTag_colgroup:
- rv = NS_NewTableColGroupPart(aResult, atom);
- break;
- case eHTMLTag_embed:
- rv = NS_NewHTMLEmbed(aResult, atom);
- break;
-// case eHTMLTag_form:
-// rv = NS_NewHTMLForm(aResult, atom);
-// break;
- case eHTMLTag_frame:
- rv = NS_NewHTMLFrame(aResult, atom, aWebShell);
- break;
- case eHTMLTag_frameset:
- rv = NS_NewHTMLFrameset(aResult, atom, aWebShell);
- break;
- case eHTMLTag_hr:
- rv = NS_NewHTMLHR(aResult, atom);
- break;
- case eHTMLTag_iframe:
- rv = NS_NewHTMLIFrame(aResult, atom, aWebShell);
- break;
case eHTMLTag_img:
#ifdef XXX_ART_HACK
{
@@ -553,104 +635,67 @@ CreateContentObject(const nsIParserNode& aNode,
#endif /* XXX */
break;
case eHTMLTag_input:
- {
- nsAutoString val;
- if (FindAttribute(aNode, "type", val)) {
- if (val.EqualsIgnoreCase("submit")) {
- rv = NS_NewHTMLInputSubmit(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("reset")) {
- rv = NS_NewHTMLInputReset(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("button")) {
- rv = NS_NewHTMLInputButton(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("checkbox")) {
- rv = NS_NewHTMLInputCheckbox(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("file")) {
- rv = NS_NewHTMLInputFile(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("hidden")) {
- rv = NS_NewHTMLInputHidden(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("image")) {
- rv = NS_NewHTMLInputImage(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("password")) {
- rv = NS_NewHTMLInputPassword(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("radio")) {
- rv = NS_NewHTMLInputRadio(aResult, atom, aForm);
- }
- else if (val.EqualsIgnoreCase("text")) {
- rv = NS_NewHTMLInputText(aResult, atom, aForm);
+ {
+ nsAutoString val;
+ if (FindAttribute(aNode, "type", val)) {
+ if (val.EqualsIgnoreCase("submit")) {
+ rv = NS_NewHTMLInputSubmit(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("reset")) {
+ rv = NS_NewHTMLInputReset(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("button")) {
+ rv = NS_NewHTMLInputButton(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("checkbox")) {
+ rv = NS_NewHTMLInputCheckbox(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("file")) {
+ rv = NS_NewHTMLInputFile(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("hidden")) {
+ rv = NS_NewHTMLInputHidden(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("image")) {
+ rv = NS_NewHTMLInputImage(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("password")) {
+ rv = NS_NewHTMLInputPassword(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("radio")) {
+ rv = NS_NewHTMLInputRadio(aResult, atom, aForm);
+ }
+ else if (val.EqualsIgnoreCase("text")) {
+ rv = NS_NewHTMLInputText(aResult, atom, aForm);
+ }
+ else {
+ rv = NS_NewHTMLInputText(aResult, atom, aForm);
+ }
}
else {
rv = NS_NewHTMLInputText(aResult, atom, aForm);
}
}
- else {
- rv = NS_NewHTMLInputText(aResult, atom, aForm);
- }
- }
- break;
- case eHTMLTag_meta:
- rv = NS_NewHTMLMeta(aResult, atom);
- break;
- case eHTMLTag_object:
- rv = NS_NewHTMLObject(aResult, atom);
- break;
- case eHTMLTag_option:
- rv = NS_NewHTMLOption(aResult, atom);
- break;
- case eHTMLTag_select:
- rv = NS_NewHTMLSelect(aResult, atom, aForm);
- break;
- case eHTMLTag_spacer:
- rv = NS_NewHTMLSpacer(aResult, atom);
- break;
- case eHTMLTag_table:
- rv = NS_NewTablePart(aResult, atom);
- break;
- case eHTMLTag_tbody:
- case eHTMLTag_thead:
- case eHTMLTag_tfoot:
- rv = NS_NewTableRowGroupPart(aResult, atom);
- break;
- case eHTMLTag_td:
- case eHTMLTag_th:
- rv = NS_NewTableCellPart(aResult, atom);
break;
case eHTMLTag_textarea:
- {
- const nsString& content = aNode.GetSkippedContent();
- nsresult rv = NS_NewHTMLTextArea(aResult, atom, aForm);
- if (NS_OK == rv) {
- // If the text area has some content, give it to it now
- if (content.Length() > 0) {
- nsIFormControl* ctrl;
- rv = (*aResult)->QueryInterface(kIFormControlIID, (void **)&ctrl);
- if (NS_OK == rv) {
- ctrl->SetContent(content);
- NS_RELEASE(ctrl);
+ {
+ const nsString& content = aNode.GetSkippedContent();
+ nsresult rv = NS_NewHTMLTextArea(aResult, atom, aForm);
+ if (NS_OK == rv) {
+ // If the text area has some content, give it to it now
+ if (content.Length() > 0) {
+ nsIFormControl* ctrl;
+ rv = (*aResult)->QueryInterface(kIFormControlIID, (void **)&ctrl);
+ if (NS_OK == rv) {
+ ctrl->SetContent(content);
+ NS_RELEASE(ctrl);
+ }
}
}
}
- }
- break;
- case eHTMLTag_tr:
- rv = NS_NewTableRowPart(aResult, atom);
- break;
- case eHTMLTag_wbr:
- rv = NS_NewHTMLWordBreak(aResult, atom);
break;
default:
- rv = NS_NewHTMLContainer(aResult, atom);
- break;
-
- case eHTMLTag_title:
- NS_NOTREACHED("illegal CreateContentObject call");
+ rv = MakeContentObject(aNodeType, atom, aForm, aWebShell, aResult);
break;
}
NS_RELEASE(atom);
@@ -658,6 +703,27 @@ CreateContentObject(const nsIParserNode& aNode,
return rv;
}
+nsresult
+NS_CreateHTMLElement(nsIHTMLContent** aResult, const nsString& aTag)
+{
+ // Find tag in tag table
+ nsAutoString tmp(aTag);
+ tmp.ToUpperCase();
+ char cbuf[20];
+ tmp.ToCString(cbuf, sizeof(cbuf));
+ nsHTMLTag id = NS_TagToEnum(cbuf);
+ if (eHTMLTag_userdefined == id) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ // Create atom for tag and then create content object
+ nsIAtom* atom = NS_NewAtom(tmp);
+ nsresult rv = MakeContentObject(id, atom, nsnull, nsnull, aResult);
+ NS_RELEASE(atom);
+
+ return rv;
+}
+
//----------------------------------------------------------------------
SinkContext::SinkContext(HTMLContentSink* aSink)