• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <sys/stat.h>
3 #include <string.h>
4 
5 #include "utils/Log.h"
6 
7 #include <vector>
8 #include <minikin/Hyphenator.h>
9 
10 using android::Hyphenator;
11 
loadHybFile(const char * fn)12 Hyphenator* loadHybFile(const char* fn) {
13     struct stat statbuf;
14     int status = stat(fn, &statbuf);
15     if (status < 0) {
16         fprintf(stderr, "error opening %s\n", fn);
17         return nullptr;
18     }
19     size_t size = statbuf.st_size;
20     FILE* f = fopen(fn, "rb");
21     if (f == NULL) {
22         fprintf(stderr, "error opening %s\n", fn);
23         return nullptr;
24     }
25     uint8_t* buf = new uint8_t[size];
26     size_t read_size = fread(buf, 1, size, f);
27     if (read_size < size) {
28         fprintf(stderr, "error reading %s\n", fn);
29         delete[] buf;
30         return nullptr;
31     }
32     return Hyphenator::loadBinary(buf);
33 }
34 
main(int argc,char ** argv)35 int main(int argc, char** argv) {
36     Hyphenator* hyph = loadHybFile("/tmp/en.hyb");  // should also be configurable
37     std::vector<uint8_t> result;
38     std::vector<uint16_t> word;
39     if (argc < 2) {
40         fprintf(stderr, "usage: hyphtool word\n");
41         return 1;
42     }
43     char* asciiword = argv[1];
44     size_t len = strlen(asciiword);
45     for (size_t i = 0; i < len; i++) {
46         uint32_t c = asciiword[i];
47         if (c == '-') {
48             c = 0x00AD;
49         }
50         // ASCII (or possibly ISO Latin 1), but kinda painful to do utf conversion :(
51         word.push_back(c);
52     }
53     hyph->hyphenate(&result, word.data(), word.size());
54     for (size_t i = 0; i < len; i++) {
55         if (result[i] != 0) {
56             printf("-");
57         }
58         printf("%c", word[i]);
59     }
60     printf("\n");
61     return 0;
62 }
63