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