{"id":13343929,"url":"https://github.com/kardeslik/zeplin-spannable-string-extension","last_synced_at":"2026-05-18T18:36:36.126Z","repository":{"id":136830032,"uuid":"183295332","full_name":"kardeslik/zeplin-spannable-string-extension","owner":"kardeslik","description":"Zeplin extension that generates Spannable Strings for texts with multiple styles.","archived":false,"fork":false,"pushed_at":"2019-04-24T20:52:50.000Z","size":4,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T08:11:18.119Z","etag":null,"topics":["android","spannable","spannablestring","zeplin","zeplin-extension"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kardeslik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2019-04-24T19:38:21.000Z","updated_at":"2021-06-23T23:41:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"937bdb18-b3d8-4d4f-a53b-30fa919bc07a","html_url":"https://github.com/kardeslik/zeplin-spannable-string-extension","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kardeslik/zeplin-spannable-string-extension","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kardeslik%2Fzeplin-spannable-string-extension","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kardeslik%2Fzeplin-spannable-string-extension/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kardeslik%2Fzeplin-spannable-string-extension/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kardeslik%2Fzeplin-spannable-string-extension/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kardeslik","download_url":"https://codeload.github.com/kardeslik/zeplin-spannable-string-extension/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kardeslik%2Fzeplin-spannable-string-extension/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33187377,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"ssl_error","status_checked_at":"2026-05-18T09:27:28.300Z","response_time":71,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["android","spannable","spannablestring","zeplin","zeplin-extension"],"created_at":"2024-07-29T19:32:05.470Z","updated_at":"2026-05-18T18:36:36.091Z","avatar_url":"https://github.com/kardeslik.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zeplin Spannable String Extension\n\nGenerates Spannable Strings for texts with multiple styles.\n\nSupported spans are:\n - [AbsoluteSizeSpan](https://developer.android.com/reference/android/text/style/AbsoluteSizeSpan)\n - [ForegroundColorSpan](https://developer.android.com/reference/android/text/style/ForegroundColorSpan)\n - [StyleSpan](https://developer.android.com/reference/android/text/style/StyleSpan)\n - [TypefaceSpan](https://developer.android.com/reference/android/text/style/TypefaceSpan)\n\nYou can add the extension to your project from [here](https://extensions.zeplin.io/emmar/spannable-string-extension).\n\n## Options\n\n#### Language\n\nSupports both Kotlin and Java languages. Default language is Kotlin but you can change it from extension settings on Zeplin.\n\n#### Span Flag\n\nOne of the following span flags is used while generating code:\n - [SPAN_EXCLUSIVE_EXCLUSIVE](https://developer.android.com/reference/android/text/Spanned.html#SPAN_EXCLUSIVE_EXCLUSIVE) (default)\n - [SPAN_EXCLUSIVE_INCLUSIVE](https://developer.android.com/reference/android/text/Spanned.html#SPAN_EXCLUSIVE_INCLUSIVE)\n - [SPAN_INCLUSIVE_EXCLUSIVE](https://developer.android.com/reference/android/text/Spanned.html#SPAN_INCLUSIVE_EXCLUSIVE)\n - [SPAN_INCLUSIVE_INCLUSIVE](https://developer.android.com/reference/android/text/Spanned.html#SPAN_INCLUSIVE_INCLUSIVE)\n\n## Samples\n\n#### Kotlin Output\n\n```kotlin\nval spannableString = SpannableString(\"This is a layer containing multiple text styles\")\n\nspannableString.setSpan(AbsoluteSizeSpan(24, true), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(ForegroundColorSpan(Color.argb(255, 0, 0, 0)), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(StyleSpan(Typeface.NORMAL), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(TypefaceSpan(\"sans-serif\"), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\n\nspannableString.setSpan(AbsoluteSizeSpan(20, true), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(ForegroundColorSpan(Color.argb(255, 208, 2, 27)), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(StyleSpan(Typeface.BOLD), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(TypefaceSpan(\"sans-serif-condensed\"), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\n\nspannableString.setSpan(AbsoluteSizeSpan(26, true), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(ForegroundColorSpan(Color.argb(255, 245, 166, 35)), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(StyleSpan(Typeface.ITALIC), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(TypefaceSpan(\"monospace\"), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\n\nspannableString.setSpan(AbsoluteSizeSpan(30, true), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(ForegroundColorSpan(Color.argb(255, 126, 211, 33)), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(StyleSpan(Typeface.BOLD_ITALIC), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\nspannableString.setSpan(TypefaceSpan(\"sans-serif\"), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)\n\n```\n\n#### Java Output\n\n```java\nSpannableString spannableString = new SpannableString(\"This is a layer containing multiple text styles\");\n\nspannableString.setSpan(new AbsoluteSizeSpan(24, true), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new ForegroundColorSpan(Color.argb(255, 0, 0, 0)), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new StyleSpan(Typeface.NORMAL), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new TypefaceSpan(\"sans-serif\"), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n\nspannableString.setSpan(new AbsoluteSizeSpan(20, true), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new ForegroundColorSpan(Color.argb(255, 208, 2, 27)), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new StyleSpan(Typeface.BOLD), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new TypefaceSpan(\"sans-serif-condensed\"), 8, 15, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n\nspannableString.setSpan(new AbsoluteSizeSpan(26, true), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new ForegroundColorSpan(Color.argb(255, 245, 166, 35)), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new StyleSpan(Typeface.ITALIC), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new TypefaceSpan(\"monospace\"), 16, 35, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n\nspannableString.setSpan(new AbsoluteSizeSpan(30, true), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new ForegroundColorSpan(Color.argb(255, 126, 211, 33)), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\nspannableString.setSpan(new TypefaceSpan(\"sans-serif\"), 36, 46, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n\n```\n\n## Development\n\nThis extension is developed using [zem](https://github.com/zeplin/zem), Zeplin Extension Manager. zem is a command line tool that lets you quickly create, test and publish extensions.\n\nTo learn more about creating Zeplin extensions, [see documentation](https://github.com/zeplin/zeplin-extension-documentation).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkardeslik%2Fzeplin-spannable-string-extension","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkardeslik%2Fzeplin-spannable-string-extension","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkardeslik%2Fzeplin-spannable-string-extension/lists"}