{"id":16410296,"url":"https://github.com/ctrlcctrlv/justify","last_synced_at":"2025-10-13T22:39:13.637Z","repository":{"id":62441469,"uuid":"118598456","full_name":"ctrlcctrlv/justify","owner":"ctrlcctrlv","description":"A Unicode-aware text justification library","archived":false,"fork":false,"pushed_at":"2020-09-09T01:27:05.000Z","size":13,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-11T04:28:43.728Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/ctrlcctrlv.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}},"created_at":"2018-01-23T11:02:21.000Z","updated_at":"2025-05-08T22:34:07.000Z","dependencies_parsed_at":"2022-11-01T21:45:20.406Z","dependency_job_id":null,"html_url":"https://github.com/ctrlcctrlv/justify","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ctrlcctrlv/justify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2Fjustify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2Fjustify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2Fjustify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2Fjustify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ctrlcctrlv","download_url":"https://codeload.github.com/ctrlcctrlv/justify/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlcctrlv%2Fjustify/sbom","scorecard":{"id":311895,"data":{"date":"2025-08-11","repo":{"name":"github.com/ctrlcctrlv/justify","commit":"7f9a6da55893387eeda22e22eafbd0ff9cef63c1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Code-Review","score":1,"reason":"Found 1/8 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T23:18:55.563Z","repository_id":62441469,"created_at":"2025-08-17T23:18:55.563Z","updated_at":"2025-08-17T23:18:55.563Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017146,"owners_count":26085984,"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","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"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-10-11T06:23:49.032Z","updated_at":"2025-10-13T22:39:13.606Z","avatar_url":"https://github.com/ctrlcctrlv.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# justify.rs\n\nThis crate justifies plaintext for display in a terminal emulator in a  (mostly)\nUnicode friendly way.\n\n**Examples of use can be found in the file `tests/tests.rs`.**\n\nIf the crate is compiled with the `unicode-width` feature (e.g. via `cargo build\n--features  unicode-width`), Unicode is handled gracefully. With this feature, a\nCJK  character  such as 한 takes two spaces, while combining characters take  0.\nWithout this feature, every Unicode character takes one space, which can lead to\npoor  output  in  some  cases.  If you will only ever  justify  ASCII  text,  or\nNFC-normalized Unicode text of Latin languages, you don't need the feature.\n\nThe width information is provided by the `wcwidth` crate.\n\nWithout `unicode-width` (example text from\n[here](https://en.wikipedia.org/wiki/Korea#Etymology)):\n\n```text\n\"Korea\"  is the modern spelling of \"Corea\", a name attested in English as  early\nas  1614.[citation  needed] Korea was transliterated as Cauli in The Travels  of\nMarco  Polo,[10] based on the kingdom of Goryeo (Hangul: 고려; Hanja:  高麗;\nMR:  Koryŏ), which ruled most of the Korean peninsula during Marco Polo's time.\nKorea's  introduction to the West resulted from trade and contact with merchants\nfrom  Arabic  lands,[11]  with  some  records dating back  as  far  as  the  9th\ncentury.[12]  Goryeo's  name  was  a continuation  of  Goguryeo  (Koguryŏ)  the\nnorthernmost  of  the  Three Kingdoms of Korea, which was  officially  known  as\nGoryeo  beginning in the 5th century.[13] The original name was a combination of\nthe  adjective  go (\"high, lofty\") with the name of a local Yemaek tribe,  whose\noriginal  name  is  thought to have been either *Guru  (溝樓,  \"walled  city,\"\ninferred   from  some  toponyms  in  Chinese  historical  documents)  or  *Gauri\n(가우리, \"center\"). \n```\n\nWith `unicode-width` and `wcwidth: true` in `Settings` struct:\n\n```text\n\"Korea\"  is the modern spelling of \"Corea\", a name attested in English as  early\nas  1614.[citation  needed] Korea was transliterated as Cauli in The Travels  of\nMarco  Polo,[10] based on the kingdom of Goryeo (Hangul: 고려; Hanja: 高麗;  MR:\nKoryŏ),  which  ruled  most of the Korean peninsula during  Marco  Polo's  time.\nKorea's  introduction to the West resulted from trade and contact with merchants\nfrom  Arabic  lands,[11]  with  some  records dating back  as  far  as  the  9th\ncentury.[12]  Goryeo's  name  was  a  continuation  of  Goguryeo  (Koguryŏ)  the\nnorthernmost  of  the  Three Kingdoms of Korea, which was  officially  known  as\nGoryeo  beginning in the 5th century.[13] The original name was a combination of\nthe  adjective  go (\"high, lofty\") with the name of a local Yemaek tribe,  whose\noriginal  name  is  thought  to have been either  *Guru  (溝樓,  \"walled  city,\"\ninferred  from some toponyms in Chinese historical documents) or *Gauri (가우리,\n\"center\").  \n```\n\nNotice  that  the  justification is better with `unicode-width`, but  there  are\nstill  lines where the justification is one off. That's because it's not  always\npossible  to  justify perfectly: as Korean characters take two terminal  spaces,\nand  Latin  letters  take one, it's possible for there to be an  odd  number  of\ncharacters  on  a line to be justified. Also, depending on your browser, it  may\nnot look right, try pasting it into a terminal emulator.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrlcctrlv%2Fjustify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fctrlcctrlv%2Fjustify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrlcctrlv%2Fjustify/lists"}