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