{"id":32147147,"url":"https://github.com/susandoggie/doggie","last_synced_at":"2026-02-21T15:01:58.102Z","repository":{"id":41456404,"uuid":"46830957","full_name":"SusanDoggie/Doggie","owner":"SusanDoggie","description":"A Cross-platform Library for Swift","archived":false,"fork":false,"pushed_at":"2025-01-02T09:54:26.000Z","size":11377,"stargazers_count":177,"open_issues_count":1,"forks_count":14,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-10-21T08:51:41.539Z","etag":null,"topics":["color","convolution","cross-platform","emoji","fft","font","fourier","graphics","image","linux","opentype","pdf","polynomial","renderer","rendering","signal-processing","svg","swift","truetype","woff"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SusanDoggie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["SusanDoggie"]}},"created_at":"2015-11-25T02:02:38.000Z","updated_at":"2025-08-11T22:50:17.000Z","dependencies_parsed_at":"2023-02-08T18:46:03.243Z","dependency_job_id":"c9721ad2-a424-4179-b36a-fb03f5510c6c","html_url":"https://github.com/SusanDoggie/Doggie","commit_stats":{"total_commits":4100,"total_committers":7,"mean_commits":585.7142857142857,"dds":0.3831707317073171,"last_synced_commit":"177a34d2b11df3dc36067f8a486566e6f693bb84"},"previous_names":[],"tags_count":85,"template":false,"template_full_name":null,"purl":"pkg:github/SusanDoggie/Doggie","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SusanDoggie%2FDoggie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SusanDoggie%2FDoggie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SusanDoggie%2FDoggie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SusanDoggie%2FDoggie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SusanDoggie","download_url":"https://codeload.github.com/SusanDoggie/Doggie/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SusanDoggie%2FDoggie/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29684074,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T14:31:22.911Z","status":"ssl_error","status_checked_at":"2026-02-21T14:31:22.570Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["color","convolution","cross-platform","emoji","fft","font","fourier","graphics","image","linux","opentype","pdf","polynomial","renderer","rendering","signal-processing","svg","swift","truetype","woff"],"created_at":"2025-10-21T08:49:45.844Z","updated_at":"2026-02-21T15:01:58.097Z","avatar_url":"https://github.com/SusanDoggie.png","language":"Swift","funding_links":["https://github.com/sponsors/SusanDoggie"],"categories":[],"sub_categories":[],"readme":"# Doggie - A Cross-platform Library for Swift\n\n[![Github Actions](https://github.com/SusanDoggie/Doggie/workflows/Builder/badge.svg)](https://github.com/SusanDoggie/Doggie/actions)\n[![codecov](https://codecov.io/gh/SusanDoggie/Doggie/branch/main/graph/badge.svg)](https://codecov.io/gh/SusanDoggie/Doggie)\n![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20iOS%20%7C%20Linux-lightgrey.svg?style=flat)\n[![GitHub release](https://img.shields.io/github/release/SusanDoggie/Doggie.svg)](https://github.com/SusanDoggie/Doggie/releases)\n[![Swift](https://img.shields.io/badge/swift-5.7-orange.svg?style=flat)](https://swift.org)\n[![MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)\n\nDoggie is a foundational library for Apple's swift. It includes mathematics, accelerate, signal processing and graphic functions.\n\n## Apps Using This Library\n\n[\u003cimg src=\"./docs/apps/DoggieGraffiti.svg\" width=\"230\" height=\"230\"\u003e](https://apps.apple.com/hk/app/doggie-graffiti/id1465865578)\n\n## Features\n\n- accelerate, signal processing, fourier and convolution\n- complex number, point, vector and 2D/3D transformation\n- bezier curve\n- [polynomial](docs/Polynomial.md)\n- [color](docs/Color.md) and [color space](docs/ColorSpace.md)\n- [shape](docs/Shape.md) and [boolean operation](docs/ShapeRegion.md)\n```swift\nlet shape = try Shape(code: \"M100 0c0-100-236.60 36.60-150 86.60S36.60-136.60-50-86.60 100 100 100 0z\")\n\nlet region = ShapeRegion(shape, winding: .nonZero)\nlet ellipse = ShapeRegion(ellipseIn: shape.boundary)\n```\noperation | preview\n--- | ---\n``region.union(ellipse)`` | ![union](docs/images/readme/ShapeRegion/union.png)\n``region.intersection(ellipse)`` | ![union](docs/images/readme/ShapeRegion/intersection.png)\n``ellipse.subtracting(region)`` | ![union](docs/images/readme/ShapeRegion/subtracting.png)\n``region.subtracting(ellipse)`` | ![union](docs/images/readme/ShapeRegion/subtracting2.png)\n``region.symmetricDifference(ellipse)`` | ![union](docs/images/readme/ShapeRegion/symmetricDifference.png)\n- [font](docs/Font.md)\n```swift\nlet collection = try FontCollection(data: fontFileData)\n\nif let font = collection.first?.with(size: 64) {\n\n    let string = \"Doggie\\u{0301}\".precomposedStringWithCanonicalMapping\n\n    let glyphs = font.glyphs(with: string.unicodeScalars)\n    let advances = glyphs.map { font.advance(forGlyph: $0) }.reductions(0, +)\n\n    var shape = Shape()\n\n    for (advance, glyph) in zip(advances, glyphs) {\n        var outline = font.shape(forGlyph: glyph)\n        outline.center.x += advance\n        shape.append(contentsOf: outline.identity)\n    }\n\n    print(shape.encode())\n}\n```\n- [image](docs/Image.md) and [graphics](docs/ImageContext.md) with 2D/3D drawing\n```swift\n\nlet context = ImageContext\u003cARGB32ColorPixel\u003e(width: 100, height: 100, colorSpace: ColorSpace.sRGB)\n\nlet ellipse1 = Shape(ellipseIn: Rect(x: 10, y: 35, width: 55, height: 55))\nlet ellipse2 = Shape(ellipseIn: Rect(x: 35, y: 10, width: 55, height: 55))\n\ncontext.draw(shape: ellipse1, winding: .nonZero, color: RGBColorModel(red: 247/255, green: 217/255, blue: 12/255))\ncontext.draw(shape: ellipse1, stroke: Stroke(width: 1, cap: .round, join: .round, color: RGBColorModel()))\ncontext.draw(shape: ellipse2, winding: .nonZero, color: RGBColorModel(red: 234/255, green: 24/255, blue: 71/255))\ncontext.draw(shape: ellipse2, stroke: Stroke(width: 1, cap: .round, join: .round, color: RGBColorModel()))\n\nlet image: Image\u003cARGB32ColorPixel\u003e = context.image\n```\n![drawing sample](docs/images/readme/drawing_sample.png)\n- others\n```svg\n\u003csvg width=\"200\" height=\"200\" viewBox=\"0 0 220 220\"\n     xmlns=\"http://www.w3.org/2000/svg\"\u003e\n  \u003cfilter id=\"displacementFilter\"\u003e\n     \u003cfeTurbulence type=\"turbulence\" baseFrequency=\"0.05\"\n        numOctaves=\"2\" result=\"turbulence\"/\u003e\n     \u003cfeDisplacementMap in2=\"turbulence\" in=\"SourceGraphic\"\n        scale=\"50\" xChannelSelector=\"R\" yChannelSelector=\"G\"/\u003e\n  \u003c/filter\u003e\n\n  \u003ccircle cx=\"100\" cy=\"100\" r=\"100\"\n     style=\"filter: url(#displacementFilter)\"/\u003e\n\u003c/svg\u003e\n```\n```swift\nlet context = ImageContext\u003cGray16ColorPixel\u003e(width: 220, height: 220, colorSpace: .default)\n\ncontext.draw(ellipseIn: Rect(x: 0, y: 0, width: 200, height: 200), color: .black)\n\nvar image = context.image\n\nlet turbulence: Image\u003cRGBA32ColorPixel\u003e = SVGTurbulence(220, 220, .turbulence, nil, .identity, 0, 0.05, 2)\n\nimage = DisplacementMap(image, turbulence, 0, 1, 50)\n```\n![turbulence](docs/images/readme/turbulence.png)\n\n## Documents\n\nDocuments can find in [here](docs/index.md).\n\n## Status\n\n### ColorSpace\n\n#### Format\n- [x] ICC\n- [x] CIEXYZ\n- [x] CIELab\n- [x] CIELuv\n- [x] Calibrated Gray\n- [x] Calibrated RGB\n\n#### Rendering Intent\n- [x] perceptual\n- [ ] saturation\n- [x] absolute colorimetric\n- [x] relative colorimetric\n\n### ImageRep\n- [x] bmp\n- [ ] gif\n- [x] jpeg\n- [ ] jpeg2000\n- [x] png\n- [x] tiff\n- [x] webp\n\n### Font\n\n#### Format\n- [x] TrueType\n- [x] TrueType/TTC\n- [x] OpenType\n- [x] OpenType/CFF\n- [ ] OpenType/CFF2\n- [x] WOFF\n- [x] WOFF/CFF\n- [ ] WOFF/CFF2\n- [ ] WOFF2\n\n#### SFNT Tables\n- [x] HEAD\n- [x] POST\n- [x] OS/2\n- [x] MAXP\n- [x] CMAP\n- [x] NAME\n- [x] HHEA\n- [x] HMTX\n- [x] VHEA\n- [x] VMTX\n- [x] LOCA\n- [x] GLYF\n- [x] SBIX\n- [x] FEAT\n- [ ] KERX\n- [ ] MORX\n  - [x] Rearrangement\n  - [x] Contextual\n  - [x] Ligature\n  - [x] Noncontextual\n  - [ ] Insertion\n- [ ] GSUB\n- [ ] GPOS\n- [ ] GDEF\n- [x] CFF\n- [ ] CFF2\n\n#### CMAP\n\n##### Platform\n\nThe table below lists the available platform/specific values in the order.\n\nplatform | specific | Description\n--- | --- | ---\n0 | max( \u003c= 4 ) | Unicode\n3 | 10 | Windows, Unicode UCS-4\n3 | 1 | Windows, Unicode BMP (UCS-2)\n\n##### Format\n- [x] Format 0\n- [x] Format 4\n- [x] Format 12\n- [x] Format 14 (Unicode Variation Selectors)\n\n## How To Contribute\n\nIt's welcome everyone to create a pull request.\n\n## License\n\nDoggie is licensed under the [MIT license](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsusandoggie%2Fdoggie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsusandoggie%2Fdoggie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsusandoggie%2Fdoggie/lists"}