ReactOS  0.4.14-dev-49-gfb4591c
htmlstyle.c
Go to the documentation of this file.
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 "mshtml_private.h"
20 
21 static const WCHAR attrBackground[] =
22  {'b','a','c','k','g','r','o','u','n','d',0};
24  {'b','a','c','k','g','r','o','u','n','d','-','a','t','t','a','c','h','m','e','n','t',0};
25 static const WCHAR attrBackgroundColor[] =
26  {'b','a','c','k','g','r','o','u','n','d','-','c','o','l','o','r',0};
27 static const WCHAR attrBackgroundImage[] =
28  {'b','a','c','k','g','r','o','u','n','d','-','i','m','a','g','e',0};
29 static const WCHAR attrBackgroundPosition[] =
30  {'b','a','c','k','g','r','o','u','n','d','-','p','o','s','i','t','i','o','n',0};
32  {'b','a','c','k','g','r','o','u','n','d','-','p','o','s','i','t','i','o','n','-','x',0};
34  {'b','a','c','k','g','r','o','u','n','d','-','p','o','s','i','t','i','o','n','-','y',0};
35 static const WCHAR attrBackgroundRepeat[] =
36  {'b','a','c','k','g','r','o','u','n','d','-','r','e','p','e','a','t',0};
37 static const WCHAR attrBorder[] =
38  {'b','o','r','d','e','r',0};
39 static const WCHAR attrBorderBottom[] =
40  {'b','o','r','d','e','r','-','b','o','t','t','o','m',0};
41 static const WCHAR attrBorderBottomColor[] =
42  {'b','o','r','d','e','r','-','b','o','t','t','o','m','-','c','o','l','o','r',0};
43 static const WCHAR attrBorderBottomStyle[] =
44  {'b','o','r','d','e','r','-','b','o','t','t','o','m','-','s','t','y','l','e',0};
45 static const WCHAR attrBorderBottomWidth[] =
46  {'b','o','r','d','e','r','-','b','o','t','t','o','m','-','w','i','d','t','h',0};
47 static const WCHAR attrBorderColor[] =
48  {'b','o','r','d','e','r','-','c','o','l','o','r',0};
49 static const WCHAR attrBorderLeft[] =
50  {'b','o','r','d','e','r','-','l','e','f','t',0};
51 static const WCHAR attrBorderLeftColor[] =
52  {'b','o','r','d','e','r','-','l','e','f','t','-','c','o','l','o','r',0};
53 static const WCHAR attrBorderLeftStyle[] =
54  {'b','o','r','d','e','r','-','l','e','f','t','-','s','t','y','l','e',0};
55 static const WCHAR attrBorderLeftWidth[] =
56  {'b','o','r','d','e','r','-','l','e','f','t','-','w','i','d','t','h',0};
57 static const WCHAR attrBorderRight[] =
58  {'b','o','r','d','e','r','-','r','i','g','h','t',0};
59 static const WCHAR attrBorderRightColor[] =
60  {'b','o','r','d','e','r','-','r','i','g','h','t','-','c','o','l','o','r',0};
61 static const WCHAR attrBorderRightStyle[] =
62  {'b','o','r','d','e','r','-','r','i','g','h','t','-','s','t','y','l','e',0};
63 static const WCHAR attrBorderRightWidth[] =
64  {'b','o','r','d','e','r','-','r','i','g','h','t','-','w','i','d','t','h',0};
65 static const WCHAR attrBorderTop[] =
66  {'b','o','r','d','e','r','-','t','o','p',0};
67 static const WCHAR attrBorderTopColor[] =
68  {'b','o','r','d','e','r','-','t','o','p','-','c','o','l','o','r',0};
69 static const WCHAR attrBorderStyle[] =
70  {'b','o','r','d','e','r','-','s','t','y','l','e',0};
71 static const WCHAR attrBorderTopStyle[] =
72  {'b','o','r','d','e','r','-','t','o','p','-','s','t','y','l','e',0};
73 static const WCHAR attrBorderTopWidth[] =
74  {'b','o','r','d','e','r','-','t','o','p','-','w','i','d','t','h',0};
75 static const WCHAR attrBorderWidth[] =
76  {'b','o','r','d','e','r','-','w','i','d','t','h',0};
77 static const WCHAR attrBottom[] =
78  {'b','o','t','t','o','m',0};
79 /* FIXME: Use unprefixed version (requires Gecko changes). */
80 static const WCHAR attrBoxSizing[] =
81  {'-','m','o','z','-','b','o','x','-','s','i','z','i','n','g',0};
82 static const WCHAR attrClear[] =
83  {'c','l','e','a','r',0};
84 static const WCHAR attrClip[] =
85  {'c','l','i','p',0};
86 static const WCHAR attrColor[] =
87  {'c','o','l','o','r',0};
88 static const WCHAR attrCursor[] =
89  {'c','u','r','s','o','r',0};
90 static const WCHAR attrDirection[] =
91  {'d','i','r','e','c','t','i','o','n',0};
92 static const WCHAR attrDisplay[] =
93  {'d','i','s','p','l','a','y',0};
94 static const WCHAR attrFilter[] =
95  {'f','i','l','e','t','e','r',0};
96 static const WCHAR attrFloat[] =
97  {'f','l','o','a','t',0};
98 static const WCHAR attrFontFamily[] =
99  {'f','o','n','t','-','f','a','m','i','l','y',0};
100 static const WCHAR attrFontSize[] =
101  {'f','o','n','t','-','s','i','z','e',0};
102 static const WCHAR attrFontStyle[] =
103  {'f','o','n','t','-','s','t','y','l','e',0};
104 static const WCHAR attrFontVariant[] =
105  {'f','o','n','t','-','v','a','r','i','a','n','t',0};
106 static const WCHAR attrFontWeight[] =
107  {'f','o','n','t','-','w','e','i','g','h','t',0};
108 static const WCHAR attrHeight[] =
109  {'h','e','i','g','h','t',0};
110 static const WCHAR attrLeft[] =
111  {'l','e','f','t',0};
112 static const WCHAR attrLetterSpacing[] =
113  {'l','e','t','t','e','r','-','s','p','a','c','i','n','g',0};
114 static const WCHAR attrLineHeight[] =
115  {'l','i','n','e','-','h','e','i','g','h','t',0};
116 static const WCHAR attrListStyle[] =
117  {'l','i','s','t','-','s','t','y','l','e',0};
118 static const WCHAR attrListStyleType[] =
119  {'l','i','s','t','-','s','t','y','l','e','-','t','y','p','e',0};
120 static const WCHAR attrListStylePosition[] =
121  {'l','i','s','t','-','s','t','y','l','e','-','p','o','s','i','t','i','o','n',0};
122 static const WCHAR attrMargin[] =
123  {'m','a','r','g','i','n',0};
124 static const WCHAR attrMarginBottom[] =
125  {'m','a','r','g','i','n','-','b','o','t','t','o','m',0};
126 static const WCHAR attrMarginLeft[] =
127  {'m','a','r','g','i','n','-','l','e','f','t',0};
128 static const WCHAR attrMarginRight[] =
129  {'m','a','r','g','i','n','-','r','i','g','h','t',0};
130 static const WCHAR attrMarginTop[] =
131  {'m','a','r','g','i','n','-','t','o','p',0};
132 static const WCHAR attrMaxHeight[] =
133  {'m','a','x','-','h','e','i','g','h','t',0};
134 static const WCHAR attrMaxWidth[] =
135  {'m','a','x','-','w','i','d','t','h',0};
136 static const WCHAR attrMinHeight[] =
137  {'m','i','n','-','h','e','i','g','h','t',0};
138 static const WCHAR attrMinWidth[] =
139  {'m','i','n','-','w','i','d','t','h',0};
140 static const WCHAR attrOutline[] =
141  {'o','u','t','l','i','n','e',0};
142 static const WCHAR attrOverflow[] =
143  {'o','v','e','r','f','l','o','w',0};
144 static const WCHAR attrOverflowX[] =
145  {'o','v','e','r','f','l','o','w','-','x',0};
146 static const WCHAR attrOverflowY[] =
147  {'o','v','e','r','f','l','o','w','-','y',0};
148 static const WCHAR attrPadding[] =
149  {'p','a','d','d','i','n','g',0};
150 static const WCHAR attrPaddingBottom[] =
151  {'p','a','d','d','i','n','g','-','b','o','t','t','o','m',0};
152 static const WCHAR attrPaddingLeft[] =
153  {'p','a','d','d','i','n','g','-','l','e','f','t',0};
154 static const WCHAR attrPaddingRight[] =
155  {'p','a','d','d','i','n','g','-','r','i','g','h','t',0};
156 static const WCHAR attrPaddingTop[] =
157  {'p','a','d','d','i','n','g','-','t','o','p',0};
158 static const WCHAR attrPageBreakAfter[] =
159  {'p','a','g','e','-','b','r','e','a','k','-','a','f','t','e','r',0};
160 static const WCHAR attrPageBreakBefore[] =
161  {'p','a','g','e','-','b','r','e','a','k','-','b','e','f','o','r','e',0};
162 static const WCHAR attrPosition[] =
163  {'p','o','s','i','t','i','o','n',0};
164 static const WCHAR attrRight[] =
165  {'r','i','g','h','t',0};
166 static const WCHAR attrTableLayout[] =
167  {'t','a','b','l','e','-','l','a','y','o','u','t',0};
168 static const WCHAR attrTextAlign[] =
169  {'t','e','x','t','-','a','l','i','g','n',0};
170 static const WCHAR attrTextDecoration[] =
171  {'t','e','x','t','-','d','e','c','o','r','a','t','i','o','n',0};
172 static const WCHAR attrTextIndent[] =
173  {'t','e','x','t','-','i','n','d','e','n','t',0};
174 static const WCHAR attrTextTransform[] =
175  {'t','e','x','t','-','t','r','a','n','s','f','o','r','m',0};
176 static const WCHAR attrTop[] =
177  {'t','o','p',0};
178 static const WCHAR attrVerticalAlign[] =
179  {'v','e','r','t','i','c','a','l','-','a','l','i','g','n',0};
180 static const WCHAR attrVisibility[] =
181  {'v','i','s','i','b','i','l','i','t','y',0};
182 static const WCHAR attrWhiteSpace[] =
183  {'w','h','i','t','e','-','s','p','a','c','e',0};
184 static const WCHAR attrWidth[] =
185  {'w','i','d','t','h',0};
186 static const WCHAR attrWordSpacing[] =
187  {'w','o','r','d','-','s','p','a','c','i','n','g',0};
188 static const WCHAR attrWordWrap[] =
189  {'w','o','r','d','-','w','r','a','p',0};
190 static const WCHAR attrZIndex[] =
191  {'z','-','i','n','d','e','x',0};
192 
193 
194 static const WCHAR pxW[] = {'p','x',0};
195 
196 typedef struct {
197  const WCHAR *name;
200 
201 static const style_tbl_entry_t style_tbl[] = {
287 };
288 
289 C_ASSERT(sizeof(style_tbl)/sizeof(*style_tbl) == STYLEID_MAX_VALUE);
290 
291 static const WCHAR valLineThrough[] =
292  {'l','i','n','e','-','t','h','r','o','u','g','h',0};
293 static const WCHAR valUnderline[] =
294  {'u','n','d','e','r','l','i','n','e',0};
295 static const WCHAR szNormal[] =
296  {'n','o','r','m','a','l',0};
297 static const WCHAR styleNone[] =
298  {'n','o','n','e',0};
299 static const WCHAR valOverline[] =
300  {'o','v','e','r','l','i','n','e',0};
301 static const WCHAR valBlink[] =
302  {'b','l','i','n','k',0};
303 
304 static const WCHAR px_formatW[] = {'%','d','p','x',0};
305 static const WCHAR emptyW[] = {0};
306 
308 {
309  int c, i, min = 0, max = sizeof(style_tbl)/sizeof(*style_tbl)-1;
310 
311  while(min <= max) {
312  i = (min+max)/2;
313 
314  c = strcmpW(style_tbl[i].name, name);
315  if(!c)
316  return style_tbl+i;
317 
318  if(c > 0)
319  max = i-1;
320  else
321  min = i+1;
322  }
323 
324  return NULL;
325 }
326 
328 {
329  LPCWSTR ptr = val;
330 
331  while(*ptr) {
332  while(*ptr && isspaceW(*ptr))
333  ptr++;
334  if(!*ptr)
335  break;
336 
337  while(*ptr && isdigitW(*ptr))
338  ptr++;
339 
340  if(!*ptr || isspaceW(*ptr)) {
341  LPWSTR ret, p;
342  int len = strlenW(val)+1;
343 
344  ret = heap_alloc((len+2)*sizeof(WCHAR));
345  memcpy(ret, val, (ptr-val)*sizeof(WCHAR));
346  p = ret + (ptr-val);
347  *p++ = 'p';
348  *p++ = 'x';
349  strcpyW(p, ptr);
350 
351  TRACE("fixed %s -> %s\n", debugstr_w(val), debugstr_w(ret));
352 
353  return ret;
354  }
355 
356  while(*ptr && !isspaceW(*ptr))
357  ptr++;
358  }
359 
360  return NULL;
361 }
362 
364 {
365  WCHAR *ret, *ptr;
366 
367  static const WCHAR urlW[] = {'u','r','l','('};
368 
369  if(strncmpW(val, urlW, sizeof(urlW)/sizeof(WCHAR)) || !strchrW(val, '\\'))
370  return NULL;
371 
372  ret = heap_strdupW(val);
373 
374  for(ptr = ret; *ptr; ptr++) {
375  if(*ptr == '\\')
376  *ptr = '/';
377  }
378 
379  return ret;
380 }
381 
383 {
384  nsAString str_name, str_value, str_empty;
385  LPWSTR val = NULL;
386  nsresult nsres;
387 
388  if(value) {
389  if(flags & ATTR_FIX_PX)
391  else if(flags & ATTR_FIX_URL)
393  }
394 
395  nsAString_InitDepend(&str_name, style_tbl[sid].name);
396  nsAString_InitDepend(&str_value, val ? val : value);
397  nsAString_InitDepend(&str_empty, emptyW);
398 
399  nsres = nsIDOMCSSStyleDeclaration_SetProperty(nsstyle, &str_name, &str_value, &str_empty);
400  if(NS_FAILED(nsres))
401  ERR("SetProperty failed: %08x\n", nsres);
402 
403  nsAString_Finish(&str_name);
404  nsAString_Finish(&str_value);
405  nsAString_Finish(&str_empty);
406  heap_free(val);
407 
408  return S_OK;
409 }
410 
412 {
413  switch(V_VT(v)) {
414  case VT_NULL:
415  *ret = emptyW;
416  return S_OK;
417 
418  case VT_BSTR:
419  *ret = V_BSTR(v);
420  return S_OK;
421 
422  case VT_BSTR|VT_BYREF:
423  *ret = *V_BSTRREF(v);
424  return S_OK;
425 
426  case VT_I4: {
427  static const WCHAR formatW[] = {'%','d',0};
428  static const WCHAR hex_formatW[] = {'#','%','0','6','x',0};
429 
430  if(flags & ATTR_HEX_INT)
431  wsprintfW(buf, hex_formatW, V_I4(v));
432  else if(flags & ATTR_FIX_PX)
434  else
435  wsprintfW(buf, formatW, V_I4(v));
436 
437  *ret = buf;
438  return S_OK;
439  }
440  default:
441  FIXME("not implemented for %s\n", debugstr_variant(v));
442  return E_NOTIMPL;
443 
444  }
445 }
446 
448 {
449  const WCHAR *val;
450  WCHAR buf[14];
451  HRESULT hres;
452 
454  if(FAILED(hres))
455  return hres;
456 
457  return set_nsstyle_attr(nsstyle, sid, val, flags);
458 }
459 
461 {
462  return set_nsstyle_attr(This->nsstyle, sid, value, flags);
463 }
464 
466 {
467  nsAString str_name;
468  nsresult nsres;
469 
470  nsAString_InitDepend(&str_name, style_tbl[sid].name);
471 
472  nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(nsstyle, &str_name, value);
473  if(NS_FAILED(nsres)) {
474  ERR("SetProperty failed: %08x\n", nsres);
475  return E_FAIL;
476  }
477 
478  nsAString_Finish(&str_name);
479 
480  return NS_OK;
481 }
482 
484 {
485  BSTR ret;
486  DWORD len;
487 
488  if(!*val) {
490  return S_OK;
491  }
492 
494  if(!ret)
495  return E_OUTOFMEMORY;
496 
497  len = SysStringLen(ret);
498 
499  if(flags & ATTR_REMOVE_COMMA) {
500  DWORD new_len = len;
501  WCHAR *ptr, *ptr2;
502 
503  for(ptr = ret; (ptr = strchrW(ptr, ',')); ptr++)
504  new_len--;
505 
506  if(new_len != len) {
507  BSTR new_ret;
508 
509  new_ret = SysAllocStringLen(NULL, new_len);
510  if(!new_ret) {
512  return E_OUTOFMEMORY;
513  }
514 
515  for(ptr2 = new_ret, ptr = ret; *ptr; ptr++) {
516  if(*ptr != ',')
517  *ptr2++ = *ptr;
518  }
519 
521  ret = new_ret;
522  }
523  }
524 
525  *p = ret;
526  return S_OK;
527 }
528 
530 {
531  nsAString str_value;
532  const PRUnichar *value;
533  HRESULT hres;
534 
535  nsAString_Init(&str_value, NULL);
536 
537  get_nsstyle_attr_nsval(nsstyle, sid, &str_value);
538 
539  nsAString_GetData(&str_value, &value);
541  nsAString_Finish(&str_value);
542 
543  TRACE("%s -> %s\n", debugstr_w(style_tbl[sid].name), debugstr_w(*p));
544  return hres;
545 }
546 
548 {
549  nsAString str_value;
550  const PRUnichar *value;
551  BOOL set = FALSE;
552  HRESULT hres = S_OK;
553 
554  nsAString_Init(&str_value, NULL);
555 
556  get_nsstyle_attr_nsval(nsstyle, sid, &str_value);
557 
558  nsAString_GetData(&str_value, &value);
559 
560  if(flags & ATTR_STR_TO_INT) {
561  const PRUnichar *ptr = value;
562  BOOL neg = FALSE;
563  INT i = 0;
564 
565  if(*ptr == '-') {
566  neg = TRUE;
567  ptr++;
568  }
569 
570  while(isdigitW(*ptr))
571  i = i*10 + (*ptr++ - '0');
572 
573  if(!*ptr) {
574  V_VT(p) = VT_I4;
575  V_I4(p) = neg ? -i : i;
576  set = TRUE;
577  }
578  }
579 
580  if(!set) {
581  BSTR str;
582 
584  if(SUCCEEDED(hres)) {
585  V_VT(p) = VT_BSTR;
586  V_BSTR(p) = str;
587  }
588  }
589 
590  nsAString_Finish(&str_value);
591 
592  TRACE("%s -> %s\n", debugstr_w(style_tbl[sid].name), debugstr_variant(p));
593  return S_OK;
594 }
595 
597 {
598  return get_nsstyle_attr(This->nsstyle, sid, p, 0);
599 }
600 
602 {
603  nsAString str_value;
604  const PRUnichar *value;
605 
606  nsAString_Init(&str_value, NULL);
607 
608  get_nsstyle_attr_nsval(This->nsstyle, sid, &str_value);
609 
610  nsAString_GetData(&str_value, &value);
611  *p = strcmpW(value, exval) ? VARIANT_FALSE : VARIANT_TRUE;
612  nsAString_Finish(&str_value);
613 
614  TRACE("%s -> %x\n", debugstr_w(style_tbl[sid].name), *p);
615  return S_OK;
616 }
617 
619 {
620  WCHAR szValue[25];
621  WCHAR szFormat[] = {'%','.','0','f','p','x',0};
622 
623  value = floor(value);
624 
625  sprintfW(szValue, szFormat, value);
626 
627  return set_style_attr(This, sid, szValue, 0);
628 }
629 
631 {
632  WCHAR value_str[16];
633 
635 
636  return set_nsstyle_attr(nsstyle, sid, value_str, 0);
637 }
638 
640 {
641  nsAString str_value;
642  HRESULT hres;
643 
644  TRACE("%p %d %p\n", This, sid, p);
645 
646  *p = 0.0f;
647 
648  nsAString_Init(&str_value, NULL);
649 
650  hres = get_nsstyle_attr_nsval(This->nsstyle, sid, &str_value);
651  if(hres == S_OK)
652  {
653  WCHAR *ptr;
654  const PRUnichar *value;
655 
656  nsAString_GetData(&str_value, &value);
657  if(value)
658  {
659  *p = strtolW(value, &ptr, 10);
660 
661  if(*ptr && strcmpW(ptr, pxW))
662  {
663  nsAString_Finish(&str_value);
664  FIXME("only px values are currently supported\n");
665  hres = E_FAIL;
666  }
667  }
668  }
669 
670  TRACE("ret %f\n", *p);
671 
672  nsAString_Finish(&str_value);
673  return hres;
674 }
675 
677 {
678  nsAString str_value;
679  HRESULT hres;
680 
681  if(!p)
682  return E_POINTER;
683 
684  nsAString_Init(&str_value, NULL);
685 
686  hres = get_nsstyle_attr_nsval(This->nsstyle, sid, &str_value);
687  if(hres == S_OK) {
688  WCHAR *ptr;
689  const PRUnichar *value;
690 
691  nsAString_GetData(&str_value, &value);
692  if(value) {
693  *p = strtolW(value, &ptr, 10);
694 
695  if(*ptr == '.') {
696  /* Skip all digits. We have tests showing that we should not round the value. */
697  while(isdigitW(*++ptr));
698  }
699 
700  if(*ptr && strcmpW(ptr, pxW)) {
701  nsAString_Finish(&str_value);
702  FIXME("%s: only px values are currently supported\n", debugstr_w(value));
703  hres = E_NOTIMPL;
704  }
705  }else {
706  *p = 0;
707  }
708  }
709 
710  nsAString_Finish(&str_value);
711  return hres;
712 }
713 
715 {
716  static const WCHAR styleDotted[] = {'d','o','t','t','e','d',0};
717  static const WCHAR styleDashed[] = {'d','a','s','h','e','d',0};
718  static const WCHAR styleSolid[] = {'s','o','l','i','d',0};
719  static const WCHAR styleDouble[] = {'d','o','u','b','l','e',0};
720  static const WCHAR styleGroove[] = {'g','r','o','o','v','e',0};
721  static const WCHAR styleRidge[] = {'r','i','d','g','e',0};
722  static const WCHAR styleInset[] = {'i','n','s','e','t',0};
723  static const WCHAR styleOutset[] = {'o','u','t','s','e','t',0};
724 
725  TRACE("%s\n", debugstr_w(v));
726 
727  if(!v || strcmpiW(v, styleNone) == 0 || strcmpiW(v, styleDotted) == 0 ||
728  strcmpiW(v, styleDashed) == 0 || strcmpiW(v, styleSolid) == 0 ||
729  strcmpiW(v, styleDouble) == 0 || strcmpiW(v, styleGroove) == 0 ||
730  strcmpiW(v, styleRidge) == 0 || strcmpiW(v, styleInset) == 0 ||
731  strcmpiW(v, styleOutset) == 0 )
732  {
733  return TRUE;
734  }
735 
736  return FALSE;
737 }
738 
739 static inline HTMLStyle *impl_from_IHTMLStyle(IHTMLStyle *iface)
740 {
741  return CONTAINING_RECORD(iface, HTMLStyle, IHTMLStyle_iface);
742 }
743 
744 static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, void **ppv)
745 {
747 
748  TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
749 
750  if(IsEqualGUID(&IID_IUnknown, riid)) {
751  *ppv = &This->IHTMLStyle_iface;
752  }else if(IsEqualGUID(&IID_IHTMLStyle, riid)) {
753  *ppv = &This->IHTMLStyle_iface;
754  }else if(IsEqualGUID(&IID_IHTMLStyle2, riid)) {
755  *ppv = &This->IHTMLStyle2_iface;
756  }else if(IsEqualGUID(&IID_IHTMLStyle3, riid)) {
757  *ppv = &This->IHTMLStyle3_iface;
758  }else if(IsEqualGUID(&IID_IHTMLStyle4, riid)) {
759  *ppv = &This->IHTMLStyle4_iface;
760  }else if(IsEqualGUID(&IID_IHTMLStyle5, riid)) {
761  *ppv = &This->IHTMLStyle5_iface;
762  }else if(IsEqualGUID(&IID_IHTMLStyle6, riid)) {
763  *ppv = &This->IHTMLStyle6_iface;
764  }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
765  return *ppv ? S_OK : E_NOINTERFACE;
766  }else {
767  *ppv = NULL;
768  WARN("unsupported iface %s\n", debugstr_mshtml_guid(riid));
769  return E_NOINTERFACE;
770  }
771 
772  IUnknown_AddRef((IUnknown*)*ppv);
773  return S_OK;
774 }
775 
776 static ULONG WINAPI HTMLStyle_AddRef(IHTMLStyle *iface)
777 {
780 
781  TRACE("(%p) ref=%d\n", This, ref);
782 
783  return ref;
784 }
785 
786 static ULONG WINAPI HTMLStyle_Release(IHTMLStyle *iface)
787 {
790 
791  TRACE("(%p) ref=%d\n", This, ref);
792 
793  if(!ref) {
794  assert(!This->elem);
795  if(This->nsstyle)
796  nsIDOMCSSStyleDeclaration_Release(This->nsstyle);
797  release_dispex(&This->dispex);
798  heap_free(This);
799  }
800 
801  return ref;
802 }
803 
804 static HRESULT WINAPI HTMLStyle_GetTypeInfoCount(IHTMLStyle *iface, UINT *pctinfo)
805 {
807  return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
808 }
809 
810 static HRESULT WINAPI HTMLStyle_GetTypeInfo(IHTMLStyle *iface, UINT iTInfo,
811  LCID lcid, ITypeInfo **ppTInfo)
812 {
814  return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
815 }
816 
818  LPOLESTR *rgszNames, UINT cNames,
819  LCID lcid, DISPID *rgDispId)
820 {
822  return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
823  lcid, rgDispId);
824 }
825 
826 static HRESULT WINAPI HTMLStyle_Invoke(IHTMLStyle *iface, DISPID dispIdMember,
827  REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
828  VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
829 {
831  return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
832  wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
833 }
834 
835 static HRESULT WINAPI HTMLStyle_put_fontFamily(IHTMLStyle *iface, BSTR v)
836 {
838 
839  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
840 
842 }
843 
844 static HRESULT WINAPI HTMLStyle_get_fontFamily(IHTMLStyle *iface, BSTR *p)
845 {
847 
848  TRACE("(%p)->(%p)\n", This, p);
849 
851 }
852 
853 static HRESULT WINAPI HTMLStyle_put_fontStyle(IHTMLStyle *iface, BSTR v)
854 {
856  static const WCHAR szItalic[] = {'i','t','a','l','i','c',0};
857  static const WCHAR szOblique[] = {'o','b','l','i','q','u','e',0};
858 
859  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
860 
861  /* fontStyle can only be one of the follow values. */
862  if(!v || strcmpiW(szNormal, v) == 0 || strcmpiW(szItalic, v) == 0 ||
863  strcmpiW(szOblique, v) == 0)
864  {
865  return set_nsstyle_attr(This->nsstyle, STYLEID_FONT_STYLE, v, 0);
866  }
867 
868  return E_INVALIDARG;
869 }
870 
871 static HRESULT WINAPI HTMLStyle_get_fontStyle(IHTMLStyle *iface, BSTR *p)
872 {
874 
875  TRACE("(%p)->(%p)\n", This, p);
876 
878 }
879 
880 static HRESULT WINAPI HTMLStyle_put_fontVariant(IHTMLStyle *iface, BSTR v)
881 {
883  static const WCHAR szCaps[] = {'s','m','a','l','l','-','c','a','p','s',0};
884 
885  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
886 
887  /* fontVariant can only be one of the follow values. */
888  if(!v || strcmpiW(szNormal, v) == 0 || strcmpiW(szCaps, v) == 0)
889  {
890  return set_nsstyle_attr(This->nsstyle, STYLEID_FONT_VARIANT, v, 0);
891  }
892 
893  return E_INVALIDARG;
894 }
895 
896 static HRESULT WINAPI HTMLStyle_get_fontVariant(IHTMLStyle *iface, BSTR *p)
897 {
899  TRACE("(%p)->(%p)\n", This, p);
900 
901  if(!p)
902  return E_INVALIDARG;
903 
905 }
906 
907 static HRESULT WINAPI HTMLStyle_put_fontWeight(IHTMLStyle *iface, BSTR v)
908 {
910  static const WCHAR styleBold[] = {'b','o','l','d',0};
911  static const WCHAR styleBolder[] = {'b','o','l','d','e','r',0};
912  static const WCHAR styleLighter[] = {'l','i','g','h','t','e','r',0};
913  static const WCHAR style100[] = {'1','0','0',0};
914  static const WCHAR style200[] = {'2','0','0',0};
915  static const WCHAR style300[] = {'3','0','0',0};
916  static const WCHAR style400[] = {'4','0','0',0};
917  static const WCHAR style500[] = {'5','0','0',0};
918  static const WCHAR style600[] = {'6','0','0',0};
919  static const WCHAR style700[] = {'7','0','0',0};
920  static const WCHAR style800[] = {'8','0','0',0};
921  static const WCHAR style900[] = {'9','0','0',0};
922 
923  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
924 
925  /* fontWeight can only be one of the following */
926  if(v && *v && strcmpiW(szNormal, v) && strcmpiW(styleBold, v) && strcmpiW(styleBolder, v)
927  && strcmpiW(styleLighter, v) && strcmpiW(style100, v) && strcmpiW(style200, v)
928  && strcmpiW(style300, v) && strcmpiW(style400, v) && strcmpiW(style500, v) && strcmpiW(style600, v)
929  && strcmpiW(style700, v) && strcmpiW(style800, v) && strcmpiW(style900, v))
930  return E_INVALIDARG;
931 
932  return set_nsstyle_attr(This->nsstyle, STYLEID_FONT_WEIGHT, v, 0);
933 }
934 
935 static HRESULT WINAPI HTMLStyle_get_fontWeight(IHTMLStyle *iface, BSTR *p)
936 {
938 
939  TRACE("(%p)->(%p)\n", This, p);
940 
942 }
943 
944 static HRESULT WINAPI HTMLStyle_put_fontSize(IHTMLStyle *iface, VARIANT v)
945 {
947 
948  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
949 
951 }
952 
953 static HRESULT WINAPI HTMLStyle_get_fontSize(IHTMLStyle *iface, VARIANT *p)
954 {
956 
957  TRACE("(%p)->(%p)\n", This, p);
958 
959  return get_nsstyle_attr_var(This->nsstyle, STYLEID_FONT_SIZE, p, 0);
960 }
961 
962 static HRESULT WINAPI HTMLStyle_put_font(IHTMLStyle *iface, BSTR v)
963 {
965  FIXME("(%p)->(%s)\n", This, debugstr_w(v));
966  return E_NOTIMPL;
967 }
968 
969 static HRESULT WINAPI HTMLStyle_get_font(IHTMLStyle *iface, BSTR *p)
970 {
972  FIXME("(%p)->(%p)\n", This, p);
973  return E_NOTIMPL;
974 }
975 
976 static HRESULT WINAPI HTMLStyle_put_color(IHTMLStyle *iface, VARIANT v)
977 {
979 
980  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
981 
983 }
984 
985 static HRESULT WINAPI HTMLStyle_get_color(IHTMLStyle *iface, VARIANT *p)
986 {
988 
989  TRACE("(%p)->(%p)\n", This, p);
990 
991  return get_nsstyle_attr_var(This->nsstyle, STYLEID_COLOR, p, 0);
992 }
993 
994 static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v)
995 {
997 
998  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
999 
1000  return set_style_attr(This, STYLEID_BACKGROUND, v, 0);
1001 }
1002 
1003 static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p)
1004 {
1006 
1007  TRACE("(%p)->(%p)\n", This, p);
1008 
1010 }
1011 
1013 {
1015 
1016  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1017 
1019 }
1020 
1022 {
1024 
1025  TRACE("(%p)->(%p)\n", This, p);
1026 
1027  return get_nsstyle_attr_var(This->nsstyle, STYLEID_BACKGROUND_COLOR, p, 0);
1028 }
1029 
1031 {
1033 
1034  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1035 
1037 }
1038 
1040 {
1042 
1043  TRACE("(%p)->(%p)\n", This, p);
1044 
1046 }
1047 
1049 {
1051  static const WCHAR styleRepeat[] = {'r','e','p','e','a','t',0};
1052  static const WCHAR styleNoRepeat[] = {'n','o','-','r','e','p','e','a','t',0};
1053  static const WCHAR styleRepeatX[] = {'r','e','p','e','a','t','-','x',0};
1054  static const WCHAR styleRepeatY[] = {'r','e','p','e','a','t','-','y',0};
1055 
1056  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1057 
1058  /* fontWeight can only be one of the following */
1059  if(!v || strcmpiW(styleRepeat, v) == 0 || strcmpiW(styleNoRepeat, v) == 0 ||
1060  strcmpiW(styleRepeatX, v) == 0 || strcmpiW(styleRepeatY, v) == 0 )
1061  {
1063  }
1064 
1065  return E_INVALIDARG;
1066 }
1067 
1069 {
1071 
1072  TRACE("(%p)->(%p)\n", This, p);
1073 
1075 }
1076 
1078 {
1080 
1081  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1082 
1084 }
1085 
1087 {
1089 
1090  TRACE("(%p)->(%p)\n", This, p);
1091 
1093 }
1094 
1096 {
1098 
1099  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1100 
1102 }
1103 
1105 {
1107 
1108  TRACE("(%p)->(%p)\n", This, p);
1109 
1111 }
1112 
1114 {
1116  WCHAR buf[14], *pos_val;
1117  nsAString pos_str;
1118  const WCHAR *val;
1119  DWORD val_len;
1120  HRESULT hres;
1121 
1122  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1123 
1125  if(FAILED(hres))
1126  return hres;
1127 
1128  val_len = val ? strlenW(val) : 0;
1129 
1130  nsAString_Init(&pos_str, NULL);
1132  if(SUCCEEDED(hres)) {
1133  const PRUnichar *pos, *posy;
1134  DWORD posy_len;
1135 
1136  nsAString_GetData(&pos_str, &pos);
1137  posy = strchrW(pos, ' ');
1138  if(!posy) {
1139  static const WCHAR zero_pxW[] = {' ','0','p','x',0};
1140 
1141  TRACE("no space in %s\n", debugstr_w(pos));
1142  posy = zero_pxW;
1143  }
1144 
1145  posy_len = strlenW(posy);
1146  pos_val = heap_alloc((val_len+posy_len+1)*sizeof(WCHAR));
1147  if(pos_val) {
1148  if(val_len)
1149  memcpy(pos_val, val, val_len*sizeof(WCHAR));
1150  if(posy_len)
1151  memcpy(pos_val+val_len, posy, posy_len*sizeof(WCHAR));
1152  pos_val[val_len+posy_len] = 0;
1153  }else {
1154  hres = E_OUTOFMEMORY;
1155  }
1156  }
1157  nsAString_Finish(&pos_str);
1158  if(FAILED(hres))
1159  return hres;
1160 
1161  TRACE("setting position to %s\n", debugstr_w(pos_val));
1163  heap_free(pos_val);
1164  return hres;
1165 }
1166 
1168 {
1170  nsAString pos_str;
1171  BSTR ret;
1172  HRESULT hres;
1173 
1174  TRACE("(%p)->(%p)\n", This, p);
1175 
1176  nsAString_Init(&pos_str, NULL);
1178  if(SUCCEEDED(hres)) {
1179  const PRUnichar *pos, *space;
1180 
1181  nsAString_GetData(&pos_str, &pos);
1182  space = strchrW(pos, ' ');
1183  if(!space) {
1184  WARN("no space in %s\n", debugstr_w(pos));
1185  space = pos + strlenW(pos);
1186  }
1187 
1188  if(space != pos) {
1190  if(!ret)
1191  hres = E_OUTOFMEMORY;
1192  }else {
1193  ret = NULL;
1194  }
1195  }
1196  nsAString_Finish(&pos_str);
1197  if(FAILED(hres))
1198  return hres;
1199 
1200  TRACE("returning %s\n", debugstr_w(ret));
1201  V_VT(p) = VT_BSTR;
1202  V_BSTR(p) = ret;
1203  return S_OK;
1204 }
1205 
1207 {
1209  WCHAR buf[14], *pos_val;
1210  nsAString pos_str;
1211  const WCHAR *val;
1212  DWORD val_len;
1213  HRESULT hres;
1214 
1215  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1216 
1218  if(FAILED(hres))
1219  return hres;
1220 
1221  val_len = val ? strlenW(val) : 0;
1222 
1223  nsAString_Init(&pos_str, NULL);
1225  if(SUCCEEDED(hres)) {
1226  const PRUnichar *pos, *space;
1227  DWORD posx_len;
1228 
1229  nsAString_GetData(&pos_str, &pos);
1230  space = strchrW(pos, ' ');
1231  if(space) {
1232  space++;
1233  }else {
1234  static const WCHAR zero_pxW[] = {'0','p','x',' ',0};
1235 
1236  TRACE("no space in %s\n", debugstr_w(pos));
1237  pos = zero_pxW;
1238  space = pos + sizeof(zero_pxW)/sizeof(WCHAR)-1;
1239  }
1240 
1241  posx_len = space-pos;
1242 
1243  pos_val = heap_alloc((posx_len+val_len+1)*sizeof(WCHAR));
1244  if(pos_val) {
1245  memcpy(pos_val, pos, posx_len*sizeof(WCHAR));
1246  if(val_len)
1247  memcpy(pos_val+posx_len, val, val_len*sizeof(WCHAR));
1248  pos_val[posx_len+val_len] = 0;
1249  }else {
1250  hres = E_OUTOFMEMORY;
1251  }
1252  }
1253  nsAString_Finish(&pos_str);
1254  if(FAILED(hres))
1255  return hres;
1256 
1257  TRACE("setting position to %s\n", debugstr_w(pos_val));
1259  heap_free(pos_val);
1260  return hres;
1261 }
1262 
1264 {
1266  nsAString pos_str;
1267  BSTR ret;
1268  HRESULT hres;
1269 
1270  TRACE("(%p)->(%p)\n", This, p);
1271 
1272  nsAString_Init(&pos_str, NULL);
1274  if(SUCCEEDED(hres)) {
1275  const PRUnichar *pos, *posy;
1276 
1277  nsAString_GetData(&pos_str, &pos);
1278  posy = strchrW(pos, ' ');
1279  if(posy) {
1280  ret = SysAllocString(posy+1);
1281  if(!ret)
1282  hres = E_OUTOFMEMORY;
1283  }else {
1284  ret = NULL;
1285  }
1286  }
1287  nsAString_Finish(&pos_str);
1288  if(FAILED(hres))
1289  return hres;
1290 
1291  TRACE("returning %s\n", debugstr_w(ret));
1292  V_VT(p) = VT_BSTR;
1293  V_BSTR(p) = ret;
1294  return S_OK;
1295 }
1296 
1298 {
1300 
1301  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1302 
1303  return set_nsstyle_attr_var(This->nsstyle, STYLEID_WORD_SPACING, &v, 0);
1304 }
1305 
1306 static HRESULT WINAPI HTMLStyle_get_wordSpacing(IHTMLStyle *iface, VARIANT *p)
1307 {
1309  TRACE("(%p)->(%p)\n", This, p);
1310  return get_nsstyle_attr_var(This->nsstyle, STYLEID_WORD_SPACING, p, 0);
1311 }
1312 
1314 {
1316 
1317  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1318 
1319  return set_nsstyle_attr_var(This->nsstyle, STYLEID_LETTER_SPACING, &v, 0);
1320 }
1321 
1323 {
1325  TRACE("(%p)->(%p)\n", This, p);
1326  return get_nsstyle_attr_var(This->nsstyle, STYLEID_LETTER_SPACING, p, 0);
1327 }
1328 
1330 {
1332 
1333  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1334 
1335  /* textDecoration can only be one of the following */
1336  if(!v || strcmpiW(styleNone, v) == 0 || strcmpiW(valUnderline, v) == 0 ||
1337  strcmpiW(valOverline, v) == 0 || strcmpiW(valLineThrough, v) == 0 ||
1338  strcmpiW(valBlink, v) == 0)
1339  {
1341  }
1342 
1343  return E_INVALIDARG;
1344 }
1345 
1346 static HRESULT WINAPI HTMLStyle_get_textDecoration(IHTMLStyle *iface, BSTR *p)
1347 {
1349 
1350  TRACE("(%p)->(%p)\n", This, p);
1351 
1353 }
1354 
1356 {
1358 
1359  TRACE("(%p)->(%x)\n", This, v);
1360 
1362 }
1363 
1365 {
1367 
1368  TRACE("(%p)->(%p)\n", This, p);
1369 
1371 }
1372 
1374 {
1376 
1377  TRACE("(%p)->(%x)\n", This, v);
1378 
1380 }
1381 
1383 {
1385 
1386  TRACE("(%p)->(%p)\n", This, p);
1387 
1389 }
1390 
1392 {
1394 
1395  TRACE("(%p)->(%x)\n", This, v);
1396 
1398 }
1399 
1401 {
1403 
1404  TRACE("(%p)->(%p)\n", This, p);
1405 
1407 }
1408 
1410 {
1412 
1413  TRACE("(%p)->(%x)\n", This, v);
1414 
1416 }
1417 
1419 {
1421 
1422  TRACE("(%p)->(%p)\n", This, p);
1423 
1425 }
1426 
1428 {
1430 
1431  TRACE("(%p)->(%x)\n", This, v);
1432 
1434 }
1435 
1437 {
1439 
1440  TRACE("(%p)->(%p)\n", This, p);
1441 
1443 }
1444 
1446 {
1448 
1449  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1450 
1452 }
1453 
1455 {
1457 
1458  TRACE("(%p)->(%p)\n", This, p);
1459 
1460  return get_nsstyle_attr_var(This->nsstyle, STYLEID_VERTICAL_ALIGN, p, 0);
1461 }
1462 
1464 {
1466 
1467  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1468 
1470 }
1471 
1472 static HRESULT WINAPI HTMLStyle_get_textTransform(IHTMLStyle *iface, BSTR *p)
1473 {
1475 
1476  TRACE("(%p)->(%p)\n", This, p);
1477 
1479 }
1480 
1481 static HRESULT WINAPI HTMLStyle_put_textAlign(IHTMLStyle *iface, BSTR v)
1482 {
1484 
1485  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1486 
1487  return set_style_attr(This, STYLEID_TEXT_ALIGN, v, 0);
1488 }
1489 
1490 static HRESULT WINAPI HTMLStyle_get_textAlign(IHTMLStyle *iface, BSTR *p)
1491 {
1493 
1494  TRACE("(%p)->(%p)\n", This, p);
1495 
1497 }
1498 
1500 {
1502 
1503  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1504 
1506 }
1507 
1508 static HRESULT WINAPI HTMLStyle_get_textIndent(IHTMLStyle *iface, VARIANT *p)
1509 {
1511 
1512  TRACE("(%p)->(%p)\n", This, p);
1513 
1514  return get_nsstyle_attr_var(This->nsstyle, STYLEID_TEXT_INDENT, p, 0);
1515 }
1516 
1518 {
1520 
1521  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1522 
1523  return set_nsstyle_attr_var(This->nsstyle, STYLEID_LINE_HEIGHT, &v, 0);
1524 }
1525 
1526 static HRESULT WINAPI HTMLStyle_get_lineHeight(IHTMLStyle *iface, VARIANT *p)
1527 {
1529 
1530  TRACE("(%p)->(%p)\n", This, p);
1531 
1532  return get_nsstyle_attr_var(This->nsstyle, STYLEID_LINE_HEIGHT, p, 0);
1533 }
1534 
1535 static HRESULT WINAPI HTMLStyle_put_marginTop(IHTMLStyle *iface, VARIANT v)
1536 {
1538 
1539  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1540 
1542 }
1543 
1544 static HRESULT WINAPI HTMLStyle_get_marginTop(IHTMLStyle *iface, VARIANT *p)
1545 {
1547 
1548  TRACE("(%p)->(%p)\n", This, p);
1549 
1550  return get_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_TOP, p, 0);
1551 }
1552 
1554 {
1556 
1557  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1558 
1560 }
1561 
1562 static HRESULT WINAPI HTMLStyle_get_marginRight(IHTMLStyle *iface, VARIANT *p)
1563 {
1565  TRACE("(%p)->(%p)\n", This, p);
1566  return get_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_RIGHT, p, 0);
1567 }
1568 
1570 {
1572 
1573  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1574 
1576 }
1577 
1579 {
1581 
1582  TRACE("(%p)->(%p)\n", This, p);
1583 
1584  return get_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_BOTTOM, p, 0);
1585 }
1586 
1588 {
1590 
1591  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1592 
1594 }
1595 
1596 static HRESULT WINAPI HTMLStyle_put_margin(IHTMLStyle *iface, BSTR v)
1597 {
1599 
1600  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1601 
1602  return set_style_attr(This, STYLEID_MARGIN, v, 0);
1603 }
1604 
1605 static HRESULT WINAPI HTMLStyle_get_margin(IHTMLStyle *iface, BSTR *p)
1606 {
1608 
1609  TRACE("(%p)->(%p)\n", This, p);
1610 
1611  return get_style_attr(This, STYLEID_MARGIN, p);
1612 }
1613 
1614 static HRESULT WINAPI HTMLStyle_get_marginLeft(IHTMLStyle *iface, VARIANT *p)
1615 {
1617  TRACE("(%p)->(%p)\n", This, p);
1618  return get_nsstyle_attr_var(This->nsstyle, STYLEID_MARGIN_LEFT, p, 0);
1619 }
1620 
1622 {
1624 
1625  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1626 
1628 }
1629 
1630 static HRESULT WINAPI HTMLStyle_get_paddingTop(IHTMLStyle *iface, VARIANT *p)
1631 {
1633 
1634  TRACE("(%p)->(%p)\n", This, p);
1635 
1636  return get_nsstyle_attr_var(This->nsstyle, STYLEID_PADDING_TOP, p, 0);
1637 }
1638 
1640 {
1642 
1643  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1644 
1646 }
1647 
1649 {
1651 
1652  TRACE("(%p)->(%p)\n", This, p);
1653 
1654  return get_nsstyle_attr_var(This->nsstyle, STYLEID_PADDING_RIGHT, p, 0);
1655 }
1656 
1658 {
1660 
1661  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1662 
1664 }
1665 
1667 {
1669 
1670  TRACE("(%p)->(%p)\n", This, p);
1671 
1672  return get_nsstyle_attr_var(This->nsstyle, STYLEID_PADDING_BOTTOM, p, 0);
1673 }
1674 
1676 {
1678 
1679  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1680 
1682 }
1683 
1684 static HRESULT WINAPI HTMLStyle_get_paddingLeft(IHTMLStyle *iface, VARIANT *p)
1685 {
1687 
1688  TRACE("(%p)->(%p)\n", This, p);
1689 
1690  return get_nsstyle_attr_var(This->nsstyle, STYLEID_PADDING_LEFT, p, 0);
1691 }
1692 
1693 static HRESULT WINAPI HTMLStyle_put_padding(IHTMLStyle *iface, BSTR v)
1694 {
1696 
1697  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1698 
1699  return set_style_attr(This, STYLEID_PADDING, v, 0);
1700 }
1701 
1702 static HRESULT WINAPI HTMLStyle_get_padding(IHTMLStyle *iface, BSTR *p)
1703 {
1705 
1706  TRACE("(%p)->(%p)\n", This, p);
1707 
1709 }
1710 
1711 static HRESULT WINAPI HTMLStyle_put_border(IHTMLStyle *iface, BSTR v)
1712 {
1714 
1715  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1716 
1717  return set_style_attr(This, STYLEID_BORDER, v, 0);
1718 }
1719 
1720 static HRESULT WINAPI HTMLStyle_get_border(IHTMLStyle *iface, BSTR *p)
1721 {
1723 
1724  TRACE("(%p)->(%p)\n", This, p);
1725 
1726  return get_style_attr(This, STYLEID_BORDER, p);
1727 }
1728 
1729 static HRESULT WINAPI HTMLStyle_put_borderTop(IHTMLStyle *iface, BSTR v)
1730 {
1732  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1734 }
1735 
1736 static HRESULT WINAPI HTMLStyle_get_borderTop(IHTMLStyle *iface, BSTR *p)
1737 {
1739  TRACE("(%p)->(%p)\n", This, p);
1741 }
1742 
1743 static HRESULT WINAPI HTMLStyle_put_borderRight(IHTMLStyle *iface, BSTR v)
1744 {
1746  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1748 }
1749 
1750 static HRESULT WINAPI HTMLStyle_get_borderRight(IHTMLStyle *iface, BSTR *p)
1751 {
1753  TRACE("(%p)->(%p)\n", This, p);
1755 }
1756 
1757 static HRESULT WINAPI HTMLStyle_put_borderBottom(IHTMLStyle *iface, BSTR v)
1758 {
1760  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1762 }
1763 
1764 static HRESULT WINAPI HTMLStyle_get_borderBottom(IHTMLStyle *iface, BSTR *p)
1765 {
1767  TRACE("(%p)->(%p)\n", This, p);
1769 }
1770 
1771 static HRESULT WINAPI HTMLStyle_put_borderLeft(IHTMLStyle *iface, BSTR v)
1772 {
1774 
1775  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1776 
1778 }
1779 
1780 static HRESULT WINAPI HTMLStyle_get_borderLeft(IHTMLStyle *iface, BSTR *p)
1781 {
1783 
1784  TRACE("(%p)->(%p)\n", This, p);
1785 
1787 }
1788 
1789 static HRESULT WINAPI HTMLStyle_put_borderColor(IHTMLStyle *iface, BSTR v)
1790 {
1792 
1793  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1794 
1796 }
1797 
1798 static HRESULT WINAPI HTMLStyle_get_borderColor(IHTMLStyle *iface, BSTR *p)
1799 {
1801 
1802  TRACE("(%p)->(%p)\n", This, p);
1803 
1805 }
1806 
1808 {
1810 
1811  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1812 
1814 }
1815 
1817 {
1819 
1820  TRACE("(%p)->(%p)\n", This, p);
1821 
1822  return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_TOP_COLOR, p, 0);
1823 }
1824 
1826 {
1828 
1829  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1830 
1832 }
1833 
1835 {
1837 
1838  TRACE("(%p)->(%p)\n", This, p);
1839 
1840  return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_RIGHT_COLOR, p, 0);
1841 }
1842 
1844 {
1846 
1847  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1848 
1850 }
1851 
1853 {
1855 
1856  TRACE("(%p)->(%p)\n", This, p);
1857 
1859 }
1860 
1862 {
1864 
1865  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1866 
1868 }
1869 
1871 {
1873 
1874  TRACE("(%p)->(%p)\n", This, p);
1875 
1876  return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_LEFT_COLOR, p, 0);
1877 }
1878 
1879 static HRESULT WINAPI HTMLStyle_put_borderWidth(IHTMLStyle *iface, BSTR v)
1880 {
1882  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1884 }
1885 
1886 static HRESULT WINAPI HTMLStyle_get_borderWidth(IHTMLStyle *iface, BSTR *p)
1887 {
1889  TRACE("(%p)->(%p)\n", This, p);
1891 }
1892 
1894 {
1896 
1897  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1898 
1899  return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_TOP_WIDTH, &v, 0);
1900 }
1901 
1903 {
1905 
1906  TRACE("(%p)->(%p)\n", This, p);
1907 
1908  return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_TOP_WIDTH, p, 0);
1909 }
1910 
1912 {
1914 
1915  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1916 
1917  return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_RIGHT_WIDTH, &v, 0);
1918 }
1919 
1921 {
1923 
1924  TRACE("(%p)->(%p)\n", This, p);
1925 
1926  return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_RIGHT_WIDTH, p, 0);
1927 }
1928 
1930 {
1932 
1933  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1934 
1935  return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_BOTTOM_WIDTH, &v, 0);
1936 }
1937 
1939 {
1941  TRACE("(%p)->(%p)\n", This, p);
1943 }
1944 
1946 {
1948 
1949  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
1950 
1951  return set_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_LEFT_WIDTH, &v, 0);
1952 }
1953 
1955 {
1957  TRACE("(%p)->(%p)\n", This, p);
1958  return get_nsstyle_attr_var(This->nsstyle, STYLEID_BORDER_LEFT_WIDTH, p, 0);
1959 }
1960 
1961 static HRESULT WINAPI HTMLStyle_put_borderStyle(IHTMLStyle *iface, BSTR v)
1962 {
1964  static const WCHAR styleWindowInset[] = {'w','i','n','d','o','w','-','i','n','s','e','t',0};
1965  HRESULT hres = S_OK;
1966  BSTR pstyle;
1967  int i=0;
1968  int last = 0;
1969 
1970  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
1971 
1972  while(v[i] && hres == S_OK)
1973  {
1974  if(v[i] == (WCHAR)' ')
1975  {
1976  pstyle = SysAllocStringLen(&v[last], (i-last));
1977  if( !(is_valid_border_style(pstyle) || strcmpiW(styleWindowInset, pstyle) == 0))
1978  {
1979  TRACE("1. Invalid style (%s)\n", debugstr_w(pstyle));
1980  hres = E_INVALIDARG;
1981  }
1982  SysFreeString(pstyle);
1983  last = i+1;
1984  }
1985  i++;
1986  }
1987 
1988  if(hres == S_OK)
1989  {
1990  pstyle = SysAllocStringLen(&v[last], i-last);
1991  if( !(is_valid_border_style(pstyle) || strcmpiW(styleWindowInset, pstyle) == 0))
1992  {
1993  TRACE("2. Invalid style (%s)\n", debugstr_w(pstyle));
1994  hres = E_INVALIDARG;
1995  }
1996  SysFreeString(pstyle);
1997  }
1998 
1999  if(hres == S_OK)
2000  hres = set_nsstyle_attr(This->nsstyle, STYLEID_BORDER_STYLE, v, 0);
2001 
2002  return hres;
2003 }
2004 
2005 static HRESULT WINAPI HTMLStyle_get_borderStyle(IHTMLStyle *iface, BSTR *p)
2006 {
2008  TRACE("(%p)->(%p)\n", This, p);
2010 }
2011 
2013 {
2015  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2016 
2017  if(!is_valid_border_style(v))
2018  return E_INVALIDARG;
2019 
2021 }
2022 
2023 static HRESULT WINAPI HTMLStyle_get_borderTopStyle(IHTMLStyle *iface, BSTR *p)
2024 {
2026  TRACE("(%p)->(%p)\n", This, p);
2028 }
2029 
2031 {
2033  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2034 
2035  if(!is_valid_border_style(v))
2036  return E_INVALIDARG;
2037 
2039 }
2040 
2042 {
2044  TRACE("(%p)->(%p)\n", This, p);
2046 }
2047 
2049 {
2051  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2052 
2053  if(!is_valid_border_style(v))
2054  return E_INVALIDARG;
2055 
2057 }
2058 
2060 {
2062  TRACE("(%p)->(%p)\n", This, p);
2064 }
2065 
2067 {
2069  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2070 
2071  if(!is_valid_border_style(v))
2072  return E_INVALIDARG;
2073 
2075 }
2076 
2078 {
2080  TRACE("(%p)->(%p)\n", This, p);
2082 }
2083 
2084 static HRESULT WINAPI HTMLStyle_put_width(IHTMLStyle *iface, VARIANT v)
2085 {
2087 
2088  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
2089 
2090  return set_nsstyle_attr_var(This->nsstyle, STYLEID_WIDTH, &v, ATTR_FIX_PX);
2091 }
2092 
2093 static HRESULT WINAPI HTMLStyle_get_width(IHTMLStyle *iface, VARIANT *p)
2094 {
2096 
2097  TRACE("(%p)->(%p)\n", This, p);
2098 
2099  return get_nsstyle_attr_var(This->nsstyle, STYLEID_WIDTH, p, 0);
2100 }
2101 
2102 static HRESULT WINAPI HTMLStyle_put_height(IHTMLStyle *iface, VARIANT v)
2103 {
2105 
2106  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
2107 
2108  return set_nsstyle_attr_var(This->nsstyle, STYLEID_HEIGHT, &v, ATTR_FIX_PX);
2109 }
2110 
2111 static HRESULT WINAPI HTMLStyle_get_height(IHTMLStyle *iface, VARIANT *p)
2112 {
2114 
2115  TRACE("(%p)->(%p)\n", This, p);
2116 
2117  return get_nsstyle_attr_var(This->nsstyle, STYLEID_HEIGHT, p, 0);
2118 }
2119 
2120 static HRESULT WINAPI HTMLStyle_put_styleFloat(IHTMLStyle *iface, BSTR v)
2121 {
2123 
2124  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2125 
2126  return set_style_attr(This, STYLEID_FLOAT, v, 0);
2127 }
2128 
2129 static HRESULT WINAPI HTMLStyle_get_styleFloat(IHTMLStyle *iface, BSTR *p)
2130 {
2132 
2133  TRACE("(%p)->(%p)\n", This, p);
2134 
2135  return get_style_attr(This, STYLEID_FLOAT, p);
2136 }
2137 
2138 static HRESULT WINAPI HTMLStyle_put_clear(IHTMLStyle *iface, BSTR v)
2139 {
2141 
2142  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2143 
2144  return set_style_attr(This, STYLEID_CLEAR, v, 0);
2145 }
2146 
2147 static HRESULT WINAPI HTMLStyle_get_clear(IHTMLStyle *iface, BSTR *p)
2148 {
2150 
2151  TRACE("(%p)->(%p)\n", This, p);
2152 
2153  return get_style_attr(This, STYLEID_CLEAR, p);
2154 }
2155 
2156 static HRESULT WINAPI HTMLStyle_put_display(IHTMLStyle *iface, BSTR v)
2157 {
2159 
2160  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2161 
2162  return set_style_attr(This, STYLEID_DISPLAY, v, 0);
2163 }
2164 
2165 static HRESULT WINAPI HTMLStyle_get_display(IHTMLStyle *iface, BSTR *p)
2166 {
2168 
2169  TRACE("(%p)->(%p)\n", This, p);
2170 
2172 }
2173 
2174 static HRESULT WINAPI HTMLStyle_put_visibility(IHTMLStyle *iface, BSTR v)
2175 {
2177 
2178  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2179 
2180  return set_style_attr(This, STYLEID_VISIBILITY, v, 0);
2181 }
2182 
2183 static HRESULT WINAPI HTMLStyle_get_visibility(IHTMLStyle *iface, BSTR *p)
2184 {
2186 
2187  TRACE("(%p)->(%p)\n", This, p);
2188 
2190 }
2191 
2193 {
2195 
2196  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2197 
2199 }
2200 
2201 static HRESULT WINAPI HTMLStyle_get_listStyleType(IHTMLStyle *iface, BSTR *p)
2202 {
2204 
2205  TRACE("(%p)->(%p)\n", This, p);
2206 
2208 }
2209 
2211 {
2213 
2214  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2215 
2217 }
2218 
2220 {
2222 
2223  TRACE("(%p)->(%p)\n", This, p);
2224 
2226 }
2227 
2229 {
2231  FIXME("(%p)->(%s)\n", This, debugstr_w(v));
2232  return E_NOTIMPL;
2233 }
2234 
2235 static HRESULT WINAPI HTMLStyle_get_listStyleImage(IHTMLStyle *iface, BSTR *p)
2236 {
2238  FIXME("(%p)->(%p)\n", This, p);
2239  return E_NOTIMPL;
2240 }
2241 
2242 static HRESULT WINAPI HTMLStyle_put_listStyle(IHTMLStyle *iface, BSTR v)
2243 {
2245 
2246  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2247 
2248  return set_style_attr(This, STYLEID_LIST_STYLE, v, 0);
2249 }
2250 
2251 static HRESULT WINAPI HTMLStyle_get_listStyle(IHTMLStyle *iface, BSTR *p)
2252 {
2254 
2255  TRACE("(%p)->(%p)\n", This, p);
2256 
2258 }
2259 
2260 static HRESULT WINAPI HTMLStyle_put_whiteSpace(IHTMLStyle *iface, BSTR v)
2261 {
2263 
2264  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2265 
2266  return set_nsstyle_attr(This->nsstyle, STYLEID_WHITE_SPACE, v, 0);
2267 }
2268 
2269 static HRESULT WINAPI HTMLStyle_get_whiteSpace(IHTMLStyle *iface, BSTR *p)
2270 {
2272 
2273  TRACE("(%p)->(%p)\n", This, p);
2274 
2275  return get_nsstyle_attr(This->nsstyle, STYLEID_WHITE_SPACE, p, 0);
2276 }
2277 
2278 static HRESULT WINAPI HTMLStyle_put_top(IHTMLStyle *iface, VARIANT v)
2279 {
2281 
2282  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
2283 
2284  return set_nsstyle_attr_var(This->nsstyle, STYLEID_TOP, &v, 0);
2285 }
2286 
2287 static HRESULT WINAPI HTMLStyle_get_top(IHTMLStyle *iface, VARIANT *p)
2288 {
2290 
2291  TRACE("(%p)->(%p)\n", This, p);
2292 
2293  return get_nsstyle_attr_var(This->nsstyle, STYLEID_TOP, p, 0);
2294 }
2295 
2296 static HRESULT WINAPI HTMLStyle_put_left(IHTMLStyle *iface, VARIANT v)
2297 {
2299 
2300  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
2301 
2302  return set_nsstyle_attr_var(This->nsstyle, STYLEID_LEFT, &v, 0);
2303 }
2304 
2305 static HRESULT WINAPI HTMLStyle_get_left(IHTMLStyle *iface, VARIANT *p)
2306 {
2308 
2309  TRACE("(%p)->(%p)\n", This, p);
2310 
2311  return get_nsstyle_attr_var(This->nsstyle, STYLEID_LEFT, p, 0);
2312 }
2313 
2314 static HRESULT WINAPI HTMLStyle_get_position(IHTMLStyle *iface, BSTR *p)
2315 {
2317  TRACE("(%p)->(%p)\n", This, p);
2318  return IHTMLStyle2_get_position(&This->IHTMLStyle2_iface, p);
2319 }
2320 
2321 static HRESULT WINAPI HTMLStyle_put_zIndex(IHTMLStyle *iface, VARIANT v)
2322 {
2324 
2325  TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
2326 
2327  return set_nsstyle_attr_var(This->nsstyle, STYLEID_Z_INDEX, &v, 0);
2328 }
2329 
2330 static HRESULT WINAPI HTMLStyle_get_zIndex(IHTMLStyle *iface, VARIANT *p)
2331 {
2333 
2334  TRACE("(%p)->(%p)\n", This, p);
2335 
2337 }
2338 
2339 static HRESULT WINAPI HTMLStyle_put_overflow(IHTMLStyle *iface, BSTR v)
2340 {
2342  static const WCHAR szVisible[] = {'v','i','s','i','b','l','e',0};
2343  static const WCHAR szScroll[] = {'s','c','r','o','l','l',0};
2344  static const WCHAR szHidden[] = {'h','i','d','d','e','n',0};
2345  static const WCHAR szAuto[] = {'a','u','t','o',0};
2346 
2347  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2348 
2349  /* overflow can only be one of the follow values. */
2350  if(!v || !*v || strcmpiW(szVisible, v) == 0 || strcmpiW(szScroll, v) == 0 ||
2351  strcmpiW(szHidden, v) == 0 || strcmpiW(szAuto, v) == 0)
2352  {
2353  return set_nsstyle_attr(This->nsstyle, STYLEID_OVERFLOW, v, 0);
2354  }
2355 
2356  return E_INVALIDARG;
2357 }
2358 
2359 
2360 static HRESULT WINAPI HTMLStyle_get_overflow(IHTMLStyle *iface, BSTR *p)
2361 {
2363 
2364  TRACE("(%p)->(%p)\n", This, p);
2365 
2366  if(!p)
2367  return E_INVALIDARG;
2368 
2370 }
2371 
2373 {
2375 
2376  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2377 
2378  return set_nsstyle_attr(This->nsstyle, STYLEID_PAGE_BREAK_BEFORE, v, 0);
2379 }
2380 
2382 {
2384 
2385  TRACE("(%p)->(%p)\n", This, p);
2386 
2387  return get_nsstyle_attr(This->nsstyle, STYLEID_PAGE_BREAK_BEFORE, p, 0);
2388 }
2389 
2391 {
2393 
2394  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2395 
2396  return set_nsstyle_attr(This->nsstyle, STYLEID_PAGE_BREAK_AFTER, v, 0);
2397 }
2398 
2399 static HRESULT WINAPI HTMLStyle_get_pageBreakAfter(IHTMLStyle *iface, BSTR *p)
2400 {
2402 
2403  TRACE("(%p)->(%p)\n", This, p);
2404 
2405  return get_nsstyle_attr(This->nsstyle, STYLEID_PAGE_BREAK_AFTER, p, 0);
2406 }
2407 
2408 static HRESULT WINAPI HTMLStyle_put_cssText(IHTMLStyle *iface, BSTR v)
2409 {
2411  nsAString text_str;
2412  nsresult nsres;
2413 
2414  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2415 
2416  nsAString_InitDepend(&text_str, v);
2417  nsres = nsIDOMCSSStyleDeclaration_SetCssText(This->nsstyle, &text_str);
2418  nsAString_Finish(&text_str);
2419  if(NS_FAILED(nsres)) {
2420  FIXME("SetCssStyle failed: %08x\n", nsres);
2421  return E_FAIL;
2422  }
2423 
2424  return S_OK;
2425 }
2426 
2427 static HRESULT WINAPI HTMLStyle_get_cssText(IHTMLStyle *iface, BSTR *p)
2428 {
2430  nsAString text_str;
2431  nsresult nsres;
2432 
2433  TRACE("(%p)->(%p)\n", This, p);
2434 
2435  /* FIXME: Gecko style formatting is different than IE (uppercase). */
2436  nsAString_Init(&text_str, NULL);
2437  nsres = nsIDOMCSSStyleDeclaration_GetCssText(This->nsstyle, &text_str);
2438  if(NS_SUCCEEDED(nsres)) {
2439  const PRUnichar *text;
2440 
2441  nsAString_GetData(&text_str, &text);
2442  *p = *text ? SysAllocString(text) : NULL;
2443  }else {
2444  FIXME("GetCssStyle failed: %08x\n", nsres);
2445  *p = NULL;
2446  }
2447 
2448  nsAString_Finish(&text_str);
2449  return S_OK;
2450 }
2451 
2452 static HRESULT WINAPI HTMLStyle_put_pixelTop(IHTMLStyle *iface, LONG v)
2453 {
2455 
2456  TRACE("(%p)->(%d)\n", This, v);
2457 
2458  return set_style_pxattr(This->nsstyle, STYLEID_TOP, v);
2459 }
2460 
2461 static HRESULT WINAPI HTMLStyle_get_pixelTop(IHTMLStyle *iface, LONG *p)
2462 {
2464 
2465  TRACE("(%p)->(%p)\n", This, p);
2466 
2468 }
2469 
2470 static HRESULT WINAPI HTMLStyle_put_pixelLeft(IHTMLStyle *iface, LONG v)
2471 {
2473 
2474  TRACE("(%p)->(%d)\n", This, v);
2475 
2476  return set_style_pxattr(This->nsstyle, STYLEID_LEFT, v);
2477 }
2478 
2479 static HRESULT WINAPI HTMLStyle_get_pixelLeft(IHTMLStyle *iface, LONG *p)
2480 {
2482 
2483  TRACE("(%p)->(%p)\n", This, p);
2484 
2486 }
2487 
2488 static HRESULT WINAPI HTMLStyle_put_pixelWidth(IHTMLStyle *iface, LONG v)
2489 {
2491 
2492  TRACE("(%p)->()\n", This);
2493 
2494  return set_style_pxattr(This->nsstyle, STYLEID_WIDTH, v);
2495 }
2496 
2497 static HRESULT WINAPI HTMLStyle_get_pixelWidth(IHTMLStyle *iface, LONG *p)
2498 {
2500 
2501  TRACE("(%p)->(%p)\n", This, p);
2502 
2504 }
2505 
2506 static HRESULT WINAPI HTMLStyle_put_pixelHeight(IHTMLStyle *iface, LONG v)
2507 {
2509 
2510  TRACE("(%p)->(%d)\n", This, v);
2511 
2512  return set_style_pxattr(This->nsstyle, STYLEID_HEIGHT, v);
2513 }
2514 
2515 static HRESULT WINAPI HTMLStyle_get_pixelHeight(IHTMLStyle *iface, LONG *p)
2516 {
2518 
2519  TRACE("(%p)->(%p)\n", This, p);
2520 
2522 }
2523 
2524 static HRESULT WINAPI HTMLStyle_put_posTop(IHTMLStyle *iface, float v)
2525 {
2527 
2528  TRACE("(%p)->(%f)\n", This, v);
2529 
2530  return set_style_pos(This, STYLEID_TOP, v);
2531 }
2532 
2533 static HRESULT WINAPI HTMLStyle_get_posTop(IHTMLStyle *iface, float *p)
2534 {
2536 
2537  TRACE("(%p)->(%p)\n", This, p);
2538 
2539  if(!p)
2540  return E_POINTER;
2541 
2542  return get_nsstyle_pos(This, STYLEID_TOP, p);
2543 }
2544 
2545 static HRESULT WINAPI HTMLStyle_put_posLeft(IHTMLStyle *iface, float v)
2546 {
2548 
2549  TRACE("(%p)->(%f)\n", This, v);
2550 
2551  return set_style_pos(This, STYLEID_LEFT, v);
2552 }
2553 
2554 static HRESULT WINAPI HTMLStyle_get_posLeft(IHTMLStyle *iface, float *p)
2555 {
2557 
2558  TRACE("(%p)->(%p)\n", This, p);
2559 
2560  if(!p)
2561  return E_POINTER;
2562 
2563  return get_nsstyle_pos(This, STYLEID_LEFT, p);
2564 }
2565 
2566 static HRESULT WINAPI HTMLStyle_put_posWidth(IHTMLStyle *iface, float v)
2567 {
2569 
2570  TRACE("(%p)->(%f)\n", This, v);
2571 
2572  return set_style_pos(This, STYLEID_WIDTH, v);
2573 }
2574 
2575 static HRESULT WINAPI HTMLStyle_get_posWidth(IHTMLStyle *iface, float *p)
2576 {
2578 
2579  TRACE("(%p)->(%p)\n", This, p);
2580 
2581  if(!p)
2582  return E_POINTER;
2583 
2585  *p = 0.0f;
2586 
2587  return S_OK;
2588 }
2589 
2590 static HRESULT WINAPI HTMLStyle_put_posHeight(IHTMLStyle *iface, float v)
2591 {
2593 
2594  TRACE("(%p)->(%f)\n", This, v);
2595 
2596  return set_style_pos(This, STYLEID_HEIGHT, v);
2597 }
2598 
2599 static HRESULT WINAPI HTMLStyle_get_posHeight(IHTMLStyle *iface, float *p)
2600 {
2602 
2603  TRACE("(%p)->(%p)\n", This, p);
2604 
2605  if(!p)
2606  return E_POINTER;
2607 
2609  *p = 0.0f;
2610 
2611  return S_OK;
2612 }
2613 
2614 static HRESULT WINAPI HTMLStyle_put_cursor(IHTMLStyle *iface, BSTR v)
2615 {
2617 
2618  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2619 
2620  return set_style_attr(This, STYLEID_CURSOR, v, 0);
2621 }
2622 
2623 static HRESULT WINAPI HTMLStyle_get_cursor(IHTMLStyle *iface, BSTR *p)
2624 {
2626 
2627  TRACE("(%p)->(%p)\n", This, p);
2628 
2629  return get_style_attr(This, STYLEID_CURSOR, p);
2630 }
2631 
2632 static HRESULT WINAPI HTMLStyle_put_clip(IHTMLStyle *iface, BSTR v)
2633 {
2635 
2636  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2637 
2638  return set_style_attr(This, STYLEID_CLIP, v, 0);
2639 }
2640 
2641 static HRESULT WINAPI HTMLStyle_get_clip(IHTMLStyle *iface, BSTR *p)
2642 {
2644 
2645  TRACE("(%p)->(%p)\n", This, p);
2646 
2648 }
2649 
2650 static void set_opacity(HTMLStyle *This, const WCHAR *val)
2651 {
2652  nsAString name_str, val_str, empty_str;
2653  nsresult nsres;
2654 
2655  static const WCHAR opacityW[] = {'o','p','a','c','i','t','y',0};
2656 
2657  TRACE("%s\n", debugstr_w(val));
2658 
2659  nsAString_InitDepend(&name_str, opacityW);
2660  nsAString_InitDepend(&val_str, val);
2662 
2663  nsres = nsIDOMCSSStyleDeclaration_SetProperty(This->nsstyle, &name_str, &val_str, &empty_str);
2664  if(NS_FAILED(nsres))
2665  ERR("SetProperty failed: %08x\n", nsres);
2666 
2667  nsAString_Finish(&name_str);
2668  nsAString_Finish(&val_str);
2670 }
2671 
2673 {
2674  const WCHAR *ptr = This->elem->filter, *ptr2;
2675 
2676  static const WCHAR alphaW[] = {'a','l','p','h','a'};
2677 
2678  if(!ptr) {
2680  return;
2681  }
2682 
2683  while(1) {
2684  while(isspaceW(*ptr))
2685  ptr++;
2686  if(!*ptr)
2687  break;
2688 
2689  ptr2 = ptr;
2690  while(isalnumW(*ptr))
2691  ptr++;
2692  if(ptr == ptr2) {
2693  WARN("unexpected char '%c'\n", *ptr);
2694  break;
2695  }
2696  if(*ptr != '(') {
2697  WARN("expected '('\n");
2698  continue;
2699  }
2700 
2701  if(ptr2 + sizeof(alphaW)/sizeof(WCHAR) == ptr && !memcmp(ptr2, alphaW, sizeof(alphaW))) {
2702  static const WCHAR formatW[] = {'%','f',0};
2703  static const WCHAR opacityW[] = {'o','p','a','c','i','t','y','='};
2704 
2705  ptr++;
2706  do {
2707  while(isspaceW(*ptr))
2708  ptr++;
2709 
2710  ptr2 = ptr;
2711  while(*ptr && *ptr != ',' && *ptr != ')')
2712  ptr++;
2713  if(!*ptr) {
2714  WARN("unexpected end of string\n");
2715  break;
2716  }
2717 
2718  if(ptr-ptr2 > sizeof(opacityW)/sizeof(WCHAR) && !memcmp(ptr2, opacityW, sizeof(opacityW))) {
2719  float fval = 0.0f, e = 0.1f;
2720  WCHAR buf[32];
2721 
2722  ptr2 += sizeof(opacityW)/sizeof(WCHAR);
2723 
2724  while(isdigitW(*ptr2))
2725  fval = fval*10.0f + (float)(*ptr2++ - '0');
2726 
2727  if(*ptr2 == '.') {
2728  while(isdigitW(*++ptr2)) {
2729  fval += e * (float)(*ptr2++ - '0');
2730  e *= 0.1f;
2731  }
2732  }
2733 
2734  sprintfW(buf, formatW, fval * 0.01f);
2735  set_opacity(This, buf);
2736  }else {
2737  FIXME("unknown param %s\n", debugstr_wn(ptr2, ptr-ptr2));
2738  }
2739 
2740  if(*ptr == ',')
2741  ptr++;
2742  }while(*ptr != ')');
2743  }else {
2744  FIXME("unknown filter %s\n", debugstr_wn(ptr2, ptr-ptr2));
2745  ptr = strchrW(ptr, ')');
2746  if(!ptr)
2747  break;
2748  ptr++;
2749  }
2750  }
2751 }
2752 
2753 static HRESULT WINAPI HTMLStyle_put_filter(IHTMLStyle *iface, BSTR v)
2754 {
2756  WCHAR *new_filter = NULL;
2757 
2758  TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2759 
2760  if(!This->elem) {
2761  FIXME("Element already destroyed\n");
2762  return E_UNEXPECTED;
2763  }
2764 
2765  if(v) {
2766  new_filter = heap_strdupW(v);
2767  if(!new_filter)
2768  return E_OUTOFMEMORY;
2769  }
2770 
2771  heap_free(This->elem->filter);
2772  This->elem->filter = new_filter;
2773 
2775  return S_OK;
2776 }
2777 
2778 static HRESULT WINAPI HTMLStyle_get_filter(IHTMLStyle *iface, BSTR *p)
2779 {
2781 
2782  TRACE("(%p)->(%p)\n", This, p);
2783 
2784  if(!This->elem) {
2785  FIXME("Element already destroyed\n");
2786  return E_UNEXPECTED;
2787  }
2788 
2789  if(This->elem->filter) {
2790  *p = SysAllocString(This->elem->filter);
2791  if(!*p)
2792  return E_OUTOFMEMORY;
2793  }else {
2794  *p = NULL;
2795  }
2796 
2797  return S_OK;
2798 }
2799 
2800 static HRESULT WINAPI HTMLStyle_setAttribute(IHTMLStyle *iface, BSTR strAttributeName,
2801  VARIANT AttributeValue, LONG lFlags)
2802 {
2804  HRESULT hres;
2805  DISPID dispid;
2806 
2807  TRACE("(%p)->(%s %s %08x)\n", This, debugstr_w(strAttributeName),
2808  debugstr_variant(&AttributeValue), lFlags);
2809 
2810  if(!strAttributeName)
2811  return E_INVALIDARG;
2812 
2813  if(lFlags == 1)
2814  FIXME("Parameter lFlags ignored\n");
2815 
2816  hres = HTMLStyle_GetIDsOfNames(iface, &IID_NULL, &strAttributeName, 1,
2817  LOCALE_USER_DEFAULT, &dispid);
2818  if(hres == S_OK)
2819  {
2820  VARIANT ret;
2821  DISPID dispidNamed = DISPID_PROPERTYPUT;
2823 
2824  params.cArgs = 1;
2825  params.rgvarg = &AttributeValue;
2826  params.cNamedArgs = 1;
2827  params.rgdispidNamedArgs = &dispidNamed;
2828 
2831  }
2832  else
2833  {
2834  FIXME("Custom attributes not supported.\n");
2835  }
2836 
2837  TRACE("ret: %08x\n", hres);
2838 
2839  return hres;
2840 }
2841 
2842 static HRESULT WINAPI HTMLStyle_getAttribute(IHTMLStyle *iface, BSTR strAttributeName,
2843  LONG lFlags, VARIANT *AttributeValue)
2844 {
2846  HRESULT hres;
2847  DISPID dispid;
2848 
2849  TRACE("(%p)->(%s v%p %08x)\n", This, debugstr_w(strAttributeName),
2850  AttributeValue, lFlags);
2851 
2852  if(!AttributeValue || !strAttributeName)
2853  return E_INVALIDARG;
2854 
2855  if(lFlags == 1)
2856  FIXME("Parameter lFlags ignored\n");
2857 
2858  hres = HTMLStyle_GetIDsOfNames(iface, &IID_NULL, &strAttributeName, 1,
2859  LOCALE_USER_DEFAULT, &dispid);
2860  if(hres == S_OK)
2861  {
2862  DISPPARAMS params = {NULL, NULL, 0, 0 };
2863 
2865  DISPATCH_PROPERTYGET, &params, AttributeValue, NULL, NULL);
2866  }
2867  else
2868  {
2869  FIXME("Custom attributes not supported.\n");
2870  }
2871 
2872  return hres;
2873 }
2874 
2875 static HRESULT WINAPI HTMLStyle_removeAttribute(IHTMLStyle *iface, BSTR strAttributeName,
2876  LONG lFlags, VARIANT_BOOL *pfSuccess)
2877 {
2879  const style_tbl_entry_t *style_entry;
2880  nsAString name_str, ret_str;
2881  nsresult nsres;
2882  HRESULT hres;
2883 
2884  TRACE("(%p)->(%s %08x %p)\n", This, debugstr_w(strAttributeName), lFlags, pfSuccess);
2885 
2886  style_entry = lookup_style_tbl(strAttributeName);
2887  if(!style_entry) {
2888  DISPID dispid;
2889  unsigned i;
2890 
2891  hres = IDispatchEx_GetDispID(&This->dispex.IDispatchEx_iface, strAttributeName,
2892  (lFlags&1) ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid);
2893  if(hres != S_OK) {
2894  *pfSuccess = VARIANT_FALSE;
2895  return S_OK;
2896  }
2897 
2898  for(i=0; i < sizeof(style_tbl)/sizeof(*style_tbl); i++) {
2899  if(dispid == style_tbl[i].dispid)
2900  break;
2901  }
2902 
2903  if(i == sizeof(style_tbl)/sizeof(*style_tbl))
2904  return remove_attribute(&This->dispex, dispid, pfSuccess);
2905  style_entry = style_tbl+i;
2906  }
2907 
2908  /* filter property is a special case */
2909  if(style_entry->dispid == DISPID_IHTMLSTYLE_FILTER) {
2910  *pfSuccess = This->elem->filter && *This->elem->filter ? VARIANT_TRUE : VARIANT_FALSE;
2911  heap_free(This->elem->filter);
2912  This->elem->filter = NULL;
2914  return S_OK;
2915  }
2916 
2917  nsAString_InitDepend(&name_str, style_entry->name);
2918  nsAString_Init(&ret_str, NULL);
2919  nsres = nsIDOMCSSStyleDeclaration_RemoveProperty(This->nsstyle, &name_str, &ret_str);
2920  if(NS_SUCCEEDED(nsres)) {
2921  const PRUnichar *ret;
2922  nsAString_GetData(&ret_str, &ret);
2923  *pfSuccess = *ret ? VARIANT_TRUE : VARIANT_FALSE;
2924  }else {
2925  ERR("RemoveProperty failed: %08x\n", nsres);
2926  }
2927  nsAString_Finish(&name_str);
2928  nsAString_Finish(&ret_str);
2929  return NS_SUCCEEDED(nsres) ? S_OK : E_FAIL;
2930 }
2931 
2932 static HRESULT WINAPI HTMLStyle_toString(IHTMLStyle *iface, BSTR *String)
2933 {
2935  FIXME("(%p)->(%p)\n", This, String);
2936  return E_NOTIMPL;
2937 }
2938 
2939 static const IHTMLStyleVtbl HTMLStyleVtbl = {
3126 };
3127 
3129 {
3130  const style_tbl_entry_t *style_entry;
3131 
3132  style_entry = lookup_style_tbl(name);
3133  if(style_entry) {
3134  *dispid = style_entry->dispid;
3135  return S_OK;
3136  }
3137 
3138  return DISP_E_UNKNOWNNAME;
3139 }
3140 
3142  NULL,
3144  NULL,
3145  NULL
3146 };
3147 
3148 static const tid_t HTMLStyle_iface_tids[] = {
3149  IHTMLStyle6_tid,
3150  IHTMLStyle5_tid,
3151  IHTMLStyle4_tid,
3152  IHTMLStyle3_tid,
3153  IHTMLStyle2_tid,
3154  IHTMLStyle_tid,
3155  0
3156 };
3159  DispHTMLStyle_tid,
3160  NULL,
3162 };
3163 
3165 {
3166  nsIDOMElementCSSInlineStyle *nselemstyle;
3167  nsresult nsres;
3168 
3169  if(!elem->nselem) {
3170  FIXME("NULL nselem\n");
3171  return E_NOTIMPL;
3172  }
3173 
3174  nsres = nsIDOMHTMLElement_QueryInterface(elem->nselem, &IID_nsIDOMElementCSSInlineStyle,
3175  (void**)&nselemstyle);
3176  assert(nsres == NS_OK);
3177 
3178  nsres = nsIDOMElementCSSInlineStyle_GetStyle(nselemstyle, ret);
3179  nsIDOMElementCSSInlineStyle_Release(nselemstyle);
3180  if(NS_FAILED(nsres)) {
3181  ERR("GetStyle failed: %08x\n", nsres);
3182  return E_FAIL;
3183  }
3184 
3185  return S_OK;
3186 }
3187 
3189 {
3190  nsIDOMCSSStyleDeclaration *nsstyle;
3191  HTMLStyle *style;
3192  HRESULT hres;
3193 
3194  hres = get_style_from_elem(elem, &nsstyle);
3195  if(FAILED(hres))
3196  return hres;
3197 
3198  style = heap_alloc_zero(sizeof(HTMLStyle));
3199  if(!style) {
3200  nsIDOMCSSStyleDeclaration_Release(nsstyle);
3201  return E_OUTOFMEMORY;
3202  }
3203 
3204  style->IHTMLStyle_iface.lpVtbl = &HTMLStyleVtbl;
3205  style->ref = 1;
3206  style->nsstyle = nsstyle;
3207  style->elem = elem;
3210 
3211  nsIDOMCSSStyleDeclaration_AddRef(nsstyle);
3212 
3213  init_dispex(&style->dispex, (IUnknown*)&style->IHTMLStyle_iface, &HTMLStyle_dispex);
3214 
3215  *ret = style;
3216  return S_OK;
3217 }
3218 
3220 {
3222  HRESULT hres;
3223 
3225  if(FAILED(hres))
3226  return hres;
3227 
3228  hres = get_nsstyle_attr(style, styleid, ret, 0);
3229  nsIDOMCSSStyleDeclaration_Release(style);
3230  return hres;
3231 }
3232 
3234 {
3236  HRESULT hres;
3237 
3239  if(FAILED(hres))
3240  return hres;
3241 
3242  hres = set_nsstyle_attr(style, styleid, val, 0);
3243  nsIDOMCSSStyleDeclaration_Release(style);
3244  return hres;
3245 }
static const WCHAR attrBorderStyle[]
Definition: htmlstyle.c:69
static const WCHAR attrWordWrap[]
Definition: htmlstyle.c:188
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
static HRESULT WINAPI HTMLStyle_put_posTop(IHTMLStyle *iface, float v)
Definition: htmlstyle.c:2524
static HRESULT WINAPI HTMLStyle_put_backgroundRepeat(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1048
#define DISPID_IHTMLSTYLE_STYLEFLOAT
Definition: mshtmdid.h:1646
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:2515
static HRESULT WINAPI HTMLStyle_put_display(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2156
static const WCHAR attrBoxSizing[]
Definition: htmlstyle.c:80
#define DISPID_IHTMLSTYLE_FONTFAMILY
Definition: mshtmdid.h:1590
static HRESULT WINAPI HTMLStyle_put_margin(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1596
static HRESULT WINAPI HTMLStyle_put_letterSpacing(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1313
static const WCHAR attrBorderTop[]
Definition: htmlstyle.c:65
static LPWSTR fix_px_value(LPCWSTR val)
Definition: htmlstyle.c:327
#define max(a, b)
Definition: svc.c:63
#define DISPID_IHTMLSTYLE_BACKGROUNDREPEAT
Definition: mshtmdid.h:1599
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
static dispex_static_data_t HTMLStyle_dispex
Definition: htmlstyle.c:3157
HRESULT get_elem_style(HTMLElement *elem, styleid_t styleid, BSTR *ret)
Definition: htmlstyle.c:3219
static HRESULT WINAPI HTMLStyle_get_backgroundPosition(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1104
#define E_NOINTERFACE
Definition: winerror.h:2364
static HRESULT check_style_attr_value(HTMLStyle *This, styleid_t sid, LPCWSTR exval, VARIANT_BOOL *p)
Definition: htmlstyle.c:601
static HRESULT get_nsstyle_pixel_val(HTMLStyle *This, styleid_t sid, LONG *p)
Definition: htmlstyle.c:676
Definition: compat.h:1939
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
static const TCHAR empty_str[]
Definition: dialog.c:32
#define DISPID_IHTMLSTYLE2_OVERFLOWY
Definition: mshtmdid.h:1703
static HRESULT WINAPI HTMLStyle_put_posLeft(IHTMLStyle *iface, float v)
Definition: htmlstyle.c:2545
static const WCHAR attrClip[]
Definition: htmlstyle.c:84
static HRESULT WINAPI HTMLStyle_get_borderTop(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1736
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define DISPID_IHTMLSTYLE_MARGIN
Definition: mshtmdid.h:1620
static HTMLStyle * impl_from_IHTMLStyle(IHTMLStyle *iface)
Definition: htmlstyle.c:739
static HRESULT WINAPI HTMLStyle_put_filter(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2753
static HRESULT WINAPI HTMLStyle_get_borderTopColor(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1816
static HRESULT WINAPI HTMLStyle_put_marginLeft(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1587
static HRESULT WINAPI HTMLStyle_get_textIndent(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1508
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:342
static HRESULT WINAPI HTMLStyle_put_top(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:2278
static HRESULT WINAPI HTMLStyle_get_filter(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:2778
static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:994
#define DISPID_IHTMLSTYLE_HEIGHT
Definition: mshtmdid.h:1665
static HRESULT set_style_pos(HTMLStyle *This, styleid_t sid, float value)
Definition: htmlstyle.c:618
#define ATTR_HEX_INT
Definition: htmlstyle.h:142
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
POINT last
Definition: font.c:46
static HRESULT var_to_styleval(const VARIANT *v, WCHAR *buf, DWORD flags, const WCHAR **ret)
Definition: htmlstyle.c:411
static const WCHAR attrBorderTopColor[]
Definition: htmlstyle.c:67
static HRESULT WINAPI HTMLStyle_get_cursor(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:2623
static HRESULT WINAPI HTMLStyle_get_borderLeft(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1780
static HRESULT WINAPI HTMLStyle_put_marginRight(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1553
REFIID riid
Definition: precomp.h:44
static const WCHAR attrMinWidth[]
Definition: htmlstyle.c:138
static const WCHAR attrMarginRight[]
Definition: htmlstyle.c:128
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
Definition: unicode.h:248
#define DISPID_IHTMLSTYLE_LISTSTYLE
Definition: mshtmdid.h:1653
#define DISPID_IHTMLSTYLE2_DIRECTION
Definition: mshtmdid.h:1674
static HRESULT WINAPI HTMLStyle_put_borderTopStyle(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2012
static HRESULT WINAPI HTMLStyle_get_display(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:2165
#define DISPID_IHTMLSTYLE6_OUTLINE
Definition: mshtmdid.h:1738
const WCHAR * text
Definition: package.c:1827
#define LOCALE_USER_DEFAULT
WINE_UNICODE_INLINE int isspaceW(WCHAR wc)
Definition: unicode.h:165
static HRESULT WINAPI HTMLStyle_get_fontSize(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:953
tid_t
Definition: ieframe.h:311
void HTMLStyle3_Init(HTMLStyle *) DECLSPEC_HIDDEN
Definition: htmlstyle3.c:938
#define ATTR_FIX_PX
Definition: htmlstyle.h:139
#define DISPID_IHTMLSTYLE_BORDERSTYLE
Definition: mshtmdid.h:1641
static HRESULT WINAPI HTMLStyle_get_verticalAlign(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1454
#define WARN(fmt,...)
Definition: debug.h:111
static HRESULT WINAPI HTMLStyle_put_lineHeight(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1517
#define strtolW(s, e, b)
Definition: unicode.h:33
static HRESULT WINAPI HTMLStyle_put_cursor(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2614
static HRESULT WINAPI HTMLStyle_get_textTransform(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1472
static HRESULT WINAPI HTMLStyle_put_borderRightWidth(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1911
static const WCHAR attrLeft[]
Definition: htmlstyle.c:110
REFIID LPVOID * ppv
Definition: atlbase.h:39
static HRESULT WINAPI HTMLStyle_get_posHeight(IHTMLStyle *iface, float *p)
Definition: htmlstyle.c:2599
static HRESULT WINAPI HTMLStyle_get_borderTopWidth(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1902
#define DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE
Definition: mshtmdid.h:1644
static HRESULT WINAPI HTMLStyle_put_cssText(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2408
static HRESULT WINAPI HTMLStyle_put_backgroundPositionX(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1113
static const WCHAR attrPaddingRight[]
Definition: htmlstyle.c:154
static HRESULT WINAPI HTMLStyle_put_fontStyle(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:853
styleid_t
Definition: htmlstyle.h:37
static const WCHAR attrFontVariant[]
Definition: htmlstyle.c:104
static HRESULT WINAPI HTMLStyle_put_listStyle(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2242
#define DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE
Definition: mshtmdid.h:1643
#define ATTR_STR_TO_INT
Definition: htmlstyle.h:141
static HRESULT WINAPI HTMLStyle_get_paddingTop(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1630
static HRESULT WINAPI HTMLStyle_Invoke(IHTMLStyle *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: htmlstyle.c:826
FT_UInt sid
Definition: cffcmap.c:139
#define assert(x)
Definition: debug.h:53
static HRESULT WINAPI HTMLStyle_removeAttribute(IHTMLStyle *iface, BSTR strAttributeName, LONG lFlags, VARIANT_BOOL *pfSuccess)
Definition: htmlstyle.c:2875
static const WCHAR attrBorderTopWidth[]
Definition: htmlstyle.c:73
#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY
Definition: mshtmdid.h:1603
#define DISPID_IHTMLSTYLE_BACKGROUND
Definition: mshtmdid.h:1597
static HRESULT WINAPI HTMLStyle_toString(IHTMLStyle *iface, BSTR *String)
Definition: htmlstyle.c:2932
#define DISPID_IHTMLSTYLE_LINEHEIGHT
Definition: mshtmdid.h:1615
#define ATTR_REMOVE_COMMA
Definition: htmlstyle.h:143
#define DISPID_IHTMLSTYLE_BORDERCOLOR
Definition: mshtmdid.h:1631
static HRESULT WINAPI HTMLStyle_put_pixelTop(IHTMLStyle *iface, LONG v)
Definition: htmlstyle.c:2452
static WCHAR String[]
Definition: stringtable.c:55
DWORD LCID
Definition: nls.h:13
#define DISPID_IHTMLSTYLE_TEXTALIGN
Definition: mshtmdid.h:1668
static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1003
OLECHAR * BSTR
Definition: compat.h:1934
HRESULT set_elem_style(HTMLElement *elem, styleid_t styleid, const WCHAR *val)
Definition: htmlstyle.c:3233
static HRESULT WINAPI HTMLStyle_put_fontFamily(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:835
static HRESULT WINAPI HTMLStyle_get_borderLeftColor(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1870
static HRESULT WINAPI HTMLStyle_get_borderRight(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1750
static HRESULT WINAPI HTMLStyle_get_borderBottomWidth(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1938
static HRESULT WINAPI HTMLStyle_put_paddingLeft(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1675
static HRESULT WINAPI HTMLStyle_GetIDsOfNames(IHTMLStyle *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: htmlstyle.c:817
static HRESULT WINAPI HTMLStyle_get_textDecoration(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1346
HRESULT set_nsstyle_attr(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, const WCHAR *value, DWORD flags)
Definition: htmlstyle.c:382
static LPOLESTR
Definition: stg_prop.c:27
#define DISPID_IHTMLSTYLE_TEXTINDENT
Definition: mshtmdid.h:1614
static HRESULT get_nsstyle_attr_nsval(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, nsAString *value)
Definition: htmlstyle.c:465
static HRESULT WINAPI HTMLStyle_get_whiteSpace(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:2269
#define E_FAIL
Definition: ddrawi.h:102
#define DISPID_IHTMLSTYLE_PADDING
Definition: mshtmdid.h:1625
static const WCHAR attrBackgroundColor[]
Definition: htmlstyle.c:25
static HRESULT WINAPI HTMLStyle_get_border(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1720
int32_t INT
Definition: typedefs.h:56
short VARIANT_BOOL
Definition: compat.h:1931
Definition: send.c:47
static HRESULT WINAPI HTMLStyle_put_borderTopWidth(IHTMLStyle *iface, VARIANT v)
Definition: htmlstyle.c:1893
#define DISPID_IHTMLSTYLE2_BOTTOM
Definition: mshtmdid.h:1681
static HRESULT get_nsstyle_pos(HTMLStyle *This, styleid_t sid, float *p)
Definition: htmlstyle.c:639
#define DISPID_IHTMLSTYLE2_OVERFLOWX
Definition: mshtmdid.h:1702
#define DISPID_IHTMLSTYLE_COLOR
Definition: mshtmdid.h:1596
static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, void **ppv)
Definition: htmlstyle.c:744
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static HRESULT WINAPI HTMLStyle_put_pixelLeft(IHTMLStyle *iface, LONG v)
Definition: htmlstyle.c:2470
#define DISPID_IHTMLSTYLE_BORDERLEFTCOLOR
Definition: mshtmdid.h:1635
#define DISPID_IHTMLSTYLE_WIDTH
Definition: mshtmdid.h:1664
HRESULT get_nsstyle_attr(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, BSTR *p, DWORD flags)
Definition: htmlstyle.c:529
#define V_I4(A)
Definition: oleauto.h:247
WINE_UNICODE_INLINE int strncmpW(const WCHAR *str1, const WCHAR *str2, int n)
Definition: unicode.h:235
#define ATTR_FIX_URL
Definition: htmlstyle.h:140
static HRESULT set_style_pxattr(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, LONG value)
Definition: htmlstyle.c:630
static const WCHAR attrVisibility[]
Definition: htmlstyle.c:180
static const WCHAR attrBottom[]
Definition: htmlstyle.c:77
const char * debugstr_mshtml_guid(const GUID *iid)
Definition: main.c:535
static HRESULT WINAPI HTMLStyle_get_top(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:2287
HRESULT get_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, VARIANT *p, DWORD flags)
Definition: htmlstyle.c:547
#define NS_OK
static void set_opacity(HTMLStyle *This, const WCHAR *val)
Definition: htmlstyle.c:2650
#define DISPID_IHTMLSTYLE_BORDERLEFTWIDTH
Definition: mshtmdid.h:1640
void HTMLStyle2_Init(HTMLStyle *) DECLSPEC_HIDDEN
Definition: htmlstyle2.c:620
static const WCHAR attrMinHeight[]
Definition: htmlstyle.c:136
#define DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH
Definition: mshtmdid.h:1639
static HRESULT WINAPI HTMLStyle_put_borderBottom(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1757
static const WCHAR attrFontWeight[]
Definition: htmlstyle.c:106
static const WCHAR attrListStylePosition[]
Definition: htmlstyle.c:120
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define DISPID_IHTMLSTYLE_BORDERWIDTH
Definition: mshtmdid.h:1636
#define DISPID_IHTMLSTYLE_BACKGROUNDCOLOR
Definition: mshtmdid.h:1669
static HRESULT WINAPI HTMLStyle_put_pageBreakBefore(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2372
static HRESULT WINAPI HTMLStyle_put_borderRight(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1743
static HRESULT WINAPI HTMLStyle_put_backgroundPosition(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1095
static HRESULT WINAPI HTMLStyle_get_listStyleType(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:2201
static const WCHAR attrBorderBottomColor[]
Definition: htmlstyle.c:41
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static const WCHAR attrPosition[]
Definition: htmlstyle.c:162
static const WCHAR szNormal[]
Definition: htmlstyle.c:295
HRESULT remove_attribute(DispatchEx *This, DISPID id, VARIANT_BOOL *success)
Definition: dispex.c:1249
GLenum const GLfloat * params
Definition: glext.h:5645
static HRESULT WINAPI HTMLStyle_get_borderLeftWidth(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1954
static const WCHAR attrOverflowX[]
Definition: htmlstyle.c:144
static HRESULT WINAPI HTMLStyle_GetTypeInfo(IHTMLStyle *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: htmlstyle.c:810
static HRESULT set_style_attr(HTMLStyle *This, styleid_t sid, LPCWSTR value, DWORD flags)
Definition: htmlstyle.c:460
static const WCHAR attrDisplay[]
Definition: htmlstyle.c:92
unsigned int BOOL
Definition: ntddk_ex.h:94
static HRESULT WINAPI HTMLStyle_get_backgroundPositionY(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1263
long LONG
Definition: pedump.c:60
static HRESULT WINAPI HTMLStyle_get_borderLeftStyle(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:2077
static HRESULT WINAPI HTMLStyle_get_textDecorationNone(IHTMLStyle *iface, VARIANT_BOOL *p)
Definition: htmlstyle.c:1364
#define DISPID_IHTMLSTYLE_PAGEBREAKBEFORE
Definition: mshtmdid.h:1658
#define DISPID_IHTMLSTYLE4_MINHEIGHT
Definition: mshtmdid.h:1725
static const WCHAR valUnderline[]
Definition: htmlstyle.c:293
static HRESULT WINAPI HTMLStyle_get_left(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:2305
static const WCHAR attrLetterSpacing[]
Definition: htmlstyle.c:112
#define e
Definition: ke_i.h:82
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
static HRESULT WINAPI HTMLStyle_put_padding(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1693
#define debugstr_w
Definition: kernel32.h:32
static HRESULT WINAPI HTMLStyle_get_posWidth(IHTMLStyle *iface, float *p)
Definition: htmlstyle.c:2575
static size_t elem
Definition: string.c:68
static HRESULT WINAPI HTMLStyle_get_marginTop(IHTMLStyle *iface, VARIANT *p)
Definition: htmlstyle.c:1544
GLenum GLint ref
Definition: glext.h:6028
static HRESULT WINAPI HTMLStyle_get_pixelHeight(IHTMLStyle *iface, LONG *p)
Definition: htmlstyle.c:2515
static HRESULT WINAPI HTMLStyle_get_textDecorationOverline(IHTMLStyle *iface, VARIANT_BOOL *p)
Definition: htmlstyle.c:1400
static HRESULT WINAPI HTMLStyle_get_textDecorationBlink(IHTMLStyle *iface, VARIANT_BOOL *p)
Definition: htmlstyle.c:1436
#define FIXME(fmt,...)
Definition: debug.h:110
static const WCHAR attrBorderBottom[]
Definition: htmlstyle.c:39
#define DISPID_IHTMLSTYLE_PADDINGLEFT
Definition: mshtmdid.h:1624
static PVOID ptr
Definition: dispmode.c:27
static HRESULT WINAPI HTMLStyle_put_styleFloat(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:2120
static HRESULT WINAPI HTMLStyle_put_backgroundAttachment(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1077
static HRESULT WINAPI HTMLStyle_get_borderBottom(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1764
static HRESULT WINAPI HTMLStyle_put_borderLeft(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1771
#define E_INVALIDARG
Definition: ddrawi.h:101
#define DISPID_IHTMLSTYLE_TOP
Definition: mshtmdid.h:1666
const WCHAR * str
static const WCHAR attrPaddingBottom[]
Definition: htmlstyle.c:150
static HRESULT WINAPI HTMLStyle_get_listStyle(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:2251
static const WCHAR attrZIndex[]
Definition: htmlstyle.c:190
#define DISPID_IHTMLSTYLE_BORDERRIGHT
Definition: mshtmdid.h:1628
static const WCHAR attrBackgroundAttachment[]
Definition: htmlstyle.c:23
static const WCHAR attrPaddingTop[]
Definition: htmlstyle.c:156
static const WCHAR attrWhiteSpace[]
Definition: htmlstyle.c:182
smooth NULL
Definition: ftsmooth.c:416
static HRESULT WINAPI HTMLStyle_get_pixelWidth(IHTMLStyle *iface, LONG *p)
Definition: htmlstyle.c:2497
static const WCHAR attrTextAlign[]
Definition: htmlstyle.c:168
static const WCHAR attrColor[]
Definition: htmlstyle.c:86
static const WCHAR attrFontStyle[]
Definition: htmlstyle.c:102
#define DISPID_IHTMLSTYLE_FONTVARIANT
Definition: mshtmdid.h:1592
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:241
#define DISPID_IHTMLSTYLE_WHITESPACE
Definition: mshtmdid.h:1654
static HRESULT WINAPI HTMLStyle_get_backgroundRepeat(IHTMLStyle *iface, BSTR *p)
Definition: htmlstyle.c:1068
#define DISPID_IHTMLSTYLE_MARGINTOP
Definition: mshtmdid.h:1616
static HRESULT WINAPI HTMLStyle_put_backgroundImage(IHTMLStyle *iface, BSTR v)
Definition: htmlstyle.c:1030
static const WCHAR attrListStyle[]
Definition: htmlstyle.c:116
static HRESULT get_style_from_elem(HTMLElement *elem, nsIDOMCSSStyleDeclaration **ret)
Definition: htmlstyle.c:3164
static const WCHAR attrTextIndent[]
Definition: htmlstyle.c:172
static const WCHAR attrBorderRightWidth[]
Definition: htmlstyle.c:63
static LPWSTR fix_url_value(LPCWSTR val)
Definition: htmlstyle.c:363
DISPID dispid
Definition: htmlstyle.c:198
#define DISPATCH_PROPERTYPUT
Definition: oleauto.h:1008
static const WCHAR attrBorderLeft[]
Definition: htmlstyle.c:49