c8c99b1133cc4879077d892a886200af1ba710f4
[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     raiseOnDOMError(exceptionCode);
842 }
843
844 - (unsigned long)length
845 {
846     return [self _styleDeclarationImpl]->length();
847 }
848
849 - (NSString *)item:(unsigned long)index
850 {
851     return [self _styleDeclarationImpl]->item(index);
852 }
853
854 - (DOMCSSRule *)parentRule
855 {
856     return [DOMCSSRule _ruleWithImpl:[self _styleDeclarationImpl]->parentRule()];
857 }
858
859 @end
860
861 @implementation DOMCSSStyleDeclaration (WebCoreInternal)
862
863 - (id)_initWithStyleDeclarationImpl:(CSSStyleDeclarationImpl *)impl
864 {
865     [super _init];
866     _internal = DOM_cast<DOMObjectInternal *>(impl);
867     impl->ref();
868     addDOMWrapper(self, impl);
869     return self;
870 }
871
872 + (DOMCSSStyleDeclaration *)_styleDeclarationWithImpl:(CSSStyleDeclarationImpl *)impl
873 {
874     if (!impl)
875         return nil;
876     
877     id cachedInstance;
878     cachedInstance = getDOMWrapper(impl);
879     if (cachedInstance)
880         return [[cachedInstance retain] autorelease];
881     
882     return [[[self alloc] _initWithStyleDeclarationImpl:impl] autorelease];
883 }
884
885 - (CSSStyleDeclarationImpl *)_styleDeclarationImpl
886 {
887     return DOM_cast<CSSStyleDeclarationImpl *>(_internal);
888 }
889
890 @end
891
892 //------------------------------------------------------------------------------------------
893 // DOMCSSValue
894
895 @implementation DOMCSSValue
896
897 - (void)dealloc
898 {
899     if (_internal) {
900         DOM_cast<CSSValueImpl *>(_internal)->deref();
901     }
902     [super dealloc];
903 }
904
905 - (void)finalize
906 {
907     if (_internal) {
908         DOM_cast<CSSValueImpl *>(_internal)->deref();
909     }
910     [super finalize];
911 }
912
913 - (CSSValueImpl *)_valueImpl
914 {
915     return DOM_cast<CSSValueImpl *>(_internal);
916 }
917
918 - (NSString *)cssText
919 {
920     return [self _valueImpl]->cssText();
921 }
922
923 - (void)setCssText:(NSString *)cssText
924 {
925     ERROR("unimplemented");
926 }
927
928 - (unsigned short)cssValueType
929 {
930     return [self _valueImpl]->cssValueType();
931 }
932
933 @end
934
935 @implementation DOMCSSValue (WebCoreInternal)
936
937 - (id)_initWithValueImpl:(CSSValueImpl *)impl
938 {
939     [super _init];
940     _internal = DOM_cast<DOMObjectInternal *>(impl);
941     impl->ref();
942     addDOMWrapper(self, impl);
943     return self;
944 }
945
946 + (DOMCSSValue *)_valueWithImpl:(CSSValueImpl *)impl
947 {
948     if (!impl)
949         return nil;
950     
951     id cachedInstance;
952     cachedInstance = getDOMWrapper(impl);
953     if (cachedInstance)
954         return [[cachedInstance retain] autorelease];
955     
956     Class wrapperClass = nil;
957     switch (impl->cssValueType()) {
958         case DOM_CSS_INHERIT:
959             wrapperClass = [DOMCSSValue class];
960             break;
961         case DOM_CSS_PRIMITIVE_VALUE:
962             wrapperClass = [DOMCSSPrimitiveValue class];
963             break;
964         case DOM_CSS_VALUE_LIST:
965             wrapperClass = [DOMCSSValueList class];
966             break;
967         case DOM_CSS_CUSTOM:
968             wrapperClass = [DOMCSSValue class];
969             break;
970     }
971     return [[[wrapperClass alloc] _initWithValueImpl:impl] autorelease];
972 }
973
974 @end
975
976 //------------------------------------------------------------------------------------------
977 // DOMCSSPrimitiveValue
978
979 @implementation DOMCSSPrimitiveValue
980
981 - (CSSPrimitiveValueImpl *)_primitiveValueImpl
982 {
983     return static_cast<CSSPrimitiveValueImpl *>(DOM_cast<CSSValueImpl *>(_internal));
984 }
985
986 - (unsigned short)primitiveType
987 {
988     return [self _primitiveValueImpl]->primitiveType();
989 }
990
991 - (void)setFloatValue:(unsigned short)unitType :(float)floatValue
992 {
993     int exceptionCode;
994     [self _primitiveValueImpl]->setFloatValue(unitType, floatValue, exceptionCode);
995     raiseOnDOMError(exceptionCode);
996 }
997
998 - (float)getFloatValue:(unsigned short)unitType
999 {
1000     return [self _primitiveValueImpl]->getFloatValue(unitType);
1001 }
1002
1003 - (void)setStringValue:(unsigned short)stringType :(NSString *)stringValue
1004 {
1005     int exceptionCode;
1006     DOMString string(stringValue);
1007     [self _primitiveValueImpl]->setStringValue(stringType, string, exceptionCode);
1008     raiseOnDOMError(exceptionCode);
1009 }
1010
1011 - (NSString *)getStringValue
1012 {
1013     return DOMString([self _primitiveValueImpl]->getStringValue());
1014 }
1015
1016 - (DOMCounter *)getCounterValue
1017 {
1018     return [DOMCounter _counterWithImpl:[self _primitiveValueImpl]->getCounterValue()];
1019 }
1020
1021 - (DOMRect *)getRectValue
1022 {
1023     return [DOMRect _rectWithImpl:[self _primitiveValueImpl]->getRectValue()];
1024 }
1025
1026 - (DOMRGBColor *)getRGBColorValue
1027 {
1028     return [DOMRGBColor _RGBColorWithRGB:[self _primitiveValueImpl]->getRGBColorValue()];
1029 }
1030
1031 @end
1032
1033 //------------------------------------------------------------------------------------------
1034 // DOMCSSValueList
1035
1036 @implementation DOMCSSValueList
1037
1038 - (CSSValueListImpl *)_valueListImpl
1039 {
1040     return static_cast<CSSValueListImpl *>(DOM_cast<CSSValueImpl *>(_internal));
1041 }
1042
1043 - (unsigned long)length
1044 {
1045     return [self _valueListImpl]->length();
1046 }
1047
1048 - (DOMCSSValue *)item:(unsigned long)index
1049 {
1050     return [DOMCSSValue _valueWithImpl:[self _valueListImpl]->item(index)];
1051 }
1052
1053 @end
1054
1055 //------------------------------------------------------------------------------------------
1056 // DOMRGBColor
1057
1058 static CFMutableDictionaryRef wrapperCache = NULL;
1059
1060 id getWrapperForRGB(QRgb value)
1061 {
1062     if (!wrapperCache)
1063         return nil;
1064     return (id)CFDictionaryGetValue(wrapperCache, reinterpret_cast<const void *>(value));
1065 }
1066
1067 void setWrapperForRGB(id wrapper, QRgb value)
1068 {
1069     if (!wrapperCache) {
1070         // No need to retain/free either impl key, or id value.  Items will be removed
1071         // from the cache in dealloc methods.
1072         wrapperCache = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
1073     }
1074     CFDictionarySetValue(wrapperCache, reinterpret_cast<const void *>(value), wrapper);
1075 }
1076
1077 void removeWrapperForRGB(QRgb value)
1078 {
1079     if (!wrapperCache)
1080         return;
1081     CFDictionaryRemoveValue(wrapperCache, reinterpret_cast<const void *>(value));
1082 }
1083
1084 @implementation DOMRGBColor
1085
1086 - (void)dealloc
1087 {
1088     removeWrapperForRGB(reinterpret_cast<QRgb>(_internal));
1089     [super dealloc];
1090 }
1091
1092 - (void)finalize
1093 {
1094     removeWrapperForRGB(reinterpret_cast<QRgb>(_internal));
1095     [super finalize];
1096 }
1097
1098 - (DOMCSSPrimitiveValue *)red
1099 {
1100     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1101     int value = (rgb >> 16) & 0xFF;
1102     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1103 }
1104
1105 - (DOMCSSPrimitiveValue *)green
1106 {
1107     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1108     int value = (rgb >> 8) & 0xFF;
1109     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1110 }
1111
1112 - (DOMCSSPrimitiveValue *)blue
1113 {
1114     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1115     int value = rgb & 0xFF;
1116     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1117 }
1118
1119 - (id)copyWithZone:(NSZone *)zone
1120 {
1121     return [self retain];
1122 }
1123
1124 @end
1125
1126 @implementation DOMRGBColor (WebCoreInternal)
1127
1128 - (id)_initWithRGB:(QRgb)value
1129 {
1130     [super _init];
1131     _internal = reinterpret_cast<DOMObjectInternal *>(value);
1132     setWrapperForRGB(self, value);
1133     return self;
1134 }
1135
1136 + (DOMRGBColor *)_RGBColorWithRGB:(QRgb)value
1137 {
1138     id cachedInstance;
1139     cachedInstance = getWrapperForRGB(value);
1140     if (cachedInstance)
1141         return [[cachedInstance retain] autorelease];
1142     
1143     return [[[self alloc] _initWithRGB:value] autorelease];
1144 }
1145
1146 @end
1147
1148 @implementation DOMRGBColor (DOMRGBColorExtensions)
1149
1150 - (DOMCSSPrimitiveValue *)alpha
1151 {
1152     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1153     float value = (float)qAlpha(rgb) / 0xFF;
1154     return [DOMCSSPrimitiveValue _valueWithImpl:new CSSPrimitiveValueImpl(value, DOM::CSSPrimitiveValue::CSS_NUMBER)];
1155     
1156 }
1157
1158 @end
1159
1160 @implementation DOMRGBColor (WebPrivate)
1161
1162 - (NSColor *)_color
1163 {
1164     QRgb rgb = reinterpret_cast<QRgb>(_internal);
1165     return QColor(rgb).getNSColor();
1166 }
1167
1168 @end
1169
1170
1171 //------------------------------------------------------------------------------------------
1172 // DOMRect
1173
1174 @implementation DOMRect
1175
1176 - (void)dealloc
1177 {
1178     if (_internal) {
1179         DOM_cast<RectImpl *>(_internal)->deref();
1180     }
1181     [super dealloc];
1182 }
1183
1184 - (void)finalize
1185 {
1186     if (_internal) {
1187         DOM_cast<RectImpl *>(_internal)->deref();
1188     }
1189     [super finalize];
1190 }
1191
1192 - (RectImpl *)_rectImpl
1193 {
1194     return DOM_cast<RectImpl *>(_internal);
1195 }
1196
1197 - (DOMCSSPrimitiveValue *)top
1198 {
1199     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->top()];
1200 }
1201
1202 - (DOMCSSPrimitiveValue *)right
1203 {
1204     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->right()];
1205 }
1206
1207 - (DOMCSSPrimitiveValue *)bottom
1208 {
1209     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->bottom()];
1210 }
1211
1212 - (DOMCSSPrimitiveValue *)left
1213 {
1214     return [DOMCSSPrimitiveValue _valueWithImpl:[self _rectImpl]->left()];
1215 }
1216
1217 - (id)copyWithZone:(NSZone *)zone
1218 {
1219     return [self retain];
1220 }
1221
1222 @end
1223
1224 @implementation DOMRect (WebCoreInternal)
1225
1226 - (id)_initWithRectImpl:(RectImpl *)impl
1227 {
1228     [super _init];
1229     _internal = DOM_cast<DOMObjectInternal *>(impl);
1230     impl->ref();
1231     addDOMWrapper(self, impl);
1232     return self;
1233 }
1234
1235 + (DOMRect *)_rectWithImpl:(RectImpl *)impl
1236 {
1237     if (!impl)
1238         return nil;
1239     
1240     id cachedInstance;
1241     cachedInstance = getDOMWrapper(impl);
1242     if (cachedInstance)
1243         return [[cachedInstance retain] autorelease];
1244     
1245     return [[[self alloc] _initWithRectImpl:impl] autorelease];
1246 }
1247
1248 @end
1249
1250 //------------------------------------------------------------------------------------------
1251 // DOMCounter
1252
1253 @implementation DOMCounter
1254
1255 - (void)dealloc
1256 {
1257     if (_internal) {
1258         DOM_cast<CounterImpl *>(_internal)->deref();
1259     }
1260     [super dealloc];
1261 }
1262
1263 - (void)finalize
1264 {
1265     if (_internal) {
1266         DOM_cast<CounterImpl *>(_internal)->deref();
1267     }
1268     [super finalize];
1269 }
1270
1271 - (CounterImpl *)_counterImpl
1272 {
1273     return DOM_cast<CounterImpl *>(_internal);
1274 }
1275
1276 - (NSString *)identifier
1277 {
1278     return [self _counterImpl]->identifier();
1279 }
1280
1281 - (NSString *)listStyle
1282 {
1283     return [self _counterImpl]->listStyle();
1284 }
1285
1286 - (NSString *)separator
1287 {
1288     return [self _counterImpl]->separator();
1289 }
1290
1291 - (id)copyWithZone:(NSZone *)zone
1292 {
1293     return [self retain];
1294 }
1295
1296 @end
1297
1298 @implementation DOMCounter (WebCoreInternal)
1299
1300 - (id)_initWithCounterImpl:(CounterImpl *)impl
1301 {
1302     [super _init];
1303     _internal = DOM_cast<DOMObjectInternal *>(impl);
1304     impl->ref();
1305     addDOMWrapper(self, impl);
1306     return self;
1307 }
1308
1309 + (DOMCounter *)_counterWithImpl:(CounterImpl *)impl
1310 {
1311     if (!impl)
1312         return nil;
1313     
1314     id cachedInstance;
1315     cachedInstance = getDOMWrapper(impl);
1316     if (cachedInstance)
1317         return [[cachedInstance retain] autorelease];
1318     
1319     return [[[self alloc] _initWithCounterImpl:impl] autorelease];
1320 }
1321
1322 @end
1323
1324 //------------------------------------------------------------------------------------------
1325
1326 @implementation DOMCSSStyleDeclaration (DOMCSS2Properties)
1327
1328 - (NSString *)azimuth
1329 {
1330     return [self getPropertyValue:@"azimuth"];
1331 }
1332
1333 - (void)setAzimuth:(NSString *)azimuth
1334 {
1335     [self setProperty:@"azimuth" :azimuth :@""];
1336 }
1337
1338 - (NSString *)background
1339 {
1340     return [self getPropertyValue:@"background"];
1341 }
1342
1343 - (void)setBackground:(NSString *)background
1344 {
1345     [self setProperty:@"background" :background :@""];
1346 }
1347
1348 - (NSString *)backgroundAttachment
1349 {
1350     return [self getPropertyValue:@"background-attachment"];
1351 }
1352
1353 - (void)setBackgroundAttachment:(NSString *)backgroundAttachment
1354 {
1355     [self setProperty:@"background-attachment" :backgroundAttachment :@""];
1356 }
1357
1358 - (NSString *)backgroundColor
1359 {
1360     return [self getPropertyValue:@"background-color"];
1361 }
1362
1363 - (void)setBackgroundColor:(NSString *)backgroundColor
1364 {
1365     [self setProperty:@"background-color" :backgroundColor :@""];
1366 }
1367
1368 - (NSString *)backgroundImage
1369 {
1370     return [self getPropertyValue:@"background-image"];
1371 }
1372
1373 - (void)setBackgroundImage:(NSString *)backgroundImage
1374 {
1375     [self setProperty:@"background-image" :backgroundImage :@""];
1376 }
1377
1378 - (NSString *)backgroundPosition
1379 {
1380     return [self getPropertyValue:@"background-position"];
1381 }
1382
1383 - (void)setBackgroundPosition:(NSString *)backgroundPosition
1384 {
1385     [self setProperty:@"background-position" :backgroundPosition :@""];
1386 }
1387
1388 - (NSString *)backgroundRepeat
1389 {
1390     return [self getPropertyValue:@"background-repeat"];
1391 }
1392
1393 - (void)setBackgroundRepeat:(NSString *)backgroundRepeat
1394 {
1395     [self setProperty:@"background-repeat" :backgroundRepeat :@""];
1396 }
1397
1398 - (NSString *)border
1399 {
1400     return [self getPropertyValue:@"border"];
1401 }
1402
1403 - (void)setBorder:(NSString *)border
1404 {
1405     [self setProperty:@"border" :border :@""];
1406 }
1407
1408 - (NSString *)borderCollapse
1409 {
1410     return [self getPropertyValue:@"border-collapse"];
1411 }
1412
1413 - (void)setBorderCollapse:(NSString *)borderCollapse
1414 {
1415     [self setProperty:@"border-collapse" :borderCollapse :@""];
1416 }
1417
1418 - (NSString *)borderColor
1419 {
1420     return [self getPropertyValue:@"border-color"];
1421 }
1422
1423 - (void)setBorderColor:(NSString *)borderColor
1424 {
1425     [self setProperty:@"border-color" :borderColor :@""];
1426 }
1427
1428 - (NSString *)borderSpacing
1429 {
1430     return [self getPropertyValue:@"border-spacing"];
1431 }
1432
1433 - (void)setBorderSpacing:(NSString *)borderSpacing
1434 {
1435     [self setProperty:@"border-spacing" :borderSpacing :@""];
1436 }
1437
1438 - (NSString *)borderStyle
1439 {
1440     return [self getPropertyValue:@"border-style"];
1441 }
1442
1443 - (void)setBorderStyle:(NSString *)borderStyle
1444 {
1445     [self setProperty:@"border-style" :borderStyle :@""];
1446 }
1447
1448 - (NSString *)borderTop
1449 {
1450     return [self getPropertyValue:@"border-top"];
1451 }
1452
1453 - (void)setBorderTop:(NSString *)borderTop
1454 {
1455     [self setProperty:@"border-top" :borderTop :@""];
1456 }
1457
1458 - (NSString *)borderRight
1459 {
1460     return [self getPropertyValue:@"border-right"];
1461 }
1462
1463 - (void)setBorderRight:(NSString *)borderRight
1464 {
1465     [self setProperty:@"border-right" :borderRight :@""];
1466 }
1467
1468 - (NSString *)borderBottom
1469 {
1470     return [self getPropertyValue:@"border-bottom"];
1471 }
1472
1473 - (void)setBorderBottom:(NSString *)borderBottom
1474 {
1475     [self setProperty:@"border-bottom" :borderBottom :@""];
1476 }
1477
1478 - (NSString *)borderLeft
1479 {
1480     return [self getPropertyValue:@"border-left"];
1481 }
1482
1483 - (void)setBorderLeft:(NSString *)borderLeft
1484 {
1485     [self setProperty:@"border-left" :borderLeft :@""];
1486 }
1487
1488 - (NSString *)borderTopColor
1489 {
1490     return [self getPropertyValue:@"border-top-color"];
1491 }
1492
1493 - (void)setBorderTopColor:(NSString *)borderTopColor
1494 {
1495     [self setProperty:@"border-top-color" :borderTopColor :@""];
1496 }
1497
1498 - (NSString *)borderRightColor
1499 {
1500     return [self getPropertyValue:@"border-right-color"];
1501 }
1502
1503 - (void)setBorderRightColor:(NSString *)borderRightColor
1504 {
1505     [self setProperty:@"border-right-color" :borderRightColor :@""];
1506 }
1507
1508 - (NSString *)borderBottomColor
1509 {
1510     return [self getPropertyValue:@"border-bottom-color"];
1511 }
1512
1513 - (void)setBorderBottomColor:(NSString *)borderBottomColor
1514 {
1515     [self setProperty:@"border-bottom-color" :borderBottomColor :@""];
1516 }
1517
1518 - (NSString *)borderLeftColor
1519 {
1520     return [self getPropertyValue:@"border-left-color"];
1521 }
1522
1523 - (void)setBorderLeftColor:(NSString *)borderLeftColor
1524 {
1525     [self setProperty:@"border-left-color" :borderLeftColor :@""];
1526 }
1527
1528 - (NSString *)borderTopStyle
1529 {
1530     return [self getPropertyValue:@"border-top-style"];
1531 }
1532
1533 - (void)setBorderTopStyle:(NSString *)borderTopStyle
1534 {
1535     [self setProperty:@"border-top-style" :borderTopStyle :@""];
1536 }
1537
1538 - (NSString *)borderRightStyle
1539 {
1540     return [self getPropertyValue:@"border-right-style"];
1541 }
1542
1543 - (void)setBorderRightStyle:(NSString *)borderRightStyle
1544 {
1545     [self setProperty:@"border-right-style" :borderRightStyle :@""];
1546 }
1547
1548 - (NSString *)borderBottomStyle
1549 {
1550     return [self getPropertyValue:@"border-bottom-style"];
1551 }
1552
1553 - (void)setBorderBottomStyle:(NSString *)borderBottomStyle
1554 {
1555     [self setProperty:@"border-bottom-style" :borderBottomStyle :@""];
1556 }
1557
1558 - (NSString *)borderLeftStyle
1559 {
1560     return [self getPropertyValue:@"border-left-style"];
1561 }
1562
1563 - (void)setBorderLeftStyle:(NSString *)borderLeftStyle
1564 {
1565     [self setProperty:@"border-left-style" :borderLeftStyle :@""];
1566 }
1567
1568 - (NSString *)borderTopWidth
1569 {
1570     return [self getPropertyValue:@"border-top-width"];
1571 }
1572
1573 - (void)setBorderTopWidth:(NSString *)borderTopWidth
1574 {
1575     [self setProperty:@"border-top-width" :borderTopWidth :@""];
1576 }
1577
1578 - (NSString *)borderRightWidth
1579 {
1580     return [self getPropertyValue:@"border-right-width"];
1581 }
1582
1583 - (void)setBorderRightWidth:(NSString *)borderRightWidth
1584 {
1585     [self setProperty:@"border-right-width" :borderRightWidth :@""];
1586 }
1587
1588 - (NSString *)borderBottomWidth
1589 {
1590     return [self getPropertyValue:@"border-bottom-width"];
1591 }
1592
1593 - (void)setBorderBottomWidth:(NSString *)borderBottomWidth
1594 {
1595     [self setProperty:@"border-bottom-width" :borderBottomWidth :@""];
1596 }
1597
1598 - (NSString *)borderLeftWidth
1599 {
1600     return [self getPropertyValue:@"border-left-width"];
1601 }
1602
1603 - (void)setBorderLeftWidth:(NSString *)borderLeftWidth
1604 {
1605     [self setProperty:@"border-left-width" :borderLeftWidth :@""];
1606 }
1607
1608 - (NSString *)borderWidth
1609 {
1610     return [self getPropertyValue:@"border-width"];
1611 }
1612
1613 - (void)setBorderWidth:(NSString *)borderWidth
1614 {
1615     [self setProperty:@"border-width" :borderWidth :@""];
1616 }
1617
1618 - (NSString *)bottom
1619 {
1620     return [self getPropertyValue:@"bottom"];
1621 }
1622
1623 - (void)setBottom:(NSString *)bottom
1624 {
1625     [self setProperty:@"bottom" :bottom :@""];
1626 }
1627
1628 - (NSString *)captionSide
1629 {
1630     return [self getPropertyValue:@"caption-side"];
1631 }
1632
1633 - (void)setCaptionSide:(NSString *)captionSide
1634 {
1635     [self setProperty:@"caption-side" :captionSide :@""];
1636 }
1637
1638 - (NSString *)clear
1639 {
1640     return [self getPropertyValue:@"clear"];
1641 }
1642
1643 - (void)setClear:(NSString *)clear
1644 {
1645     [self setProperty:@"clear" :clear :@""];
1646 }
1647
1648 - (NSString *)clip
1649 {
1650     return [self getPropertyValue:@"clip"];
1651 }
1652
1653 - (void)setClip:(NSString *)clip
1654 {
1655     [self setProperty:@"clip" :clip :@""];
1656 }
1657
1658 - (NSString *)color
1659 {
1660     return [self getPropertyValue:@"color"];
1661 }
1662
1663 - (void)setColor:(NSString *)color
1664 {
1665     [self setProperty:@"color" :color :@""];
1666 }
1667
1668 - (NSString *)content
1669 {
1670     return [self getPropertyValue:@"content"];
1671 }
1672
1673 - (void)setContent:(NSString *)content
1674 {
1675     [self setProperty:@"content" :content :@""];
1676 }
1677
1678 - (NSString *)counterIncrement
1679 {
1680     return [self getPropertyValue:@"counter-increment"];
1681 }
1682
1683 - (void)setCounterIncrement:(NSString *)counterIncrement
1684 {
1685     [self setProperty:@"counter-increment" :counterIncrement :@""];
1686 }
1687
1688 - (NSString *)counterReset
1689 {
1690     return [self getPropertyValue:@"counter-reset"];
1691 }
1692
1693 - (void)setCounterReset:(NSString *)counterReset
1694 {
1695     [self setProperty:@"counter-reset" :counterReset :@""];
1696 }
1697
1698 - (NSString *)cue
1699 {
1700     return [self getPropertyValue:@"cue"];
1701 }
1702
1703 - (void)setCue:(NSString *)cue
1704 {
1705     [self setProperty:@"cue" :cue :@""];
1706 }
1707
1708 - (NSString *)cueAfter
1709 {
1710     return [self getPropertyValue:@"cue-after"];
1711 }
1712
1713 - (void)setCueAfter:(NSString *)cueAfter
1714 {
1715     [self setProperty:@"cue-after" :cueAfter :@""];
1716 }
1717
1718 - (NSString *)cueBefore
1719 {
1720     return [self getPropertyValue:@"cue-before"];
1721 }
1722
1723 - (void)setCueBefore:(NSString *)cueBefore
1724 {
1725     [self setProperty:@"cue-before" :cueBefore :@""];
1726 }
1727
1728 - (NSString *)cursor
1729 {
1730     return [self getPropertyValue:@"cursor"];
1731 }
1732
1733 - (void)setCursor:(NSString *)cursor
1734 {
1735     [self setProperty:@"cursor" :cursor :@""];
1736 }
1737
1738 - (NSString *)direction
1739 {
1740     return [self getPropertyValue:@"direction"];
1741 }
1742
1743 - (void)setDirection:(NSString *)direction
1744 {
1745     [self setProperty:@"direction" :direction :@""];
1746 }
1747
1748 - (NSString *)display
1749 {
1750     return [self getPropertyValue:@"display"];
1751 }
1752
1753 - (void)setDisplay:(NSString *)display
1754 {
1755     [self setProperty:@"display" :display :@""];
1756 }
1757
1758 - (NSString *)elevation
1759 {
1760     return [self getPropertyValue:@"elevation"];
1761 }
1762
1763 - (void)setElevation:(NSString *)elevation
1764 {
1765     [self setProperty:@"elevation" :elevation :@""];
1766 }
1767
1768 - (NSString *)emptyCells
1769 {
1770     return [self getPropertyValue:@"empty-cells"];
1771 }
1772
1773 - (void)setEmptyCells:(NSString *)emptyCells
1774 {
1775     [self setProperty:@"empty-cells" :emptyCells :@""];
1776 }
1777
1778 - (NSString *)cssFloat
1779 {
1780     return [self getPropertyValue:@"css-float"];
1781 }
1782
1783 - (void)setCssFloat:(NSString *)cssFloat
1784 {
1785     [self setProperty:@"css-float" :cssFloat :@""];
1786 }
1787
1788 - (NSString *)font
1789 {
1790     return [self getPropertyValue:@"font"];
1791 }
1792
1793 - (void)setFont:(NSString *)font
1794 {
1795     [self setProperty:@"font" :font :@""];
1796 }
1797
1798 - (NSString *)fontFamily
1799 {
1800     return [self getPropertyValue:@"font-family"];
1801 }
1802
1803 - (void)setFontFamily:(NSString *)fontFamily
1804 {
1805     [self setProperty:@"font-family" :fontFamily :@""];
1806 }
1807
1808 - (NSString *)fontSize
1809 {
1810     return [self getPropertyValue:@"font-size"];
1811 }
1812
1813 - (void)setFontSize:(NSString *)fontSize
1814 {
1815     [self setProperty:@"font-size" :fontSize :@""];
1816 }
1817
1818 - (NSString *)fontSizeAdjust
1819 {
1820     return [self getPropertyValue:@"font-size-adjust"];
1821 }
1822
1823 - (void)setFontSizeAdjust:(NSString *)fontSizeAdjust
1824 {
1825     [self setProperty:@"font-size-adjust" :fontSizeAdjust :@""];
1826 }
1827
1828 - (NSString *)fontStretch
1829 {
1830     return [self getPropertyValue:@"font-stretch"];
1831 }
1832
1833 - (void)setFontStretch:(NSString *)fontStretch
1834 {
1835     [self setProperty:@"font-stretch" :fontStretch :@""];
1836 }
1837
1838 - (NSString *)fontStyle
1839 {
1840     return [self getPropertyValue:@"font-style"];
1841 }
1842
1843 - (void)setFontStyle:(NSString *)fontStyle
1844 {
1845     [self setProperty:@"font-style" :fontStyle :@""];
1846 }
1847
1848 - (NSString *)fontVariant
1849 {
1850     return [self getPropertyValue:@"font-variant"];
1851 }
1852
1853 - (void)setFontVariant:(NSString *)fontVariant
1854 {
1855     [self setProperty:@"font-variant" :fontVariant :@""];
1856 }
1857
1858 - (NSString *)fontWeight
1859 {
1860     return [self getPropertyValue:@"font-weight"];
1861 }
1862
1863 - (void)setFontWeight:(NSString *)fontWeight
1864 {
1865     [self setProperty:@"font-weight" :fontWeight :@""];
1866 }
1867
1868 - (NSString *)height
1869 {
1870     return [self getPropertyValue:@"height"];
1871 }
1872
1873 - (void)setHeight:(NSString *)height
1874 {
1875     [self setProperty:@"height" :height :@""];
1876 }
1877
1878 - (NSString *)left
1879 {
1880     return [self getPropertyValue:@"left"];
1881 }
1882
1883 - (void)setLeft:(NSString *)left
1884 {
1885     [self setProperty:@"left" :left :@""];
1886 }
1887
1888 - (NSString *)letterSpacing
1889 {
1890     return [self getPropertyValue:@"letter-spacing"];
1891 }
1892
1893 - (void)setLetterSpacing:(NSString *)letterSpacing
1894 {
1895     [self setProperty:@"letter-spacing" :letterSpacing :@""];
1896 }
1897
1898 - (NSString *)lineHeight
1899 {
1900     return [self getPropertyValue:@"line-height"];
1901 }
1902
1903 - (void)setLineHeight:(NSString *)lineHeight
1904 {
1905     [self setProperty:@"line-height" :lineHeight :@""];
1906 }
1907
1908 - (NSString *)listStyle
1909 {
1910     return [self getPropertyValue:@"list-style"];
1911 }
1912
1913 - (void)setListStyle:(NSString *)listStyle
1914 {
1915     [self setProperty:@"list-style" :listStyle :@""];
1916 }
1917
1918 - (NSString *)listStyleImage
1919 {
1920     return [self getPropertyValue:@"list-style-image"];
1921 }
1922
1923 - (void)setListStyleImage:(NSString *)listStyleImage
1924 {
1925     [self setProperty:@"list-style-image" :listStyleImage :@""];
1926 }
1927
1928 - (NSString *)listStylePosition
1929 {
1930     return [self getPropertyValue:@"list-style-position"];
1931 }
1932
1933 - (void)setListStylePosition:(NSString *)listStylePosition
1934 {
1935     [self setProperty:@"list-style-position" :listStylePosition :@""];
1936 }
1937
1938 - (NSString *)listStyleType
1939 {
1940     return [self getPropertyValue:@"list-style-type"];
1941 }
1942
1943 - (void)setListStyleType:(NSString *)listStyleType
1944 {
1945     [self setProperty:@"list-style-type" :listStyleType :@""];
1946 }
1947
1948 - (NSString *)margin
1949 {
1950     return [self getPropertyValue:@"margin"];
1951 }
1952
1953 - (void)setMargin:(NSString *)margin
1954 {
1955     [self setProperty:@"margin" :margin :@""];
1956 }
1957
1958 - (NSString *)marginTop
1959 {
1960     return [self getPropertyValue:@"margin-top"];
1961 }
1962
1963 - (void)setMarginTop:(NSString *)marginTop
1964 {
1965     [self setProperty:@"margin-top" :marginTop :@""];
1966 }
1967
1968 - (NSString *)marginRight
1969 {
1970     return [self getPropertyValue:@"margin-right"];
1971 }
1972
1973 - (void)setMarginRight:(NSString *)marginRight
1974 {
1975     [self setProperty:@"margin-right" :marginRight :@""];
1976 }
1977
1978 - (NSString *)marginBottom
1979 {
1980     return [self getPropertyValue:@"margin-bottom"];
1981 }
1982
1983 - (void)setMarginBottom:(NSString *)marginBottom
1984 {
1985     [self setProperty:@"margin-bottom" :marginBottom :@""];
1986 }
1987
1988 - (NSString *)marginLeft
1989 {
1990     return [self getPropertyValue:@"margin-left"];
1991 }
1992
1993 - (void)setMarginLeft:(NSString *)marginLeft
1994 {
1995     [self setProperty:@"margin-left" :marginLeft :@""];
1996 }
1997
1998 - (NSString *)markerOffset
1999 {
2000     return [self getPropertyValue:@"marker-offset"];
2001 }
2002
2003 - (void)setMarkerOffset:(NSString *)markerOffset
2004 {
2005     [self setProperty:@"marker-offset" :markerOffset :@""];
2006 }
2007
2008 - (NSString *)marks
2009 {
2010     return [self getPropertyValue:@"marks"];
2011 }
2012
2013 - (void)setMarks:(NSString *)marks
2014 {
2015     [self setProperty:@"marks" :marks :@""];
2016 }
2017
2018 - (NSString *)maxHeight
2019 {
2020     return [self getPropertyValue:@"max-height"];
2021 }
2022
2023 - (void)setMaxHeight:(NSString *)maxHeight
2024 {
2025     [self setProperty:@"max-height" :maxHeight :@""];
2026 }
2027
2028 - (NSString *)maxWidth
2029 {
2030     return [self getPropertyValue:@"max-width"];
2031 }
2032
2033 - (void)setMaxWidth:(NSString *)maxWidth
2034 {
2035     [self setProperty:@"max-width" :maxWidth :@""];
2036 }
2037
2038 - (NSString *)minHeight
2039 {
2040     return [self getPropertyValue:@"min-height"];
2041 }
2042
2043 - (void)setMinHeight:(NSString *)minHeight
2044 {
2045     [self setProperty:@"min-height" :minHeight :@""];
2046 }
2047
2048 - (NSString *)minWidth
2049 {
2050     return [self getPropertyValue:@"min-width"];
2051 }
2052
2053 - (void)setMinWidth:(NSString *)minWidth
2054 {
2055     [self setProperty:@"min-width" :minWidth :@""];
2056 }
2057
2058 - (NSString *)orphans
2059 {
2060     return [self getPropertyValue:@"orphans"];
2061 }
2062
2063 - (void)setOrphans:(NSString *)orphans
2064 {
2065     [self setProperty:@"orphans" :orphans :@""];
2066 }
2067
2068 - (NSString *)outline
2069 {
2070     return [self getPropertyValue:@"outline"];
2071 }
2072
2073 - (void)setOutline:(NSString *)outline
2074 {
2075     [self setProperty:@"outline" :outline :@""];
2076 }
2077
2078 - (NSString *)outlineColor
2079 {
2080     return [self getPropertyValue:@"outline-color"];
2081 }
2082
2083 - (void)setOutlineColor:(NSString *)outlineColor
2084 {
2085     [self setProperty:@"outline-color" :outlineColor :@""];
2086 }
2087
2088 - (NSString *)outlineStyle
2089 {
2090     return [self getPropertyValue:@"outline-style"];
2091 }
2092
2093 - (void)setOutlineStyle:(NSString *)outlineStyle
2094 {
2095     [self setProperty:@"outline-style" :outlineStyle :@""];
2096 }
2097
2098 - (NSString *)outlineWidth
2099 {
2100     return [self getPropertyValue:@"outline-width"];
2101 }
2102
2103 - (void)setOutlineWidth:(NSString *)outlineWidth
2104 {
2105     [self setProperty:@"outline-width" :outlineWidth :@""];
2106 }
2107
2108 - (NSString *)overflow
2109 {
2110     return [self getPropertyValue:@"overflow"];
2111 }
2112
2113 - (void)setOverflow:(NSString *)overflow
2114 {
2115     [self setProperty:@"overflow" :overflow :@""];
2116 }
2117
2118 - (NSString *)padding
2119 {
2120     return [self getPropertyValue:@"padding"];
2121 }
2122
2123 - (void)setPadding:(NSString *)padding
2124 {
2125     [self setProperty:@"padding" :padding :@""];
2126 }
2127
2128 - (NSString *)paddingTop
2129 {
2130     return [self getPropertyValue:@"padding-top"];
2131 }
2132
2133 - (void)setPaddingTop:(NSString *)paddingTop
2134 {
2135     [self setProperty:@"padding-top" :paddingTop :@""];
2136 }
2137
2138 - (NSString *)paddingRight
2139 {
2140     return [self getPropertyValue:@"padding-right"];
2141 }
2142
2143 - (void)setPaddingRight:(NSString *)paddingRight
2144 {
2145     [self setProperty:@"padding-right" :paddingRight :@""];
2146 }
2147
2148 - (NSString *)paddingBottom
2149 {
2150     return [self getPropertyValue:@"padding-bottom"];
2151 }
2152
2153 - (void)setPaddingBottom:(NSString *)paddingBottom
2154 {
2155     [self setProperty:@"padding-bottom" :paddingBottom :@""];
2156 }
2157
2158 - (NSString *)paddingLeft
2159 {
2160     return [self getPropertyValue:@"padding-left"];
2161 }
2162
2163 - (void)setPaddingLeft:(NSString *)paddingLeft
2164 {
2165     [self setProperty:@"padding-left" :paddingLeft :@""];
2166 }
2167
2168 - (NSString *)page
2169 {
2170     return [self getPropertyValue:@"page"];
2171 }
2172
2173 - (void)setPage:(NSString *)page
2174 {
2175     [self setProperty:@"page" :page :@""];
2176 }
2177
2178 - (NSString *)pageBreakAfter
2179 {
2180     return [self getPropertyValue:@"page-break-after"];
2181 }
2182
2183 - (void)setPageBreakAfter:(NSString *)pageBreakAfter
2184 {
2185     [self setProperty:@"page-break-after" :pageBreakAfter :@""];
2186 }
2187
2188 - (NSString *)pageBreakBefore
2189 {
2190     return [self getPropertyValue:@"page-break-before"];
2191 }
2192
2193 - (void)setPageBreakBefore:(NSString *)pageBreakBefore
2194 {
2195     [self setProperty:@"page-break-before" :pageBreakBefore :@""];
2196 }
2197
2198 - (NSString *)pageBreakInside
2199 {
2200     return [self getPropertyValue:@"page-break-inside"];
2201 }
2202
2203 - (void)setPageBreakInside:(NSString *)pageBreakInside
2204 {
2205     [self setProperty:@"page-break-inside" :pageBreakInside :@""];
2206 }
2207
2208 - (NSString *)pause
2209 {
2210     return [self getPropertyValue:@"pause"];
2211 }
2212
2213 - (void)setPause:(NSString *)pause
2214 {
2215     [self setProperty:@"pause" :pause :@""];
2216 }
2217
2218 - (NSString *)pauseAfter
2219 {
2220     return [self getPropertyValue:@"pause-after"];
2221 }
2222
2223 - (void)setPauseAfter:(NSString *)pauseAfter
2224 {
2225     [self setProperty:@"pause-after" :pauseAfter :@""];
2226 }
2227
2228 - (NSString *)pauseBefore
2229 {
2230     return [self getPropertyValue:@"pause-before"];
2231 }
2232
2233 - (void)setPauseBefore:(NSString *)pauseBefore
2234 {
2235     [self setProperty:@"pause-before" :pauseBefore :@""];
2236 }
2237
2238 - (NSString *)pitch
2239 {
2240     return [self getPropertyValue:@"pitch"];
2241 }
2242
2243 - (void)setPitch:(NSString *)pitch
2244 {
2245     [self setProperty:@"pitch" :pitch :@""];
2246 }
2247
2248 - (NSString *)pitchRange
2249 {
2250     return [self getPropertyValue:@"pitch-range"];
2251 }
2252
2253 - (void)setPitchRange:(NSString *)pitchRange
2254 {
2255     [self setProperty:@"pitch-range" :pitchRange :@""];
2256 }
2257
2258 - (NSString *)playDuring
2259 {
2260     return [self getPropertyValue:@"play-during"];
2261 }
2262
2263 - (void)setPlayDuring:(NSString *)playDuring
2264 {
2265     [self setProperty:@"play-during" :playDuring :@""];
2266 }
2267
2268 - (NSString *)position
2269 {
2270     return [self getPropertyValue:@"position"];
2271 }
2272
2273 - (void)setPosition:(NSString *)position
2274 {
2275     [self setProperty:@"position" :position :@""];
2276 }
2277
2278 - (NSString *)quotes
2279 {
2280     return [self getPropertyValue:@"quotes"];
2281 }
2282
2283 - (void)setQuotes:(NSString *)quotes
2284 {
2285     [self setProperty:@"quotes" :quotes :@""];
2286 }
2287
2288 - (NSString *)richness
2289 {
2290     return [self getPropertyValue:@"richness"];
2291 }
2292
2293 - (void)setRichness:(NSString *)richness
2294 {
2295     [self setProperty:@"richness" :richness :@""];
2296 }
2297
2298 - (NSString *)right
2299 {
2300     return [self getPropertyValue:@"right"];
2301 }
2302
2303 - (void)setRight:(NSString *)right
2304 {
2305     [self setProperty:@"right" :right :@""];
2306 }
2307
2308 - (NSString *)size
2309 {
2310     return [self getPropertyValue:@"size"];
2311 }
2312
2313 - (void)setSize:(NSString *)size
2314 {
2315     [self setProperty:@"size" :size :@""];
2316 }
2317
2318 - (NSString *)speak
2319 {
2320     return [self getPropertyValue:@"speak"];
2321 }
2322
2323 - (void)setSpeak:(NSString *)speak
2324 {
2325     [self setProperty:@"speak" :speak :@""];
2326 }
2327
2328 - (NSString *)speakHeader
2329 {
2330     return [self getPropertyValue:@"speak-header"];
2331 }
2332
2333 - (void)setSpeakHeader:(NSString *)speakHeader
2334 {
2335     [self setProperty:@"speak-header" :speakHeader :@""];
2336 }
2337
2338 - (NSString *)speakNumeral
2339 {
2340     return [self getPropertyValue:@"speak-numeral"];
2341 }
2342
2343 - (void)setSpeakNumeral:(NSString *)speakNumeral
2344 {
2345     [self setProperty:@"speak-numeral" :speakNumeral :@""];
2346 }
2347
2348 - (NSString *)speakPunctuation
2349 {
2350     return [self getPropertyValue:@"speak-punctuation"];
2351 }
2352
2353 - (void)setSpeakPunctuation:(NSString *)speakPunctuation
2354 {
2355     [self setProperty:@"speak-punctuation" :speakPunctuation :@""];
2356 }
2357
2358 - (NSString *)speechRate
2359 {
2360     return [self getPropertyValue:@"speech-rate"];
2361 }
2362
2363 - (void)setSpeechRate:(NSString *)speechRate
2364 {
2365     [self setProperty:@"speech-rate" :speechRate :@""];
2366 }
2367
2368 - (NSString *)stress
2369 {
2370     return [self getPropertyValue:@"stress"];
2371 }
2372
2373 - (void)setStress:(NSString *)stress
2374 {
2375     [self setProperty:@"stress" :stress :@""];
2376 }
2377
2378 - (NSString *)tableLayout
2379 {
2380     return [self getPropertyValue:@"table-layout"];
2381 }
2382
2383 - (void)setTableLayout:(NSString *)tableLayout
2384 {
2385     [self setProperty:@"table-layout" :tableLayout :@""];
2386 }
2387
2388 - (NSString *)textAlign
2389 {
2390     return [self getPropertyValue:@"text-align"];
2391 }
2392
2393 - (void)setTextAlign:(NSString *)textAlign
2394 {
2395     [self setProperty:@"text-align" :textAlign :@""];
2396 }
2397
2398 - (NSString *)textDecoration
2399 {
2400     return [self getPropertyValue:@"text-decoration"];
2401 }
2402
2403 - (void)setTextDecoration:(NSString *)textDecoration
2404 {
2405     [self setProperty:@"text-decoration" :textDecoration :@""];
2406 }
2407
2408 - (NSString *)textIndent
2409 {
2410     return [self getPropertyValue:@"text-indent"];
2411 }
2412
2413 - (void)setTextIndent:(NSString *)textIndent
2414 {
2415     [self setProperty:@"text-indent" :textIndent :@""];
2416 }
2417
2418 - (NSString *)textShadow
2419 {
2420     return [self getPropertyValue:@"text-shadow"];
2421 }
2422
2423 - (void)setTextShadow:(NSString *)textShadow
2424 {
2425     [self setProperty:@"text-shadow" :textShadow :@""];
2426 }
2427
2428 - (NSString *)textTransform
2429 {
2430     return [self getPropertyValue:@"text-transform"];
2431 }
2432
2433 - (void)setTextTransform:(NSString *)textTransform
2434 {
2435     [self setProperty:@"text-transform" :textTransform :@""];
2436 }
2437
2438 - (NSString *)top
2439 {
2440     return [self getPropertyValue:@"top"];
2441 }
2442
2443 - (void)setTop:(NSString *)top
2444 {
2445     [self setProperty:@"top" :top :@""];
2446 }
2447
2448 - (NSString *)unicodeBidi
2449 {
2450     return [self getPropertyValue:@"unicode-bidi"];
2451 }
2452
2453 - (void)setUnicodeBidi:(NSString *)unicodeBidi
2454 {
2455     [self setProperty:@"unicode-bidi" :unicodeBidi :@""];
2456 }
2457
2458 - (NSString *)verticalAlign
2459 {
2460     return [self getPropertyValue:@"vertical-align"];
2461 }
2462
2463 - (void)setVerticalAlign:(NSString *)verticalAlign
2464 {
2465     [self setProperty:@"vertical-align" :verticalAlign :@""];
2466 }
2467
2468 - (NSString *)visibility
2469 {
2470     return [self getPropertyValue:@"visibility"];
2471 }
2472
2473 - (void)setVisibility:(NSString *)visibility
2474 {
2475     [self setProperty:@"visibility" :visibility :@""];
2476 }
2477
2478 - (NSString *)voiceFamily
2479 {
2480     return [self getPropertyValue:@"voice-family"];
2481 }
2482
2483 - (void)setVoiceFamily:(NSString *)voiceFamily
2484 {
2485     [self setProperty:@"voice-family" :voiceFamily :@""];
2486 }
2487
2488 - (NSString *)volume
2489 {
2490     return [self getPropertyValue:@"volume"];
2491 }
2492
2493 - (void)setVolume:(NSString *)volume
2494 {
2495     [self setProperty:@"volume" :volume :@""];
2496 }
2497
2498 - (NSString *)whiteSpace
2499 {
2500     return [self getPropertyValue:@"white-space"];
2501 }
2502
2503 - (void)setWhiteSpace:(NSString *)whiteSpace
2504 {
2505     [self setProperty:@"white-space" :whiteSpace :@""];
2506 }
2507
2508 - (NSString *)widows
2509 {
2510     return [self getPropertyValue:@"widows"];
2511 }
2512
2513 - (void)setWidows:(NSString *)widows
2514 {
2515     [self setProperty:@"widows" :widows :@""];
2516 }
2517
2518 - (NSString *)width
2519 {
2520     return [self getPropertyValue:@"width"];
2521 }
2522
2523 - (void)setWidth:(NSString *)width
2524 {
2525     [self setProperty:@"width" :width :@""];
2526 }
2527
2528 - (NSString *)wordSpacing
2529 {
2530     return [self getPropertyValue:@"word-spacing"];
2531 }
2532
2533 - (void)setWordSpacing:(NSString *)wordSpacing
2534 {
2535     [self setProperty:@"word-spacing" :wordSpacing :@""];
2536 }
2537
2538 - (NSString *)zIndex
2539 {
2540     return [self getPropertyValue:@"z-index"];
2541 }
2542
2543 - (void)setZIndex:(NSString *)zIndex
2544 {
2545     [self setProperty:@"z-index" :zIndex :@""];
2546 }
2547
2548 @end
2549
2550 //------------------------------------------------------------------------------------------
2551
2552
2553 @implementation DOMObject (DOMLinkStyle)
2554
2555 - (DOMStyleSheet *)sheet
2556 {
2557     ERROR("unimplemented");
2558     return nil;
2559 }
2560
2561 @end
2562
2563 @implementation DOMDocument (DOMViewCSS)
2564
2565 - (DOMCSSStyleDeclaration *)getComputedStyle:(DOMElement *)elt :(NSString *)pseudoElt
2566 {
2567     return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:
2568         AbstractViewImpl([self _documentImpl]).getComputedStyle([elt _elementImpl], DOMString(pseudoElt).implementation())];
2569 }
2570
2571 @end