blob: 9ea8c83230370fa5788946ce3cc8b29e4bd7adf5 [file] [log] [blame]
/* 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
liblouis is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
liblouis 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this program. If not, see
<http://www.gnu.org/licenses/>.
Maintained by John J. Boyer john.boyer@abilitiessoft.com
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "louis.h"
static int
ignoreCaseComp (const char *str1, const char *str2, int length)
{
/* Replaces strncasecmp, which some compilers don't support */
int k;
for (k = 0; k < length; k++)
if ((str1[k] | 32) != (str2[k] | 32))
break;
if (k != length)
return 1;
return 0;
}
static int
findAction (const char **actions, const char *action)
{
int actionLength = strlen (action);
int k;
for (k = 0; actions[k]; k += 2)
if (actionLength == strlen (actions[k])
&& ignoreCaseComp (actions[k], action, actionLength) == 0)
break;
if (actions[k] == NULL)
return -1;
return atoi (actions[k + 1]);
}
static char *
findColon (char *transSpec)
{
int k;
for (k = 0; transSpec[k]; k++)
if (transSpec[k] == ':')
{
transSpec[k] = 0;
return &transSpec[k + 1];
}
return NULL;
}
static const char *translators[] = {
"korean",
"1",
"japanese",
"2",
"german",
"3",
NULL
};
int
other_translate (const char *trantab, const widechar
* inbuf,
int *inlen, widechar * outbuf, int *outlen,
formtype *typeform, char *spacing, int *outputPos, int
*inputPos, int *cursorPos, int mode)
{
char transSpec[MAXSTRING];
int action;
strcpy (transSpec, trantab);
findColon (transSpec);
action = findAction (translators, transSpec);
switch (action)
{
case -1:
logMessage (LOG_ERROR, "There is no translator called '%s'", transSpec);
return 0;
case 1:
return 1;
case 2:
return 1;
case 3:
return 1;
default:
return 0;
}
return 0;
}
int
other_backTranslate (const char *trantab, const widechar
* inbuf,
int *inlen, widechar * outbuf, int *outlen,
formtype *typeform, char *spacing, int *outputPos,
int
*inputPos, int *cursorPos, int mode)
{
char transSpec[MAXSTRING];
int action;
strcpy (transSpec, trantab);
findColon (transSpec);
action = findAction (translators, transSpec);
switch (action)
{
case -1:
logMessage (LOG_ERROR, "There is no translator called '%s'", transSpec);
return 0;
case 1:
return 1;
case 2:
return 1;
case 3:
return 1;
default:
return 0;
}
return 0;
}
int
other_charToDots (const char *trantab, const widechar
* inbuf, widechar * outbuf, int length, int mode)
{
return 0;
}
int
other_dotsToChar (const char *trantab, widechar * inbuf,
widechar * outbuf, int length, int mode)
{
return 0;
}