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