{"id":15578904,"url":"https://github.com/tlsa/libparagraph","last_synced_at":"2025-07-01T02:39:35.258Z","repository":{"id":91471854,"uuid":"201957726","full_name":"tlsa/libparagraph","owner":"tlsa","description":"Text layout library","archived":false,"fork":false,"pushed_at":"2022-03-22T19:04:40.000Z","size":73,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-23T05:05:55.888Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":false,"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/tlsa.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-08-12T15:28:58.000Z","updated_at":"2022-03-14T11:06:34.000Z","dependencies_parsed_at":"2023-07-17T03:30:51.875Z","dependency_job_id":null,"html_url":"https://github.com/tlsa/libparagraph","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tlsa/libparagraph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlsa%2Flibparagraph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlsa%2Flibparagraph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlsa%2Flibparagraph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlsa%2Flibparagraph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tlsa","download_url":"https://codeload.github.com/tlsa/libparagraph/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tlsa%2Flibparagraph/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261417568,"owners_count":23155072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-10-02T19:13:17.903Z","updated_at":"2025-06-23T05:06:42.807Z","avatar_url":"https://github.com/tlsa.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"LibParagraph\n============\n\nLibrary for performing text layout.\n\nTODO\n----\n\n### Content management\n\n#### Notes\n\n* Add way to remove content from a paragraph.\n  - How to identify which content to remove? Client handle? Would need\n    to loop through entire paragraph's content entries to find a match\n    for the handle.\n    - Otherwise change the API to return an opaque handle for the paragraph\n      content entry to the client, in each of the content_add functions.\n  - How to handle removing an inline start or inline end?\n    - Maybe removing the start removes all content up to and including matching\n      end?\n    - Maybe removing an end is an error.\n* Add way to modify a content style.\n  - Again; it will help for the client to have a handle for the paragraph\n    content entry, so it can say what it's changing the style of.\n\n#### Actions\n\n* Add remove content API.\n\n### Ownership\n\n#### Notes\n\n* Client string: Do we need a way to ref/unref? Or is assuming a client keeps\n  it around while we might use it safe?\n* Client styles: Do we need a way to ref/unref? Or is assuming a client keeps\n  it around while we might use it safe?\n\n### Styles\n\n#### Notes\n\n* Need a way to get values from the opaque client style.\n  - Probably match callback functions to libcss computed style API.\n* How to handle multiple styles per content element?\n  - E.g. hover visited, etc?\n  - Let the client handle it all by changing style on the content entry?\n  - Who is responsible for splitting for stuff like first-letter, first-word,\n    etc? Us or client?\n\n### Text\n\n#### Notes\n\n* Going to need to split text into runs efficiently, for at least:\n  - Bidirectional algorithm.\n  - Styles (first-letter, first-word, etc)\n  - Line break\n  - Full justification?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftlsa%2Flibparagraph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftlsa%2Flibparagraph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftlsa%2Flibparagraph/lists"}