winhttp: Test secure connections. Fix a crash when no response is returned.
[wine] / dlls / mshtml / htmlstyle.c
1 /*
2  * Copyright 2006 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include <stdarg.h>
20
21 #define COBJMACROS
22
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winuser.h"
26 #include "ole2.h"
27
28 #include "wine/debug.h"
29 #include "wine/unicode.h"
30
31 #include "mshtml_private.h"
32
33 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
34
35 typedef struct {
36     DispatchEx dispex;
37     const IHTMLStyleVtbl *lpHTMLStyleVtbl;
38
39     LONG ref;
40
41     nsIDOMCSSStyleDeclaration *nsstyle;
42 } HTMLStyle;
43
44 #define HTMLSTYLE(x)  ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl)
45
46 static const WCHAR attrBackground[] =
47     {'b','a','c','k','g','r','o','u','n','d',0};
48 static const WCHAR attrBackgroundColor[] =
49     {'b','a','c','k','g','r','o','u','n','d','-','c','o','l','o','r',0};
50 static const WCHAR attrBackgroundImage[] =
51     {'b','a','c','k','g','r','o','u','n','d','-','i','m','a','g','e',0};
52 static const WCHAR attrBorderLeft[] =
53     {'b','o','r','d','e','r','-','l','e','f','t',0};
54 static const WCHAR attrColor[] =
55     {'c','o','l','o','r',0};
56 static const WCHAR attrDisplay[] =
57     {'d','i','s','p','l','a','y',0};
58 static const WCHAR attrFontFamily[] =
59     {'f','o','n','t','-','f','a','m','i','l','y',0};
60 static const WCHAR attrFontSize[] =
61     {'f','o','n','t','-','s','i','z','e',0};
62 static const WCHAR attrFontStyle[] =
63     {'f','o','n','t','-','s','t','y','l','e',0};
64 static const WCHAR attrFontWeight[] =
65     {'f','o','n','t','-','w','e','i','g','h','t',0};
66 static const WCHAR attrMarginLeft[] =
67     {'m','a','r','g','i','n','-','l','e','f','t',0};
68 static const WCHAR attrMarginRight[] =
69     {'m','a','r','g','i','n','-','r','i','g','h','t',0};
70 static const WCHAR attrPaddingLeft[] =
71     {'p','a','d','d','i','n','g','-','l','e','f','t',0};
72 static const WCHAR attrTextDecoration[] =
73     {'t','e','x','t','-','d','e','c','o','r','a','t','i','o','n',0};
74 static const WCHAR attrVisibility[] =
75     {'v','i','s','i','b','i','l','i','t','y',0};
76 static const WCHAR attrWidth[] =
77     {'w','i','d','t','h',0};
78
79 static const WCHAR valLineThrough[] =
80     {'l','i','n','e','-','t','h','r','o','u','g','h',0};
81 static const WCHAR valUnderline[] =
82     {'u','n','d','e','r','l','i','n','e',0};
83
84 static const WCHAR px_formatW[] = {'%','d','p','x',0};
85 static const WCHAR emptyW[] = {0};
86
87 static LPWSTR fix_px_value(LPCWSTR val)
88 {
89     LPCWSTR ptr = val;
90
91     while(*ptr) {
92         while(*ptr && isspaceW(*ptr))
93             ptr++;
94         if(!*ptr)
95             break;
96
97         while(*ptr && isdigitW(*ptr))
98             ptr++;
99
100         if(!*ptr || isspaceW(*ptr)) {
101             LPWSTR ret, p;
102             int len = strlenW(val)+1;
103
104             ret = heap_alloc((len+2)*sizeof(WCHAR));
105             memcpy(ret, val, (ptr-val)*sizeof(WCHAR));
106             p = ret + (ptr-val);
107             *p++ = 'p';
108             *p++ = 'x';
109             strcpyW(p, ptr);
110
111             TRACE("fixed %s -> %s\n", debugstr_w(val), debugstr_w(ret));
112
113             return ret;
114         }
115
116         while(*ptr && !isspaceW(*ptr))
117             ptr++;
118     }
119
120     return NULL;
121 }
122
123 static LPWSTR fix_url_value(LPCWSTR val)
124 {
125     WCHAR *ret, *ptr;
126
127     static const WCHAR urlW[] = {'u','r','l','('};
128
129     if(strncmpW(val, urlW, sizeof(urlW)/sizeof(WCHAR)) || !strchrW(val, '\\'))
130         return NULL;
131
132     ret = heap_strdupW(val);
133
134     for(ptr = ret; *ptr; ptr++) {
135         if(*ptr == '\\')
136             *ptr = '/';
137     }
138
139     return ret;
140 }
141
142 #define ATTR_FIX_PX  1
143 #define ATTR_FIX_URL 2
144
145 static HRESULT set_style_attr(HTMLStyle *This, LPCWSTR name, LPCWSTR value, DWORD flags)
146 {
147     nsAString str_name, str_value, str_empty;
148     LPWSTR val = NULL;
149     nsresult nsres;
150
151     static const PRUnichar wszEmpty[] = {0};
152
153     TRACE("(%p)->(%s %s)\n", This, debugstr_w(name), debugstr_w(value));
154
155     if(flags & ATTR_FIX_PX)
156         val = fix_px_value(value);
157     if(flags & ATTR_FIX_URL)
158         val = fix_url_value(value);
159
160     nsAString_Init(&str_name, name);
161     nsAString_Init(&str_value, val ? val : value);
162     nsAString_Init(&str_empty, wszEmpty);
163     heap_free(val);
164
165     nsres = nsIDOMCSSStyleDeclaration_SetProperty(This->nsstyle, &str_name, &str_value, &str_empty);
166     if(NS_FAILED(nsres))
167         ERR("SetProperty failed: %08x\n", nsres);
168
169     nsAString_Finish(&str_name);
170     nsAString_Finish(&str_value);
171     nsAString_Finish(&str_empty);
172
173     return S_OK;
174 }
175
176 static HRESULT get_style_attr_nsval(HTMLStyle *This, LPCWSTR name, nsAString *value)
177 {
178     nsAString str_name;
179     nsresult nsres;
180
181     nsAString_Init(&str_name, name);
182
183     nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(This->nsstyle, &str_name, value);
184     if(NS_FAILED(nsres)) {
185         ERR("SetProperty failed: %08x\n", nsres);
186         return E_FAIL;
187     }
188
189     nsAString_Finish(&str_name);
190
191     return NS_OK;
192 }
193
194 static HRESULT get_style_attr(HTMLStyle *This, LPCWSTR name, BSTR *p)
195 {
196     nsAString str_value;
197     const PRUnichar *value;
198
199     nsAString_Init(&str_value, NULL);
200
201     get_style_attr_nsval(This, name, &str_value);
202
203     nsAString_GetData(&str_value, &value);
204     *p = *value ? SysAllocString(value) : NULL;
205
206     nsAString_Finish(&str_value);
207
208     TRACE("%s -> %s\n", debugstr_w(name), debugstr_w(*p));
209     return S_OK;
210 }
211
212 static HRESULT check_style_attr_value(HTMLStyle *This, LPCWSTR name, LPCWSTR exval, VARIANT_BOOL *p)
213 {
214     nsAString str_value;
215     const PRUnichar *value;
216
217     nsAString_Init(&str_value, NULL);
218
219     get_style_attr_nsval(This, name, &str_value);
220
221     nsAString_GetData(&str_value, &value);
222     *p = strcmpW(value, exval) ? VARIANT_FALSE : VARIANT_TRUE;
223     nsAString_Finish(&str_value);
224
225     TRACE("%s -> %x\n", debugstr_w(name), *p);
226     return S_OK;
227 }
228
229 #define HTMLSTYLE_THIS(iface) DEFINE_THIS(HTMLStyle, HTMLStyle, iface)
230
231 static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, void **ppv)
232 {
233     HTMLStyle *This = HTMLSTYLE_THIS(iface);
234
235     *ppv = NULL;
236
237     if(IsEqualGUID(&IID_IUnknown, riid)) {
238         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
239         *ppv = HTMLSTYLE(This);
240     }else if(IsEqualGUID(&IID_IHTMLStyle, riid)) {
241         TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv);
242         *ppv = HTMLSTYLE(This);
243     }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
244         return *ppv ? S_OK : E_NOINTERFACE;
245     }
246
247     if(*ppv) {
248         IUnknown_AddRef((IUnknown*)*ppv);
249         return S_OK;
250     }
251
252     WARN("unsupported %s\n", debugstr_guid(riid));
253     return E_NOINTERFACE;
254 }
255
256 static ULONG WINAPI HTMLStyle_AddRef(IHTMLStyle *iface)
257 {
258     HTMLStyle *This = HTMLSTYLE_THIS(iface);
259     LONG ref = InterlockedIncrement(&This->ref);
260
261     TRACE("(%p) ref=%d\n", This, ref);
262
263     return ref;
264 }
265
266 static ULONG WINAPI HTMLStyle_Release(IHTMLStyle *iface)
267 {
268     HTMLStyle *This = HTMLSTYLE_THIS(iface);
269     LONG ref = InterlockedDecrement(&This->ref);
270
271     TRACE("(%p) ref=%d\n", This, ref);
272
273     if(!ref)
274         heap_free(This);
275
276     return ref;
277 }
278
279 static HRESULT WINAPI HTMLStyle_GetTypeInfoCount(IHTMLStyle *iface, UINT *pctinfo)
280 {
281     HTMLStyle *This = HTMLSTYLE_THIS(iface);
282     return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo);
283 }
284
285 static HRESULT WINAPI HTMLStyle_GetTypeInfo(IHTMLStyle *iface, UINT iTInfo,
286                                               LCID lcid, ITypeInfo **ppTInfo)
287 {
288     HTMLStyle *This = HTMLSTYLE_THIS(iface);
289     return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo);
290 }
291
292 static HRESULT WINAPI HTMLStyle_GetIDsOfNames(IHTMLStyle *iface, REFIID riid,
293                                                 LPOLESTR *rgszNames, UINT cNames,
294                                                 LCID lcid, DISPID *rgDispId)
295 {
296     HTMLStyle *This = HTMLSTYLE_THIS(iface);
297     return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId);
298 }
299
300 static HRESULT WINAPI HTMLStyle_Invoke(IHTMLStyle *iface, DISPID dispIdMember,
301                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
302                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
303 {
304     HTMLStyle *This = HTMLSTYLE_THIS(iface);
305     return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid,
306             wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
307 }
308
309 static HRESULT WINAPI HTMLStyle_put_fontFamily(IHTMLStyle *iface, BSTR v)
310 {
311     HTMLStyle *This = HTMLSTYLE_THIS(iface);
312
313     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
314
315     return set_style_attr(This, attrFontFamily, v, 0);
316 }
317
318 static HRESULT WINAPI HTMLStyle_get_fontFamily(IHTMLStyle *iface, BSTR *p)
319 {
320     HTMLStyle *This = HTMLSTYLE_THIS(iface);
321
322     TRACE("(%p)->(%p)\n", This, p);
323
324     return get_style_attr(This, attrFontFamily, p);
325 }
326
327 static HRESULT WINAPI HTMLStyle_put_fontStyle(IHTMLStyle *iface, BSTR v)
328 {
329     HTMLStyle *This = HTMLSTYLE_THIS(iface);
330     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
331     return E_NOTIMPL;
332 }
333
334 static HRESULT WINAPI HTMLStyle_get_fontStyle(IHTMLStyle *iface, BSTR *p)
335 {
336     HTMLStyle *This = HTMLSTYLE_THIS(iface);
337
338     TRACE("(%p)->(%p)\n", This, p);
339
340     return get_style_attr(This, attrFontStyle, p);
341 }
342
343 static HRESULT WINAPI HTMLStyle_put_fontVariant(IHTMLStyle *iface, BSTR v)
344 {
345     HTMLStyle *This = HTMLSTYLE_THIS(iface);
346     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
347     return E_NOTIMPL;
348 }
349
350 static HRESULT WINAPI HTMLStyle_get_fontVariant(IHTMLStyle *iface, BSTR *p)
351 {
352     HTMLStyle *This = HTMLSTYLE_THIS(iface);
353     FIXME("(%p)->(%p)\n", This, p);
354     return E_NOTIMPL;
355 }
356
357 static HRESULT WINAPI HTMLStyle_put_fontWeight(IHTMLStyle *iface, BSTR v)
358 {
359     HTMLStyle *This = HTMLSTYLE_THIS(iface);
360     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
361     return E_NOTIMPL;
362 }
363
364 static HRESULT WINAPI HTMLStyle_get_fontWeight(IHTMLStyle *iface, BSTR *p)
365 {
366     HTMLStyle *This = HTMLSTYLE_THIS(iface);
367
368     TRACE("(%p)->(%p)\n", This, p);
369
370     return get_style_attr(This, attrFontWeight, p);
371 }
372
373 static HRESULT WINAPI HTMLStyle_put_fontSize(IHTMLStyle *iface, VARIANT v)
374 {
375     HTMLStyle *This = HTMLSTYLE_THIS(iface);
376
377     TRACE("(%p)->(v%d)\n", This, V_VT(&v));
378
379     switch(V_VT(&v)) {
380     case VT_BSTR:
381         return set_style_attr(This, attrFontSize, V_BSTR(&v), 0);
382     default:
383         FIXME("not supported vt %d\n", V_VT(&v));
384     }
385
386     return S_OK;
387 }
388
389 static HRESULT WINAPI HTMLStyle_get_fontSize(IHTMLStyle *iface, VARIANT *p)
390 {
391     HTMLStyle *This = HTMLSTYLE_THIS(iface);
392
393     TRACE("(%p)->(%p)\n", This, p);
394
395     V_VT(p) = VT_BSTR;
396     return get_style_attr(This, attrFontSize, &V_BSTR(p));
397 }
398
399 static HRESULT WINAPI HTMLStyle_put_font(IHTMLStyle *iface, BSTR v)
400 {
401     HTMLStyle *This = HTMLSTYLE_THIS(iface);
402     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
403     return E_NOTIMPL;
404 }
405
406 static HRESULT WINAPI HTMLStyle_get_font(IHTMLStyle *iface, BSTR *p)
407 {
408     HTMLStyle *This = HTMLSTYLE_THIS(iface);
409     FIXME("(%p)->(%p)\n", This, p);
410     return E_NOTIMPL;
411 }
412
413 static HRESULT WINAPI HTMLStyle_put_color(IHTMLStyle *iface, VARIANT v)
414 {
415     HTMLStyle *This = HTMLSTYLE_THIS(iface);
416
417     TRACE("(%p)->(v%d)\n", This, V_VT(&v));
418
419     switch(V_VT(&v)) {
420     case VT_BSTR:
421         TRACE("%s\n", debugstr_w(V_BSTR(&v)));
422         return set_style_attr(This, attrColor, V_BSTR(&v), 0);
423
424     default:
425         FIXME("unsupported vt=%d\n", V_VT(&v));
426     }
427
428     return E_NOTIMPL;
429 }
430
431 static HRESULT WINAPI HTMLStyle_get_color(IHTMLStyle *iface, VARIANT *p)
432 {
433     HTMLStyle *This = HTMLSTYLE_THIS(iface);
434
435     TRACE("(%p)->(%p)\n", This, p);
436
437     V_VT(p) = VT_BSTR;
438     return get_style_attr(This, attrColor, &V_BSTR(p));
439 }
440
441 static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v)
442 {
443     HTMLStyle *This = HTMLSTYLE_THIS(iface);
444
445     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
446
447     return set_style_attr(This, attrBackground, v, 0);
448 }
449
450 static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p)
451 {
452     HTMLStyle *This = HTMLSTYLE_THIS(iface);
453
454     TRACE("(%p)->(%p)\n", This, p);
455
456     return get_style_attr(This, attrBackground, p);
457 }
458
459 static HRESULT WINAPI HTMLStyle_put_backgroundColor(IHTMLStyle *iface, VARIANT v)
460 {
461     HTMLStyle *This = HTMLSTYLE_THIS(iface);
462
463     TRACE("(%p)->(v%d)\n", This, V_VT(&v));
464
465     switch(V_VT(&v)) {
466     case VT_BSTR:
467         return set_style_attr(This, attrBackgroundColor, V_BSTR(&v), 0);
468     case VT_I4: {
469         WCHAR value[10];
470         static const WCHAR format[] = {'#','%','0','6','x',0};
471
472         wsprintfW(value, format, V_I4(&v));
473         return set_style_attr(This, attrBackgroundColor, value, 0);
474     }
475     default:
476         FIXME("unsupported vt %d\n", V_VT(&v));
477     }
478
479     return S_OK;
480 }
481
482 static HRESULT WINAPI HTMLStyle_get_backgroundColor(IHTMLStyle *iface, VARIANT *p)
483 {
484     HTMLStyle *This = HTMLSTYLE_THIS(iface);
485     FIXME("(%p)->(%p)\n", This, p);
486     return E_NOTIMPL;
487 }
488
489 static HRESULT WINAPI HTMLStyle_put_backgroundImage(IHTMLStyle *iface, BSTR v)
490 {
491     HTMLStyle *This = HTMLSTYLE_THIS(iface);
492
493     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
494
495     return set_style_attr(This, attrBackgroundImage, v, ATTR_FIX_URL);
496 }
497
498 static HRESULT WINAPI HTMLStyle_get_backgroundImage(IHTMLStyle *iface, BSTR *p)
499 {
500     HTMLStyle *This = HTMLSTYLE_THIS(iface);
501     FIXME("(%p)->(%p)\n", This, p);
502     return E_NOTIMPL;
503 }
504
505 static HRESULT WINAPI HTMLStyle_put_backgroundRepeat(IHTMLStyle *iface, BSTR v)
506 {
507     HTMLStyle *This = HTMLSTYLE_THIS(iface);
508     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
509     return E_NOTIMPL;
510 }
511
512 static HRESULT WINAPI HTMLStyle_get_backgroundRepeat(IHTMLStyle *iface, BSTR *p)
513 {
514     HTMLStyle *This = HTMLSTYLE_THIS(iface);
515     FIXME("(%p)->(%p)\n", This, p);
516     return E_NOTIMPL;
517 }
518
519 static HRESULT WINAPI HTMLStyle_put_backgroundAttachment(IHTMLStyle *iface, BSTR v)
520 {
521     HTMLStyle *This = HTMLSTYLE_THIS(iface);
522     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
523     return E_NOTIMPL;
524 }
525
526 static HRESULT WINAPI HTMLStyle_get_backgroundAttachment(IHTMLStyle *iface, BSTR *p)
527 {
528     HTMLStyle *This = HTMLSTYLE_THIS(iface);
529     FIXME("(%p)->(%p)\n", This, p);
530     return E_NOTIMPL;
531 }
532
533 static HRESULT WINAPI HTMLStyle_put_backgroundPosition(IHTMLStyle *iface, BSTR v)
534 {
535     HTMLStyle *This = HTMLSTYLE_THIS(iface);
536     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
537     return E_NOTIMPL;
538 }
539
540 static HRESULT WINAPI HTMLStyle_get_backgroundPosition(IHTMLStyle *iface, BSTR *p)
541 {
542     HTMLStyle *This = HTMLSTYLE_THIS(iface);
543     FIXME("(%p)->(%p)\n", This, p);
544     return E_NOTIMPL;
545 }
546
547 static HRESULT WINAPI HTMLStyle_put_backgroundPositionX(IHTMLStyle *iface, VARIANT v)
548 {
549     HTMLStyle *This = HTMLSTYLE_THIS(iface);
550     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
551     return E_NOTIMPL;
552 }
553
554 static HRESULT WINAPI HTMLStyle_get_backgroundPositionX(IHTMLStyle *iface, VARIANT *p)
555 {
556     HTMLStyle *This = HTMLSTYLE_THIS(iface);
557     FIXME("(%p)->(%p)\n", This, p);
558     return E_NOTIMPL;
559 }
560
561 static HRESULT WINAPI HTMLStyle_put_backgroundPositionY(IHTMLStyle *iface, VARIANT v)
562 {
563     HTMLStyle *This = HTMLSTYLE_THIS(iface);
564     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
565     return E_NOTIMPL;
566 }
567
568 static HRESULT WINAPI HTMLStyle_get_backgroundPositionY(IHTMLStyle *iface, VARIANT *p)
569 {
570     HTMLStyle *This = HTMLSTYLE_THIS(iface);
571     FIXME("(%p)->(%p)\n", This, p);
572     return E_NOTIMPL;
573 }
574
575 static HRESULT WINAPI HTMLStyle_put_wordSpacing(IHTMLStyle *iface, VARIANT v)
576 {
577     HTMLStyle *This = HTMLSTYLE_THIS(iface);
578     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
579     return E_NOTIMPL;
580 }
581
582 static HRESULT WINAPI HTMLStyle_get_wordSpacing(IHTMLStyle *iface, VARIANT *p)
583 {
584     HTMLStyle *This = HTMLSTYLE_THIS(iface);
585     FIXME("(%p)->(%p)\n", This, p);
586     return E_NOTIMPL;
587 }
588
589 static HRESULT WINAPI HTMLStyle_put_letterSpacing(IHTMLStyle *iface, VARIANT v)
590 {
591     HTMLStyle *This = HTMLSTYLE_THIS(iface);
592     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
593     return E_NOTIMPL;
594 }
595
596 static HRESULT WINAPI HTMLStyle_get_letterSpacing(IHTMLStyle *iface, VARIANT *p)
597 {
598     HTMLStyle *This = HTMLSTYLE_THIS(iface);
599     FIXME("(%p)->(%p)\n", This, p);
600     return E_NOTIMPL;
601 }
602
603 static HRESULT WINAPI HTMLStyle_put_textDecoration(IHTMLStyle *iface, BSTR v)
604 {
605     HTMLStyle *This = HTMLSTYLE_THIS(iface);
606     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
607     return E_NOTIMPL;
608 }
609
610 static HRESULT WINAPI HTMLStyle_get_textDecoration(IHTMLStyle *iface, BSTR *p)
611 {
612     HTMLStyle *This = HTMLSTYLE_THIS(iface);
613
614     TRACE("(%p)->(%p)\n", This, p);
615
616     return get_style_attr(This, attrTextDecoration, p);
617 }
618
619 static HRESULT WINAPI HTMLStyle_put_textDecorationNone(IHTMLStyle *iface, VARIANT_BOOL v)
620 {
621     HTMLStyle *This = HTMLSTYLE_THIS(iface);
622     FIXME("(%p)->(%x)\n", This, v);
623     return E_NOTIMPL;
624 }
625
626 static HRESULT WINAPI HTMLStyle_get_textDecorationNone(IHTMLStyle *iface, VARIANT_BOOL *p)
627 {
628     HTMLStyle *This = HTMLSTYLE_THIS(iface);
629     FIXME("(%p)->(%p)\n", This, p);
630     return E_NOTIMPL;
631 }
632
633 static HRESULT WINAPI HTMLStyle_put_textDecorationUnderline(IHTMLStyle *iface, VARIANT_BOOL v)
634 {
635     HTMLStyle *This = HTMLSTYLE_THIS(iface);
636     FIXME("(%p)->(%x)\n", This, v);
637     return E_NOTIMPL;
638 }
639
640 static HRESULT WINAPI HTMLStyle_get_textDecorationUnderline(IHTMLStyle *iface, VARIANT_BOOL *p)
641 {
642     HTMLStyle *This = HTMLSTYLE_THIS(iface);
643
644     TRACE("(%p)->(%p)\n", This, p);
645
646     return check_style_attr_value(This, attrTextDecoration, valUnderline, p);
647 }
648
649 static HRESULT WINAPI HTMLStyle_put_textDecorationOverline(IHTMLStyle *iface, VARIANT_BOOL v)
650 {
651     HTMLStyle *This = HTMLSTYLE_THIS(iface);
652     FIXME("(%p)->(%x)\n", This, v);
653     return E_NOTIMPL;
654 }
655
656 static HRESULT WINAPI HTMLStyle_get_textDecorationOverline(IHTMLStyle *iface, VARIANT_BOOL *p)
657 {
658     HTMLStyle *This = HTMLSTYLE_THIS(iface);
659     FIXME("(%p)->(%p)\n", This, p);
660     return E_NOTIMPL;
661 }
662
663 static HRESULT WINAPI HTMLStyle_put_textDecorationLineThrough(IHTMLStyle *iface, VARIANT_BOOL v)
664 {
665     HTMLStyle *This = HTMLSTYLE_THIS(iface);
666     FIXME("(%p)->(%x)\n", This, v);
667     return E_NOTIMPL;
668 }
669
670 static HRESULT WINAPI HTMLStyle_get_textDecorationLineThrough(IHTMLStyle *iface, VARIANT_BOOL *p)
671 {
672     HTMLStyle *This = HTMLSTYLE_THIS(iface);
673
674     TRACE("(%p)->(%p)\n", This, p);
675
676     return check_style_attr_value(This, attrTextDecoration, valLineThrough, p);
677 }
678
679 static HRESULT WINAPI HTMLStyle_put_textDecorationBlink(IHTMLStyle *iface, VARIANT_BOOL v)
680 {
681     HTMLStyle *This = HTMLSTYLE_THIS(iface);
682     FIXME("(%p)->(%x)\n", This, v);
683     return E_NOTIMPL;
684 }
685
686 static HRESULT WINAPI HTMLStyle_get_textDecorationBlink(IHTMLStyle *iface, VARIANT_BOOL *p)
687 {
688     HTMLStyle *This = HTMLSTYLE_THIS(iface);
689     FIXME("(%p)->(%p)\n", This, p);
690     return E_NOTIMPL;
691 }
692
693 static HRESULT WINAPI HTMLStyle_put_verticalAlign(IHTMLStyle *iface, VARIANT v)
694 {
695     HTMLStyle *This = HTMLSTYLE_THIS(iface);
696     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
697     return E_NOTIMPL;
698 }
699
700 static HRESULT WINAPI HTMLStyle_get_verticalAlign(IHTMLStyle *iface, VARIANT *p)
701 {
702     HTMLStyle *This = HTMLSTYLE_THIS(iface);
703     FIXME("(%p)->(%p)\n", This, p);
704     return E_NOTIMPL;
705 }
706
707 static HRESULT WINAPI HTMLStyle_put_textTransform(IHTMLStyle *iface, BSTR v)
708 {
709     HTMLStyle *This = HTMLSTYLE_THIS(iface);
710     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
711     return E_NOTIMPL;
712 }
713
714 static HRESULT WINAPI HTMLStyle_get_textTransform(IHTMLStyle *iface, BSTR *p)
715 {
716     HTMLStyle *This = HTMLSTYLE_THIS(iface);
717     FIXME("(%p)->(%p)\n", This, p);
718     return E_NOTIMPL;
719 }
720
721 static HRESULT WINAPI HTMLStyle_put_textAlign(IHTMLStyle *iface, BSTR v)
722 {
723     HTMLStyle *This = HTMLSTYLE_THIS(iface);
724     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
725     return E_NOTIMPL;
726 }
727
728 static HRESULT WINAPI HTMLStyle_get_textAlign(IHTMLStyle *iface, BSTR *p)
729 {
730     HTMLStyle *This = HTMLSTYLE_THIS(iface);
731     FIXME("(%p)->(%p)\n", This, p);
732     return E_NOTIMPL;
733 }
734
735 static HRESULT WINAPI HTMLStyle_put_textIndent(IHTMLStyle *iface, VARIANT v)
736 {
737     HTMLStyle *This = HTMLSTYLE_THIS(iface);
738     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
739     return E_NOTIMPL;
740 }
741
742 static HRESULT WINAPI HTMLStyle_get_textIndent(IHTMLStyle *iface, VARIANT *p)
743 {
744     HTMLStyle *This = HTMLSTYLE_THIS(iface);
745     FIXME("(%p)->(%p)\n", This, p);
746     return E_NOTIMPL;
747 }
748
749 static HRESULT WINAPI HTMLStyle_put_lineHeight(IHTMLStyle *iface, VARIANT v)
750 {
751     HTMLStyle *This = HTMLSTYLE_THIS(iface);
752     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
753     return E_NOTIMPL;
754 }
755
756 static HRESULT WINAPI HTMLStyle_get_lineHeight(IHTMLStyle *iface, VARIANT *p)
757 {
758     HTMLStyle *This = HTMLSTYLE_THIS(iface);
759     FIXME("(%p)->(%p)\n", This, p);
760     return E_NOTIMPL;
761 }
762
763 static HRESULT WINAPI HTMLStyle_put_marginTop(IHTMLStyle *iface, VARIANT v)
764 {
765     HTMLStyle *This = HTMLSTYLE_THIS(iface);
766     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
767     return E_NOTIMPL;
768 }
769
770 static HRESULT WINAPI HTMLStyle_get_marginTop(IHTMLStyle *iface, VARIANT *p)
771 {
772     HTMLStyle *This = HTMLSTYLE_THIS(iface);
773     FIXME("(%p)->(%p)\n", This, p);
774     return E_NOTIMPL;
775 }
776
777 static HRESULT WINAPI HTMLStyle_put_marginRight(IHTMLStyle *iface, VARIANT v)
778 {
779     HTMLStyle *This = HTMLSTYLE_THIS(iface);
780
781     TRACE("(%p)->(v(%d))\n", This, V_VT(&v));
782
783     switch(V_VT(&v)) {
784     case VT_NULL:
785         return set_style_attr(This, attrMarginRight, emptyW, 0);
786     case VT_I4: {
787         WCHAR buf[14];
788
789         wsprintfW(buf, px_formatW, V_I4(&v));
790         return set_style_attr(This, attrMarginRight, buf, 0);
791     }
792     case VT_BSTR:
793         return set_style_attr(This, attrMarginRight, V_BSTR(&v), 0);
794     default:
795         FIXME("Unsupported vt=%d\n", V_VT(&v));
796     }
797
798     return E_NOTIMPL;
799 }
800
801 static HRESULT WINAPI HTMLStyle_get_marginRight(IHTMLStyle *iface, VARIANT *p)
802 {
803     HTMLStyle *This = HTMLSTYLE_THIS(iface);
804     FIXME("(%p)->(%p)\n", This, p);
805     return E_NOTIMPL;
806 }
807
808 static HRESULT WINAPI HTMLStyle_put_marginBottom(IHTMLStyle *iface, VARIANT v)
809 {
810     HTMLStyle *This = HTMLSTYLE_THIS(iface);
811     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
812     return E_NOTIMPL;
813 }
814
815 static HRESULT WINAPI HTMLStyle_get_marginBottom(IHTMLStyle *iface, VARIANT *p)
816 {
817     HTMLStyle *This = HTMLSTYLE_THIS(iface);
818     FIXME("(%p)->(%p)\n", This, p);
819     return E_NOTIMPL;
820 }
821
822 static HRESULT WINAPI HTMLStyle_put_marginLeft(IHTMLStyle *iface, VARIANT v)
823 {
824     HTMLStyle *This = HTMLSTYLE_THIS(iface);
825
826     switch(V_VT(&v)) {
827     case VT_NULL:
828         TRACE("(%p)->(NULL)\n", This);
829         return set_style_attr(This, attrMarginLeft, emptyW, 0);
830     case VT_I4: {
831         WCHAR buf[14];
832
833         TRACE("(%p)->(%d)\n", This, V_I4(&v));
834
835         wsprintfW(buf, px_formatW, V_I4(&v));
836         return set_style_attr(This, attrMarginLeft, buf, 0);
837     }
838     case VT_BSTR:
839         TRACE("(%p)->(%s)\n", This, debugstr_w(V_BSTR(&v)));
840         return set_style_attr(This, attrMarginLeft, V_BSTR(&v), 0);
841     default:
842         FIXME("Unsupported vt=%d\n", V_VT(&v));
843     }
844
845     return E_NOTIMPL;
846 }
847
848 static HRESULT WINAPI HTMLStyle_put_margin(IHTMLStyle *iface, BSTR v)
849 {
850     HTMLStyle *This = HTMLSTYLE_THIS(iface);
851     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
852     return E_NOTIMPL;
853 }
854
855 static HRESULT WINAPI HTMLStyle_get_margin(IHTMLStyle *iface, BSTR *p)
856 {
857     HTMLStyle *This = HTMLSTYLE_THIS(iface);
858     FIXME("(%p)->(%p)\n", This, p);
859     return E_NOTIMPL;
860 }
861
862 static HRESULT WINAPI HTMLStyle_get_marginLeft(IHTMLStyle *iface, VARIANT *p)
863 {
864     HTMLStyle *This = HTMLSTYLE_THIS(iface);
865     FIXME("(%p)->(%p)\n", This, p);
866     return E_NOTIMPL;
867 }
868
869 static HRESULT WINAPI HTMLStyle_put_paddingTop(IHTMLStyle *iface, VARIANT v)
870 {
871     HTMLStyle *This = HTMLSTYLE_THIS(iface);
872     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
873     return E_NOTIMPL;
874 }
875
876 static HRESULT WINAPI HTMLStyle_get_paddingTop(IHTMLStyle *iface, VARIANT *p)
877 {
878     HTMLStyle *This = HTMLSTYLE_THIS(iface);
879     FIXME("(%p)->(%p)\n", This, p);
880     return E_NOTIMPL;
881 }
882
883 static HRESULT WINAPI HTMLStyle_put_paddingRight(IHTMLStyle *iface, VARIANT v)
884 {
885     HTMLStyle *This = HTMLSTYLE_THIS(iface);
886     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
887     return E_NOTIMPL;
888 }
889
890 static HRESULT WINAPI HTMLStyle_get_paddingRight(IHTMLStyle *iface, VARIANT *p)
891 {
892     HTMLStyle *This = HTMLSTYLE_THIS(iface);
893     FIXME("(%p)->(%p)\n", This, p);
894     return E_NOTIMPL;
895 }
896
897 static HRESULT WINAPI HTMLStyle_put_paddingBottom(IHTMLStyle *iface, VARIANT v)
898 {
899     HTMLStyle *This = HTMLSTYLE_THIS(iface);
900     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
901     return E_NOTIMPL;
902 }
903
904 static HRESULT WINAPI HTMLStyle_get_paddingBottom(IHTMLStyle *iface, VARIANT *p)
905 {
906     HTMLStyle *This = HTMLSTYLE_THIS(iface);
907     FIXME("(%p)->(%p)\n", This, p);
908     return E_NOTIMPL;
909 }
910
911 static HRESULT WINAPI HTMLStyle_put_paddingLeft(IHTMLStyle *iface, VARIANT v)
912 {
913     HTMLStyle *This = HTMLSTYLE_THIS(iface);
914
915     TRACE("(%p)->(vt=%d)\n", This, V_VT(&v));
916
917     switch(V_VT(&v)) {
918     case VT_I4: {
919         WCHAR buf[14];
920
921         wsprintfW(buf, px_formatW, V_I4(&v));
922         return set_style_attr(This, attrPaddingLeft, buf, 0);
923     }
924     case VT_BSTR:
925         return set_style_attr(This, attrPaddingLeft, V_BSTR(&v), 0);
926     default:
927         FIXME("unsupported vt=%d\n", V_VT(&v));
928     }
929
930     return E_NOTIMPL;
931 }
932
933 static HRESULT WINAPI HTMLStyle_get_paddingLeft(IHTMLStyle *iface, VARIANT *p)
934 {
935     HTMLStyle *This = HTMLSTYLE_THIS(iface);
936     FIXME("(%p)->(%p)\n", This, p);
937     return E_NOTIMPL;
938 }
939
940 static HRESULT WINAPI HTMLStyle_put_padding(IHTMLStyle *iface, BSTR v)
941 {
942     HTMLStyle *This = HTMLSTYLE_THIS(iface);
943     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
944     return E_NOTIMPL;
945 }
946
947 static HRESULT WINAPI HTMLStyle_get_padding(IHTMLStyle *iface, BSTR *p)
948 {
949     HTMLStyle *This = HTMLSTYLE_THIS(iface);
950     FIXME("(%p)->(%p)\n", This, p);
951     return E_NOTIMPL;
952 }
953
954 static HRESULT WINAPI HTMLStyle_put_border(IHTMLStyle *iface, BSTR v)
955 {
956     HTMLStyle *This = HTMLSTYLE_THIS(iface);
957     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
958     return E_NOTIMPL;
959 }
960
961 static HRESULT WINAPI HTMLStyle_get_border(IHTMLStyle *iface, BSTR *p)
962 {
963     HTMLStyle *This = HTMLSTYLE_THIS(iface);
964     FIXME("(%p)->(%p)\n", This, p);
965     return E_NOTIMPL;
966 }
967
968 static HRESULT WINAPI HTMLStyle_put_borderTop(IHTMLStyle *iface, BSTR v)
969 {
970     HTMLStyle *This = HTMLSTYLE_THIS(iface);
971     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
972     return E_NOTIMPL;
973 }
974
975 static HRESULT WINAPI HTMLStyle_get_borderTop(IHTMLStyle *iface, BSTR *p)
976 {
977     HTMLStyle *This = HTMLSTYLE_THIS(iface);
978     FIXME("(%p)->(%p)\n", This, p);
979     return E_NOTIMPL;
980 }
981
982 static HRESULT WINAPI HTMLStyle_put_borderRight(IHTMLStyle *iface, BSTR v)
983 {
984     HTMLStyle *This = HTMLSTYLE_THIS(iface);
985     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
986     return E_NOTIMPL;
987 }
988
989 static HRESULT WINAPI HTMLStyle_get_borderRight(IHTMLStyle *iface, BSTR *p)
990 {
991     HTMLStyle *This = HTMLSTYLE_THIS(iface);
992     FIXME("(%p)->(%p)\n", This, p);
993     return E_NOTIMPL;
994 }
995
996 static HRESULT WINAPI HTMLStyle_put_borderBottom(IHTMLStyle *iface, BSTR v)
997 {
998     HTMLStyle *This = HTMLSTYLE_THIS(iface);
999     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1000     return E_NOTIMPL;
1001 }
1002
1003 static HRESULT WINAPI HTMLStyle_get_borderBottom(IHTMLStyle *iface, BSTR *p)
1004 {
1005     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1006     FIXME("(%p)->(%p)\n", This, p);
1007     return E_NOTIMPL;
1008 }
1009
1010 static HRESULT WINAPI HTMLStyle_put_borderLeft(IHTMLStyle *iface, BSTR v)
1011 {
1012     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1013
1014     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1015
1016     return set_style_attr(This, attrBorderLeft, v, ATTR_FIX_PX);
1017 }
1018
1019 static HRESULT WINAPI HTMLStyle_get_borderLeft(IHTMLStyle *iface, BSTR *p)
1020 {
1021     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1022     FIXME("(%p)->(%p)\n", This, p);
1023     return E_NOTIMPL;
1024 }
1025
1026 static HRESULT WINAPI HTMLStyle_put_borderColor(IHTMLStyle *iface, BSTR v)
1027 {
1028     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1029     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1030     return E_NOTIMPL;
1031 }
1032
1033 static HRESULT WINAPI HTMLStyle_get_borderColor(IHTMLStyle *iface, BSTR *p)
1034 {
1035     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1036     FIXME("(%p)->(%p)\n", This, p);
1037     return E_NOTIMPL;
1038 }
1039
1040 static HRESULT WINAPI HTMLStyle_put_borderTopColor(IHTMLStyle *iface, VARIANT v)
1041 {
1042     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1043     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1044     return E_NOTIMPL;
1045 }
1046
1047 static HRESULT WINAPI HTMLStyle_get_borderTopColor(IHTMLStyle *iface, VARIANT *p)
1048 {
1049     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1050     FIXME("(%p)->(%p)\n", This, p);
1051     return E_NOTIMPL;
1052 }
1053
1054 static HRESULT WINAPI HTMLStyle_put_borderRightColor(IHTMLStyle *iface, VARIANT v)
1055 {
1056     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1057     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1058     return E_NOTIMPL;
1059 }
1060
1061 static HRESULT WINAPI HTMLStyle_get_borderRightColor(IHTMLStyle *iface, VARIANT *p)
1062 {
1063     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1064     FIXME("(%p)->(%p)\n", This, p);
1065     return E_NOTIMPL;
1066 }
1067
1068 static HRESULT WINAPI HTMLStyle_put_borderBottomColor(IHTMLStyle *iface, VARIANT v)
1069 {
1070     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1071     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1072     return E_NOTIMPL;
1073 }
1074
1075 static HRESULT WINAPI HTMLStyle_get_borderBottomColor(IHTMLStyle *iface, VARIANT *p)
1076 {
1077     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1078     FIXME("(%p)->(%p)\n", This, p);
1079     return E_NOTIMPL;
1080 }
1081
1082 static HRESULT WINAPI HTMLStyle_put_borderLeftColor(IHTMLStyle *iface, VARIANT v)
1083 {
1084     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1085     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1086     return E_NOTIMPL;
1087 }
1088
1089 static HRESULT WINAPI HTMLStyle_get_borderLeftColor(IHTMLStyle *iface, VARIANT *p)
1090 {
1091     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1092     FIXME("(%p)->(%p)\n", This, p);
1093     return E_NOTIMPL;
1094 }
1095
1096 static HRESULT WINAPI HTMLStyle_put_borderWidth(IHTMLStyle *iface, BSTR v)
1097 {
1098     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1099     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1100     return E_NOTIMPL;
1101 }
1102
1103 static HRESULT WINAPI HTMLStyle_get_borderWidth(IHTMLStyle *iface, BSTR *p)
1104 {
1105     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1106     FIXME("(%p)->(%p)\n", This, p);
1107     return E_NOTIMPL;
1108 }
1109
1110 static HRESULT WINAPI HTMLStyle_put_borderTopWidth(IHTMLStyle *iface, VARIANT v)
1111 {
1112     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1113     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1114     return E_NOTIMPL;
1115 }
1116
1117 static HRESULT WINAPI HTMLStyle_get_borderTopWidth(IHTMLStyle *iface, VARIANT *p)
1118 {
1119     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1120     FIXME("(%p)->(%p)\n", This, p);
1121     return E_NOTIMPL;
1122 }
1123
1124 static HRESULT WINAPI HTMLStyle_put_borderRightWidth(IHTMLStyle *iface, VARIANT v)
1125 {
1126     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1127     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1128     return E_NOTIMPL;
1129 }
1130
1131 static HRESULT WINAPI HTMLStyle_get_borderRightWidth(IHTMLStyle *iface, VARIANT *p)
1132 {
1133     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1134     FIXME("(%p)->(%p)\n", This, p);
1135     return E_NOTIMPL;
1136 }
1137
1138 static HRESULT WINAPI HTMLStyle_put_borderBottomWidth(IHTMLStyle *iface, VARIANT v)
1139 {
1140     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1141     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1142     return E_NOTIMPL;
1143 }
1144
1145 static HRESULT WINAPI HTMLStyle_get_borderBottomWidth(IHTMLStyle *iface, VARIANT *p)
1146 {
1147     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1148     FIXME("(%p)->(%p)\n", This, p);
1149     return E_NOTIMPL;
1150 }
1151
1152 static HRESULT WINAPI HTMLStyle_put_borderLeftWidth(IHTMLStyle *iface, VARIANT v)
1153 {
1154     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1155     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1156     return E_NOTIMPL;
1157 }
1158
1159 static HRESULT WINAPI HTMLStyle_get_borderLeftWidth(IHTMLStyle *iface, VARIANT *p)
1160 {
1161     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1162     FIXME("(%p)->(%p)\n", This, p);
1163     return E_NOTIMPL;
1164 }
1165
1166 static HRESULT WINAPI HTMLStyle_put_borderStyle(IHTMLStyle *iface, BSTR v)
1167 {
1168     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1169     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1170     return E_NOTIMPL;
1171 }
1172
1173 static HRESULT WINAPI HTMLStyle_get_borderStyle(IHTMLStyle *iface, BSTR *p)
1174 {
1175     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1176     FIXME("(%p)->(%p)\n", This, p);
1177     return E_NOTIMPL;
1178 }
1179
1180 static HRESULT WINAPI HTMLStyle_put_borderTopStyle(IHTMLStyle *iface, BSTR v)
1181 {
1182     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1183     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1184     return E_NOTIMPL;
1185 }
1186
1187 static HRESULT WINAPI HTMLStyle_get_borderTopStyle(IHTMLStyle *iface, BSTR *p)
1188 {
1189     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1190     FIXME("(%p)->(%p)\n", This, p);
1191     return E_NOTIMPL;
1192 }
1193
1194 static HRESULT WINAPI HTMLStyle_put_borderRightStyle(IHTMLStyle *iface, BSTR v)
1195 {
1196     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1197     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1198     return E_NOTIMPL;
1199 }
1200
1201 static HRESULT WINAPI HTMLStyle_get_borderRightStyle(IHTMLStyle *iface, BSTR *p)
1202 {
1203     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1204     FIXME("(%p)->(%p)\n", This, p);
1205     return E_NOTIMPL;
1206 }
1207
1208 static HRESULT WINAPI HTMLStyle_put_borderBottomStyle(IHTMLStyle *iface, BSTR v)
1209 {
1210     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1211     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1212     return E_NOTIMPL;
1213 }
1214
1215 static HRESULT WINAPI HTMLStyle_get_borderBottomStyle(IHTMLStyle *iface, BSTR *p)
1216 {
1217     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1218     FIXME("(%p)->(%p)\n", This, p);
1219     return E_NOTIMPL;
1220 }
1221
1222 static HRESULT WINAPI HTMLStyle_put_borderLeftStyle(IHTMLStyle *iface, BSTR v)
1223 {
1224     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1225     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1226     return E_NOTIMPL;
1227 }
1228
1229 static HRESULT WINAPI HTMLStyle_get_borderLeftStyle(IHTMLStyle *iface, BSTR *p)
1230 {
1231     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1232     FIXME("(%p)->(%p)\n", This, p);
1233     return E_NOTIMPL;
1234 }
1235
1236 static HRESULT WINAPI HTMLStyle_put_width(IHTMLStyle *iface, VARIANT v)
1237 {
1238     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1239
1240     TRACE("(%p)->(v%d)\n", This, V_VT(&v));
1241
1242     switch(V_VT(&v)) {
1243     case VT_BSTR:
1244         TRACE("%s\n", debugstr_w(V_BSTR(&v)));
1245         return set_style_attr(This, attrWidth, V_BSTR(&v), 0);
1246     default:
1247         FIXME("unsupported vt %d\n", V_VT(&v));
1248     }
1249
1250     return E_NOTIMPL;
1251 }
1252
1253 static HRESULT WINAPI HTMLStyle_get_width(IHTMLStyle *iface, VARIANT *p)
1254 {
1255     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1256
1257     TRACE("(%p)->(%p)\n", This, p);
1258
1259     V_VT(p) = VT_BSTR;
1260     return get_style_attr(This, attrWidth, &V_BSTR(p));
1261 }
1262
1263 static HRESULT WINAPI HTMLStyle_put_height(IHTMLStyle *iface, VARIANT v)
1264 {
1265     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1266     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1267     return E_NOTIMPL;
1268 }
1269
1270 static HRESULT WINAPI HTMLStyle_get_height(IHTMLStyle *iface, VARIANT *p)
1271 {
1272     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1273     FIXME("(%p)->(%p)\n", This, p);
1274     return E_NOTIMPL;
1275 }
1276
1277 static HRESULT WINAPI HTMLStyle_put_styleFloat(IHTMLStyle *iface, BSTR v)
1278 {
1279     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1280     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1281     return E_NOTIMPL;
1282 }
1283
1284 static HRESULT WINAPI HTMLStyle_get_styleFloat(IHTMLStyle *iface, BSTR *p)
1285 {
1286     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1287     FIXME("(%p)->(%p)\n", This, p);
1288     return E_NOTIMPL;
1289 }
1290
1291 static HRESULT WINAPI HTMLStyle_put_clear(IHTMLStyle *iface, BSTR v)
1292 {
1293     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1294     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1295     return E_NOTIMPL;
1296 }
1297
1298 static HRESULT WINAPI HTMLStyle_get_clear(IHTMLStyle *iface, BSTR *p)
1299 {
1300     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1301     FIXME("(%p)->(%p)\n", This, p);
1302     return E_NOTIMPL;
1303 }
1304
1305 static HRESULT WINAPI HTMLStyle_put_display(IHTMLStyle *iface, BSTR v)
1306 {
1307     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1308
1309     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1310
1311     return set_style_attr(This, attrDisplay, v, 0);
1312 }
1313
1314 static HRESULT WINAPI HTMLStyle_get_display(IHTMLStyle *iface, BSTR *p)
1315 {
1316     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1317
1318     TRACE("(%p)->(%p)\n", This, p);
1319
1320     return get_style_attr(This, attrDisplay, p);
1321 }
1322
1323 static HRESULT WINAPI HTMLStyle_put_visibility(IHTMLStyle *iface, BSTR v)
1324 {
1325     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1326
1327     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1328
1329     return set_style_attr(This, attrVisibility, v, 0);
1330 }
1331
1332 static HRESULT WINAPI HTMLStyle_get_visibility(IHTMLStyle *iface, BSTR *p)
1333 {
1334     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1335
1336     TRACE("(%p)->(%p)\n", This, p);
1337
1338     return get_style_attr(This, attrVisibility, p);
1339 }
1340
1341 static HRESULT WINAPI HTMLStyle_put_listStyleType(IHTMLStyle *iface, BSTR v)
1342 {
1343     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1344     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1345     return E_NOTIMPL;
1346 }
1347
1348 static HRESULT WINAPI HTMLStyle_get_listStyleType(IHTMLStyle *iface, BSTR *p)
1349 {
1350     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1351     FIXME("(%p)->(%p)\n", This, p);
1352     return E_NOTIMPL;
1353 }
1354
1355 static HRESULT WINAPI HTMLStyle_put_listStylePosition(IHTMLStyle *iface, BSTR v)
1356 {
1357     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1358     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1359     return E_NOTIMPL;
1360 }
1361
1362 static HRESULT WINAPI HTMLStyle_get_listStylePosition(IHTMLStyle *iface, BSTR *p)
1363 {
1364     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1365     FIXME("(%p)->(%p)\n", This, p);
1366     return E_NOTIMPL;
1367 }
1368
1369 static HRESULT WINAPI HTMLStyle_put_listStyleImage(IHTMLStyle *iface, BSTR v)
1370 {
1371     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1372     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1373     return E_NOTIMPL;
1374 }
1375
1376 static HRESULT WINAPI HTMLStyle_get_listStyleImage(IHTMLStyle *iface, BSTR *p)
1377 {
1378     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1379     FIXME("(%p)->(%p)\n", This, p);
1380     return E_NOTIMPL;
1381 }
1382
1383 static HRESULT WINAPI HTMLStyle_put_listStyle(IHTMLStyle *iface, BSTR v)
1384 {
1385     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1386     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1387     return E_NOTIMPL;
1388 }
1389
1390 static HRESULT WINAPI HTMLStyle_get_listStyle(IHTMLStyle *iface, BSTR *p)
1391 {
1392     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1393     FIXME("(%p)->(%p)\n", This, p);
1394     return E_NOTIMPL;
1395 }
1396
1397 static HRESULT WINAPI HTMLStyle_put_whiteSpace(IHTMLStyle *iface, BSTR v)
1398 {
1399     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1400     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1401     return E_NOTIMPL;
1402 }
1403
1404 static HRESULT WINAPI HTMLStyle_get_whiteSpace(IHTMLStyle *iface, BSTR *p)
1405 {
1406     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1407     FIXME("(%p)->(%p)\n", This, p);
1408     return E_NOTIMPL;
1409 }
1410
1411 static HRESULT WINAPI HTMLStyle_put_top(IHTMLStyle *iface, VARIANT v)
1412 {
1413     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1414     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1415     return E_NOTIMPL;
1416 }
1417
1418 static HRESULT WINAPI HTMLStyle_get_top(IHTMLStyle *iface, VARIANT *p)
1419 {
1420     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1421     FIXME("(%p)->(%p)\n", This, p);
1422     return E_NOTIMPL;
1423 }
1424
1425 static HRESULT WINAPI HTMLStyle_put_left(IHTMLStyle *iface, VARIANT v)
1426 {
1427     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1428     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1429     return E_NOTIMPL;
1430 }
1431
1432 static HRESULT WINAPI HTMLStyle_get_left(IHTMLStyle *iface, VARIANT *p)
1433 {
1434     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1435     FIXME("(%p)->(%p)\n", This, p);
1436     return E_NOTIMPL;
1437 }
1438
1439 static HRESULT WINAPI HTMLStyle_get_position(IHTMLStyle *iface, BSTR *p)
1440 {
1441     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1442     FIXME("(%p)->(%p)\n", This, p);
1443     return E_NOTIMPL;
1444 }
1445
1446 static HRESULT WINAPI HTMLStyle_put_zIndex(IHTMLStyle *iface, VARIANT v)
1447 {
1448     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1449     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
1450     return E_NOTIMPL;
1451 }
1452
1453 static HRESULT WINAPI HTMLStyle_get_zIndex(IHTMLStyle *iface, VARIANT *p)
1454 {
1455     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1456     FIXME("(%p)->(%p)\n", This, p);
1457     return E_NOTIMPL;
1458 }
1459
1460 static HRESULT WINAPI HTMLStyle_put_overflow(IHTMLStyle *iface, BSTR v)
1461 {
1462     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1463     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1464     return E_NOTIMPL;
1465 }
1466
1467 static HRESULT WINAPI HTMLStyle_get_overflow(IHTMLStyle *iface, BSTR *p)
1468 {
1469     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1470     FIXME("(%p)->(%p)\n", This, p);
1471     return E_NOTIMPL;
1472 }
1473
1474 static HRESULT WINAPI HTMLStyle_put_pageBreakBefore(IHTMLStyle *iface, BSTR v)
1475 {
1476     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1477     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1478     return E_NOTIMPL;
1479 }
1480
1481 static HRESULT WINAPI HTMLStyle_get_pageBreakBefore(IHTMLStyle *iface, BSTR *p)
1482 {
1483     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1484     FIXME("(%p)->(%p)\n", This, p);
1485     return E_NOTIMPL;
1486 }
1487
1488 static HRESULT WINAPI HTMLStyle_put_pageBreakAfter(IHTMLStyle *iface, BSTR v)
1489 {
1490     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1491     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1492     return E_NOTIMPL;
1493 }
1494
1495 static HRESULT WINAPI HTMLStyle_get_pageBreakAfter(IHTMLStyle *iface, BSTR *p)
1496 {
1497     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1498     FIXME("(%p)->(%p)\n", This, p);
1499     return E_NOTIMPL;
1500 }
1501
1502 static HRESULT WINAPI HTMLStyle_put_cssText(IHTMLStyle *iface, BSTR v)
1503 {
1504     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1505     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1506     return E_NOTIMPL;
1507 }
1508
1509 static HRESULT WINAPI HTMLStyle_get_cssText(IHTMLStyle *iface, BSTR *p)
1510 {
1511     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1512     FIXME("(%p)->(%p)\n", This, p);
1513     return E_NOTIMPL;
1514 }
1515
1516 static HRESULT WINAPI HTMLStyle_put_pixelTop(IHTMLStyle *iface, long v)
1517 {
1518     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1519     FIXME("(%p)->()\n", This);
1520     return E_NOTIMPL;
1521 }
1522
1523 static HRESULT WINAPI HTMLStyle_get_pixelTop(IHTMLStyle *iface, long *p)
1524 {
1525     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1526     FIXME("(%p)->()\n", This);
1527     return E_NOTIMPL;
1528 }
1529
1530 static HRESULT WINAPI HTMLStyle_put_pixelLeft(IHTMLStyle *iface, long v)
1531 {
1532     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1533     FIXME("(%p)->()\n", This);
1534     return E_NOTIMPL;
1535 }
1536
1537 static HRESULT WINAPI HTMLStyle_get_pixelLeft(IHTMLStyle *iface, long *p)
1538 {
1539     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1540     FIXME("(%p)->()\n", This);
1541     return E_NOTIMPL;
1542 }
1543
1544 static HRESULT WINAPI HTMLStyle_put_pixelWidth(IHTMLStyle *iface, long v)
1545 {
1546     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1547     FIXME("(%p)->()\n", This);
1548     return E_NOTIMPL;
1549 }
1550
1551 static HRESULT WINAPI HTMLStyle_get_pixelWidth(IHTMLStyle *iface, long *p)
1552 {
1553     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1554     FIXME("(%p)->()\n", This);
1555     return E_NOTIMPL;
1556 }
1557
1558 static HRESULT WINAPI HTMLStyle_put_pixelHeight(IHTMLStyle *iface, long v)
1559 {
1560     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1561     FIXME("(%p)->()\n", This);
1562     return E_NOTIMPL;
1563 }
1564
1565 static HRESULT WINAPI HTMLStyle_get_pixelHeight(IHTMLStyle *iface, long *p)
1566 {
1567     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1568     FIXME("(%p)->()\n", This);
1569     return E_NOTIMPL;
1570 }
1571
1572 static HRESULT WINAPI HTMLStyle_put_posTop(IHTMLStyle *iface, float v)
1573 {
1574     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1575     FIXME("(%p)->()\n", This);
1576     return E_NOTIMPL;
1577 }
1578
1579 static HRESULT WINAPI HTMLStyle_get_posTop(IHTMLStyle *iface, float *p)
1580 {
1581     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1582     FIXME("(%p)->()\n", This);
1583     return E_NOTIMPL;
1584 }
1585
1586 static HRESULT WINAPI HTMLStyle_put_posLeft(IHTMLStyle *iface, float v)
1587 {
1588     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1589     FIXME("(%p)->()\n", This);
1590     return E_NOTIMPL;
1591 }
1592
1593 static HRESULT WINAPI HTMLStyle_get_posLeft(IHTMLStyle *iface, float *p)
1594 {
1595     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1596     FIXME("(%p)->()\n", This);
1597     return E_NOTIMPL;
1598 }
1599
1600 static HRESULT WINAPI HTMLStyle_put_posWidth(IHTMLStyle *iface, float v)
1601 {
1602     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1603     FIXME("(%p)->()\n", This);
1604     return E_NOTIMPL;
1605 }
1606
1607 static HRESULT WINAPI HTMLStyle_get_posWidth(IHTMLStyle *iface, float *p)
1608 {
1609     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1610     FIXME("(%p)->()\n", This);
1611     return E_NOTIMPL;
1612 }
1613
1614 static HRESULT WINAPI HTMLStyle_put_posHeight(IHTMLStyle *iface, float v)
1615 {
1616     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1617     FIXME("(%p)->()\n", This);
1618     return E_NOTIMPL;
1619 }
1620
1621 static HRESULT WINAPI HTMLStyle_get_posHeight(IHTMLStyle *iface, float *p)
1622 {
1623     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1624     FIXME("(%p)->()\n", This);
1625     return E_NOTIMPL;
1626 }
1627
1628 static HRESULT WINAPI HTMLStyle_put_cursor(IHTMLStyle *iface, BSTR v)
1629 {
1630     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1631     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1632     return E_NOTIMPL;
1633 }
1634
1635 static HRESULT WINAPI HTMLStyle_get_cursor(IHTMLStyle *iface, BSTR *p)
1636 {
1637     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1638     FIXME("(%p)->(%p)\n", This, p);
1639     return E_NOTIMPL;
1640 }
1641
1642 static HRESULT WINAPI HTMLStyle_put_clip(IHTMLStyle *iface, BSTR v)
1643 {
1644     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1645     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1646     return E_NOTIMPL;
1647 }
1648
1649 static HRESULT WINAPI HTMLStyle_get_clip(IHTMLStyle *iface, BSTR *p)
1650 {
1651     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1652     FIXME("(%p)->(%p)\n", This, p);
1653     return E_NOTIMPL;
1654 }
1655
1656 static HRESULT WINAPI HTMLStyle_put_filter(IHTMLStyle *iface, BSTR v)
1657 {
1658     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1659     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1660     return E_NOTIMPL;
1661 }
1662
1663 static HRESULT WINAPI HTMLStyle_get_filter(IHTMLStyle *iface, BSTR *p)
1664 {
1665     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1666     FIXME("(%p)->(%p)\n", This, p);
1667     return E_NOTIMPL;
1668 }
1669
1670 static HRESULT WINAPI HTMLStyle_setAttribute(IHTMLStyle *iface, BSTR strAttributeName,
1671         VARIANT AttributeValue, LONG lFlags)
1672 {
1673     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1674     FIXME("(%p)->(%s v%d %08x)\n", This, debugstr_w(strAttributeName),
1675           V_VT(&AttributeValue), lFlags);
1676     return E_NOTIMPL;
1677 }
1678
1679 static HRESULT WINAPI HTMLStyle_getAttribute(IHTMLStyle *iface, BSTR strAttributeName,
1680         LONG lFlags, VARIANT *AttributeValue)
1681 {
1682     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1683     FIXME("(%p)->(%s %08x %p)\n", This, debugstr_w(strAttributeName),
1684          lFlags, AttributeValue);
1685     return E_NOTIMPL;
1686 }
1687
1688 static HRESULT WINAPI HTMLStyle_removeAttribute(IHTMLStyle *iface, BSTR strAttributeName,
1689                                                 LONG lFlags, VARIANT_BOOL *pfSuccess)
1690 {
1691     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1692     FIXME("(%p)->(%s %08x %p)\n", This, debugstr_w(strAttributeName),
1693          lFlags, pfSuccess);
1694     return E_NOTIMPL;
1695 }
1696
1697 static HRESULT WINAPI HTMLStyle_toString(IHTMLStyle *iface, BSTR *String)
1698 {
1699     HTMLStyle *This = HTMLSTYLE_THIS(iface);
1700     FIXME("(%p)->(%p)\n", This, String);
1701     return E_NOTIMPL;
1702 }
1703
1704 static const IHTMLStyleVtbl HTMLStyleVtbl = {
1705     HTMLStyle_QueryInterface,
1706     HTMLStyle_AddRef,
1707     HTMLStyle_Release,
1708     HTMLStyle_GetTypeInfoCount,
1709     HTMLStyle_GetTypeInfo,
1710     HTMLStyle_GetIDsOfNames,
1711     HTMLStyle_Invoke,
1712     HTMLStyle_put_fontFamily,
1713     HTMLStyle_get_fontFamily,
1714     HTMLStyle_put_fontStyle,
1715     HTMLStyle_get_fontStyle,
1716     HTMLStyle_put_fontVariant,
1717     HTMLStyle_get_fontVariant,
1718     HTMLStyle_put_fontWeight,
1719     HTMLStyle_get_fontWeight,
1720     HTMLStyle_put_fontSize,
1721     HTMLStyle_get_fontSize,
1722     HTMLStyle_put_font,
1723     HTMLStyle_get_font,
1724     HTMLStyle_put_color,
1725     HTMLStyle_get_color,
1726     HTMLStyle_put_background,
1727     HTMLStyle_get_background,
1728     HTMLStyle_put_backgroundColor,
1729     HTMLStyle_get_backgroundColor,
1730     HTMLStyle_put_backgroundImage,
1731     HTMLStyle_get_backgroundImage,
1732     HTMLStyle_put_backgroundRepeat,
1733     HTMLStyle_get_backgroundRepeat,
1734     HTMLStyle_put_backgroundAttachment,
1735     HTMLStyle_get_backgroundAttachment,
1736     HTMLStyle_put_backgroundPosition,
1737     HTMLStyle_get_backgroundPosition,
1738     HTMLStyle_put_backgroundPositionX,
1739     HTMLStyle_get_backgroundPositionX,
1740     HTMLStyle_put_backgroundPositionY,
1741     HTMLStyle_get_backgroundPositionY,
1742     HTMLStyle_put_wordSpacing,
1743     HTMLStyle_get_wordSpacing,
1744     HTMLStyle_put_letterSpacing,
1745     HTMLStyle_get_letterSpacing,
1746     HTMLStyle_put_textDecoration,
1747     HTMLStyle_get_textDecoration,
1748     HTMLStyle_put_textDecorationNone,
1749     HTMLStyle_get_textDecorationNone,
1750     HTMLStyle_put_textDecorationUnderline,
1751     HTMLStyle_get_textDecorationUnderline,
1752     HTMLStyle_put_textDecorationOverline,
1753     HTMLStyle_get_textDecorationOverline,
1754     HTMLStyle_put_textDecorationLineThrough,
1755     HTMLStyle_get_textDecorationLineThrough,
1756     HTMLStyle_put_textDecorationBlink,
1757     HTMLStyle_get_textDecorationBlink,
1758     HTMLStyle_put_verticalAlign,
1759     HTMLStyle_get_verticalAlign,
1760     HTMLStyle_put_textTransform,
1761     HTMLStyle_get_textTransform,
1762     HTMLStyle_put_textAlign,
1763     HTMLStyle_get_textAlign,
1764     HTMLStyle_put_textIndent,
1765     HTMLStyle_get_textIndent,
1766     HTMLStyle_put_lineHeight,
1767     HTMLStyle_get_lineHeight,
1768     HTMLStyle_put_marginTop,
1769     HTMLStyle_get_marginTop,
1770     HTMLStyle_put_marginRight,
1771     HTMLStyle_get_marginRight,
1772     HTMLStyle_put_marginBottom,
1773     HTMLStyle_get_marginBottom,
1774     HTMLStyle_put_marginLeft,
1775     HTMLStyle_get_marginLeft,
1776     HTMLStyle_put_margin,
1777     HTMLStyle_get_margin,
1778     HTMLStyle_put_paddingTop,
1779     HTMLStyle_get_paddingTop,
1780     HTMLStyle_put_paddingRight,
1781     HTMLStyle_get_paddingRight,
1782     HTMLStyle_put_paddingBottom,
1783     HTMLStyle_get_paddingBottom,
1784     HTMLStyle_put_paddingLeft,
1785     HTMLStyle_get_paddingLeft,
1786     HTMLStyle_put_padding,
1787     HTMLStyle_get_padding,
1788     HTMLStyle_put_border,
1789     HTMLStyle_get_border,
1790     HTMLStyle_put_borderTop,
1791     HTMLStyle_get_borderTop,
1792     HTMLStyle_put_borderRight,
1793     HTMLStyle_get_borderRight,
1794     HTMLStyle_put_borderBottom,
1795     HTMLStyle_get_borderBottom,
1796     HTMLStyle_put_borderLeft,
1797     HTMLStyle_get_borderLeft,
1798     HTMLStyle_put_borderColor,
1799     HTMLStyle_get_borderColor,
1800     HTMLStyle_put_borderTopColor,
1801     HTMLStyle_get_borderTopColor,
1802     HTMLStyle_put_borderRightColor,
1803     HTMLStyle_get_borderRightColor,
1804     HTMLStyle_put_borderBottomColor,
1805     HTMLStyle_get_borderBottomColor,
1806     HTMLStyle_put_borderLeftColor,
1807     HTMLStyle_get_borderLeftColor,
1808     HTMLStyle_put_borderWidth,
1809     HTMLStyle_get_borderWidth,
1810     HTMLStyle_put_borderTopWidth,
1811     HTMLStyle_get_borderTopWidth,
1812     HTMLStyle_put_borderRightWidth,
1813     HTMLStyle_get_borderRightWidth,
1814     HTMLStyle_put_borderBottomWidth,
1815     HTMLStyle_get_borderBottomWidth,
1816     HTMLStyle_put_borderLeftWidth,
1817     HTMLStyle_get_borderLeftWidth,
1818     HTMLStyle_put_borderStyle,
1819     HTMLStyle_get_borderStyle,
1820     HTMLStyle_put_borderTopStyle,
1821     HTMLStyle_get_borderTopStyle,
1822     HTMLStyle_put_borderRightStyle,
1823     HTMLStyle_get_borderRightStyle,
1824     HTMLStyle_put_borderBottomStyle,
1825     HTMLStyle_get_borderBottomStyle,
1826     HTMLStyle_put_borderLeftStyle,
1827     HTMLStyle_get_borderLeftStyle,
1828     HTMLStyle_put_width,
1829     HTMLStyle_get_width,
1830     HTMLStyle_put_height,
1831     HTMLStyle_get_height,
1832     HTMLStyle_put_styleFloat,
1833     HTMLStyle_get_styleFloat,
1834     HTMLStyle_put_clear,
1835     HTMLStyle_get_clear,
1836     HTMLStyle_put_display,
1837     HTMLStyle_get_display,
1838     HTMLStyle_put_visibility,
1839     HTMLStyle_get_visibility,
1840     HTMLStyle_put_listStyleType,
1841     HTMLStyle_get_listStyleType,
1842     HTMLStyle_put_listStylePosition,
1843     HTMLStyle_get_listStylePosition,
1844     HTMLStyle_put_listStyleImage,
1845     HTMLStyle_get_listStyleImage,
1846     HTMLStyle_put_listStyle,
1847     HTMLStyle_get_listStyle,
1848     HTMLStyle_put_whiteSpace,
1849     HTMLStyle_get_whiteSpace,
1850     HTMLStyle_put_top,
1851     HTMLStyle_get_top,
1852     HTMLStyle_put_left,
1853     HTMLStyle_get_left,
1854     HTMLStyle_get_position,
1855     HTMLStyle_put_zIndex,
1856     HTMLStyle_get_zIndex,
1857     HTMLStyle_put_overflow,
1858     HTMLStyle_get_overflow,
1859     HTMLStyle_put_pageBreakBefore,
1860     HTMLStyle_get_pageBreakBefore,
1861     HTMLStyle_put_pageBreakAfter,
1862     HTMLStyle_get_pageBreakAfter,
1863     HTMLStyle_put_cssText,
1864     HTMLStyle_get_cssText,
1865     HTMLStyle_put_pixelTop,
1866     HTMLStyle_get_pixelTop,
1867     HTMLStyle_put_pixelLeft,
1868     HTMLStyle_get_pixelLeft,
1869     HTMLStyle_put_pixelWidth,
1870     HTMLStyle_get_pixelWidth,
1871     HTMLStyle_put_pixelHeight,
1872     HTMLStyle_get_pixelHeight,
1873     HTMLStyle_put_posTop,
1874     HTMLStyle_get_posTop,
1875     HTMLStyle_put_posLeft,
1876     HTMLStyle_get_posLeft,
1877     HTMLStyle_put_posWidth,
1878     HTMLStyle_get_posWidth,
1879     HTMLStyle_put_posHeight,
1880     HTMLStyle_get_posHeight,
1881     HTMLStyle_put_cursor,
1882     HTMLStyle_get_cursor,
1883     HTMLStyle_put_clip,
1884     HTMLStyle_get_clip,
1885     HTMLStyle_put_filter,
1886     HTMLStyle_get_filter,
1887     HTMLStyle_setAttribute,
1888     HTMLStyle_getAttribute,
1889     HTMLStyle_removeAttribute,
1890     HTMLStyle_toString
1891 };
1892
1893 static const tid_t HTMLStyle_iface_tids[] = {
1894     IHTMLStyle_tid,
1895     0
1896 };
1897 static dispex_static_data_t HTMLStyle_dispex = {
1898     NULL,
1899     DispHTMLStyle_tid,
1900     NULL,
1901     HTMLStyle_iface_tids
1902 };
1903
1904 IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle)
1905 {
1906     HTMLStyle *ret = heap_alloc(sizeof(HTMLStyle));
1907
1908     ret->lpHTMLStyleVtbl = &HTMLStyleVtbl;
1909     ret->ref = 1;
1910     ret->nsstyle = nsstyle;
1911
1912     nsIDOMCSSStyleDeclaration_AddRef(nsstyle);
1913
1914     init_dispex(&ret->dispex, (IUnknown*)HTMLSTYLE(ret),  &HTMLStyle_dispex);
1915
1916     return HTMLSTYLE(ret);
1917 }