Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion Source/DOM classes/SVG-DOM/SVGDefsElement.m
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#import "SVGDefsElement.h"

@implementation SVGDefsElement

@end
4 changes: 2 additions & 2 deletions Source/DOM classes/Unported or Partial DOM/SVGSVGElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,15 @@
#import "SVGPoint.h"
#import "SVGRect.h"
#import "SVGTransform.h"

#import "SVGTransformable.h"
#pragma mark - a few raw DOM imports are required for SVG DOM, but not many
#import "Element.h"
#import "NodeList.h"

#import "ConverterSVGToCALayer.h"
#import "SVGKSource.h"

@interface SVGSVGElement : SVGElement < DocumentCSS, SVGFitToViewBox, /* FIXME: refactor and delete this, it's in violation of the spec: */ ConverterSVGToCALayer >
@interface SVGSVGElement : SVGElement <SVGTransformable, DocumentCSS, SVGFitToViewBox, /* FIXME: refactor and delete this, it's in violation of the spec: */ ConverterSVGToCALayer >



Expand Down
1 change: 1 addition & 0 deletions Source/DOM classes/Unported or Partial DOM/SVGSVGElement.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ @interface SVGSVGElement()

@implementation SVGSVGElement

@synthesize transform;
@synthesize x;
@synthesize y;
@synthesize width;
Expand Down
40 changes: 40 additions & 0 deletions Source/SVGKImage+CSS.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//
// SVGKImage+CSS.h
// DMSeatCore
//
// Created by lichentao on 2019/9/17.
// Copyright © 2019 damai. All rights reserved.
//

#import "SVGKImage.h"
NS_ASSUME_NONNULL_BEGIN

@interface SVGKImage (CSS)

#pragma mark - CSS
/**
@description 通过字符串设置CSS-Selector属性
@param cssString: @".testid {fill : #0ff;} #testclass {fill : #0f0;opacity : 1;}"
@return BOOL 注入成功

@Example
NSString *testCssString = [NSString stringWithFormat:@".testid {fill : #0ff;} #testclass {fill : #0f0;opacity : 1;}"];
[svgkimage configStyleSheetStr:testCssString];
*/
- (BOOL)configStyleSheetStr:(NSString *)cssString;

/**
给Element注入Selector (nodeName : selName)
@param nodeName:(@"id" || @"class")
@param selName: @".testid" || @"#testclass"
@Example
@id-mode
[svgImage configNodeSelector:element NodeName:@“id” SelectorName:@“.testid”];
@class-mode
[svgImage configNodeSelector:element NodeName:@“class” SelectorName:@“#testclass”];
*/
- (void)configNodeSelector:(Element *)element NodeName:(NSString *)nodeName SelectorName:(NSString *)selName;

@end

NS_ASSUME_NONNULL_END
84 changes: 84 additions & 0 deletions Source/SVGKImage+CSS.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
//
// SVGKImage+CSS.m
// DMSeatCore
//
// Created by lichentao on 2019/9/17.
// Copyright © 2019 damai. All rights reserved.
//

#import "SVGKImage+CSS.h"
#import "CSSStyleSheet.h"
#import "CSSStyleRule.h"
#import "StyleSheetList+Mutable.h"
#import "CSSRuleList+Mutable.h"

@implementation SVGKImage (CSS)

// 样式Style 字符串
- (BOOL)configStyleSheetStr:(NSString *)cssString{
// 遍历styleRule (selector如果有则z替换,其他selector追加到最后一个object的s样式表中)
BOOL styleHasRule = NO;
NSString* c = [cssString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if( c.length > 0 )
{
CSSStyleSheet* parsedStylesheet = [[CSSStyleSheet alloc] initWithString:c];
if (self.DOMDocument.rootElement.styleSheets.internalArray.count == 0) {
// 如果没有直接添加CSSStyleSheet
[self.DOMDocument.rootElement.styleSheets.internalArray addObject:parsedStylesheet];
}else{
// 存在StyleSheet 则 查找是否z存在StyleRule
// 有则忽略,没有加到最后的stylesheet中
for(CSSStyleRule* genericRule in parsedStylesheet.cssRules.internalArray.reverseObjectEnumerator) {
styleHasRule= [self constructStyleSheetsInternalArray:genericRule];
}
}
}
return styleHasRule;
}

// 遍历stylelist sheet CSSStyleRule
- (BOOL)constructStyleSheetsInternalArray:(CSSStyleRule *)styleConfigRule{
BOOL isCompareSelector = NO;
@autoreleasepool
{
for( StyleSheet* genericSheet in self.DOMDocument.rootElement.styleSheets.internalArray.reverseObjectEnumerator)
{
if( [genericSheet isKindOfClass:[CSSStyleSheet class]])
{
CSSStyleSheet* cssSheet = (CSSStyleSheet*) genericSheet;
for( CSSStyleRule* genericRule in cssSheet.cssRules.internalArray.reverseObjectEnumerator)
{
if( [genericRule isKindOfClass:[CSSStyleRule class]])
{
CSSStyleRule* styleRule = (CSSStyleRule*) genericRule;
if (styleRule.selectorText != nil && ![styleRule.selectorText isEqualToString:@""]) {
NSRange styleRange = [styleConfigRule.selectorText rangeOfString:styleRule.selectorText];
if (styleRange.length > 0) {
if (![styleRule.style.cssText isEqualToString:styleConfigRule.style.cssText]) {
styleRule.style = styleConfigRule.style;
}
isCompareSelector= YES;
}
}
}
}
}
}
}
if (!isCompareSelector && self.DOMDocument.rootElement.styleSheets.internalArray.count > 0) {
CSSStyleSheet* genericSheet =(CSSStyleSheet *)self.DOMDocument.rootElement.styleSheets.internalArray.lastObject;
[genericSheet.cssRules.internalArray addObject:styleConfigRule];
}
return isCompareSelector;
}

/**
*配置Node Name-Value
*/
- (void)configNodeSelector:(Element *)element NodeName:(NSString *)nodeName SelectorName:(NSString *)selName{

Attr *att = [[Attr alloc] initWithNamespace:@"http://www.w3.org/2000/svg" qualifiedName:nodeName value:selName];
[element.attributes setNamedItemNS:att];
}

@end