{"id":37173402,"url":"https://github.com/bloodorangeio/speck","last_synced_at":"2026-01-14T20:16:06.024Z","repository":{"id":102141549,"uuid":"267651599","full_name":"bloodorangeio/speck","owner":"bloodorangeio","description":"Tool to extract and combine hidden text across multiple files (for documentation purposes)","archived":false,"fork":false,"pushed_at":"2020-05-29T22:07:39.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T13:28:27.724Z","etag":null,"topics":["docs","documentation","go","golang","spec","specification"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bloodorangeio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2020-05-28T17:21:01.000Z","updated_at":"2020-05-29T22:02:58.000Z","dependencies_parsed_at":"2023-04-29T08:03:26.227Z","dependency_job_id":null,"html_url":"https://github.com/bloodorangeio/speck","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/bloodorangeio/speck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bloodorangeio%2Fspeck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bloodorangeio%2Fspeck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bloodorangeio%2Fspeck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bloodorangeio%2Fspeck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bloodorangeio","download_url":"https://codeload.github.com/bloodorangeio/speck/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bloodorangeio%2Fspeck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28434422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T18:57:19.464Z","status":"ssl_error","status_checked_at":"2026-01-14T18:52:48.501Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["docs","documentation","go","golang","spec","specification"],"created_at":"2026-01-14T20:16:05.175Z","updated_at":"2026-01-14T20:16:06.014Z","avatar_url":"https://github.com/bloodorangeio.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Speck\n\n[![GitHub Actions status](https://github.com/bloodorangeio/speck/workflows/build/badge.svg)](https://github.com/bloodorangeio/speck/actions?query=workflow%3Abuild) [![GoDoc](https://godoc.org/github.com/bloodorangeio/speck?status.svg)](https://godoc.org/github.com/bloodorangeio/speck)\n\n![](https://raw.githubusercontent.com/bloodorangeio/speck/master/speck.png)\n\nSpeck is a tool that allows you to extract text between `\u003cspeck\u003e\u003c/speck\u003e` tags found within one or more files.\nIt is agnostic to the format or extension of files used as input.\nThe result of the combined extracted text is printed to stdout.\n\nThis might be useful, for example, for building documentation from special comments placed in your source code.\n\n## Installing\n\nRequires Go 1.14+.\n\n```\ngo build ./speck.go\nsudo mv ./speck /usr/local/bin\n```\n\n## How to use\n\nStart with a file containing `\u003cspeck\u003e\u003c/speck\u003e` tags within, such as the following `main.go`:\n\n```go\npackage main\n\n/*\n\u003cspeck\u003e\n# Hello World\n\u003c/speck\u003e\n*/\n\nimport (\n\t\"fmt\"\n)\n\nfunc main() {\n\t/*\n\t\u003cspeck tab=1\u003e\n\tThis is a test.\n\t\u003c/speck\u003e\n\t*/\n\tfmt.Println(\"hello world\")\n}\n```\n\nThen run `speck`, and direct the output to a file such as `example.md`:\n\n```\nspeck main.go \u003e example.md\n```\n\nThe contents of `example.md`:\n```\n# Hello World\n\nThis is a test.\n\n```\n\nNotice the optional `tab` attribute, \nwhich will instruct Speck to trim x number of tabs from the left side of each line within a section.\n\nSpeck can also be used with multiple files, combining the output in order. \nYou can also leverage shell globbing. Here is an example using some test files within this repo:\n\n```\nspeck testdata/go-test-suite-example/*.go\n```\n\nwhich would be the same as running\n```\nspeck testdata/go-test-suite-example/00_setup_test.go \\\n  testdata/go-test-suite-example/02_second_test.go \\\n  testdata/go-test-suite-example/01_first_test.go\n```\n\n## Note on inner HTML\n\nSometimes you might want to document things like look like HTML tags.\nHere's an example using `\u003cname\u003e` to represent a URL part:\n\n```\nThis is my API request: `POST /api/stuff/\u003cname\u003e`\n```\n\nThis is supported, with the caveat that is must not be on the same \nline as the string \"speck\". As in, you can do this:\n\n```\n\u003cspeck\u003e\nThis is my API request: `POST /api/stuff/\u003cname\u003e`\n\u003c/speck\u003e\n```\n\nbut you cannot do this:\n\n```\n\u003cspeck\u003eThis is my API request: `POST /api/stuff/\u003cname\u003e`\u003c/speck\u003e\n```\n\nOtherwise you will end up with `\u003cname\u003e` going missing in the output. This is needed due to HTML parsing madness.\n\nThe issue is demonstrated in the `TestDisappearingTag` test found in [speck_test.go](./speck_test.go).\nIf you can fix this, PRs are accepted by all means.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbloodorangeio%2Fspeck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbloodorangeio%2Fspeck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbloodorangeio%2Fspeck/lists"}