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