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