mshtml: Don't access BSCallback directly in nsembed.c.
[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 "config.h"
20
21 #include <stdarg.h>
22 #include <stdio.h>
23
24 #define COBJMACROS
25
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "winnls.h"
30 #include "ole2.h"
31
32 #include "wine/debug.h"
33 #include "wine/unicode.h"
34
35 #include "mshtml_private.h"
36
37 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
38
39 typedef struct {
40     const IHTMLStyleVtbl *lpHTMLStyleVtbl;
41
42     LONG ref;
43
44     nsIDOMCSSStyleDeclaration *nsstyle;
45 } HTMLStyle;
46
47 #define HTMLSTYLE(x)  ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl);
48
49 static const WCHAR attrBackgroundColor[] =
50     {'b','a','c','k','g','r','o','u','n','d','-','c','o','l','o','r',0};
51 static const WCHAR attrBorderLeft[] =
52     {'b','o','r','d','e','r','-','l','e','f','t',0};
53 static const WCHAR attrColor[] =
54     {'c','o','l','o','r',0};
55 static const WCHAR attrDisplay[] =
56     {'d','i','s','p','l','a','y',0};
57 static const WCHAR attrFontFamily[] =
58     {'f','o','n','t','-','f','a','m','i','l','y',0};
59 static const WCHAR attrFontSize[] =
60     {'f','o','n','t','-','s','i','z','e',0};
61 static const WCHAR attrFontStyle[] =
62     {'f','o','n','t','-','s','t','y','l','e',0};
63 static const WCHAR attrFontWeight[] =
64     {'f','o','n','t','-','w','e','i','g','h','t',0};
65 static const WCHAR attrMarginLeft[] =
66     {'m','a','r','g','i','n','-','l','e','f','t',0};
67 static const WCHAR attrMarginRight[] =
68     {'m','a','r','g','i','n','-','r','i','g','h','t',0};
69 static const WCHAR attrPaddingLeft[] =
70     {'p','a','d','d','i','n','g','-','l','e','f','t',0};
71 static const WCHAR attrTextDecoration[] =
72     {'t','e','x','t','-','d','e','c','o','r','a','t','i','o','n',0};
73 static const WCHAR attrVisibility[] =
74     {'v','i','s','i','b','i','l','i','t','y',0};
75
76 static const WCHAR valLineThrough[] =
77     {'l','i','n','e','-','t','h','r','o','u','g','h',0};
78 static const WCHAR valUnderline[] =
79     {'u','n','d','e','r','l','i','n','e',0};
80
81 static const WCHAR px_formatW[] = {'%','d','p','x',0};
82 static const WCHAR emptyW[] = {0};
83
84 static LPWSTR fix_px_value(LPCWSTR val)
85 {
86     LPCWSTR ptr = val;
87
88     while(*ptr) {
89         while(*ptr && isspaceW(*ptr))
90             ptr++;
91         if(!*ptr)
92             break;
93
94         while(*ptr && isdigitW(*ptr))
95             ptr++;
96
97         if(!*ptr || isspaceW(*ptr)) {
98             LPWSTR ret, p;
99             int len = strlenW(val)+1;
100
101             ret = heap_alloc((len+2)*sizeof(WCHAR));
102             memcpy(ret, val, (ptr-val)*sizeof(WCHAR));
103             p = ret + (ptr-val);
104             *p++ = 'p';
105             *p++ = 'x';
106             strcpyW(p, ptr);
107
108             TRACE("fixed %s -> %s\n", debugstr_w(val), debugstr_w(ret));
109
110             return ret;
111         }
112
113         while(*ptr && !isspaceW(*ptr))
114             ptr++;
115     }
116
117     return NULL;
118 }
119
120 #define ATTR_FIX_PX  1
121
122 static HRESULT set_style_attr(HTMLStyle *This, LPCWSTR name, LPCWSTR value, DWORD flags)
123 {
124     nsAString str_name, str_value, str_empty;
125     LPWSTR val = NULL;
126     nsresult nsres;
127
128     static const PRUnichar wszEmpty[] = {0};
129
130     TRACE("(%p)->(%s %s)\n", This, debugstr_w(name), debugstr_w(value));
131
132     if(flags & ATTR_FIX_PX)
133         val = fix_px_value(value);
134
135     nsAString_Init(&str_name, name);
136     nsAString_Init(&str_value, val ? val : value);
137     nsAString_Init(&str_empty, wszEmpty);
138     heap_free(val);
139
140     nsres = nsIDOMCSSStyleDeclaration_SetProperty(This->nsstyle, &str_name, &str_value, &str_empty);
141     if(NS_FAILED(nsres))
142         ERR("SetProperty failed: %08x\n", nsres);
143
144     nsAString_Finish(&str_name);
145     nsAString_Finish(&str_value);
146     nsAString_Finish(&str_empty);
147
148     return S_OK;
149 }
150
151 static HRESULT get_style_attr_nsval(HTMLStyle *This, LPCWSTR name, nsAString *value)
152 {
153     nsAString str_name;
154     nsresult nsres;
155
156     nsAString_Init(&str_name, name);
157
158     nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(This->nsstyle, &str_name, value);
159     if(NS_FAILED(nsres)) {
160         ERR("SetProperty failed: %08x\n", nsres);
161         return E_FAIL;
162     }
163
164     nsAString_Finish(&str_name);
165
166     return NS_OK;
167 }
168
169 static HRESULT get_style_attr(HTMLStyle *This, LPCWSTR name, BSTR *p)
170 {
171     nsAString str_value;
172     const PRUnichar *value;
173
174     nsAString_Init(&str_value, NULL);
175
176     get_style_attr_nsval(This, name, &str_value);
177
178     nsAString_GetData(&str_value, &value);
179     *p = *value ? SysAllocString(value) : NULL;
180
181     nsAString_Finish(&str_value);
182
183     TRACE("%s -> %s\n", debugstr_w(name), debugstr_w(*p));
184     return S_OK;
185 }
186
187 static HRESULT check_style_attr_value(HTMLStyle *This, LPCWSTR name, LPCWSTR exval, VARIANT_BOOL *p)
188 {
189     nsAString str_value;
190     const PRUnichar *value;
191
192     nsAString_Init(&str_value, NULL);
193
194     get_style_attr_nsval(This, name, &str_value);
195
196     nsAString_GetData(&str_value, &value);
197     *p = strcmpW(value, exval) ? VARIANT_FALSE : VARIANT_TRUE;
198     nsAString_Finish(&str_value);
199
200     TRACE("%s -> %x\n", debugstr_w(name), *p);
201     return S_OK;
202 }
203
204 #define HTMLSTYLE_THIS(iface) DEFINE_THIS(HTMLStyle, HTMLStyle, iface)
205
206 static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, void **ppv)
207 {
208     HTMLStyle *This = HTMLSTYLE_THIS(iface);
209
210     *ppv = NULL;
211
212     if(IsEqualGUID(&IID_IUnknown, riid)) {
213         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
214         *ppv = HTMLSTYLE(This);
215     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
216         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
217         *ppv = HTMLSTYLE(This);
218     }else if(IsEqualGUID(&IID_IHTMLStyle, riid)) {
219         TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv);
220         *ppv = HTMLSTYLE(This);
221     }
222
223     if(*ppv) {
224         IUnknown_AddRef((IUnknown*)*ppv);
225         return S_OK;
226     }
227
228     WARN("unsupported %s\n", debugstr_guid(riid));
229     return E_NOINTERFACE;
230 }
231
232 static ULONG WINAPI HTMLStyle_AddRef(IHTMLStyle *iface)
233 {
234     HTMLStyle *This = HTMLSTYLE_THIS(iface);
235     LONG ref = InterlockedIncrement(&This->ref);
236
237     TRACE("(%p) ref=%d\n", This, ref);
238
239     return ref;
240 }
241
242 static ULONG WINAPI HTMLStyle_Release(IHTMLStyle *iface)
243 {
244     HTMLStyle *This = HTMLSTYLE_THIS(iface);
245     LONG ref = InterlockedDecrement(&This->ref);
246
247     TRACE("(%p) ref=%d\n", This, ref);
248
249     if(!ref)
250         heap_free(This);
251
252     return ref;
253 }
254
255 static HRESULT WINAPI HTMLStyle_GetTypeInfoCount(IHTMLStyle *iface, UINT *pctinfo)
256 {
257     HTMLStyle *This = HTMLSTYLE_THIS(iface);
258     FIXME("(%p)->(%p)\n", This, pctinfo);
259     return E_NOTIMPL;
260 }
261
262 static HRESULT WINAPI HTMLStyle_GetTypeInfo(IHTMLStyle *iface, UINT iTInfo,
263                                               LCID lcid, ITypeInfo **ppTInfo)
264 {
265     HTMLStyle *This = HTMLSTYLE_THIS(iface);
266     FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
267     return E_NOTIMPL;
268 }
269
270 static HRESULT WINAPI HTMLStyle_GetIDsOfNames(IHTMLStyle *iface, REFIID riid,
271                                                 LPOLESTR *rgszNames, UINT cNames,
272                                                 LCID lcid, DISPID *rgDispId)
273 {
274     HTMLStyle *This = HTMLSTYLE_THIS(iface);
275     FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
276                                         lcid, rgDispId);
277     return E_NOTIMPL;
278 }
279
280 static HRESULT WINAPI HTMLStyle_Invoke(IHTMLStyle *iface, DISPID dispIdMember,
281                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
282                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
283 {
284     HTMLStyle *This = HTMLSTYLE_THIS(iface);
285     FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
286             lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
287     return E_NOTIMPL;
288 }
289
290 static HRESULT WINAPI HTMLStyle_put_fontFamily(IHTMLStyle *iface, BSTR v)
291 {
292     HTMLStyle *This = HTMLSTYLE_THIS(iface);
293
294     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
295
296     return set_style_attr(This, attrFontFamily, v, 0);
297 }
298
299 static HRESULT WINAPI HTMLStyle_get_fontFamily(IHTMLStyle *iface, BSTR *p)
300 {
301     HTMLStyle *This = HTMLSTYLE_THIS(iface);
302
303     TRACE("(%p)->(%p)\n", This, p);
304
305     return get_style_attr(This, attrFontFamily, p);
306 }
307
308 static HRESULT WINAPI HTMLStyle_put_fontStyle(IHTMLStyle *iface, BSTR v)
309 {
310     HTMLStyle *This = HTMLSTYLE_THIS(iface);
311     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
312     return E_NOTIMPL;
313 }
314
315 static HRESULT WINAPI HTMLStyle_get_fontStyle(IHTMLStyle *iface, BSTR *p)
316 {
317     HTMLStyle *This = HTMLSTYLE_THIS(iface);
318
319     TRACE("(%p)->(%p)\n", This, p);
320
321     return get_style_attr(This, attrFontStyle, p);
322 }
323
324 static HRESULT WINAPI HTMLStyle_put_fontVariant(IHTMLStyle *iface, BSTR v)
325 {
326     HTMLStyle *This = HTMLSTYLE_THIS(iface);
327     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
328     return E_NOTIMPL;
329 }
330
331 static HRESULT WINAPI HTMLStyle_get_fontVariant(IHTMLStyle *iface, BSTR *p)
332 {
333     HTMLStyle *This = HTMLSTYLE_THIS(iface);
334     FIXME("(%p)->(%p)\n", This, p);
335     return E_NOTIMPL;
336 }
337
338 static HRESULT WINAPI HTMLStyle_put_fontWeight(IHTMLStyle *iface, BSTR v)
339 {
340     HTMLStyle *This = HTMLSTYLE_THIS(iface);
341     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
342     return E_NOTIMPL;
343 }
344
345 static HRESULT WINAPI HTMLStyle_get_fontWeight(IHTMLStyle *iface, BSTR *p)
346 {
347     HTMLStyle *This = HTMLSTYLE_THIS(iface);
348
349     TRACE("(%p)->(%p)\n", This, p);
350
351     return get_style_attr(This, attrFontWeight, p);
352 }
353
354 static HRESULT WINAPI HTMLStyle_put_fontSize(IHTMLStyle *iface, VARIANT v)
355 {
356     HTMLStyle *This = HTMLSTYLE_THIS(iface);
357
358     TRACE("(%p)->(v%d)\n", This, V_VT(&v));
359
360     switch(V_VT(&v)) {
361     case VT_BSTR:
362         return set_style_attr(This, attrFontSize, V_BSTR(&v), 0);
363     default:
364         FIXME("not supported vt %d\n", V_VT(&v));
365     }
366
367     return S_OK;
368 }
369
370 static HRESULT WINAPI HTMLStyle_get_fontSize(IHTMLStyle *iface, VARIANT *p)
371 {
372     HTMLStyle *This = HTMLSTYLE_THIS(iface);
373
374     TRACE("(%p)->(%p)\n", This, p);
375
376     V_VT(p) = VT_BSTR;
377     return get_style_attr(This, attrFontSize, &V_BSTR(p));
378 }
379
380 static HRESULT WINAPI HTMLStyle_put_font(IHTMLStyle *iface, BSTR v)
381 {
382     HTMLStyle *This = HTMLSTYLE_THIS(iface);
383     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
384     return E_NOTIMPL;
385 }
386
387 static HRESULT WINAPI HTMLStyle_get_font(IHTMLStyle *iface, BSTR *p)
388 {
389     HTMLStyle *This = HTMLSTYLE_THIS(iface);
390     FIXME("(%p)->(%p)\n", This, p);
391     return E_NOTIMPL;
392 }
393
394 static HRESULT WINAPI HTMLStyle_put_color(IHTMLStyle *iface, VARIANT v)
395 {
396     HTMLStyle *This = HTMLSTYLE_THIS(iface);
397     FIXME("(%p)->(v%d)\n", This, V_VT(&v));
398     return E_NOTIMPL;
399 }
400
401 static HRESULT WINAPI HTMLStyle_get_color(IHTMLStyle *iface, VARIANT *p)
402 {
403     HTMLStyle *This = HTMLSTYLE_THIS(iface);
404
405     TRACE("(%p)->(%p)\n", This, p);
406
407     V_VT(p) = VT_BSTR;
408     return get_style_attr(This, attrColor, &V_BSTR(p));
409 }
410
411 static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v)
412 {
413     HTMLStyle *This = HTMLSTYLE_THIS(iface);
414     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
415     return E_NOTIMPL;
416 }
417
418 static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p)
419 {
420     HTMLStyle *This = HTMLSTYLE_THIS(iface);
421     FIXME("(%p)->(%p)\n", This, p);
422     return E_NOTIMPL;
423 }
424
425 static HRESULT WINAPI HTMLStyle_put_backgroundColor(IHTMLStyle *iface, VARIANT v)
426 {
427     HTMLStyle *This = HTMLSTYLE_THIS(iface);
428
429     TRACE("(%p)->(v%d)\n", This, V_VT(&v));
430
431     switch(V_VT(&v)) {
432     case VT_BSTR:
433         return set_style_attr(This, attrBackgroundColor, V_BSTR(&v), 0);
434     case VT_I4: {
435         WCHAR value[10];
436         static const WCHAR format[] = {'#','%','0','6','x',0};
437
438         wsprintfW(value, format, V_I4(&v));
439         return set_style_attr(This, attrBackgroundColor, value, 0);
440     }
441     default:
442         FIXME("unsupported vt %d\n", V_VT(&v));
443     }
444
445     return S_OK;
446 }
447
448 static HRESULT WINAPI HTMLStyle_get_backgroundColor(IHTMLStyle *iface, VARIANT *p)
449 {
450     HTMLStyle *This = HTMLSTYLE_THIS(iface);
451     FIXME("(%p)->(%p)\n", This, p);
452     return E_NOTIMPL;
453 }
454
455 static HRESULT WINAPI HTMLStyle_put_backgroundImage(IHTMLStyle *iface, BSTR v)
456 {
457     HTMLStyle *This = HTMLSTYLE_THIS(iface);
458     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
459     return E_NOTIMPL;
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 }