Reviewed by Darin.
[WebKit-https.git] / WebCore / kwq / DOM-CSS.mm
1 /*
2  * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source exceptionCode must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "DOMCSS.h"
27
28 #include <objc/objc-class.h>
29
30 #import "css_base.h"
31 #import "css_ruleimpl.h"
32 #import "css_stylesheetimpl.h"
33 #import "css_valueimpl.h"
34 #import "css_value.h"
35 #import "dom_string.h"
36 #import "KWQColor.h"
37 #import "shared.h"
38 #import "dom_stringimpl.h"
39 #import "dom2_viewsimpl.h"
40
41 #import "DOMInternal.h"
42 #import "KWQAssertions.h"
43 #import "KWQFoundationExtras.h"
44
45 using DOM::AbstractViewImpl;
46 using DOM::CounterImpl;
47 using DOM::CSSCharsetRuleImpl;
48 using DOM::CSSFontFaceRuleImpl;
49 using DOM::CSSImportRuleImpl;
50 using DOM::CSSMediaRuleImpl;
51 using DOM::CSSPageRuleImpl;
52 using DOM::CSSPrimitiveValueImpl;
53 using DOM::CSSRuleImpl;
54 using DOM::CSSRuleListImpl;
55 using DOM::CSSStyleDeclarationImpl;
56 using DOM::CSSStyleRuleImpl;
57 using DOM::CSSStyleSheetImpl;
58 using DOM::CSSValueImpl;
59 using DOM::CSSValueListImpl;
60 using DOM::DOMString;
61 using DOM::MediaListImpl;
62 using DOM::RectImpl;
63 using DOM::StyleSheetImpl;
64 using DOM::StyleSheetListImpl;
65
66 @interface DOMStyleSheet (WebCoreInternal)
67 + (DOMStyleSheet *)_DOMStyleSheetWithImpl:(StyleSheetImpl *)impl;
68 @end
69
70 @interface DOMMediaList (WebCoreInternal)
71 + (DOMMediaList *)_mediaListWithImpl:(MediaListImpl *)impl;
72 @end
73
74 @interface DOMCSSRuleList (WebCoreInternal)
75 + (DOMCSSRuleList *)_ruleListWithImpl:(CSSRuleListImpl *)impl;
76 @end
77
78 @interface DOMCSSRule (WebCoreInternal)
79 + (DOMCSSRule *)_ruleWithImpl:(CSSRuleImpl *)impl;
80 @end
81
82 @interface DOMCSSValue (WebCoreInternal)
83 + (DOMCSSValue *)_valueWithImpl:(CSSValueImpl *)impl;
84 @end
85
86 @interface DOMRGBColor (WebCoreInternal)
87 + (DOMRGBColor *)_RGBColorWithRGB:(QRgb)value;
88 @end
89
90 @interface DOMRect (WebCoreInternal)
91 + (DOMRect *)_rectWithImpl:(RectImpl *)impl;
92 @end
93
94 @interface DOMCounter (WebCoreInternal)
95 + (DOMCounter *)_counterWithImpl:(CounterImpl *)impl;
96 @end
97
98 static inline int getPropertyID(NSString *string)
99 {
100     //use a fixed sized buffer to avoid malloc() allocations done by -[NSString UTF8String]
101     static char buffer[1024];
102     BOOL success = CFStringGetCString((CFStringRef)string, buffer, 1023, kCFStringEncodingUTF8);
103    
104     // CFStringGetCString returns false if conversion isn't possible
105     // (due to conversion error, or not enough space in the provided buffer)
106     // fall back to UTF8String instead
107     if (!success) {
108         const char *s = [string UTF8String];
109         return DOM::getPropertyID(s, strlen(s));
110     }
111
112     return DOM::getPropertyID(buffer, strlen(buffer));
113 }
114
115 //------------------------------------------------------------------------------------------
116 // DOMStyleSheet
117
118 @implementation DOMStyleSheet
119
120 - (void)dealloc
121 {
122     if (_internal) {
123         DOM_cast<StyleSheetImpl *>(_internal)->deref();
124     }
125     [super dealloc];
126 }
127
128 - (void)finalize
129 {
130     if (_internal) {
131         DOM_cast<StyleSheetImpl *>(_internal)->deref();
132     }
133     [super finalize];
134 }
135
136 - (StyleSheetImpl *)_DOMStyleSheetImpl
137 {
138     return DOM_cast<StyleSheetImpl *>(_internal);
139 }
140
141 - (NSString *)type
142 {
143     return [self _DOMStyleSheetImpl]->type();
144 }
145
146 - (BOOL)disabled
147 {
148     return [self _DOMStyleSheetImpl]->disabled();
149 }
150
151 - (void)setDisabled:(BOOL)disabled
152 {
153     [self _DOMStyleSheetImpl]->setDisabled(disabled);
154 }
155
156 - (DOMNode *)ownerNode
157 {
158     return [DOMNode _nodeWithImpl:[self _DOMStyleSheetImpl]->ownerNode()];
159 }
160
161 - (DOMStyleSheet *)parentStyleSheet
162 {
163     return [DOMStyleSheet _DOMStyleSheetWithImpl:[self _DOMStyleSheetImpl]->parentStyleSheet()];
164 }
165
166 - (NSString *)href
167 {
168     return [self _DOMStyleSheetImpl]->href();
169 }
170
171 - (NSString *)title
172 {
173     return [self _DOMStyleSheetImpl]->title();
174 }
175
176 - (DOMMediaList *)media
177 {
178     return nil;
179 }
180
181 @end
182
183 @implementation DOMStyleSheet (WebCoreInternal)
184
185 - (id)_initWithDOMStyleSheetImpl:(StyleSheetImpl *)impl
186 {
187     [super _init];
188     _internal = DOM_cast<DOMObjectInternal *>(impl);
189     impl->ref();
190     addDOMWrapper(self, impl);
191     return self;
192 }
193
194 + (DOMStyleSheet *)_DOMStyleSheetWithImpl:(StyleSheetImpl *)impl
195 {
196     if (!impl)
197         return nil;
198     
199     id cachedInstance;
200     cachedInstance = getDOMWrapper(impl);
201     if (cachedInstance)
202         return [[cachedInstance retain] autorelease];
203     
204     return [[[self alloc] _initWithDOMStyleSheetImpl:impl] autorelease];
205 }
206
207 @end
208
209 //------------------------------------------------------------------------------------------
210 // DOMStyleSheetList
211
212 @implementation DOMStyleSheetList
213
214 - (void)dealloc
215 {
216     if (_internal) {
217         DOM_cast<StyleSheetListImpl *>(_internal)->deref();
218     }
219     [super dealloc];
220 }
221
222 - (void)finalize
223 {
224     if (_internal) {
225         DOM_cast<StyleSheetListImpl *>(_internal)->deref();
226     }
227     [super finalize];
228 }
229
230 - (StyleSheetListImpl *)_styleSheetListImpl
231 {
232     return DOM_cast<StyleSheetListImpl *>(_internal);
233 }
234
235 - (unsigned long)length
236 {
237     return [self _styleSheetListImpl]->length();
238 }
239
240 - (DOMStyleSheet *)item:(unsigned long)index
241 {
242     return [DOMStyleSheet _DOMStyleSheetWithImpl:[self _styleSheetListImpl]->item(index)];
243 }
244
245 @end
246
247 @implementation DOMStyleSheetList (WebCoreInternal)
248
249 - (id)_initWithStyleSheetListImpl:(StyleSheetListImpl *)impl
250 {
251     [super _init];
252     _internal = DOM_cast<DOMObjectInternal *>(impl);
253     impl->ref();
254     addDOMWrapper(self, impl);
255     return self;
256 }
257
258 + (DOMStyleSheetList *)_styleSheetListWithImpl:(StyleSheetListImpl *)impl
259 {
260     if (!impl)
261         return nil;
262     
263     id cachedInstance;
264     cachedInstance = getDOMWrapper(impl);
265     if (cachedInstance)
266         return [[cachedInstance retain] autorelease];
267     
268     return [[[self alloc] _initWithStyleSheetListImpl:impl] autorelease];
269 }
270
271 @end
272
273 //------------------------------------------------------------------------------------------
274 // DOMCSSStyleSheet
275
276 @implementation DOMCSSStyleSheet
277
278 - (void)dealloc
279 {
280     if (_internal) {
281         DOM_cast<CSSStyleSheetImpl *>(_internal)->deref();
282     }
283     [super dealloc];
284 }
285
286 - (void)finalize
287 {
288     if (_internal) {
289         DOM_cast<CSSStyleSheetImpl *>(_internal)->deref();
290     }
291     [super finalize];
292 }
293
294 - (CSSStyleSheetImpl *)_CSSStyleSheetImpl
295 {
296     return DOM_cast<CSSStyleSheetImpl *>(_internal);
297 }
298
299 - (DOMCSSRule *)ownerRule
300 {
301     return [DOMCSSRule _ruleWithImpl:[self _CSSStyleSheetImpl]->ownerRule()];
302 }
303
304 - (DOMCSSRuleList *)cssRules
305 {
306     return [DOMCSSRuleList _ruleListWithImpl:[self _CSSStyleSheetImpl]->cssRules().handle()];
307 }
308
309 - (unsigned long)insertRule:(NSString *)rule :(unsigned long)index
310 {
311     int exceptionCode;
312     unsigned long result = [self _CSSStyleSheetImpl]->insertRule(rule, index, exceptionCode);
313     raiseOnDOMError(exceptionCode);
314     return result;
315 }
316
317 - (void)deleteRule:(unsigned long)index
318 {
319     int exceptionCode;
320     [self _CSSStyleSheetImpl]->deleteRule(index, exceptionCode);
321     raiseOnDOMError(exceptionCode);
322 }
323
324 @end
325
326 @implementation DOMCSSStyleSheet (WebCoreInternal)
327
328 - (id)_initWithCSSStyleSheetImpl:(CSSStyleSheetImpl *)impl
329 {
330     [super _init];
331     _internal = DOM_cast<DOMObjectInternal *>(impl);
332     impl->ref();
333     addDOMWrapper(self, impl);
334     return self;
335 }
336
337 + (DOMCSSStyleSheet *)_CSSStyleSheetWithImpl:(CSSStyleSheetImpl *)impl
338 {
339     if (!impl)
340         return nil;
341     
342     id cachedInstance;
343     cachedInstance = getDOMWrapper(impl);
344     if (cachedInstance)
345         return [[cachedInstance retain] autorelease];
346     
347     return [[[self alloc] _initWithCSSStyleSheetImpl:impl] autorelease];
348 }
349
350 @end
351
352 //------------------------------------------------------------------------------------------
353 // DOMMediaList
354
355 @implementation DOMMediaList
356
357 - (void)dealloc
358 {
359     if (_internal) {
360         DOM_cast<MediaListImpl *>(_internal)->deref();
361     }
362     [super dealloc];
363 }
364
365 - (void)finalize
366 {
367     if (_internal) {
368         DOM_cast<MediaListImpl *>(_internal)->deref();
369     }
370     [super finalize];
371 }
372
373 - (MediaListImpl *)_mediaListImpl
374 {
375     return DOM_cast<MediaListImpl *>(_internal);
376 }
377
378 - (NSString *)mediaText
379 {
380     return [self _mediaListImpl]->mediaText();
381 }
382
383 - (void)setMediaText:(NSString *)mediaText
384 {
385     [self _mediaListImpl]->setMediaText(mediaText);
386 }
387
388 - (unsigned long)length
389 {
390     return [self _mediaListImpl]->length();
391 }
392
393 - (NSString *)item:(unsigned long)index
394 {
395     return [self _mediaListImpl]->item(index);
396 }
397
398 - (void)deleteMedium:(NSString *)oldMedium
399 {
400     [self _mediaListImpl]->deleteMedium(oldMedium);
401 }
402
403 - (void)appendMedium:(NSString *)newMedium
404 {
405     [self _mediaListImpl]->appendMedium(newMedium);
406 }
407
408 @end
409
410 @implementation DOMMediaList (WebCoreInternal)
411
412 - (id)_initWithMediaListImpl:(MediaListImpl *)impl
413 {
414     [super _init];
415     _internal = DOM_cast<DOMObjectInternal *>(impl);
416     impl->ref();
417     addDOMWrapper(self, impl);
418     return self;
419 }
420
421 + (DOMMediaList *)_mediaListWithImpl:(MediaListImpl *)impl
422 {
423     if (!impl)
424         return nil;
425     
426     id cachedInstance;
427     cachedInstance = getDOMWrapper(impl);
428     if (cachedInstance)
429         return [[cachedInstance retain] autorelease];
430     
431     return [[[self alloc] _initWithMediaListImpl:impl] autorelease];
432 }
433
434 @end
435
436 //------------------------------------------------------------------------------------------
437 // DOMCSSRuleList
438
439 @implementation DOMCSSRuleList
440
441 - (void)dealloc
442 {
443     if (_internal) {
444         DOM_cast<CSSRuleListImpl *>(_internal)->deref();
445     }
446     [super dealloc];
447 }
448
449 - (void)finalize
450 {
451     if (_internal) {
452         DOM_cast<CSSRuleListImpl *>(_internal)->deref();
453     }
454     [super finalize];
455 }
456
457 - (CSSRuleListImpl *)_ruleListImpl
458 {
459     return DOM_cast<CSSRuleListImpl *>(_internal);
460 }
461
462 - (unsigned long)length
463 {
464     return [self _ruleListImpl]->length();
465 }
466
467 - (DOMCSSRule *)item:(unsigned long)index
468 {
469     return [DOMCSSRule _ruleWithImpl:[self _ruleListImpl]->item(index)];
470 }
471
472 @end
473
474 @implementation DOMCSSRuleList (WebCoreInternal)
475
476 - (id)_initWithRuleListImpl:(CSSRuleListImpl *)impl
477 {
478     [super _init];
479     _internal = DOM_cast<DOMObjectInternal *>(impl);
480     impl->ref();
481     addDOMWrapper(self, impl);
482     return self;
483 }
484
485 + (DOMCSSRuleList *)_ruleListWithImpl:(CSSRuleListImpl *)impl
486 {
487     if (!impl)
488         return nil;
489     
490     id cachedInstance;
491     cachedInstance = getDOMWrapper(impl);
492     if (cachedInstance)
493         return [[cachedInstance retain] autorelease];
494     
495     return [[[self alloc] _initWithRuleListImpl:impl] autorelease];
496 }
497
498 @end
499
500 //------------------------------------------------------------------------------------------
501 // DOMCSSRule
502
503 @implementation DOMCSSRule
504
505 - (void)dealloc
506 {
507     if (_internal) {
508         DOM_cast<CSSRuleImpl *>(_internal)->deref();
509     }
510     [super dealloc];
511 }
512
513 - (void)finalize
514 {
515     if (_internal) {
516         DOM_cast<CSSRuleImpl *>(_internal)->deref();
517     }
518     [super finalize];
519 }
520
521 - (CSSRuleImpl *)_ruleImpl
522 {
523     return DOM_cast<CSSRuleImpl *>(_internal);
524 }
525
526 - (unsigned short)type
527 {
528     return [self _ruleImpl]->type();
529 }
530
531 - (NSString *)cssText
532 {
533     return [self _ruleImpl]->cssText();
534 }
535
536 - (void)setCssText:(NSString *)cssText
537 {
538     [self _ruleImpl]->setCssText(cssText);
539 }
540
541 - (DOMCSSStyleSheet *)parentStyleSheet
542 {
543     return [DOMCSSStyleSheet _CSSStyleSheetWithImpl:[self _ruleImpl]->parentStyleSheet()];
544 }
545
546 - (DOMCSSRule *)parentRule
547 {
548     return [DOMCSSRule _ruleWithImpl:[self _ruleImpl]->parentRule()];
549 }
550
551 @end
552
553 @implementation DOMCSSRule (WebCoreInternal)
554
555 - (id)_initWithRuleImpl:(CSSRuleImpl *)impl
556 {
557     [super _init];
558     _internal = DOM_cast<DOMObjectInternal *>(impl);
559     impl->ref();
560     addDOMWrapper(self, impl);
561     return self;
562 }
563
564 + (DOMCSSRule *)_ruleWithImpl:(CSSRuleImpl *)impl
565 {
566     if (!impl)
567         return nil;
568     
569     id cachedInstance;
570     cachedInstance = getDOMWrapper(impl);
571     if (cachedInstance)
572         return [[cachedInstance retain] autorelease];
573
574     Class wrapperClass = nil;
575     switch (impl->type()) {
576         case DOM_UNKNOWN_RULE:
577             wrapperClass = [DOMCSSRule class];
578             break;
579         case DOM_STYLE_RULE:
580             wrapperClass = [DOMCSSStyleRule class];
581             break;
582         case DOM_CHARSET_RULE:
583             wrapperClass = [DOMCSSCharsetRule class];
584             break;
585         case DOM_IMPORT_RULE:
586             wrapperClass = [DOMCSSImportRule class];
587             break;
588         case DOM_MEDIA_RULE:
589             wrapperClass = [DOMCSSMediaRule class];
590             break;
591         case DOM_FONT_FACE_RULE:
592             wrapperClass = [DOMCSSFontFaceRule class];
593             break;
594         case DOM_PAGE_RULE:
595             wrapperClass = [DOMCSSPageRule class];
596             break;
597     }
598     return [[[wrapperClass alloc] _initWithRuleImpl:impl] autorelease];
599 }
600
601 @end
602
603 //------------------------------------------------------------------------------------------
604 // DOMCSSStyleRule
605
606 @implementation DOMCSSStyleRule
607
608 - (CSSStyleRuleImpl *)_styleRuleImpl
609 {
610     return static_cast<CSSStyleRuleImpl *>(DOM_cast<CSSRuleImpl *>(_internal));
611 }
612
613 - (NSString *)selectorText
614 {
615     return [self _styleRuleImpl]->selectorText();
616 }
617
618 - (void)setSelectorText:(NSString *)selectorText
619 {
620     [self _styleRuleImpl]->setSelectorText(selectorText);
621 }
622
623 - (DOMCSSStyleDeclaration *)style
624 {
625     return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:[self _styleRuleImpl]->style()];
626 }
627
628 @end
629
630 //------------------------------------------------------------------------------------------
631 // DOMCSSMediaRule
632
633 @implementation DOMCSSMediaRule
634
635 - (CSSMediaRuleImpl *)_mediaRuleImpl
636 {
637     return static_cast<CSSMediaRuleImpl *>(DOM_cast<CSSRuleImpl *>(_internal));
638 }
639
640 - (DOMMediaList *)media
641 {
642     return [DOMMediaList _mediaListWithImpl:[self _mediaRuleImpl]->media()];
643 }
644
645 - (DOMCSSRuleList *)cssRules
646 {
647     return [DOMCSSRuleList _ruleListWithImpl:[self _mediaRuleImpl]->cssRules()];
648 }
649
650 - (unsigned long)insertRule:(NSString *)rule :(unsigned long)index
651 {
652     return [self _mediaRuleImpl]->insertRule(rule, index);
653 }
654
655 - (void)deleteRule:(unsigned long)index
656 {
657     [self _mediaRuleImpl]->deleteRule(index);
658 }
659
660 @end
661
662 //------------------------------------------------------------------------------------------
663 // DOMCSSFontFaceRule
664
665 @implementation DOMCSSFontFaceRule
666
667 - (CSSFontFaceRuleImpl *)_fontFaceRuleImpl
668 {
669     return static_cast<CSSFontFaceRuleImpl *>(DOM_cast<CSSRuleImpl *>(_internal));
670 }
671
672 - (DOMCSSStyleDeclaration *)style
673 {
674     return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:[self _fontFaceRuleImpl]->style()];
675 }
676
677 @end
678
679 //------------------------------------------------------------------------------------------
680 // DOMCSSPageRule
681
682 @implementation DOMCSSPageRule
683
684 - (CSSPageRuleImpl *)_pageRuleImpl
685 {
686     return static_cast<CSSPageRuleImpl *>(DOM_cast<CSSRuleImpl *>(_internal));
687 }
688
689 - (NSString *)selectorText
690 {
691     return [self _pageRuleImpl]->selectorText();
692 }
693
694 - (void)setSelectorText:(NSString *)selectorText
695 {
696     [self _pageRuleImpl]->setSelectorText(selectorText);
697 }
698
699 - (DOMCSSStyleDeclaration *)style
700 {
701     return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:[self _pageRuleImpl]->style()];
702 }
703
704 @end
705
706 //------------------------------------------------------------------------------------------
707 // DOMCSSImportRule
708
709 @implementation DOMCSSImportRule
710
711 - (CSSImportRuleImpl *)_importRuleImpl
712 {
713     return static_cast<CSSImportRuleImpl *>(DOM_cast<CSSRuleImpl *>(_internal));
714 }
715
716 - (DOMMediaList *)media
717 {
718     return [DOMMediaList _mediaListWithImpl:[self _importRuleImpl]->media()];
719 }
720
721 - (NSString *)href
722 {
723     return [self _importRuleImpl]->href();
724 }
725
726 - (DOMCSSStyleSheet *)styleSheet
727 {
728     return [DOMCSSStyleSheet _CSSStyleSheetWithImpl:[self _importRuleImpl]->styleSheet()];
729 }
730
731 @end
732
733 //------------------------------------------------------------------------------------------
734 // DOMCSSCharsetRule
735
736 @implementation DOMCSSCharsetRule
737
738 - (CSSCharsetRuleImpl *)_importRuleImpl
739 {
740     return static_cast<CSSCharsetRuleImpl *>(DOM_cast<CSSRuleImpl *>(_internal));
741 }
742
743 - (NSString *)encoding
744 {
745     return [self _importRuleImpl]->encoding();
746 }
747
748 @end
749
750 //------------------------------------------------------------------------------------------
751 // DOMCSSUnknownRule
752
753 @implementation DOMCSSUnknownRule
754
755 @end
756
757 //------------------------------------------------------------------------------------------
758 // DOMCSSStyleDeclaration
759
760 @implementation DOMCSSStyleDeclaration
761
762 - (void)dealloc
763 {
764     if (_internal) {
765         DOM_cast<CSSStyleDeclarationImpl *>(_internal)->deref();
766     }
767     [super dealloc];
768 }
769
770 - (void)finalize
771 {
772     if (_internal) {
773         DOM_cast<CSSStyleDeclarationImpl *>(_internal)->deref();
774     }
775     [super finalize];
776 }
777
778 - (NSString *)description
779 {
780     return [NSString stringWithFormat:@"DOMCSSStyleDeclaration: %@", [self cssText]];
781 }
782
783 - (NSString *)cssText
784 {
785     return [self _styleDeclarationImpl]->cssText();
786 }
787
788 - (void)setCssText:(NSString *)cssText
789 {
790     int exceptionCode;
791     [self _styleDeclarationImpl]->setCssText(cssText, exceptionCode);
792     raiseOnDOMError(exceptionCode);
793 }
794
795 - (NSString *)getPropertyValue:(NSString *)propertyName
796 {
797     int propid = getPropertyID(propertyName);
798     if (!propid) 
799         return nil;
800     return [self _styleDeclarationImpl]->getPropertyValue(propid);
801 }
802
803 - (DOMCSSValue *)getPropertyCSSValue:(NSString *)propertyName
804 {
805     int propid = getPropertyID(propertyName);
806     if (!propid) 
807         return nil;
808     return [DOMCSSValue _valueWithImpl:[self _styleDeclarationImpl]->getPropertyCSSValue(propid)];
809 }
810
811 - (NSString *)removeProperty:(NSString *)propertyName
812 {
813     int propid = getPropertyID(propertyName);
814     if (!propid) 
815         return nil;
816     int exceptionCode = 0;
817     DOMString result = [self _styleDeclarationImpl]->removeProperty(propid, exceptionCode);
818     raiseOnDOMError(exceptionCode);
819     return result;
820 }
821
822 - (NSString *)getPropertyPriority:(NSString *)propertyName
823 {
824     int propid = getPropertyID(propertyName);
825     if (!propid) 
826         return nil;
827     if ([self _styleDeclarationImpl]->getPropertyPriority(propid))
828         return @"important";
829     else
830         return @"";
831 }
832
833 - (void)setProperty:(NSString *)propertyName :(NSString *)value :(NSString *)priority
834 {
835     int propid = getPropertyID(propertyName);
836     if (!propid) 
837         return;
838     bool important = strcasecmp(DOMString(priority), "important") == 0;
839     int exceptionCode;
840     [self _styleDeclarationImpl]->setProperty(propid, value, important, exceptionCode);
841     // Can't raise an exception here until we fix the code in Mail that is
842     // trying to set a property on a computed style.  See <rdar://problem/3886832>.
843     //raiseOnDOMError(exceptionCode);
844 }
845
846 - (unsigned long)length
847 {
848     return [self _styleDeclarationImpl]->length();
849 }
850
851 - (NSString *)item:(unsigned long)index
852 {
853     return [self _styleDeclarationImpl]->item(index);
854 }
855
856 - (DOMCSSRule *)parentRule
857 {
858     return [DOMCSSRule _ruleWithImpl:[self _styleDeclarationImpl]->parentRule()];
859 }
860
861 @end
862
863 @implementation DOMCSSStyleDeclaration (WebCoreInternal)
864
865 - (id)_initWithStyleDeclarationImpl:(CSSStyleDeclarationImpl *)impl
866 {
867     [super _init];
868     _internal = DOM_cast<DOMObjectInternal *>(impl);
869     impl->ref();
870     addDOMWrapper(self, impl);
871     return self;
872 }
873
874 + (DOMCSSStyleDeclaration *)_styleDeclarationWithImpl:(CSSStyleDeclarationImpl *)impl
875 {
876     if (!impl)
877         return nil;
878     
879     id cachedInstance;
880     cachedInstance = getDOMWrapper(impl);
881     if (cachedInstance)
882         return [[cachedInstance retain] autorelease];
883     
884     return [[[self alloc] _initWithStyleDeclarationImpl:impl] autorelease];
885 }
886
887 - (CSSStyleDeclarationImpl *)_styleDeclarationImpl
888 {
889     return DOM_cast<CSSStyleDeclarationImpl *>(_internal);
890 }
891
892 @end
893
894 //------------------------------------------------------------------------------------------
895 // DOMCSSValue
896
897 @implementation DOMCSSValue
898
899 - (void)dealloc
900 {
901     if (_internal) {
902         DOM_cast<CSSValueImpl *>(_internal)->deref();
903     }
904     [super dealloc];
905 }
906
907 - (void)finalize
908 {
909     if (_internal) {
910         DOM_cast<CSSValueImpl *>(_internal)->deref();
911     }
912     [super finalize];
913 }
914
915 - (CSSValueImpl *)_valueImpl
916 {
917     return DOM_cast<CSSValueImpl *>(_internal);
918 }
919
920 - (NSString *)cssText
921 {
922     return [self _valueImpl]->cssText();
923 }
924
925 - (void)setCssText:(NSString *)cssText
926 {
927     ERROR("unimplemented");
928 }
929
930 - (unsigned short)cssValueType
931 {
932     return [self _valueImpl]->cssValueType();
933 }
934
935 @end
936
937 @implementation DOMCSSValue (WebCoreInternal)
938
939 - (id)_initWithValueImpl:(CSSValueImpl *)impl
940 {
941     [super _init];
942     _internal = DOM_cast<DOMObjectInternal *>(impl);
943     impl->ref();
944     addDOMWrapper(self, impl);
945     return self;
946 }
947
948 + (DOMCSSValue *)_valueWithImpl:(CSSValueImpl *)impl
949 {
950     if (!impl)
951         return nil;
952     
953     id cachedInstance;
954     cachedInstance = getDOMWrapper(impl);
955     if (cachedInstance)
956         return [[cachedInstance retain] autorelease];
957     
958     Class wrapperClass = nil;
959     switch (impl->cssValueType()) {
960         case DOM_CSS_INHERIT:
961             wrapperClass = [DOMCSSValue class];
962             break;
963         case DOM_CSS_PRIMITIVE_VALUE:
964             wrapperClass = [DOMCSSPrimitiveValue class];
965             break;
966         case DOM_CSS_VALUE_LIST:
967             wrapperClass = [DOMCSSValueList class];
968             break;
969         case DOM_CSS_CUSTOM:
970             wrapperClass = [DOMCSSValue class];
971             break;
972     }
973     return [[[wrapperClass alloc] _initWithValueImpl:impl] autorelease];
974 }
975
976 @end
977
978 //------------------------------------------------------------------------------------------
979 // DOMCSSPrimitiveValue
980
981 @implementation DOMCSSPrimitiveValue
982
983 - (CSSPrimitiveValueImpl *)_primitiveValueImpl
984 {
985     return static_cast<CSSPrimitiveValueImpl *>(DOM_cast<CSSValueImpl *>(_internal));
986 }
987
988 - (unsigned short)primitiveType
989 {
990     return [self _primitiveValueImpl]->primitiveType();
991 }
992
993 - (void)setFloatValue:(unsigned short)unitType :(float)floatValue
994 {
995     int exceptionCode;
996     [self _primitiveValueImpl]->setFloatValue(unitType, floatValue, exceptionCode);
997     raiseOnDOMError(exceptionCode);
998 }
999
1000 - (float)getFloatValue:(unsigned short)unitType
1001 {
1002     return [self _primitiveValueImpl]->getFloatValue(unitType);
1003 }
1004
1005 - (void)setStringValue:(unsigned short)stringType :(NSString *)stringValue
1006 {
1007     int exceptionCode;
1008     DOMString string(stringValue);
1009     [self _primitiveValueImpl]->setStringValue(stringType, string, exceptionCode);
1010     raiseOnDOMError(exceptionCode);
1011 }
1012
1013 - (NSString *)getStringValue
1014 {
1015     return DOMString([self _primitiveValueImpl]->getStringValue());
1016 }
1017
1018 - (DOMCounter *)getCounterValue
1019 {
1020     return [DOMCounter _counterWithImpl:[self _primitiveValueImpl]->getCounterValue()];
1021 }
1022
1023 - (DOMRect *)getRectValue
1024 {
1025     return [DOMRect _rectWithImpl:[self _primitiveValueImpl]->getRectValue()];
1026 }
1027
1028 - (DOMRGBColor *)getRGBColorValue
1029 {
1030     return [DOMRGBColor _RGBColorWithRGB:[self _primitiveValueImpl]->getRGBColorValue()];
1031 }
1032
1033 @end
1034
1035 //------------------------------------------------------------------------------------------
1036 // DOMCSSValueList
1037
1038 @implementation DOMCSSValueList
1039
1040 - (CSSValueListImpl *)_valueListImpl
1041 {
1042     return static_cast<CSSValueListImpl *>(DOM_cast<CSSValueImpl *>(_internal));
1043 }
1044
1045 - (unsigned long)length
1046 {
1047     return [self _valueListImpl]->length();
1048 }
1049
1050 - (DOMCSSValue *)item:(unsigned long)index
1051 {
1052     return [DOMCSSValue _valueWithImpl:[self _valueListImpl]->item(index)];
1053 }
1054
1055 @end
1056
1057 //------------------------------------------------------------------------------------------
1058 // DOMRGBColor
1059
1060 static CFMutableDictionaryRef wrapperCache = NULL;
1061
1062 id getWrapperForRGB(QRgb value)
1063 {
1064     if (!wrapperCache)
1065         return nil;
1066     return (id)CFDictionaryGetValue(wrapperCache, reinterpret_cast<const void *>(value));
1067 }
1068
1069 void setWrapperForRGB(id wrapper, QRgb value)
1070 {
1071     if (!wrapperCache) {
1072         // No need to retain/free either impl key, or id value.  Items will be removed
1073         // from the cache in dealloc methods.
1074         wrapperCache = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
1075     }
1076     CFDictionarySetValue(wrapperCache, reinterpret_cast<const void *>(value), wrapper);
1077 }
1078
1079 void removeWrapperForRGB(QRgb value)
1080 {
1081     if (!wrapperCache)
1082         return;
1083     CFDictionaryRemoveValue(wrapperCache, reinterpret_cast<const void *>(value));
1084 }
1085
1086 @implementation DOMRGBColor
1087
1088 - (void)dealloc
1089 {
1090     removeWrapperForRGB(reinterpret_cast<QRgb>(_internal));
1091     [super dealloc];
1092 }
1093
1094 - (void)finalize
1095 {
1096     removeWrapperForRGB(reinterpret_cast<QRgb>(_internal));
1097     [super finalize];
1098 }
1099
1100 - (DOMCSSPrimitiveValue *)red
1101 {
1102     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1103     int value = (rgb >> 16) & 0xFF;
1104     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1105 }
1106
1107 - (DOMCSSPrimitiveValue *)green
1108 {
1109     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1110     int value = (rgb >> 8) & 0xFF;
1111     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1112 }
1113
1114 - (DOMCSSPrimitiveValue *)blue
1115 {
1116     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1117     int value = rgb & 0xFF;
1118     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1119 }
1120
1121 - (id)copyWithZone:(NSZone *)zone
1122 {
1123     return [self retain];
1124 }
1125
1126 @end
1127
1128 @implementation DOMRGBColor (WebCoreInternal)
1129
1130 - (id)_initWithRGB:(QRgb)value
1131 {
1132     [super _init];
1133     _internal = reinterpret_cast<DOMObjectInternal *>(value);
1134     setWrapperForRGB(self, value);
1135     return self;
1136 }
1137
1138 + (DOMRGBColor *)_RGBColorWithRGB:(QRgb)value
1139 {
1140     id cachedInstance;
1141     cachedInstance = getWrapperForRGB(value);
1142     if (cachedInstance)
1143         return [[cachedInstance retain] autorelease];
1144     
1145     return [[[self alloc] _initWithRGB:value] autorelease];
1146 }
1147
1148 @end
1149
1150 @implementation DOMRGBColor (DOMRGBColorExtensions)
1151
1152 - (DOMCSSPrimitiveValue *)alpha
1153 {
1154     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1155     float value = (float)qAlpha(rgb) / 0xFF;
1156     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1157     
1158 }
1159
1160 @end
1161
1162 @implementation DOMRGBColor (WebPrivate)
1163
1164 - (NSColor *)_color
1165 {
1166     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1167     return QColor(rgb).getNSColor();
1168 }
1169
1170 @end
1171
1172
1173 //------------------------------------------------------------------------------------------
1174 // DOMRect
1175
1176 @implementation DOMRect
1177
1178 - (void)dealloc
1179 {
1180     if (_internal) {
1181         DOM_cast<RectImpl *>(_internal)->deref();
1182     }
1183     [super dealloc];
1184 }
1185
1186 - (void)finalize
1187 {
1188     if (_internal) {
1189         DOM_cast<RectImpl *>(_internal)->deref();
1190     }
1191     [super finalize];
1192 }
1193
1194 - (RectImpl *)_rectImpl
1195 {
1196     return DOM_cast<RectImpl *>(_internal);
1197 }
1198
1199 - (DOMCSSPrimitiveValue *)top
1200 {
1201     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->top()];
1202 }
1203
1204 - (DOMCSSPrimitiveValue *)right
1205 {
1206     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->right()];
1207 }
1208
1209 - (DOMCSSPrimitiveValue *)bottom
1210 {
1211     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->bottom()];
1212 }
1213
1214 - (DOMCSSPrimitiveValue *)left
1215 {
1216     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->left()];
1217 }
1218
1219 - (id)copyWithZone:(NSZone *)zone
1220 {
1221     return [self retain];
1222 }
1223
1224 @end
1225
1226 @implementation DOMRect (WebCoreInternal)
1227
1228 - (id)_initWithRectImpl:(RectImpl *)impl
1229 {
1230     [super _init];
1231     _internal = DOM_cast<DOMObjectInternal *>(impl);
1232     impl->ref();
1233     addDOMWrapper(self, impl);
1234     return self;
1235 }
1236
1237 + (DOMRect *)_rectWithImpl:(RectImpl *)impl
1238 {
1239     if (!impl)
1240         return nil;
1241     
1242     id cachedInstance;
1243     cachedInstance = getDOMWrapper(impl);
1244     if (cachedInstance)
1245         return [[cachedInstance retain] autorelease];
1246     
1247     return [[[self alloc] _initWithRectImpl:impl] autorelease];
1248 }
1249
1250 @end
1251
1252 //------------------------------------------------------------------------------------------
1253 // DOMCounter
1254
1255 @implementation DOMCounter
1256
1257 - (void)dealloc
1258 {
1259     if (_internal) {
1260         DOM_cast<CounterImpl *>(_internal)->deref();
1261     }
1262     [super dealloc];
1263 }
1264
1265 - (void)finalize
1266 {
1267     if (_internal) {
1268         DOM_cast<CounterImpl *>(_internal)->deref();
1269     }
1270     [super finalize];
1271 }
1272
1273 - (CounterImpl *)_counterImpl
1274 {
1275     return DOM_cast<CounterImpl *>(_internal);
1276 }
1277
1278 - (NSString *)identifier
1279 {
1280     return [self _counterImpl]->identifier();
1281 }
1282
1283 - (NSString *)listStyle
1284 {
1285     return [self _counterImpl]->listStyle();
1286 }
1287
1288 - (NSString *)separator
1289 {
1290     return [self _counterImpl]->separator();
1291 }
1292
1293 - (id)copyWithZone:(NSZone *)zone
1294 {
1295     return [self retain];
1296 }
1297
1298 @end
1299
1300 @implementation DOMCounter (WebCoreInternal)
1301
1302 - (id)_initWithCounterImpl:(CounterImpl *)impl
1303 {
1304     [super _init];
1305     _internal = DOM_cast<DOMObjectInternal *>(impl);
1306     impl->ref();
1307     addDOMWrapper(self, impl);
1308     return self;
1309 }
1310
1311 + (DOMCounter *)_counterWithImpl:(CounterImpl *)impl
1312 {
1313     if (!impl)
1314         return nil;
1315     
1316     id cachedInstance;
1317     cachedInstance = getDOMWrapper(impl);
1318     if (cachedInstance)
1319         return [[cachedInstance retain] autorelease];
1320     
1321     return [[[self alloc] _initWithCounterImpl:impl] autorelease];
1322 }
1323
1324 @end
1325
1326 //------------------------------------------------------------------------------------------
1327
1328 @implementation DOMCSSStyleDeclaration (DOMCSS2Properties)
1329
1330 - (NSString *)azimuth
1331 {
1332     return [self getPropertyValue:@"azimuth"];
1333 }
1334
1335 - (void)setAzimuth:(NSString *)azimuth
1336 {
1337     [self setProperty:@"azimuth" :azimuth :@""];
1338 }
1339
1340 - (NSString *)background
1341 {
1342     return [self getPropertyValue:@"background"];
1343 }
1344
1345 - (void)setBackground:(NSString *)background
1346 {
1347     [self setProperty:@"background" :background :@""];
1348 }
1349
1350 - (NSString *)backgroundAttachment
1351 {
1352     return [self getPropertyValue:@"background-attachment"];
1353 }
1354
1355 - (void)setBackgroundAttachment:(NSString *)backgroundAttachment
1356 {
1357     [self setProperty:@"background-attachment" :backgroundAttachment :@""];
1358 }
1359
1360 - (NSString *)backgroundColor
1361 {
1362     return [self getPropertyValue:@"background-color"];
1363 }
1364
1365 - (void)setBackgroundColor:(NSString *)backgroundColor
1366 {
1367     [self setProperty:@"background-color" :backgroundColor :@""];
1368 }
1369
1370 - (NSString *)backgroundImage
1371 {
1372     return [self getPropertyValue:@"background-image"];
1373 }
1374
1375 - (void)setBackgroundImage:(NSString *)backgroundImage
1376 {
1377     [self setProperty:@"background-image" :backgroundImage :@""];
1378 }
1379
1380 - (NSString *)backgroundPosition
1381 {
1382     return [self getPropertyValue:@"background-position"];
1383 }
1384
1385 - (void)setBackgroundPosition:(NSString *)backgroundPosition
1386 {
1387     [self setProperty:@"background-position" :backgroundPosition :@""];
1388 }
1389
1390 - (NSString *)backgroundRepeat
1391 {
1392     return [self getPropertyValue:@"background-repeat"];
1393 }
1394
1395 - (void)setBackgroundRepeat:(NSString *)backgroundRepeat
1396 {
1397     [self setProperty:@"background-repeat" :backgroundRepeat :@""];
1398 }
1399
1400 - (NSString *)border
1401 {
1402     return [self getPropertyValue:@"border"];
1403 }
1404
1405 - (void)setBorder:(NSString *)border
1406 {
1407     [self setProperty:@"border" :border :@""];
1408 }
1409
1410 - (NSString *)borderCollapse
1411 {
1412     return [self getPropertyValue:@"border-collapse"];
1413 }
1414
1415 - (void)setBorderCollapse:(NSString *)borderCollapse
1416 {
1417     [self setProperty:@"border-collapse" :borderCollapse :@""];
1418 }
1419
1420 - (NSString *)borderColor
1421 {
1422     return [self getPropertyValue:@"border-color"];
1423 }
1424
1425 - (void)setBorderColor:(NSString *)borderColor
1426 {
1427     [self setProperty:@"border-color" :borderColor :@""];
1428 }
1429
1430 - (NSString *)borderSpacing
1431 {
1432     return [self getPropertyValue:@"border-spacing"];
1433 }
1434
1435 - (void)setBorderSpacing:(NSString *)borderSpacing
1436 {
1437     [self setProperty:@"border-spacing" :borderSpacing :@""];
1438 }
1439
1440 - (NSString *)borderStyle
1441 {
1442     return [self getPropertyValue:@"border-style"];
1443 }
1444
1445 - (void)setBorderStyle:(NSString *)borderStyle
1446 {
1447     [self setProperty:@"border-style" :borderStyle :@""];
1448 }
1449
1450 - (NSString *)borderTop
1451 {
1452     return [self getPropertyValue:@"border-top"];
1453 }
1454
1455 - (void)setBorderTop:(NSString *)borderTop
1456 {
1457     [self setProperty:@"border-top" :borderTop :@""];
1458 }
1459
1460 - (NSString *)borderRight
1461 {
1462     return [self getPropertyValue:@"border-right"];
1463 }
1464
1465 - (void)setBorderRight:(NSString *)borderRight
1466 {
1467     [self setProperty:@"border-right" :borderRight :@""];
1468 }
1469
1470 - (NSString *)borderBottom
1471 {
1472     return [self getPropertyValue:@"border-bottom"];
1473 }
1474
1475 - (void)setBorderBottom:(NSString *)borderBottom
1476 {
1477     [self setProperty:@"border-bottom" :borderBottom :@""];
1478 }
1479
1480 - (NSString *)borderLeft
1481 {
1482     return [self getPropertyValue:@"border-left"];
1483 }
1484
1485 - (void)setBorderLeft:(NSString *)borderLeft
1486 {
1487     [self setProperty:@"border-left" :borderLeft :@""];
1488 }
1489
1490 - (NSString *)borderTopColor
1491 {
1492     return [self getPropertyValue:@"border-top-color"];
1493 }
1494
1495 - (void)setBorderTopColor:(NSString *)borderTopColor
1496 {
1497     [self setProperty:@"border-top-color" :borderTopColor :@""];
1498 }
1499
1500 - (NSString *)borderRightColor
1501 {
1502     return [self getPropertyValue:@"border-right-color"];
1503 }
1504
1505 - (void)setBorderRightColor:(NSString *)borderRightColor
1506 {
1507     [self setProperty:@"border-right-color" :borderRightColor :@""];
1508 }
1509
1510 - (NSString *)borderBottomColor
1511 {
1512     return [self getPropertyValue:@"border-bottom-color"];
1513 }
1514
1515 - (void)setBorderBottomColor:(NSString *)borderBottomColor
1516 {
1517     [self setProperty:@"border-bottom-color" :borderBottomColor :@""];
1518 }
1519
1520 - (NSString *)borderLeftColor
1521 {
1522     return [self getPropertyValue:@"border-left-color"];
1523 }
1524
1525 - (void)setBorderLeftColor:(NSString *)borderLeftColor
1526 {
1527     [self setProperty:@"border-left-color" :borderLeftColor :@""];
1528 }
1529
1530 - (NSString *)borderTopStyle
1531 {
1532     return [self getPropertyValue:@"border-top-style"];
1533 }
1534
1535 - (void)setBorderTopStyle:(NSString *)borderTopStyle
1536 {
1537     [self setProperty:@"border-top-style" :borderTopStyle :@""];
1538 }
1539
1540 - (NSString *)borderRightStyle
1541 {
1542     return [self getPropertyValue:@"border-right-style"];
1543 }
1544
1545 - (void)setBorderRightStyle:(NSString *)borderRightStyle
1546 {
1547     [self setProperty:@"border-right-style" :borderRightStyle :@""];
1548 }
1549
1550 - (NSString *)borderBottomStyle
1551 {
1552     return [self getPropertyValue:@"border-bottom-style"];
1553 }
1554
1555 - (void)setBorderBottomStyle:(NSString *)borderBottomStyle
1556 {
1557     [self setProperty:@"border-bottom-style" :borderBottomStyle :@""];
1558 }
1559
1560 - (NSString *)borderLeftStyle
1561 {
1562     return [self getPropertyValue:@"border-left-style"];
1563 }
1564
1565 - (void)setBorderLeftStyle:(NSString *)borderLeftStyle
1566 {
1567     [self setProperty:@"border-left-style" :borderLeftStyle :@""];
1568 }
1569
1570 - (NSString *)borderTopWidth
1571 {
1572     return [self getPropertyValue:@"border-top-width"];
1573 }
1574
1575 - (void)setBorderTopWidth:(NSString *)borderTopWidth
1576 {
1577     [self setProperty:@"border-top-width" :borderTopWidth :@""];
1578 }
1579
1580 - (NSString *)borderRightWidth
1581 {
1582     return [self getPropertyValue:@"border-right-width"];
1583 }
1584
1585 - (void)setBorderRightWidth:(NSString *)borderRightWidth
1586 {
1587     [self setProperty:@"border-right-width" :borderRightWidth :@""];
1588 }
1589
1590 - (NSString *)borderBottomWidth
1591 {
1592     return [self getPropertyValue:@"border-bottom-width"];
1593 }
1594
1595 - (void)setBorderBottomWidth:(NSString *)borderBottomWidth
1596 {
1597     [self setProperty:@"border-bottom-width" :borderBottomWidth :@""];
1598 }
1599
1600 - (NSString *)borderLeftWidth
1601 {
1602     return [self getPropertyValue:@"border-left-width"];
1603 }
1604
1605 - (void)setBorderLeftWidth:(NSString *)borderLeftWidth
1606 {
1607     [self setProperty:@"border-left-width" :borderLeftWidth :@""];
1608 }
1609
1610 - (NSString *)borderWidth
1611 {
1612     return [self getPropertyValue:@"border-width"];
1613 }
1614
1615 - (void)setBorderWidth:(NSString *)borderWidth
1616 {
1617     [self setProperty:@"border-width" :borderWidth :@""];
1618 }
1619
1620 - (NSString *)bottom
1621 {
1622     return [self getPropertyValue:@"bottom"];
1623 }
1624
1625 - (void)setBottom:(NSString *)bottom
1626 {
1627     [self setProperty:@"bottom" :bottom :@""];
1628 }
1629
1630 - (NSString *)captionSide
1631 {
1632     return [self getPropertyValue:@"caption-side"];
1633 }
1634
1635 - (void)setCaptionSide:(NSString *)captionSide
1636 {
1637     [self setProperty:@"caption-side" :captionSide :@""];
1638 }
1639
1640 - (NSString *)clear
1641 {
1642     return [self getPropertyValue:@"clear"];
1643 }
1644
1645 - (void)setClear:(NSString *)clear
1646 {
1647     [self setProperty:@"clear" :clear :@""];
1648 }
1649
1650 - (NSString *)clip
1651 {
1652     return [self getPropertyValue:@"clip"];
1653 }
1654
1655 - (void)setClip:(NSString *)clip
1656 {
1657     [self setProperty:@"clip" :clip :@""];
1658 }
1659
1660 - (NSString *)color
1661 {
1662     return [self getPropertyValue:@"color"];
1663 }
1664
1665 - (void)setColor:(NSString *)color
1666 {
1667     [self setProperty:@"color" :color :@""];
1668 }
1669
1670 - (NSString *)content
1671 {
1672     return [self getPropertyValue:@"content"];
1673 }
1674
1675 - (void)setContent:(NSString *)content
1676 {
1677     [self setProperty:@"content" :content :@""];
1678 }
1679
1680 - (NSString *)counterIncrement
1681 {
1682     return [self getPropertyValue:@"counter-increment"];
1683 }
1684
1685 - (void)setCounterIncrement:(NSString *)counterIncrement
1686 {
1687     [self setProperty:@"counter-increment" :counterIncrement :@""];
1688 }
1689
1690 - (NSString *)counterReset
1691 {
1692     return [self getPropertyValue:@"counter-reset"];
1693 }
1694
1695 - (void)setCounterReset:(NSString *)counterReset
1696 {
1697     [self setProperty:@"counter-reset" :counterReset :@""];
1698 }
1699
1700 - (NSString *)cue
1701 {
1702     return [self getPropertyValue:@"cue"];
1703 }
1704
1705 - (void)setCue:(NSString *)cue
1706 {
1707     [self setProperty:@"cue" :cue :@""];
1708 }
1709
1710 - (NSString *)cueAfter
1711 {
1712     return [self getPropertyValue:@"cue-after"];
1713 }
1714
1715 - (void)setCueAfter:(NSString *)cueAfter
1716 {
1717     [self setProperty:@"cue-after" :cueAfter :@""];
1718 }
1719
1720 - (NSString *)cueBefore
1721 {
1722     return [self getPropertyValue:@"cue-before"];
1723 }
1724
1725 - (void)setCueBefore:(NSString *)cueBefore
1726 {
1727     [self setProperty:@"cue-before" :cueBefore :@""];
1728 }
1729
1730 - (NSString *)cursor
1731 {
1732     return [self getPropertyValue:@"cursor"];
1733 }
1734
1735 - (void)setCursor:(NSString *)cursor
1736 {
1737     [self setProperty:@"cursor" :cursor :@""];
1738 }
1739
1740 - (NSString *)direction
1741 {
1742     return [self getPropertyValue:@"direction"];
1743 }
1744
1745 - (void)setDirection:(NSString *)direction
1746 {
1747     [self setProperty:@"direction" :direction :@""];
1748 }
1749
1750 - (NSString *)display
1751 {
1752     return [self getPropertyValue:@"display"];
1753 }
1754
1755 - (void)setDisplay:(NSString *)display
1756 {
1757     [self setProperty:@"display" :display :@""];
1758 }
1759
1760 - (NSString *)elevation
1761 {
1762     return [self getPropertyValue:@"elevation"];
1763 }
1764
1765 - (void)setElevation:(NSString *)elevation
1766 {
1767     [self setProperty:@"elevation" :elevation :@""];
1768 }
1769
1770 - (NSString *)emptyCells
1771 {
1772     return [self getPropertyValue:@"empty-cells"];
1773 }
1774
1775 - (void)setEmptyCells:(NSString *)emptyCells
1776 {
1777     [self setProperty:@"empty-cells" :emptyCells :@""];
1778 }
1779
1780 - (NSString *)cssFloat
1781 {
1782     return [self getPropertyValue:@"css-float"];
1783 }
1784
1785 - (void)setCssFloat:(NSString *)cssFloat
1786 {
1787     [self setProperty:@"css-float" :cssFloat :@""];
1788 }
1789
1790 - (NSString *)font
1791 {
1792     return [self getPropertyValue:@"font"];
1793 }
1794
1795 - (void)setFont:(NSString *)font
1796 {
1797     [self setProperty:@"font" :font :@""];
1798 }
1799
1800 - (NSString *)fontFamily
1801 {
1802     return [self getPropertyValue:@"font-family"];
1803 }
1804
1805 - (void)setFontFamily:(NSString *)fontFamily
1806 {
1807     [self setProperty:@"font-family" :fontFamily :@""];
1808 }
1809
1810 - (NSString *)fontSize
1811 {
1812     return [self getPropertyValue:@"font-size"];
1813 }
1814
1815 - (void)setFontSize:(NSString *)fontSize
1816 {
1817     [self setProperty:@"font-size" :fontSize :@""];
1818 }
1819
1820 - (NSString *)fontSizeAdjust
1821 {
1822     return [self getPropertyValue:@"font-size-adjust"];
1823 }
1824
1825 - (void)setFontSizeAdjust:(NSString *)fontSizeAdjust
1826 {
1827     [self setProperty:@"font-size-adjust" :fontSizeAdjust :@""];
1828 }
1829
1830 - (NSString *)fontStretch
1831 {
1832     return [self getPropertyValue:@"font-stretch"];
1833 }
1834
1835 - (void)setFontStretch:(NSString *)fontStretch
1836 {
1837     [self setProperty:@"font-stretch" :fontStretch :@""];
1838 }
1839
1840 - (NSString *)fontStyle
1841 {
1842     return [self getPropertyValue:@"font-style"];
1843 }
1844
1845 - (void)setFontStyle:(NSString *)fontStyle
1846 {
1847     [self setProperty:@"font-style" :fontStyle :@""];
1848 }
1849
1850 - (NSString *)fontVariant
1851 {
1852     return [self getPropertyValue:@"font-variant"];
1853 }
1854
1855 - (void)setFontVariant:(NSString *)fontVariant
1856 {
1857     [self setProperty:@"font-variant" :fontVariant :@""];
1858 }
1859
1860 - (NSString *)fontWeight
1861 {
1862     return [self getPropertyValue:@"font-weight"];
1863 }
1864
1865 - (void)setFontWeight:(NSString *)fontWeight
1866 {
1867     [self setProperty:@"font-weight" :fontWeight :@""];
1868 }
1869
1870 - (NSString *)height
1871 {
1872     return [self getPropertyValue:@"height"];
1873 }
1874
1875 - (void)setHeight:(NSString *)height
1876 {
1877     [self setProperty:@"height" :height :@""];
1878 }
1879
1880 - (NSString *)left
1881 {
1882     return [self getPropertyValue:@"left"];
1883 }
1884
1885 - (void)setLeft:(NSString *)left
1886 {
1887     [self setProperty:@"left" :left :@""];
1888 }
1889
1890 - (NSString *)letterSpacing
1891 {
1892     return [self getPropertyValue:@"letter-spacing"];
1893 }
1894
1895 - (void)setLetterSpacing:(NSString *)letterSpacing
1896 {
1897     [self setProperty:@"letter-spacing" :letterSpacing :@""];
1898 }
1899
1900 - (NSString *)lineHeight
1901 {
1902     return [self getPropertyValue:@"line-height"];
1903 }
1904
1905 - (void)setLineHeight:(NSString *)lineHeight
1906 {
1907     [self setProperty:@"line-height" :lineHeight :@""];
1908 }
1909
1910 - (NSString *)listStyle
1911 {
1912     return [self getPropertyValue:@"list-style"];
1913 }
1914
1915 - (void)setListStyle:(NSString *)listStyle
1916 {
1917     [self setProperty:@"list-style" :listStyle :@""];
1918 }
1919
1920 - (NSString *)listStyleImage
1921 {
1922     return [self getPropertyValue:@"list-style-image"];
1923 }
1924
1925 - (void)setListStyleImage:(NSString *)listStyleImage
1926 {
1927     [self setProperty:@"list-style-image" :listStyleImage :@""];
1928 }
1929
1930 - (NSString *)listStylePosition
1931 {
1932     return [self getPropertyValue:@"list-style-position"];
1933 }
1934
1935 - (void)setListStylePosition:(NSString *)listStylePosition
1936 {
1937     [self setProperty:@"list-style-position" :listStylePosition :@""];
1938 }
1939
1940 - (NSString *)listStyleType
1941 {
1942     return [self getPropertyValue:@"list-style-type"];
1943 }
1944
1945 - (void)setListStyleType:(NSString *)listStyleType
1946 {
1947     [self setProperty:@"list-style-type" :listStyleType :@""];
1948 }
1949
1950 - (NSString *)margin
1951 {
1952     return [self getPropertyValue:@"margin"];
1953 }
1954
1955 - (void)setMargin:(NSString *)margin
1956 {
1957     [self setProperty:@"margin" :margin :@""];
1958 }
1959
1960 - (NSString *)marginTop
1961 {
1962     return [self getPropertyValue:@"margin-top"];
1963 }
1964
1965 - (void)setMarginTop:(NSString *)marginTop
1966 {
1967     [self setProperty:@"margin-top" :marginTop :@""];
1968 }
1969
1970 - (NSString *)marginRight
1971 {
1972     return [self getPropertyValue:@"margin-right"];
1973 }
1974
1975 - (void)setMarginRight:(NSString *)marginRight
1976 {
1977     [self setProperty:@"margin-right" :marginRight :@""];
1978 }
1979
1980 - (NSString *)marginBottom
1981 {
1982     return [self getPropertyValue:@"margin-bottom"];
1983 }
1984
1985 - (void)setMarginBottom:(NSString *)marginBottom
1986 {
1987     [self setProperty:@"margin-bottom" :marginBottom :@""];
1988 }
1989
1990 - (NSString *)marginLeft
1991 {
1992     return [self getPropertyValue:@"margin-left"];
1993 }
1994
1995 - (void)setMarginLeft:(NSString *)marginLeft
1996 {
1997     [self setProperty:@"margin-left" :marginLeft :@""];
1998 }
1999
2000 - (NSString *)markerOffset
2001 {
2002     return [self getPropertyValue:@"marker-offset"];
2003 }
2004
2005 - (void)setMarkerOffset:(NSString *)markerOffset
2006 {
2007     [self setProperty:@"marker-offset" :markerOffset :@""];
2008 }
2009
2010 - (NSString *)marks
2011 {
2012     return [self getPropertyValue:@"marks"];
2013 }
2014
2015 - (void)setMarks:(NSString *)marks
2016 {
2017     [self setProperty:@"marks" :marks :@""];
2018 }
2019
2020 - (NSString *)maxHeight
2021 {
2022     return [self getPropertyValue:@"max-height"];
2023 }
2024
2025 - (void)setMaxHeight:(NSString *)maxHeight
2026 {
2027     [self setProperty:@"max-height" :maxHeight :@""];
2028 }
2029
2030 - (NSString *)maxWidth
2031 {
2032     return [self getPropertyValue:@"max-width"];
2033 }
2034
2035 - (void)setMaxWidth:(NSString *)maxWidth
2036 {
2037     [self setProperty:@"max-width" :maxWidth :@""];
2038 }
2039
2040 - (NSString *)minHeight
2041 {
2042     return [self getPropertyValue:@"min-height"];
2043 }
2044
2045 - (void)setMinHeight:(NSString *)minHeight
2046 {
2047     [self setProperty:@"min-height" :minHeight :@""];
2048 }
2049
2050 - (NSString *)minWidth
2051 {
2052     return [self getPropertyValue:@"min-width"];
2053 }
2054
2055 - (void)setMinWidth:(NSString *)minWidth
2056 {
2057     [self setProperty:@"min-width" :minWidth :@""];
2058 }
2059
2060 - (NSString *)orphans
2061 {
2062     return [self getPropertyValue:@"orphans"];
2063 }
2064
2065 - (void)setOrphans:(NSString *)orphans
2066 {
2067     [self setProperty:@"orphans" :orphans :@""];
2068 }
2069
2070 - (NSString *)outline
2071 {
2072     return [self getPropertyValue:@"outline"];
2073 }
2074
2075 - (void)setOutline:(NSString *)outline
2076 {
2077     [self setProperty:@"outline" :outline :@""];
2078 }
2079
2080 - (NSString *)outlineColor
2081 {
2082     return [self getPropertyValue:@"outline-color"];
2083 }
2084
2085 - (void)setOutlineColor:(NSString *)outlineColor
2086 {
2087     [self setProperty:@"outline-color" :outlineColor :@""];
2088 }
2089
2090 - (NSString *)outlineStyle
2091 {
2092     return [self getPropertyValue:@"outline-style"];
2093 }
2094
2095 - (void)setOutlineStyle:(NSString *)outlineStyle
2096 {
2097     [self setProperty:@"outline-style" :outlineStyle :@""];
2098 }
2099
2100 - (NSString *)outlineWidth
2101 {
2102     return [self getPropertyValue:@"outline-width"];
2103 }
2104
2105 - (void)setOutlineWidth:(NSString *)outlineWidth
2106 {
2107     [self setProperty:@"outline-width" :outlineWidth :@""];
2108 }
2109
2110 - (NSString *)overflow
2111 {
2112     return [self getPropertyValue:@"overflow"];
2113 }
2114
2115 - (void)setOverflow:(NSString *)overflow
2116 {
2117     [self setProperty:@"overflow" :overflow :@""];
2118 }
2119
2120 - (NSString *)padding
2121 {
2122     return [self getPropertyValue:@"padding"];
2123 }
2124
2125 - (void)setPadding:(NSString *)padding
2126 {
2127     [self setProperty:@"padding" :padding :@""];
2128 }
2129
2130 - (NSString *)paddingTop
2131 {
2132     return [self getPropertyValue:@"padding-top"];
2133 }
2134
2135 - (void)setPaddingTop:(NSString *)paddingTop
2136 {
2137     [self setProperty:@"padding-top" :paddingTop :@""];
2138 }
2139
2140 - (NSString *)paddingRight
2141 {
2142     return [self getPropertyValue:@"padding-right"];
2143 }
2144
2145 - (void)setPaddingRight:(NSString *)paddingRight
2146 {
2147     [self setProperty:@"padding-right" :paddingRight :@""];
2148 }
2149
2150 - (NSString *)paddingBottom
2151 {
2152     return [self getPropertyValue:@"padding-bottom"];
2153 }
2154
2155 - (void)setPaddingBottom:(NSString *)paddingBottom
2156 {
2157     [self setProperty:@"padding-bottom" :paddingBottom :@""];
2158 }
2159
2160 - (NSString *)paddingLeft
2161 {
2162     return [self getPropertyValue:@"padding-left"];
2163 }
2164
2165 - (void)setPaddingLeft:(NSString *)paddingLeft
2166 {
2167     [self setProperty:@"padding-left" :paddingLeft :@""];
2168 }
2169
2170 - (NSString *)page
2171 {
2172     return [self getPropertyValue:@"page"];
2173 }
2174
2175 - (void)setPage:(NSString *)page
2176 {
2177     [self setProperty:@"page" :page :@""];
2178 }
2179
2180 - (NSString *)pageBreakAfter
2181 {
2182     return [self getPropertyValue:@"page-break-after"];
2183 }
2184
2185 - (void)setPageBreakAfter:(NSString *)pageBreakAfter
2186 {
2187     [self setProperty:@"page-break-after" :pageBreakAfter :@""];
2188 }
2189
2190 - (NSString *)pageBreakBefore
2191 {
2192     return [self getPropertyValue:@"page-break-before"];
2193 }
2194
2195 - (void)setPageBreakBefore:(NSString *)pageBreakBefore
2196 {
2197     [self setProperty:@"page-break-before" :pageBreakBefore :@""];
2198 }
2199
2200 - (NSString *)pageBreakInside
2201 {
2202     return [self getPropertyValue:@"page-break-inside"];
2203 }
2204
2205 - (void)setPageBreakInside:(NSString *)pageBreakInside
2206 {
2207     [self setProperty:@"page-break-inside" :pageBreakInside :@""];
2208 }
2209
2210 - (NSString *)pause
2211 {
2212     return [self getPropertyValue:@"pause"];
2213 }
2214
2215 - (void)setPause:(NSString *)pause
2216 {
2217     [self setProperty:@"pause" :pause :@""];
2218 }
2219
2220 - (NSString *)pauseAfter
2221 {
2222     return [self getPropertyValue:@"pause-after"];
2223 }
2224
2225 - (void)setPauseAfter:(NSString *)pauseAfter
2226 {
2227     [self setProperty:@"pause-after" :pauseAfter :@""];
2228 }
2229
2230 - (NSString *)pauseBefore
2231 {
2232     return [self getPropertyValue:@"pause-before"];
2233 }
2234
2235 - (void)setPauseBefore:(NSString *)pauseBefore
2236 {
2237     [self setProperty:@"pause-before" :pauseBefore :@""];
2238 }
2239
2240 - (NSString *)pitch
2241 {
2242     return [self getPropertyValue:@"pitch"];
2243 }
2244
2245 - (void)setPitch:(NSString *)pitch
2246 {
2247     [self setProperty:@"pitch" :pitch :@""];
2248 }
2249
2250 - (NSString *)pitchRange
2251 {
2252     return [self getPropertyValue:@"pitch-range"];
2253 }
2254
2255 - (void)setPitchRange:(NSString *)pitchRange
2256 {
2257     [self setProperty:@"pitch-range" :pitchRange :@""];
2258 }
2259
2260 - (NSString *)playDuring
2261 {
2262     return [self getPropertyValue:@"play-during"];
2263 }
2264
2265 - (void)setPlayDuring:(NSString *)playDuring
2266 {
2267     [self setProperty:@"play-during" :playDuring :@""];
2268 }
2269
2270 - (NSString *)position
2271 {
2272     return [self getPropertyValue:@"position"];
2273 }
2274
2275 - (void)setPosition:(NSString *)position
2276 {
2277     [self setProperty:@"position" :position :@""];
2278 }
2279
2280 - (NSString *)quotes
2281 {
2282     return [self getPropertyValue:@"quotes"];
2283 }
2284
2285 - (void)setQuotes:(NSString *)quotes
2286 {
2287     [self setProperty:@"quotes" :quotes :@""];
2288 }
2289
2290 - (NSString *)richness
2291 {
2292     return [self getPropertyValue:@"richness"];
2293 }
2294
2295 - (void)setRichness:(NSString *)richness
2296 {
2297     [self setProperty:@"richness" :richness :@""];
2298 }
2299
2300 - (NSString *)right
2301 {
2302     return [self getPropertyValue:@"right"];
2303 }
2304
2305 - (void)setRight:(NSString *)right
2306 {
2307     [self setProperty:@"right" :right :@""];
2308 }
2309
2310 - (NSString *)size
2311 {
2312     return [self getPropertyValue:@"size"];
2313 }
2314
2315 - (void)setSize:(NSString *)size
2316 {
2317     [self setProperty:@"size" :size :@""];
2318 }
2319
2320 - (NSString *)speak
2321 {
2322     return [self getPropertyValue:@"speak"];
2323 }
2324
2325 - (void)setSpeak:(NSString *)speak
2326 {
2327     [self setProperty:@"speak" :speak :@""];
2328 }
2329
2330 - (NSString *)speakHeader
2331 {
2332     return [self getPropertyValue:@"speak-header"];
2333 }
2334
2335 - (void)setSpeakHeader:(NSString *)speakHeader
2336 {
2337     [self setProperty:@"speak-header" :speakHeader :@""];
2338 }
2339
2340 - (NSString *)speakNumeral
2341 {
2342     return [self getPropertyValue:@"speak-numeral"];
2343 }
2344
2345 - (void)setSpeakNumeral:(NSString *)speakNumeral
2346 {
2347     [self setProperty:@"speak-numeral" :speakNumeral :@""];
2348 }
2349
2350 - (NSString *)speakPunctuation
2351 {
2352     return [self getPropertyValue:@"speak-punctuation"];
2353 }
2354
2355 - (void)setSpeakPunctuation:(NSString *)speakPunctuation
2356 {
2357     [self setProperty:@"speak-punctuation" :speakPunctuation :@""];
2358 }
2359
2360 - (NSString *)speechRate
2361 {
2362     return [self getPropertyValue:@"speech-rate"];
2363 }
2364
2365 - (void)setSpeechRate:(NSString *)speechRate
2366 {
2367     [self setProperty:@"speech-rate" :speechRate :@""];
2368 }
2369
2370 - (NSString *)stress
2371 {
2372     return [self getPropertyValue:@"stress"];
2373 }
2374
2375 - (void)setStress:(NSString *)stress
2376 {
2377     [self setProperty:@"stress" :stress :@""];
2378 }
2379
2380 - (NSString *)tableLayout
2381 {
2382     return [self getPropertyValue:@"table-layout"];
2383 }
2384
2385 - (void)setTableLayout:(NSString *)tableLayout
2386 {
2387     [self setProperty:@"table-layout" :tableLayout :@""];
2388 }
2389
2390 - (NSString *)textAlign
2391 {
2392     return [self getPropertyValue:@"text-align"];
2393 }
2394
2395 - (void)setTextAlign:(NSString *)textAlign
2396 {
2397     [self setProperty:@"text-align" :textAlign :@""];
2398 }
2399
2400 - (NSString *)textDecoration
2401 {
2402     return [self getPropertyValue:@"text-decoration"];
2403 }
2404
2405 - (void)setTextDecoration:(NSString *)textDecoration
2406 {
2407     [self setProperty:@"text-decoration" :textDecoration :@""];
2408 }
2409
2410 - (NSString *)textIndent
2411 {
2412     return [self getPropertyValue:@"text-indent"];
2413 }
2414
2415 - (void)setTextIndent:(NSString *)textIndent
2416 {
2417     [self setProperty:@"text-indent" :textIndent :@""];
2418 }
2419
2420 - (NSString *)textShadow
2421 {
2422     return [self getPropertyValue:@"text-shadow"];
2423 }
2424
2425 - (void)setTextShadow:(NSString *)textShadow
2426 {
2427     [self setProperty:@"text-shadow" :textShadow :@""];
2428 }
2429
2430 - (NSString *)textTransform
2431 {
2432     return [self getPropertyValue:@"text-transform"];
2433 }
2434
2435 - (void)setTextTransform:(NSString *)textTransform
2436 {
2437     [self setProperty:@"text-transform" :textTransform :@""];
2438 }
2439
2440 - (NSString *)top
2441 {
2442     return [self getPropertyValue:@"top"];
2443 }
2444
2445 - (void)setTop:(NSString *)top
2446 {
2447     [self setProperty:@"top" :top :@""];
2448 }
2449
2450 - (NSString *)unicodeBidi
2451 {
2452     return [self getPropertyValue:@"unicode-bidi"];
2453 }
2454
2455 - (void)setUnicodeBidi:(NSString *)unicodeBidi
2456 {
2457     [self setProperty:@"unicode-bidi" :unicodeBidi :@""];
2458 }
2459
2460 - (NSString *)verticalAlign
2461 {
2462     return [self getPropertyValue:@"vertical-align"];
2463 }
2464
2465 - (void)setVerticalAlign:(NSString *)verticalAlign
2466 {
2467     [self setProperty:@"vertical-align" :verticalAlign :@""];
2468 }
2469
2470 - (NSString *)visibility
2471 {
2472     return [self getPropertyValue:@"visibility"];
2473 }
2474
2475 - (void)setVisibility:(NSString *)visibility
2476 {
2477     [self setProperty:@"visibility" :visibility :@""];
2478 }
2479
2480 - (NSString *)voiceFamily
2481 {
2482     return [self getPropertyValue:@"voice-family"];
2483 }
2484
2485 - (void)setVoiceFamily:(NSString *)voiceFamily
2486 {
2487     [self setProperty:@"voice-family" :voiceFamily :@""];
2488 }
2489
2490 - (NSString *)volume
2491 {
2492     return [self getPropertyValue:@"volume"];
2493 }
2494
2495 - (void)setVolume:(NSString *)volume
2496 {
2497     [self setProperty:@"volume" :volume :@""];
2498 }
2499
2500 - (NSString *)whiteSpace
2501 {
2502     return [self getPropertyValue:@"white-space"];
2503 }
2504
2505 - (void)setWhiteSpace:(NSString *)whiteSpace
2506 {
2507     [self setProperty:@"white-space" :whiteSpace :@""];
2508 }
2509
2510 - (NSString *)widows
2511 {
2512     return [self getPropertyValue:@"widows"];
2513 }
2514
2515 - (void)setWidows:(NSString *)widows
2516 {
2517     [self setProperty:@"widows" :widows :@""];
2518 }
2519
2520 - (NSString *)width
2521 {
2522     return [self getPropertyValue:@"width"];
2523 }
2524
2525 - (void)setWidth:(NSString *)width
2526 {
2527     [self setProperty:@"width" :width :@""];
2528 }
2529
2530 - (NSString *)wordSpacing
2531 {
2532     return [self getPropertyValue:@"word-spacing"];
2533 }
2534
2535 - (void)setWordSpacing:(NSString *)wordSpacing
2536 {
2537     [self setProperty:@"word-spacing" :wordSpacing :@""];
2538 }
2539
2540 - (NSString *)zIndex
2541 {
2542     return [self getPropertyValue:@"z-index"];
2543 }
2544
2545 - (void)setZIndex:(NSString *)zIndex
2546 {
2547     [self setProperty:@"z-index" :zIndex :@""];
2548 }
2549
2550 @end
2551
2552 //------------------------------------------------------------------------------------------
2553
2554
2555 @implementation DOMObject (DOMLinkStyle)
2556
2557 - (DOMStyleSheet *)sheet
2558 {
2559     ERROR("unimplemented");
2560     return nil;
2561 }
2562
2563 @end
2564
2565 @implementation DOMDocument (DOMViewCSS)
2566
2567 - (DOMCSSStyleDeclaration *)getComputedStyle:(DOMElement *)elt :(NSString *)pseudoElt
2568 {
2569     return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:
2570         AbstractViewImpl([self _documentImpl]).getComputedStyle([elt _elementImpl], DOMString(pseudoElt).implementation())];
2571 }
2572
2573 @end