{"id":13521271,"url":"https://github.com/contour-terminal/libunicode","last_synced_at":"2026-02-17T00:10:06.528Z","repository":{"id":39636508,"uuid":"264464071","full_name":"contour-terminal/libunicode","owner":"contour-terminal","description":"Modern C++20 Unicode library","archived":false,"fork":false,"pushed_at":"2024-12-05T08:14:50.000Z","size":1044,"stargazers_count":115,"open_issues_count":15,"forks_count":15,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-19T14:52:43.293Z","etag":null,"topics":["cpp","emoji","grapheme","grapheme-cluster","hacktoberfest","library","unicode","unicode-emoji","unicode-symbols","uts-algorithm","wcwidth"],"latest_commit_sha":null,"homepage":"","language":"C++","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/contour-terminal.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","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":["christianparpart"],"custom":["https://paypal.me/ChristianParpart"]}},"created_at":"2020-05-16T15:13:30.000Z","updated_at":"2025-03-12T04:19:16.000Z","dependencies_parsed_at":"2024-02-19T16:11:35.440Z","dependency_job_id":"b12786a4-c5ae-41e7-b9a2-5336675b35da","html_url":"https://github.com/contour-terminal/libunicode","commit_stats":{"total_commits":279,"total_committers":8,"mean_commits":34.875,"dds":"0.12903225806451613","last_synced_commit":"817cb5900acdf6f60e2344a4c8f1f39262878a4b"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contour-terminal%2Flibunicode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contour-terminal%2Flibunicode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contour-terminal%2Flibunicode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contour-terminal%2Flibunicode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/contour-terminal","download_url":"https://codeload.github.com/contour-terminal/libunicode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244450040,"owners_count":20454590,"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":["cpp","emoji","grapheme","grapheme-cluster","hacktoberfest","library","unicode","unicode-emoji","unicode-symbols","uts-algorithm","wcwidth"],"created_at":"2024-08-01T06:00:32.017Z","updated_at":"2026-02-17T00:10:01.496Z","avatar_url":"https://github.com/contour-terminal.png","language":"C++","funding_links":["https://github.com/sponsors/christianparpart","https://paypal.me/ChristianParpart"],"categories":["编码"],"sub_categories":[],"readme":"[![C++20](https://img.shields.io/badge/standard-C%2B%2B%2020-blue.svg?logo=C%2B%2B)](https://isocpp.org/)\n[![CI Build](https://github.com/contour-terminal/libunicode/workflows/Build/badge.svg)](https://github.com/contour-terminal/libunicode/actions?query=workflow%3ABuild)\n\n# Modern C++20 Unicode Library\n\nThe goal of this library is to bring painless unicode support to C++ with simple and easy to understand APIs.\n\nThe API naming conventions are chosen to look familiar to those using the C++ standard libary.\n\n### Feature Overview\n\n- [x] API for accessing UCD properties\n- [x] UTF8 \u003c-\u003e UTF32 conversion\n- [x] wcwidth equivalent (`int unicode::width(char32_t)`)\n- [x] grapheme segmentation (UTS algorithm)\n- [x] symbol/emoji segmentation (UTS algorithm)\n- [x] script segmentation [UTS 24](https://unicode.org/reports/tr24/)\n- [x] unit tests for most parts (wcwidth / segmentation)\n- [x] generic text run segmentation (top level segmentation API suitable for text shaping implementations)\n- [ ] word segmentation (UTS algorithm)\n- [x] CLI tool: `uc-inspect` for inspecting input files by code point properties, grapheme cluster, word, script, ...\n\n# Unicode Technical Specifications\n\n- [UTS 11](https://unicode.org/reports/tr11/) - character width\n- [UTS 24](https://unicode.org/reports/tr24/) - script property\n- [UTS 29](https://unicode.org/reports/tr29/) - text segmentation (grapheme cluster, word boundary)\n- [UTS 51](https://unicode.org/reports/tr51/) - Emoji\n\n### Integrate with your CMake project\n\n```sh\ngit submodule add --name libunicode https://github.com/contour-terminal/libunicode 3rdparty/libunicode\n```\n\n```cmake\nadd_subdirectory(3rdparty/libunicode)\n\nadd_executable(your_tool your_tool.cpp)\ntarget_link_libraries(your_tool PRIVATE unicode::unicode)\n```\n\n### Contributing\n\n- for filing issues please visit: https://github.com/contour-terminal/libunicode/issues\n- fork and create pull requests:  https://github.com/contour-terminal/libunicode/pulls\n- I am also happy to just receive code reviews\n- you can help with documentation, or\n- general feedback is also very welcome\n\n### Users of this library\n\n* [Contour Terminal Emulator](https://github.com/contour-terminal/contour/)\n\n### Disclaimer\n\nThis library is -in terms of features- by no means competive to the ICU library, but it attempts to\nprovide a clean and intuitive modern C++ API for those that do not want to fight legacy-style C APIs.\n\nI hope that over time we can add more and more features to this library to conform to the Unicode\nspecification eventually at some point and I welcome everyone to contribute to it by forking the\nlibrary, creating pull requests, or even just constructive feedback.\n\n### License\n\n```\nlibunicode - a modern C++20 unicode library\n-------------------------------------------\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontour-terminal%2Flibunicode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcontour-terminal%2Flibunicode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontour-terminal%2Flibunicode/lists"}