ntdll: Copy some missing math functions from msvcrt.
[wine] / dlls / mshtml / htmlstyle2.c
1 /*
2  * Copyright 2008 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 "mshtml_private.h"
29 #include "htmlstyle.h"
30
31 #include "wine/debug.h"
32
33 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
34
35 static inline HTMLStyle *impl_from_IHTMLStyle2(IHTMLStyle2 *iface)
36 {
37     return CONTAINING_RECORD(iface, HTMLStyle, IHTMLStyle2_iface);
38 }
39
40 static HRESULT WINAPI HTMLStyle2_QueryInterface(IHTMLStyle2 *iface, REFIID riid, void **ppv)
41 {
42     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
43
44     return IHTMLStyle_QueryInterface(&This->IHTMLStyle_iface, riid, ppv);
45 }
46
47 static ULONG WINAPI HTMLStyle2_AddRef(IHTMLStyle2 *iface)
48 {
49     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
50
51     return IHTMLStyle_AddRef(&This->IHTMLStyle_iface);
52 }
53
54 static ULONG WINAPI HTMLStyle2_Release(IHTMLStyle2 *iface)
55 {
56     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
57
58     return IHTMLStyle_Release(&This->IHTMLStyle_iface);
59 }
60
61 static HRESULT WINAPI HTMLStyle2_GetTypeInfoCount(IHTMLStyle2 *iface, UINT *pctinfo)
62 {
63     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
64     return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
65 }
66
67 static HRESULT WINAPI HTMLStyle2_GetTypeInfo(IHTMLStyle2 *iface, UINT iTInfo,
68                                               LCID lcid, ITypeInfo **ppTInfo)
69 {
70     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
71     return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
72 }
73
74 static HRESULT WINAPI HTMLStyle2_GetIDsOfNames(IHTMLStyle2 *iface, REFIID riid,
75                                                 LPOLESTR *rgszNames, UINT cNames,
76                                                 LCID lcid, DISPID *rgDispId)
77 {
78     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
79     return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
80             lcid, rgDispId);
81 }
82
83 static HRESULT WINAPI HTMLStyle2_Invoke(IHTMLStyle2 *iface, DISPID dispIdMember,
84                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
85                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
86 {
87     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
88     return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
89             wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
90 }
91
92 static HRESULT WINAPI HTMLStyle2_put_tableLayout(IHTMLStyle2 *iface, BSTR v)
93 {
94     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
95     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
96     return E_NOTIMPL;
97 }
98
99 static HRESULT WINAPI HTMLStyle2_get_tableLayout(IHTMLStyle2 *iface, BSTR *p)
100 {
101     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
102     FIXME("(%p)->(%p)\n", This, p);
103     return E_NOTIMPL;
104 }
105
106 static HRESULT WINAPI HTMLStyle2_put_borderCollapse(IHTMLStyle2 *iface, BSTR v)
107 {
108     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
109     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
110     return E_NOTIMPL;
111 }
112
113 static HRESULT WINAPI HTMLStyle2_get_borderCollapse(IHTMLStyle2 *iface, BSTR *p)
114 {
115     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
116     FIXME("(%p)->(%p)\n", This, p);
117     return E_NOTIMPL;
118 }
119
120 static HRESULT WINAPI HTMLStyle2_put_direction(IHTMLStyle2 *iface, BSTR v)
121 {
122     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
123
124     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
125
126     return set_nsstyle_attr(This->nsstyle, STYLEID_DIRECTION, v, 0);
127 }
128
129 static HRESULT WINAPI HTMLStyle2_get_direction(IHTMLStyle2 *iface, BSTR *p)
130 {
131     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
132
133     TRACE("(%p)->(%p)\n", This, p);
134
135     return get_nsstyle_attr(This->nsstyle, STYLEID_DIRECTION, p, 0);
136 }
137
138 static HRESULT WINAPI HTMLStyle2_put_behavior(IHTMLStyle2 *iface, BSTR v)
139 {
140     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
141     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
142     return E_NOTIMPL;
143 }
144
145 static HRESULT WINAPI HTMLStyle2_get_behavior(IHTMLStyle2 *iface, BSTR *p)
146 {
147     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
148     FIXME("(%p)->(%p)\n", This, p);
149     return E_NOTIMPL;
150 }
151
152 static HRESULT WINAPI HTMLStyle2_setExpression(IHTMLStyle2 *iface, BSTR propname, BSTR expression, BSTR language)
153 {
154     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
155     FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(propname), debugstr_w(expression), debugstr_w(language));
156     return E_NOTIMPL;
157 }
158
159 static HRESULT WINAPI HTMLStyle2_getExpression(IHTMLStyle2 *iface, BSTR propname, VARIANT *expression)
160 {
161     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
162     FIXME("(%p)->(%s %p)\n", This, debugstr_w(propname), expression);
163     return E_NOTIMPL;
164 }
165
166 static HRESULT WINAPI HTMLStyle2_removeExpression(IHTMLStyle2 *iface, BSTR propname, VARIANT_BOOL *pfSuccess)
167 {
168     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
169     FIXME("(%p)->(%s %p)\n", This, debugstr_w(propname), pfSuccess);
170     return E_NOTIMPL;
171 }
172
173 static HRESULT WINAPI HTMLStyle2_put_position(IHTMLStyle2 *iface, BSTR v)
174 {
175     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
176
177     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
178
179     return set_nsstyle_attr(This->nsstyle, STYLEID_POSITION, v, 0);
180 }
181
182 static HRESULT WINAPI HTMLStyle2_get_position(IHTMLStyle2 *iface, BSTR *p)
183 {
184     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
185
186     TRACE("(%p)->(%p)\n", This, p);
187
188     return get_nsstyle_attr(This->nsstyle, STYLEID_POSITION, p, 0);
189 }
190
191 static HRESULT WINAPI HTMLStyle2_put_unicodeBidi(IHTMLStyle2 *iface, BSTR v)
192 {
193     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
194     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
195     return E_NOTIMPL;
196 }
197
198 static HRESULT WINAPI HTMLStyle2_get_unicodeBidi(IHTMLStyle2 *iface, BSTR *p)
199 {
200     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
201     FIXME("(%p)->(%p)\n", This, p);
202     return E_NOTIMPL;
203 }
204
205 static HRESULT WINAPI HTMLStyle2_put_bottom(IHTMLStyle2 *iface, VARIANT v)
206 {
207     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
208
209     TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
210
211     return set_nsstyle_attr_var(This->nsstyle, STYLEID_BOTTOM, &v, ATTR_FIX_PX);
212 }
213
214 static HRESULT WINAPI HTMLStyle2_get_bottom(IHTMLStyle2 *iface, VARIANT *p)
215 {
216     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
217
218     TRACE("(%p)->(%p)\n", This, p);
219
220     return get_nsstyle_attr_var(This->nsstyle, STYLEID_BOTTOM, p, 0);
221 }
222
223 static HRESULT WINAPI HTMLStyle2_put_right(IHTMLStyle2 *iface, VARIANT v)
224 {
225     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
226
227     TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
228
229     return set_nsstyle_attr_var(This->nsstyle, STYLEID_RIGHT, &v, 0);
230 }
231
232 static HRESULT WINAPI HTMLStyle2_get_right(IHTMLStyle2 *iface, VARIANT *p)
233 {
234     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
235
236     TRACE("(%p)->(%p)\n", This, p);
237
238     return get_nsstyle_attr_var(This->nsstyle, STYLEID_RIGHT, p, 0);
239 }
240
241 static HRESULT WINAPI HTMLStyle2_put_pixelBottom(IHTMLStyle2 *iface, LONG v)
242 {
243     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
244     FIXME("(%p)->(%d)\n", This, v);
245     return E_NOTIMPL;
246 }
247
248 static HRESULT WINAPI HTMLStyle2_get_pixelBottom(IHTMLStyle2 *iface, LONG *p)
249 {
250     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
251     FIXME("(%p)->(%p)\n", This, p);
252     return E_NOTIMPL;
253 }
254
255 static HRESULT WINAPI HTMLStyle2_put_pixelRight(IHTMLStyle2 *iface, LONG v)
256 {
257     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
258     FIXME("(%p)->(%d)\n", This, v);
259     return E_NOTIMPL;
260 }
261
262 static HRESULT WINAPI HTMLStyle2_get_pixelRight(IHTMLStyle2 *iface, LONG *p)
263 {
264     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
265     FIXME("(%p)->(%p)\n", This, p);
266     return E_NOTIMPL;
267 }
268
269 static HRESULT WINAPI HTMLStyle2_put_posBottom(IHTMLStyle2 *iface, float v)
270 {
271     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
272     FIXME("(%p)->(%f)\n", This, v);
273     return E_NOTIMPL;
274 }
275
276 static HRESULT WINAPI HTMLStyle2_get_posBottom(IHTMLStyle2 *iface, float *p)
277 {
278     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
279     FIXME("(%p)->(%p)\n", This, p);
280     return E_NOTIMPL;
281 }
282
283 static HRESULT WINAPI HTMLStyle2_put_posRight(IHTMLStyle2 *iface, float v)
284 {
285     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
286     FIXME("(%p)->(%f)\n", This, v);
287     return E_NOTIMPL;
288 }
289
290 static HRESULT WINAPI HTMLStyle2_get_posRight(IHTMLStyle2 *iface, float *p)
291 {
292     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
293     FIXME("(%p)->(%p)\n", This, p);
294     return E_NOTIMPL;
295 }
296
297 static HRESULT WINAPI HTMLStyle2_put_imeMode(IHTMLStyle2 *iface, BSTR v)
298 {
299     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
300     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
301     return E_NOTIMPL;
302 }
303
304 static HRESULT WINAPI HTMLStyle2_get_imeMode(IHTMLStyle2 *iface, BSTR *p)
305 {
306     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
307     FIXME("(%p)->(%p)\n", This, p);
308     return E_NOTIMPL;
309 }
310
311 static HRESULT WINAPI HTMLStyle2_put_rubyAlign(IHTMLStyle2 *iface, BSTR v)
312 {
313     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
314     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
315     return E_NOTIMPL;
316 }
317
318 static HRESULT WINAPI HTMLStyle2_get_rubyAlign(IHTMLStyle2 *iface, BSTR *p)
319 {
320     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
321     FIXME("(%p)->(%p)\n", This, p);
322     return E_NOTIMPL;
323 }
324
325 static HRESULT WINAPI HTMLStyle2_put_rubyPosition(IHTMLStyle2 *iface, BSTR v)
326 {
327     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
328     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
329     return E_NOTIMPL;
330 }
331
332 static HRESULT WINAPI HTMLStyle2_get_rubyPosition(IHTMLStyle2 *iface, BSTR *p)
333 {
334     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
335     FIXME("(%p)->(%p)\n", This, p);
336     return E_NOTIMPL;
337 }
338
339 static HRESULT WINAPI HTMLStyle2_put_rubyOverhang(IHTMLStyle2 *iface, BSTR v)
340 {
341     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
342     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
343     return E_NOTIMPL;
344 }
345
346 static HRESULT WINAPI HTMLStyle2_get_rubyOverhang(IHTMLStyle2 *iface, BSTR *p)
347 {
348     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
349     FIXME("(%p)->(%p)\n", This, p);
350     return E_NOTIMPL;
351 }
352
353 static HRESULT WINAPI HTMLStyle2_put_layoutGridChar(IHTMLStyle2 *iface, VARIANT v)
354 {
355     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
356     FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
357     return E_NOTIMPL;
358 }
359
360 static HRESULT WINAPI HTMLStyle2_get_layoutGridChar(IHTMLStyle2 *iface, VARIANT *p)
361 {
362     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
363     FIXME("(%p)->(%p)\n", This, p);
364     return E_NOTIMPL;
365 }
366
367 static HRESULT WINAPI HTMLStyle2_put_layoutGridLine(IHTMLStyle2 *iface, VARIANT v)
368 {
369     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
370     FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
371     return E_NOTIMPL;
372 }
373
374 static HRESULT WINAPI HTMLStyle2_get_layoutGridLine(IHTMLStyle2 *iface, VARIANT *p)
375 {
376     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
377     FIXME("(%p)->(%p)\n", This, p);
378     return E_NOTIMPL;
379 }
380
381 static HRESULT WINAPI HTMLStyle2_put_layoutGridMode(IHTMLStyle2 *iface, BSTR v)
382 {
383     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
384     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
385     return E_NOTIMPL;
386 }
387
388 static HRESULT WINAPI HTMLStyle2_get_layoutGridMode(IHTMLStyle2 *iface, BSTR *p)
389 {
390     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
391     FIXME("(%p)->(%p)\n", This, p);
392     return E_NOTIMPL;
393 }
394
395 static HRESULT WINAPI HTMLStyle2_put_layoutGridType(IHTMLStyle2 *iface, BSTR v)
396 {
397     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
398     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
399     return E_NOTIMPL;
400 }
401
402 static HRESULT WINAPI HTMLStyle2_get_layoutGridType(IHTMLStyle2 *iface, BSTR *p)
403 {
404     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
405     FIXME("(%p)->(%p)\n", This, p);
406     return E_NOTIMPL;
407 }
408
409 static HRESULT WINAPI HTMLStyle2_put_layoutGrid(IHTMLStyle2 *iface, BSTR v)
410 {
411     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
412     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
413     return E_NOTIMPL;
414 }
415
416 static HRESULT WINAPI HTMLStyle2_get_layoutGrid(IHTMLStyle2 *iface, BSTR *p)
417 {
418     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
419     FIXME("(%p)->(%p)\n", This, p);
420     return E_NOTIMPL;
421 }
422
423 static HRESULT WINAPI HTMLStyle2_put_wordBreak(IHTMLStyle2 *iface, BSTR v)
424 {
425     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
426     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
427     return E_NOTIMPL;
428 }
429
430 static HRESULT WINAPI HTMLStyle2_get_wordBreak(IHTMLStyle2 *iface, BSTR *p)
431 {
432     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
433     FIXME("(%p)->(%p)\n", This, p);
434     return E_NOTIMPL;
435 }
436
437 static HRESULT WINAPI HTMLStyle2_put_lineBreak(IHTMLStyle2 *iface, BSTR v)
438 {
439     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
440     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
441     return E_NOTIMPL;
442 }
443
444 static HRESULT WINAPI HTMLStyle2_get_lineBreak(IHTMLStyle2 *iface, BSTR *p)
445 {
446     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
447     FIXME("(%p)->(%p)\n", This, p);
448     return E_NOTIMPL;
449 }
450
451 static HRESULT WINAPI HTMLStyle2_put_textJustify(IHTMLStyle2 *iface, BSTR v)
452 {
453     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
454     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
455     return E_NOTIMPL;
456 }
457
458 static HRESULT WINAPI HTMLStyle2_get_textJustify(IHTMLStyle2 *iface, BSTR *p)
459 {
460     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
461     FIXME("(%p)->(%p)\n", This, p);
462     return E_NOTIMPL;
463 }
464
465 static HRESULT WINAPI HTMLStyle2_put_textJustifyTrim(IHTMLStyle2 *iface, BSTR v)
466 {
467     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
468     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
469     return E_NOTIMPL;
470 }
471
472 static HRESULT WINAPI HTMLStyle2_get_textJustifyTrim(IHTMLStyle2 *iface, BSTR *p)
473 {
474     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
475     FIXME("(%p)->(%p)\n", This, p);
476     return E_NOTIMPL;
477 }
478
479 static HRESULT WINAPI HTMLStyle2_put_textKashida(IHTMLStyle2 *iface, VARIANT v)
480 {
481     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
482     FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
483     return E_NOTIMPL;
484 }
485
486 static HRESULT WINAPI HTMLStyle2_get_textKashida(IHTMLStyle2 *iface, VARIANT *p)
487 {
488     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
489     FIXME("(%p)->(%p)\n", This, p);
490     return E_NOTIMPL;
491 }
492
493 static HRESULT WINAPI HTMLStyle2_put_textAutospace(IHTMLStyle2 *iface, BSTR v)
494 {
495     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
496     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
497     return E_NOTIMPL;
498 }
499
500 static HRESULT WINAPI HTMLStyle2_get_textAutospace(IHTMLStyle2 *iface, BSTR *p)
501 {
502     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
503     FIXME("(%p)->(%p)\n", This, p);
504     return E_NOTIMPL;
505 }
506
507 static HRESULT WINAPI HTMLStyle2_put_overflowX(IHTMLStyle2 *iface, BSTR v)
508 {
509     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
510
511     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
512
513     return set_nsstyle_attr(This->nsstyle, STYLEID_OVERFLOW_X, v, 0);
514 }
515
516 static HRESULT WINAPI HTMLStyle2_get_overflowX(IHTMLStyle2 *iface, BSTR *p)
517 {
518     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
519
520     TRACE("(%p)->(%p)\n", This, p);
521
522     return get_nsstyle_attr(This->nsstyle, STYLEID_OVERFLOW_X, p, 0);
523 }
524
525 static HRESULT WINAPI HTMLStyle2_put_overflowY(IHTMLStyle2 *iface, BSTR v)
526 {
527     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
528
529     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
530
531     return set_nsstyle_attr(This->nsstyle, STYLEID_OVERFLOW_Y, v, 0);
532 }
533
534 static HRESULT WINAPI HTMLStyle2_get_overflowY(IHTMLStyle2 *iface, BSTR *p)
535 {
536     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
537
538     TRACE("(%p)->(%p)\n", This, p);
539
540     return get_nsstyle_attr(This->nsstyle, STYLEID_OVERFLOW_Y, p, 0);
541 }
542
543 static HRESULT WINAPI HTMLStyle2_put_accelerator(IHTMLStyle2 *iface, BSTR v)
544 {
545     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
546     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
547     return E_NOTIMPL;
548 }
549
550 static HRESULT WINAPI HTMLStyle2_get_accelerator(IHTMLStyle2 *iface, BSTR *p)
551 {
552     HTMLStyle *This = impl_from_IHTMLStyle2(iface);
553     FIXME("(%p)->(%p)\n", This, p);
554     return E_NOTIMPL;
555 }
556
557 static const IHTMLStyle2Vtbl HTMLStyle2Vtbl = {
558     HTMLStyle2_QueryInterface,
559     HTMLStyle2_AddRef,
560     HTMLStyle2_Release,
561     HTMLStyle2_GetTypeInfoCount,
562     HTMLStyle2_GetTypeInfo,
563     HTMLStyle2_GetIDsOfNames,
564     HTMLStyle2_Invoke,
565     HTMLStyle2_put_tableLayout,
566     HTMLStyle2_get_tableLayout,
567     HTMLStyle2_put_borderCollapse,
568     HTMLStyle2_get_borderCollapse,
569     HTMLStyle2_put_direction,
570     HTMLStyle2_get_direction,
571     HTMLStyle2_put_behavior,
572     HTMLStyle2_get_behavior,
573     HTMLStyle2_setExpression,
574     HTMLStyle2_getExpression,
575     HTMLStyle2_removeExpression,
576     HTMLStyle2_put_position,
577     HTMLStyle2_get_position,
578     HTMLStyle2_put_unicodeBidi,
579     HTMLStyle2_get_unicodeBidi,
580     HTMLStyle2_put_bottom,
581     HTMLStyle2_get_bottom,
582     HTMLStyle2_put_right,
583     HTMLStyle2_get_right,
584     HTMLStyle2_put_pixelBottom,
585     HTMLStyle2_get_pixelBottom,
586     HTMLStyle2_put_pixelRight,
587     HTMLStyle2_get_pixelRight,
588     HTMLStyle2_put_posBottom,
589     HTMLStyle2_get_posBottom,
590     HTMLStyle2_put_posRight,
591     HTMLStyle2_get_posRight,
592     HTMLStyle2_put_imeMode,
593     HTMLStyle2_get_imeMode,
594     HTMLStyle2_put_rubyAlign,
595     HTMLStyle2_get_rubyAlign,
596     HTMLStyle2_put_rubyPosition,
597     HTMLStyle2_get_rubyPosition,
598     HTMLStyle2_put_rubyOverhang,
599     HTMLStyle2_get_rubyOverhang,
600     HTMLStyle2_put_layoutGridChar,
601     HTMLStyle2_get_layoutGridChar,
602     HTMLStyle2_put_layoutGridLine,
603     HTMLStyle2_get_layoutGridLine,
604     HTMLStyle2_put_layoutGridMode,
605     HTMLStyle2_get_layoutGridMode,
606     HTMLStyle2_put_layoutGridType,
607     HTMLStyle2_get_layoutGridType,
608     HTMLStyle2_put_layoutGrid,
609     HTMLStyle2_get_layoutGrid,
610     HTMLStyle2_put_wordBreak,
611     HTMLStyle2_get_wordBreak,
612     HTMLStyle2_put_lineBreak,
613     HTMLStyle2_get_lineBreak,
614     HTMLStyle2_put_textJustify,
615     HTMLStyle2_get_textJustify,
616     HTMLStyle2_put_textJustifyTrim,
617     HTMLStyle2_get_textJustifyTrim,
618     HTMLStyle2_put_textKashida,
619     HTMLStyle2_get_textKashida,
620     HTMLStyle2_put_textAutospace,
621     HTMLStyle2_get_textAutospace,
622     HTMLStyle2_put_overflowX,
623     HTMLStyle2_get_overflowX,
624     HTMLStyle2_put_overflowY,
625     HTMLStyle2_get_overflowY,
626     HTMLStyle2_put_accelerator,
627     HTMLStyle2_get_accelerator
628 };
629
630 void HTMLStyle2_Init(HTMLStyle *This)
631 {
632     This->IHTMLStyle2_iface.lpVtbl = &HTMLStyle2Vtbl;
633 }