{"id":20285748,"url":"https://github.com/aep/htmlstream","last_synced_at":"2026-06-11T14:31:26.298Z","repository":{"id":140902068,"uuid":"62876584","full_name":"aep/htmlstream","owner":"aep","description":null,"archived":false,"fork":false,"pushed_at":"2016-07-08T09:50:32.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-30T23:07:04.731Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","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/aep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-MIT","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":"2016-07-08T09:21:17.000Z","updated_at":"2016-07-08T09:23:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"e50c96ba-8ceb-4aa7-9cba-ea3ff24c7f0c","html_url":"https://github.com/aep/htmlstream","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aep/htmlstream","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aep%2Fhtmlstream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aep%2Fhtmlstream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aep%2Fhtmlstream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aep%2Fhtmlstream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aep","download_url":"https://codeload.github.com/aep/htmlstream/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aep%2Fhtmlstream/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34204177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-14T14:28:46.248Z","updated_at":"2026-06-11T14:31:26.271Z","avatar_url":"https://github.com/aep.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/aep/htmlstream.svg?branch=master)](https://travis-ci.org/aep/htmlstream)\n[![NoDependencies](http://aep.github.io/images/no-dependencies.svg)](#)\n\n\nhtmlstream\n------------\n\nsimple html stream parser for html in C that does not malloc anything, in a single header file only. no dependencies.\n\nIt can read pretty bad html, but will not fix the structure by adding missing end tags \nor guessing what the user wanted, like modern browsers do. \nIt also does not close void tags like \u0026lt;br\u0026gt;\n\nAll tags and attributes are lower cased. Text remains original case.\n( #define tolower(x) (x)  if you dont want that )\n\nUTF8 is not handled. specifically special utf8 space stuff is considered to be not space.\nBrowser behaviour may be different.\n\n\nUsage\n-------\n\n```C\n\n#include \"htmlstream.h\"\n\nvoid my_open_cb(void *parg, const char *tag, int len);\nvoid my_close_cb(void *parg, const char *tag, int len);\nvoid my_text_cb(void *parg, const char *text, int len);\nvoid my_attr_cb(void *parg, const char *key, int key_l, const char *val, int val_l);\n\nhtmlstream_t t;\nhtmlstream_init(\u0026t);\nt.parg     = something;\nt.open_cb  = my_open_cb;\nt.close_cb = my_close_cb;\nt.text_cb  = my_text_cb;\nt.attr_cb  = my_attr_cb;\n\n\nchar mybuf = \"\u003chtml\u003e etc\";\nhtmlstream_feed(\u0026t, mybuf, strlen(mybuf));\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faep%2Fhtmlstream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faep%2Fhtmlstream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faep%2Fhtmlstream/lists"}