Jacek Caban : mshtml: Added parsing inline script support.

Alexandre Julliard julliard at winehq.org
Mon Mar 31 09:15:22 CDT 2008


Module: wine
Branch: master
Commit: 620a9500e25da9fdcda49a038869322ed8d29ec9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=620a9500e25da9fdcda49a038869322ed8d29ec9

Author: Jacek Caban <jacek at 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)




More information about the wine-cvs mailing list