Module: wine Branch: master Commit: 620a9500e25da9fdcda49a038869322ed8d29ec9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=620a9500e25da9fdcda49a0388...
Author: Jacek Caban jacek@codeweavers.com Date: Sat Mar 29 20:39:34 2008 +0000
mshtml: Added parsing inline script support.
---
dlls/mshtml/script.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 74 insertions(+), 1 deletions(-)
diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c index 26d3e00..40911de 100644 --- a/dlls/mshtml/script.c +++ b/dlls/mshtml/script.c @@ -452,6 +452,72 @@ static ScriptHost *create_script_host(HTMLDocument *doc, GUID *guid) return ret; }
+static void parse_text(ScriptHost *script_host, LPCWSTR text) +{ + EXCEPINFO excepinfo; + VARIANT var; + HRESULT hres; + + static const WCHAR script_endW[] = {'<','/','S','C','R','I','P','T','>',0}; + + TRACE("%s\n", debugstr_w(text)); + + VariantInit(&var); + memset(&excepinfo, 0, sizeof(excepinfo)); + hres = IActiveScriptParse_ParseScriptText(script_host->parse, text, windowW, NULL, script_endW, + 0, 0, SCRIPTTEXT_ISVISIBLE|SCRIPTTEXT_HOSTMANAGESSOURCE, + &var, &excepinfo); + if(FAILED(hres)) + WARN("ParseScriptText failed: %08x\n", hres); + +} + +static void parse_extern_script(ScriptHost *script_host, LPCWSTR src) +{ + FIXME("%p %s\n", script_host, debugstr_w(src)); +} + +static void parse_inline_script(ScriptHost *script_host, nsIDOMHTMLScriptElement *nsscript) +{ + const PRUnichar *text; + nsAString text_str; + nsresult nsres; + + nsAString_Init(&text_str, NULL); + + nsres = nsIDOMHTMLScriptElement_GetText(nsscript, &text_str); + + if(NS_SUCCEEDED(nsres)) { + nsAString_GetData(&text_str, &text); + parse_text(script_host, text); + }else { + ERR("GetText failed: %08x\n", nsres); + } + + nsAString_Finish(&text_str); +} + +static void parse_script_elem(ScriptHost *script_host, nsIDOMHTMLScriptElement *nsscript) +{ + const PRUnichar *src; + nsAString src_str; + nsresult nsres; + + nsAString_Init(&src_str, NULL); + + nsres = nsIDOMHTMLScriptElement_GetSrc(nsscript, &src_str); + nsAString_GetData(&src_str, &src); + + if(NS_FAILED(nsres)) + ERR("GetSrc failed: %08x\n", nsres); + else if(*src) + parse_extern_script(script_host, src); + else + parse_inline_script(script_host, nsscript); + + nsAString_Finish(&src_str); +} + static BOOL get_guid_from_type(LPCWSTR type, GUID *guid) { const WCHAR text_javascriptW[] = @@ -554,7 +620,14 @@ static ScriptHost *get_script_host(HTMLDocument *doc, nsIDOMHTMLScriptElement *n
void doc_insert_script(HTMLDocument *doc, nsIDOMHTMLScriptElement *nsscript) { - get_script_host(doc, nsscript); + ScriptHost *script_host; + + script_host = get_script_host(doc, nsscript); + if(!script_host) + return; + + if(script_host->parse) + parse_script_elem(script_host, nsscript); }
void release_script_hosts(HTMLDocument *doc)