mirror of
https://github.com/exyte/Macaw.git
synced 2024-09-11 05:05:23 +03:00
Merge branch 'master'
Conflicts: Macaw.xcodeproj/project.pbxproj
This commit is contained in:
commit
5386fffe78
@ -520,6 +520,8 @@
|
|||||||
A74C823E2297DB2C0085A832 /* shapes-rect-03-t-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C823A2297DB2B0085A832 /* shapes-rect-03-t-manual.reference */; };
|
A74C823E2297DB2C0085A832 /* shapes-rect-03-t-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C823A2297DB2B0085A832 /* shapes-rect-03-t-manual.reference */; };
|
||||||
A74C823F2297DB2C0085A832 /* shapes-rect-06-f-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C823B2297DB2B0085A832 /* shapes-rect-06-f-manual.reference */; };
|
A74C823F2297DB2C0085A832 /* shapes-rect-06-f-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C823B2297DB2B0085A832 /* shapes-rect-06-f-manual.reference */; };
|
||||||
A74C82412297DC220085A832 /* shapes-rect-02-t-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C82402297DC220085A832 /* shapes-rect-02-t-manual.reference */; };
|
A74C82412297DC220085A832 /* shapes-rect-02-t-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C82402297DC220085A832 /* shapes-rect-02-t-manual.reference */; };
|
||||||
|
A74C82032296BE5F0085A832 /* paths-data-20-f-manual.svg in Resources */ = {isa = PBXBuildFile; fileRef = A74C82022296BE5F0085A832 /* paths-data-20-f-manual.svg */; };
|
||||||
|
A74C82052296BFC60085A832 /* paths-data-20-f-manual.reference in Resources */ = {isa = PBXBuildFile; fileRef = A74C82042296BFC60085A832 /* paths-data-20-f-manual.reference */; };
|
||||||
A7E675561EC4213500BD9ECB /* NodeBoundsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E675551EC4213500BD9ECB /* NodeBoundsTests.swift */; };
|
A7E675561EC4213500BD9ECB /* NodeBoundsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E675551EC4213500BD9ECB /* NodeBoundsTests.swift */; };
|
||||||
C410148E1F834D290022EE44 /* style.svg in Resources */ = {isa = PBXBuildFile; fileRef = C410148D1F834D280022EE44 /* style.svg */; };
|
C410148E1F834D290022EE44 /* style.svg in Resources */ = {isa = PBXBuildFile; fileRef = C410148D1F834D280022EE44 /* style.svg */; };
|
||||||
C4153A8F1F8793DE001BA5EE /* small-logo.png in Resources */ = {isa = PBXBuildFile; fileRef = C4153A8E1F8793DD001BA5EE /* small-logo.png */; };
|
C4153A8F1F8793DE001BA5EE /* small-logo.png in Resources */ = {isa = PBXBuildFile; fileRef = C4153A8E1F8793DD001BA5EE /* small-logo.png */; };
|
||||||
@ -947,6 +949,8 @@
|
|||||||
A74C823A2297DB2B0085A832 /* shapes-rect-03-t-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "shapes-rect-03-t-manual.reference"; sourceTree = "<group>"; };
|
A74C823A2297DB2B0085A832 /* shapes-rect-03-t-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "shapes-rect-03-t-manual.reference"; sourceTree = "<group>"; };
|
||||||
A74C823B2297DB2B0085A832 /* shapes-rect-06-f-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "shapes-rect-06-f-manual.reference"; sourceTree = "<group>"; };
|
A74C823B2297DB2B0085A832 /* shapes-rect-06-f-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "shapes-rect-06-f-manual.reference"; sourceTree = "<group>"; };
|
||||||
A74C82402297DC220085A832 /* shapes-rect-02-t-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "shapes-rect-02-t-manual.reference"; sourceTree = "<group>"; };
|
A74C82402297DC220085A832 /* shapes-rect-02-t-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "shapes-rect-02-t-manual.reference"; sourceTree = "<group>"; };
|
||||||
|
A74C82022296BE5F0085A832 /* paths-data-20-f-manual.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "paths-data-20-f-manual.svg"; sourceTree = "<group>"; };
|
||||||
|
A74C82042296BFC60085A832 /* paths-data-20-f-manual.reference */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "paths-data-20-f-manual.reference"; sourceTree = "<group>"; };
|
||||||
A7E675551EC4213500BD9ECB /* NodeBoundsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NodeBoundsTests.swift; path = Bounds/NodeBoundsTests.swift; sourceTree = "<group>"; };
|
A7E675551EC4213500BD9ECB /* NodeBoundsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NodeBoundsTests.swift; path = Bounds/NodeBoundsTests.swift; sourceTree = "<group>"; };
|
||||||
C410148D1F834D280022EE44 /* style.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = style.svg; sourceTree = "<group>"; };
|
C410148D1F834D280022EE44 /* style.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = style.svg; sourceTree = "<group>"; };
|
||||||
C4153A8E1F8793DD001BA5EE /* small-logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "small-logo.png"; sourceTree = "<group>"; };
|
C4153A8E1F8793DD001BA5EE /* small-logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "small-logo.png"; sourceTree = "<group>"; };
|
||||||
@ -1508,6 +1512,8 @@
|
|||||||
5BFEF5D420BC1C1E008DAC11 /* paths-data-18-f-manual.svg */,
|
5BFEF5D420BC1C1E008DAC11 /* paths-data-18-f-manual.svg */,
|
||||||
5B1AE1D720B6A669007EECCB /* paths-data-19-f-manual.reference */,
|
5B1AE1D720B6A669007EECCB /* paths-data-19-f-manual.reference */,
|
||||||
5B1AE21A20B6A669007EECCB /* paths-data-19-f-manual.svg */,
|
5B1AE21A20B6A669007EECCB /* paths-data-19-f-manual.svg */,
|
||||||
|
A74C82022296BE5F0085A832 /* paths-data-20-f-manual.svg */,
|
||||||
|
A74C82042296BFC60085A832 /* paths-data-20-f-manual.reference */,
|
||||||
5B37139620BE95D7004BB6EE /* pservers-grad-01-b-manual.reference */,
|
5B37139620BE95D7004BB6EE /* pservers-grad-01-b-manual.reference */,
|
||||||
5B37139220BE95D6004BB6EE /* pservers-grad-01-b-manual.svg */,
|
5B37139220BE95D6004BB6EE /* pservers-grad-01-b-manual.svg */,
|
||||||
5B37139320BE95D6004BB6EE /* pservers-grad-02-b-manual.reference */,
|
5B37139320BE95D6004BB6EE /* pservers-grad-02-b-manual.reference */,
|
||||||
@ -1842,6 +1848,7 @@
|
|||||||
5B1AE29C20B6A669007EECCB /* paths-data-01-t-manual.reference in Resources */,
|
5B1AE29C20B6A669007EECCB /* paths-data-01-t-manual.reference in Resources */,
|
||||||
5B1AE29320B6A669007EECCB /* coords-trans-09-t-manual.svg in Resources */,
|
5B1AE29320B6A669007EECCB /* coords-trans-09-t-manual.svg in Resources */,
|
||||||
5B1AE2DC20B6A669007EECCB /* struct-defs-01-t-manual.svg in Resources */,
|
5B1AE2DC20B6A669007EECCB /* struct-defs-01-t-manual.svg in Resources */,
|
||||||
|
A74C82052296BFC60085A832 /* paths-data-20-f-manual.reference in Resources */,
|
||||||
5B1AE29020B6A669007EECCB /* painting-stroke-08-t-manual.svg in Resources */,
|
5B1AE29020B6A669007EECCB /* painting-stroke-08-t-manual.svg in Resources */,
|
||||||
5B1AE2A720B6A669007EECCB /* paths-data-09-t-manual.svg in Resources */,
|
5B1AE2A720B6A669007EECCB /* paths-data-09-t-manual.svg in Resources */,
|
||||||
5B1AE2AB20B6A669007EECCB /* painting-stroke-08-t-manual.reference in Resources */,
|
5B1AE2AB20B6A669007EECCB /* painting-stroke-08-t-manual.reference in Resources */,
|
||||||
@ -1898,6 +1905,7 @@
|
|||||||
5B1AE2D120B6A669007EECCB /* paths-data-03-f-manual.reference in Resources */,
|
5B1AE2D120B6A669007EECCB /* paths-data-03-f-manual.reference in Resources */,
|
||||||
5B1AE28920B6A669007EECCB /* shapes-intro-01-t-manual.reference in Resources */,
|
5B1AE28920B6A669007EECCB /* shapes-intro-01-t-manual.reference in Resources */,
|
||||||
5B1AE2C020B6A669007EECCB /* paths-data-14-t-manual.reference in Resources */,
|
5B1AE2C020B6A669007EECCB /* paths-data-14-t-manual.reference in Resources */,
|
||||||
|
A74C82032296BE5F0085A832 /* paths-data-20-f-manual.svg in Resources */,
|
||||||
5B1AE27420B6A669007EECCB /* color-prop-02-f-manual.svg in Resources */,
|
5B1AE27420B6A669007EECCB /* color-prop-02-f-manual.svg in Resources */,
|
||||||
5B1AE25120B6A669007EECCB /* coords-trans-05-t-manual.reference in Resources */,
|
5B1AE25120B6A669007EECCB /* coords-trans-05-t-manual.reference in Resources */,
|
||||||
5B1AE29120B6A669007EECCB /* coords-transformattr-01-f-manual.svg in Resources */,
|
5B1AE29120B6A669007EECCB /* coords-transformattr-01-f-manual.svg in Resources */,
|
||||||
|
@ -545,6 +545,10 @@ class MacawSVGTests: XCTestCase {
|
|||||||
validateJSON("paths-data-19-f-manual")
|
validateJSON("paths-data-19-f-manual")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testPathsData20() {
|
||||||
|
validateJSON("paths-data-20-f-manual")
|
||||||
|
}
|
||||||
|
|
||||||
func testStructGroup01() {
|
func testStructGroup01() {
|
||||||
validateJSON("struct-group-01-t-manual")
|
validateJSON("struct-group-01-t-manual")
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,12 @@ There are [521 SVG tests](https://github.com/web-platform-tests/wpt/tree/master/
|
|||||||
* [switch/object](https://www.w3.org/TR/SVG11/backward.html) (7)
|
* [switch/object](https://www.w3.org/TR/SVG11/backward.html) (7)
|
||||||
|
|
||||||
The rest 306 tests can be split into following categories:
|
The rest 306 tests can be split into following categories:
|
||||||
* 31.4% passed (96)
|
* 31.7% passed (97)
|
||||||
* 14.1% filters (43) [#390](https://github.com/exyte/Macaw/issues/390)
|
* 14.1% filters (43) [#390](https://github.com/exyte/Macaw/issues/390)
|
||||||
* 7.8% images (24) [wpt issue](https://github.com/web-platform-tests/wpt/issues/11178)
|
* 7.8% images (24) [wpt issue](https://github.com/web-platform-tests/wpt/issues/11178)
|
||||||
* 2.6% markers (8) [#392](https://github.com/exyte/Macaw/issues/392)
|
* 2.6% markers (8) [#392](https://github.com/exyte/Macaw/issues/392)
|
||||||
* 19.9% text (61) [#391](https://github.com/exyte/Macaw/issues/391)
|
* 19.9% text (61) [#391](https://github.com/exyte/Macaw/issues/391)
|
||||||
* 24.5% blocked by issues (75)
|
* 24.2% blocked by issues (75)
|
||||||
|
|
||||||
Status of each test:
|
Status of each test:
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ Status of each test:
|
|||||||
|[paths-data-17-f-manual](w3cSVGTests/paths-data-17-f-manual.svg) | ✅ |
|
|[paths-data-17-f-manual](w3cSVGTests/paths-data-17-f-manual.svg) | ✅ |
|
||||||
|[paths-data-18-f-manual](w3cSVGTests/paths-data-18-f-manual.svg) | ✅ |
|
|[paths-data-18-f-manual](w3cSVGTests/paths-data-18-f-manual.svg) | ✅ |
|
||||||
|[paths-data-19-f-manual](w3cSVGTests/paths-data-19-f-manual.svg) | ✅ |
|
|[paths-data-19-f-manual](w3cSVGTests/paths-data-19-f-manual.svg) | ✅ |
|
||||||
|[paths-data-20-f-manual](w3cSVGTests/paths-data-20-f-manual.svg) | [#395](https://github.com/exyte/Macaw/issues/395) |
|
|[paths-data-20-f-manual](w3cSVGTests/paths-data-20-f-manual.svg) | ✅ |
|
||||||
|[pservers-grad-01-b-manual](w3cSVGTests/pservers-grad-01-b-manual.svg) | ✅ |
|
|[pservers-grad-01-b-manual](w3cSVGTests/pservers-grad-01-b-manual.svg) | ✅ |
|
||||||
|[pservers-grad-02-b-manual](w3cSVGTests/pservers-grad-02-b-manual.svg) | ✅ |
|
|[pservers-grad-02-b-manual](w3cSVGTests/pservers-grad-02-b-manual.svg) | ✅ |
|
||||||
|[pservers-grad-03-b-manual](w3cSVGTests/pservers-grad-03-b-manual.svg) | ✅ |
|
|[pservers-grad-03-b-manual](w3cSVGTests/pservers-grad-03-b-manual.svg) | ✅ |
|
||||||
|
793
MacawTests/w3cSVGTests/paths-data-20-f-manual.reference
Normal file
793
MacawTests/w3cSVGTests/paths-data-20-f-manual.reference
Normal file
@ -0,0 +1,793 @@
|
|||||||
|
{
|
||||||
|
"contents" : [
|
||||||
|
{
|
||||||
|
"contents" : [
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
120,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
-25,
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
120,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
-25,
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
200,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
25,
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
200,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
25,
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
280,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
-25,
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
280,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
360,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
25,
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
360,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
120,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
-25,
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
120,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
-25,
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
200,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
25,
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
200,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
280,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
-25,
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
280,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
360,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
25,
|
||||||
|
25,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
25,
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 65280
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 16711680
|
||||||
|
},
|
||||||
|
"form" : {
|
||||||
|
"segments" : [
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
360,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"type" : "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
-25
|
||||||
|
],
|
||||||
|
"type" : "h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"type" : "z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type" : "Path"
|
||||||
|
},
|
||||||
|
"node" : "Shape"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"node" : "Group"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"contents" : [
|
||||||
|
{
|
||||||
|
"align" : "min",
|
||||||
|
"baseline" : "bottom",
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 0
|
||||||
|
},
|
||||||
|
"font" : {
|
||||||
|
"name" : "SVGFreeSansASCII,sans-serif",
|
||||||
|
"size" : 32,
|
||||||
|
"weight" : "normal"
|
||||||
|
},
|
||||||
|
"node" : "Text",
|
||||||
|
"place" : "1, 0, 0, 1, 10, 340",
|
||||||
|
"text" : "$Revision: 1.3 $"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"node" : "Group"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"form" : {
|
||||||
|
"h" : 358,
|
||||||
|
"type" : "Rect",
|
||||||
|
"w" : 478,
|
||||||
|
"x" : 1,
|
||||||
|
"y" : 1
|
||||||
|
},
|
||||||
|
"node" : "Shape",
|
||||||
|
"stroke" : {
|
||||||
|
"cap" : "butt",
|
||||||
|
"dashes" : [
|
||||||
|
|
||||||
|
],
|
||||||
|
"fill" : {
|
||||||
|
"type" : "Color",
|
||||||
|
"val" : 0
|
||||||
|
},
|
||||||
|
"join" : "miter",
|
||||||
|
"width" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout" : {
|
||||||
|
"scalingMode" : "meet",
|
||||||
|
"svgSize" : {
|
||||||
|
"height" : "100.0%",
|
||||||
|
"width" : "100.0%"
|
||||||
|
},
|
||||||
|
"viewBox" : {
|
||||||
|
"h" : 360,
|
||||||
|
"type" : "Rect",
|
||||||
|
"w" : 480,
|
||||||
|
"x" : 0,
|
||||||
|
"y" : 0
|
||||||
|
},
|
||||||
|
"xAligningMode" : "mid",
|
||||||
|
"yAligningMode" : "mid"
|
||||||
|
},
|
||||||
|
"node" : "Canvas"
|
||||||
|
}
|
87
MacawTests/w3cSVGTests/paths-data-20-f-manual.svg
Normal file
87
MacawTests/w3cSVGTests/paths-data-20-f-manual.svg
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<svg id="svg-root" width="100%" height="100%"
|
||||||
|
viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!--======================================================================-->
|
||||||
|
<!--= Copyright 2008 World Wide Web Consortium, (Massachusetts =-->
|
||||||
|
<!--= Institute of Technology, European Research Consortium for =-->
|
||||||
|
<!--= Informatics and Mathematics (ERCIM), Keio University). =-->
|
||||||
|
<!--= All Rights Reserved. =-->
|
||||||
|
<!--= See http://www.w3.org/Consortium/Legal/. =-->
|
||||||
|
<!--======================================================================-->
|
||||||
|
<d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
|
||||||
|
template-version="1.4" reviewer="CL" author="ED" status="accepted"
|
||||||
|
version="$Revision: 1.3 $" testname="$RCSfile: paths-data-20-f.svg,v $">
|
||||||
|
<d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/paths.html#PathDataEllipticalArcCommands">
|
||||||
|
<p>
|
||||||
|
Tests parsing of the elliptical arc path syntax.
|
||||||
|
</p>
|
||||||
|
</d:testDescription>
|
||||||
|
<d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<p>
|
||||||
|
Run the test. No interaction required.
|
||||||
|
</p>
|
||||||
|
</d:operatorScript>
|
||||||
|
<d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<p>
|
||||||
|
The test has passed if the image looks as if there are eight green circles that have
|
||||||
|
two white rectangles overlapping them, like in the reference image. If any red is visible
|
||||||
|
the test has failed.
|
||||||
|
</p>
|
||||||
|
</d:passCriteria>
|
||||||
|
</d:SVGTestCase>
|
||||||
|
<title id="test-title">$RCSfile: paths-data-20-f.svg,v $</title>
|
||||||
|
<defs>
|
||||||
|
<font-face
|
||||||
|
font-family="SVGFreeSansASCII"
|
||||||
|
unicode-range="U+0-7F">
|
||||||
|
<font-face-src>
|
||||||
|
<font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
|
||||||
|
</font-face-src>
|
||||||
|
</font-face>
|
||||||
|
</defs>
|
||||||
|
<g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
|
||||||
|
|
||||||
|
<!-- no commawsp between arc flags -->
|
||||||
|
<path d="M120,120 h25 a25,25 0 1,0 -25,25 z" fill="red" stroke="lime"/>
|
||||||
|
<path d="M120,120 h25 a25,25 0 10 -25,25z" fill="lime"/>
|
||||||
|
|
||||||
|
<!-- no commawsp between arc flags and no commawsp after arc flags -->
|
||||||
|
<path d="M200,120 h-25 a25,25 0 1,1 25,25 z" fill="red" stroke="lime"/>
|
||||||
|
<path d="M200,120 h-25 a25,25 0 1125,25 z" fill="lime"/>
|
||||||
|
|
||||||
|
<!-- out of range large-arc-flag value -->
|
||||||
|
<path d="M280,120 h25 a25,25 0 1,0 -25,25 z" fill="lime" stroke="lime"/>
|
||||||
|
<path d="M280,120 h25 a25,25 0 6 0 -25,25 z" fill="red"/>
|
||||||
|
|
||||||
|
<!-- negative sweep-flag value -->
|
||||||
|
<path d="M360,120 h-25 a25,25 0 1,1 25,25 z" fill="lime" stroke="lime"/>
|
||||||
|
<path d="M360,120 h-25 a25,25 0 1 -1 25,25 z" fill="red"/>
|
||||||
|
|
||||||
|
<!-- no commawsp between sweep-flag and following coordinate-pair -->
|
||||||
|
<path d="M120,200 h25 a25,25 0 1,1 -25,-25 z" fill="red" stroke="lime"/>
|
||||||
|
<path d="M120,200 h25 a25,25 0 1 1-25,-25 z" fill="lime"/>
|
||||||
|
|
||||||
|
<!-- no commawsp before arc flags -->
|
||||||
|
<path d="M200,200 h-25 a25,25 0 1,0 25,-25 z" fill="lime" stroke="lime"/>
|
||||||
|
<path d="M200,200 h-25 a25,2501 025,-25 z" fill="red"/>
|
||||||
|
|
||||||
|
<!-- out of range sweep-flag value -->
|
||||||
|
<path d="M280,200 h25 a25,25 0 1,1 -25,-25 z" fill="lime" stroke="lime"/>
|
||||||
|
<path d="M280,200 h25 a25 25 0 1 7 -25 -25 z" fill="red"/>
|
||||||
|
|
||||||
|
<!-- negative large-arc-flag value -->
|
||||||
|
<path d="M360,200 h-25 a25,25 0 1,0 25,-25 z" fill="lime" stroke="lime"/>
|
||||||
|
<path d="M360,200 h-25 a25,25 0 -1 0 25,-25 z" fill="red"/>
|
||||||
|
</g>
|
||||||
|
<g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
|
||||||
|
<text id="revision" x="10" y="340" stroke="none"
|
||||||
|
fill="black">$Revision: 1.3 $</text>
|
||||||
|
</g>
|
||||||
|
<rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
|
||||||
|
<!-- comment out this watermark once the test is approved
|
||||||
|
<g id="draft-watermark">
|
||||||
|
<rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
|
||||||
|
<text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
|
||||||
|
text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
|
||||||
|
</g> -->
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
@ -1610,7 +1610,7 @@ private class PathDataReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func read() -> [PathSegment] {
|
public func read() -> [PathSegment] {
|
||||||
_ = readNext()
|
readNext()
|
||||||
var segments = [PathSegment]()
|
var segments = [PathSegment]()
|
||||||
while let array = readSegments() {
|
while let array = readSegments() {
|
||||||
segments.append(contentsOf: array)
|
segments.append(contentsOf: array)
|
||||||
@ -1625,7 +1625,12 @@ private class PathDataReader {
|
|||||||
return [PathSegment(type: type)]
|
return [PathSegment(type: type)]
|
||||||
}
|
}
|
||||||
var result = [PathSegment]()
|
var result = [PathSegment]()
|
||||||
let data = readData()
|
let data: [Double]
|
||||||
|
if type == .a || type == .A {
|
||||||
|
data = readDataOfASegment()
|
||||||
|
} else {
|
||||||
|
data = readData()
|
||||||
|
}
|
||||||
var index = 0
|
var index = 0
|
||||||
var isFirstSegment = true
|
var isFirstSegment = true
|
||||||
while index < data.count {
|
while index < data.count {
|
||||||
@ -1663,6 +1668,28 @@ private class PathDataReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func readDataOfASegment() -> [Double] {
|
||||||
|
let argCount = getArgCount(segment: .A)
|
||||||
|
var data: [Double] = []
|
||||||
|
var index = 0
|
||||||
|
while true {
|
||||||
|
skipSpaces()
|
||||||
|
let value: Double?
|
||||||
|
let indexMod = index % argCount
|
||||||
|
if indexMod == 3 || indexMod == 4 {
|
||||||
|
value = readFlag()
|
||||||
|
} else {
|
||||||
|
value = readNum()
|
||||||
|
}
|
||||||
|
guard let doubleValue = value else {
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
data.append(doubleValue)
|
||||||
|
index += 1
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
private func skipSpaces() {
|
private func skipSpaces() {
|
||||||
var ch = current
|
var ch = current
|
||||||
while ch != nil && "\n\r\t ,".contains(String(ch!)) {
|
while ch != nil && "\n\r\t ,".contains(String(ch!)) {
|
||||||
@ -1670,21 +1697,42 @@ private class PathDataReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func readFlag() -> Double? {
|
||||||
|
guard let ch = current else {
|
||||||
|
return .none
|
||||||
|
}
|
||||||
|
readNext()
|
||||||
|
switch ch {
|
||||||
|
case "0":
|
||||||
|
return 0
|
||||||
|
case "1":
|
||||||
|
return 1
|
||||||
|
default:
|
||||||
|
return .none
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fileprivate func readNum() -> Double? {
|
fileprivate func readNum() -> Double? {
|
||||||
guard let ch = current else {
|
guard let ch = current else {
|
||||||
return nil
|
return .none
|
||||||
}
|
}
|
||||||
if (ch >= "0" && ch <= "9") || ch == "." || ch == "-" {
|
|
||||||
var chars = [ch]
|
guard ch >= "0" && ch <= "9" || ch == "." || ch == "-" else {
|
||||||
var hasDot = ch == "."
|
return .none
|
||||||
while let ch = readDigit(&hasDot) {
|
|
||||||
chars.append(ch)
|
|
||||||
}
|
|
||||||
var buf = ""
|
|
||||||
buf.unicodeScalars.append(contentsOf: chars)
|
|
||||||
return Double(buf)
|
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
var chars = [ch]
|
||||||
|
var hasDot = ch == "."
|
||||||
|
while let ch = readDigit(&hasDot) {
|
||||||
|
chars.append(ch)
|
||||||
|
}
|
||||||
|
|
||||||
|
var buf = ""
|
||||||
|
buf.unicodeScalars.append(contentsOf: chars)
|
||||||
|
guard let value = Double(buf) else {
|
||||||
|
return .none
|
||||||
|
}
|
||||||
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func readDigit(_ hasDot: inout Bool) -> UnicodeScalar? {
|
fileprivate func readDigit(_ hasDot: inout Bool) -> UnicodeScalar? {
|
||||||
@ -1714,6 +1762,7 @@ private class PathDataReader {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@discardableResult
|
||||||
private func readNext() -> UnicodeScalar? {
|
private func readNext() -> UnicodeScalar? {
|
||||||
previous = current
|
previous = current
|
||||||
current = iterator.next()
|
current = iterator.next()
|
||||||
@ -1730,7 +1779,7 @@ private class PathDataReader {
|
|||||||
private func readSegmentType() -> PathSegmentType? {
|
private func readSegmentType() -> PathSegmentType? {
|
||||||
while true {
|
while true {
|
||||||
if let type = getPathSegmentType() {
|
if let type = getPathSegmentType() {
|
||||||
_ = readNext()
|
readNext()
|
||||||
return type
|
return type
|
||||||
}
|
}
|
||||||
if readNext() == nil {
|
if readNext() == nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user