| /* liblouis Braille Translation and Back-Translation Library |
| |
| Based on the Linux screenreader BRLTTY, copyright (C) 1999-2006 by |
| The BRLTTY Team |
| |
| Copyright (C) 2004, 2005, 2006, 2009 |
| ViewPlus Technologies, Inc. www.viewplus.com and |
| JJB Software, Inc. www.jjb-software.com |
| |
| This program is free software: you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation, either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| |
| #include <config.h> |
| #include <stdio.h> |
| #include <string.h> |
| #include <stdlib.h> |
| #include "liblouis.h" |
| #include "internal.h" |
| #include <getopt.h> |
| #include "progname.h" |
| #include "version-etc.h" |
| |
| static const struct option longopts[] = { |
| { "help", no_argument, NULL, 'h' }, |
| { "version", no_argument, NULL, 'v' }, |
| { NULL, 0, NULL, 0 }, |
| }; |
| |
| const char version_etc_copyright[] = |
| "Copyright %s %d ViewPlus Technologies, Inc. and JJB Software, Inc."; |
| |
| #define AUTHORS "John J. Boyer" |
| |
| static void |
| print_help(void) { |
| printf("\ |
| Usage: %s [OPTIONS]\n", |
| program_name); |
| |
| fputs("\ |
| Check the accuracy of hyphenation in Braille translation for both\n\ |
| translated and untranslated words.\n\n", |
| stdout); |
| |
| fputs("\ |
| -h, --help display this help and exit\n\ |
| -v, --version display version information and exit\n", |
| stdout); |
| |
| printf("\n"); |
| printf("Report bugs to %s.\n", PACKAGE_BUGREPORT); |
| |
| #ifdef PACKAGE_PACKAGER_BUG_REPORTS |
| printf("Report %s bugs to: %s\n", PACKAGE_PACKAGER, PACKAGE_PACKAGER_BUG_REPORTS); |
| #endif |
| #ifdef PACKAGE_URL |
| printf("%s home page: <%s>\n", PACKAGE_NAME, PACKAGE_URL); |
| #endif |
| } |
| |
| #define BUFSIZE 256 |
| |
| static char inputBuffer[BUFSIZE]; |
| static const TranslationTableHeader *validTable = NULL; |
| static unsigned int mode; |
| static char table[BUFSIZE]; |
| |
| static int |
| getInput(void) { |
| int inputLength; |
| inputBuffer[0] = 0; |
| if (!fgets(inputBuffer, sizeof(inputBuffer), stdin)) exit(EXIT_FAILURE); |
| inputLength = strlen(inputBuffer) - 1; |
| if (inputLength < 0) /* EOF on script */ |
| exit(0); |
| inputBuffer[inputLength] = 0; |
| return inputLength; |
| } |
| |
| static void |
| paramLetters(void) { |
| printf("Press one of the letters in parentheses, then enter.\n"); |
| printf("(t)able, tr(a)nslated, (u)ntranslated, (r)un, (h)elp, (q)uit\n"); |
| } |
| |
| static int |
| getCommands(void) { |
| paramLetters(); |
| do { |
| printf("Command: "); |
| getInput(); |
| switch (inputBuffer[0]) { |
| case 0: |
| break; |
| case 't': |
| do { |
| printf("Enter the name of a table or a list: "); |
| getInput(); |
| strcpy(table, inputBuffer); |
| validTable = lou_getTable(table); |
| if (validTable != NULL && validTable->hyphenStatesArray == 0) { |
| printf("No hyphenation table.\n"); |
| validTable = NULL; |
| } |
| } while (validTable == NULL); |
| break; |
| case 'a': |
| mode = 1; |
| break; |
| case 'u': |
| mode = 0; |
| break; |
| case 'r': |
| if (validTable == NULL) { |
| printf("You must enter a valid table name or list.\n"); |
| inputBuffer[0] = 0; |
| } |
| break; |
| case 'h': |
| printf("Commands: action\n"); |
| printf("(t)able: Enter a table name or list\n"); |
| printf("(r)un: run the hyphenation test loop\n"); |
| printf("tr(a)nslated: translated input\n"); |
| printf("(u)ntranslated: untranslated input\n"); |
| printf("(h)elp: print this page\n"); |
| printf("(q)uit: leave the program\n"); |
| printf("\n"); |
| paramLetters(); |
| break; |
| case 'q': |
| exit(0); |
| default: |
| printf("Bad choice.\n"); |
| break; |
| } |
| } while (inputBuffer[0] != 'r'); |
| return 1; |
| } |
| |
| int |
| main(int argc, char **argv) { |
| widechar inbuf[BUFSIZE]; |
| char hyphens[BUFSIZE]; |
| int inlen; |
| int k; |
| int optc; |
| |
| set_program_name(argv[0]); |
| |
| while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { |
| /* --help and --version exit immediately, per GNU coding standards. */ |
| case 'v': |
| version_etc( |
| stdout, program_name, PACKAGE_NAME, VERSION, AUTHORS, (char *)NULL); |
| exit(EXIT_SUCCESS); |
| break; |
| case 'h': |
| print_help(); |
| exit(EXIT_SUCCESS); |
| break; |
| default: |
| fprintf(stderr, "Try `%s --help' for more information.\n", program_name); |
| exit(EXIT_FAILURE); |
| break; |
| } |
| |
| if (optind < argc) { |
| /* Print error message and exit. */ |
| fprintf(stderr, "%s: extra operand: %s\n", program_name, argv[optind]); |
| fprintf(stderr, "Try `%s --help' for more information.\n", program_name); |
| exit(EXIT_FAILURE); |
| } |
| |
| validTable = NULL; |
| mode = 0; |
| |
| while (1) { |
| getCommands(); |
| printf("Type something, press enter, and view the results.\n"); |
| printf("A blank line returns to command entry.\n"); |
| while (1) { |
| inlen = getInput(); |
| if (inlen == 0) break; |
| for (k = 0; k < inlen; k++) inbuf[k] = inputBuffer[k]; |
| if (!lou_hyphenate(table, inbuf, inlen, hyphens, mode)) { |
| printf("Hyphenation error\n"); |
| continue; |
| } |
| printf("Hyphenation mask: %s\n", hyphens); |
| printf("Hyphenated word: "); |
| for (k = 0; k < inlen; k++) { |
| if (hyphens[k] == '1') printf("-"); |
| printf("%c", inbuf[k]); |
| } |
| printf("\n"); |
| } |
| } |
| lou_free(); |
| return 0; |
| } |