summaryrefslogtreecommitdiff
path: root/support/wsuipa2tipa/wsu2tipa.l
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/wsuipa2tipa/wsu2tipa.l
Initial commit
Diffstat (limited to 'support/wsuipa2tipa/wsu2tipa.l')
-rw-r--r--support/wsuipa2tipa/wsu2tipa.l301
1 files changed, 301 insertions, 0 deletions
diff --git a/support/wsuipa2tipa/wsu2tipa.l b/support/wsuipa2tipa/wsu2tipa.l
new file mode 100644
index 0000000000..ae04a34e06
--- /dev/null
+++ b/support/wsuipa2tipa/wsu2tipa.l
@@ -0,0 +1,301 @@
+/*
+ * File: wsu2tipa.l
+ *
+ * (c) Peter Kleiweg 2000
+ *
+ * This 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 2,
+ * or (at your option) any later version.
+ *
+ * Compile:
+ *
+ * flex -B -8 wsu2tipa.l
+ * gcc -s -Wall -o wsu2tipa lex.yy.c -lfl
+ * rm lex.yy.c
+ */
+
+%{
+
+#ifdef __MSDOS__
+# include <dir.h>
+# include <fcntl.h>
+# include <io.h>
+#else
+# include <unistd.h>
+#endif
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+ line = 1;
+
+long
+ count = 0;
+
+char
+ *filename,
+ *programname;
+
+void
+ out (char const *s),
+ warn (void),
+ get_programname (char const *argv0),
+ syntax (void),
+ errit (char const *format, ...);
+
+#define YY_NO_UNPUT
+#define YY_SKIP_YYWRAP
+#ifdef yywrap
+# undef yywrap
+#endif
+int yywrap()
+{
+ return 1;
+}
+
+%}
+
+S ([^a-zA-Z])
+
+%Start _dia _open
+
+%%
+
+\\inva/{S} { out ("\\textturna"); }
+\\scripta/{S} { out ("\\textscripta"); }
+\\nialpha/{S} { warn (); }
+\\invscripta/{S} { out ("\\textturnscripta"); }
+\\invv/{S} { out ("\\textturnv"); }
+\\crossb/{S} { out ("\\textcrb"); }
+\\barb/{S} { out ("\\textbarb"); }
+\\slashb/{S} { out ("\\ipaclap{b}{/}"); }
+\\hookb/{S} { out ("\\texthtb"); }
+\\nibeta/{S} { out ("\\textbeta"); }
+\\slashc/{S} { out ("\\ipaclap{c}{/}"); }
+\\curlyc/{S} { out ("\\textctc"); }
+\\clickc/{S} { out ("\\textstretchc"); }
+\\crossd/{S} { out ("\\textcrd"); }
+\\bard/{S} { out ("\\textbard"); }
+\\slashd/{S} { out ("\\ipaclap{d}{/}"); }
+\\hookd/{S} { out ("\\texthtd"); }
+\\taild/{S} { out ("\\textrtaild"); }
+\\dz/{S} { out ("\\textdyoghlig"); }
+\\eth/{S} { out ("\\dh"); }
+\\scd/{S} { warn (); }
+\\schwa/{S} { out ("\\textschwa"); }
+\\er/{S} { out ("\\textrhookschwa"); }
+\\reve/{S} { out ("\\textreve"); }
+\\niepsilon/{S} { out ("\\textepsilon"); }
+\\revepsilon/{S} { out ("\\textrevepsilon"); }
+\\hookrevepsilon/{S} { out ("\\textrhookrevepsilon"); }
+\\closedrevepsilon/{S} { out ("\\textcloserevepsilon"); }
+\\scriptg/{S} { out ("\\textipa{g}"); }
+\\hookg/{S} { out ("\\texthtg"); }
+\\scg/{S} { out ("\\textscg"); }
+\\nigamma/{S} { out ("\\textramshorns"); }
+\\ipagamma/{S} { out ("\\textgamma"); }
+\\babygamma/{S} { out ("\\textbabygamma"); }
+\\hv/{S} { out ("\\texthvlig"); }
+\\crossh/{S} { out ("\\textcrh"); }
+\\hookh/{S} { out ("\\texthth"); }
+\\hookheng/{S} { out ("\\texththeng"); }
+\\invh/{S} { out ("\\textturnh"); }
+\\bari/{S} { out ("\\textbari"); }
+\\dlbari/{S} { out ("\\ipabar{\\i}{.5ex}{1.1}{}{}"); }
+\\niiota/{S} { out ("\\textiota"); }
+\\sci/{S} { out ("\\textsci"); }
+\\barsci/{S} { out ("\\ipabar{\\textsci}{.5ex}{1.1}{}{}"); }
+\\invf/{S} { out ("\\textObardotlessj"); }
+\\tildel/{S} { out ("\\textltilde"); }
+\\barl/{S} { out ("\\textbarl"); }
+\\latfric/{S} { out ("\\textbeltl"); }
+\\taill/{S} { out ("\\textrtaill"); }
+\\lz/{S} { out ("\\textlyoghlig"); }
+\\nilambda/{S} { out ("\\textlambda"); }
+\\crossnilambda/{S} { out ("\\textcrlambda"); }
+\\labdentalnas/{S} { out ("\\textltailm"); }
+\\invm/{S} { out ("\\textturnm"); }
+\\legm/{S} { out ("\\textturnmrleg"); }
+\\nj/{S} { out ("\\textltailn"); }
+\\eng/{S} { out ("\\ng"); }
+\\tailn/{S} { out ("\\textrtailn"); }
+\\scn/{S} { out ("\\textscn"); }
+\\clickb/{S} { out ("\\textbullseye"); }
+\\baro/{S} { out ("\\textbaro"); }
+\\openo/{S} { out ("\\textopeno"); }
+\\niomega/{S} { out ("\\textomega"); }
+\\closedniomega/{S} { out ("\\textcloseomega"); }
+\\oo/{S} { warn (); }
+\\barp/{S} { out ("\\ipabar{p}{.5ex}{1.1}{}{}"); }
+\\thorn/{S} { out ("\\textthorn"); }
+\\niphi/{S} { out ("\\textphi"); }
+\\flapr/{S} { out ("\\textfishhookr"); }
+\\legr/{S} { out ("\\textlonglegr"); }
+\\tailr/{S} { out ("\\textrtailr"); }
+\\invr/{S} { out ("\\textturnr"); }
+\\tailinvr/{S} { out ("\\textturnrrtail"); }
+\\invlegr/{S} { out ("\\textturnlonglegr"); }
+\\scr/{S} { out ("\\textscr"); }
+\\invscr/{S} { out ("\\textinvscr"); }
+\\tails/{S} { out ("\\textrtails"); }
+\\esh/{S} { out ("\\textesh"); }
+\\curlyesh/{S} { out ("\\textctesh"); }
+\\nisigma/{S} { warn (); }
+\\tailt/{S} { out ("\\textrtailt"); }
+\\tesh/{S} { out ("\\textteshlig"); }
+\\clickt/{S} { out ("\\textturnt"); }
+\\nitheta/{S} { out ("\\texttheta"); }
+\\baru/{S} { out ("\\textbaru"); }
+\\slashu/{S} { out ("\\ipaclap{u}{/}"); }
+\\niupsilon/{S} { out ("\\textupsilon"); }
+\\scu/{S} { out ("\\textscu"); }
+\\barscu/{S} { out ("\\ipabar{\\textscu}{.5ex}{1.1}{}{}"); }
+\\scriptv/{S} { out ("\\textscriptv"); }
+\\invw/{S} { out ("\\textturnw"); }
+\\nichi/{S} { out ("\\textchi"); }
+\\invy/{S} { out ("\\textturny"); }
+\\scy/{S} { out ("\\textscy"); }
+\\curlyz/{S} { out ("\\textctz"); }
+\\tailz/{S} { out ("\\textrtailz"); }
+\\yogh/{S} { out ("\\textyogh"); }
+\\curlyyogh/{S} { out ("\\textctyogh"); }
+\\glotstop/{S} { out ("\\textglotstop"); }
+\\revglotstop/{S} { out ("\\textrevglotstop"); }
+\\invglotstop/{S} { out ("\\textinvglotstop"); }
+\\ejective/{S} { out ("\\textraiseglotstop"); }
+\\reveject/{S} { warn (); }
+
+\\dental/{S} { out ("\\textsubbridge"); }
+\\stress/{S} { out ("\\textprimstress"); }
+\\secstress/{S} { out ("\\textsecstress"); }
+\\syllabic/{S} { out ("\\textsyllabic"); }
+\\corner/{S} { out ("\\textcorner"); }
+\\upt/{S} { out ("\\textraising"); }
+\\downt/{S} { out ("\\textlowering"); }
+\\leftt/{S} { out ("\\textadvancing"); }
+\\rightt/{S} { out ("\\textretracting"); }
+\\halflength/{S} { out ("\\texthalflength"); }
+\\length/{S} { out ("\\textlengthmark"); }
+\\underdots/{S} { out ("\\textsubumlaut"); }
+\\ain/{S} { out ("\\textrevapostrophe"); }
+\\upp/{S} { out ("\\^"); }
+\\downp/{S} { out ("\\v"); }
+\\leftp/{S} { out ("\\textlptr"); }
+\\rightp/{S} { out ("\\textrptr"); }
+\\overring/{S} { out ("\\r"); }
+\\underring/{S} { out ("\\textsubring"); }
+\\open/{S} { out ("\\textsublhalfring"); }
+\\midtilde/{S} { out ("\\textsuperimposetilde"); }
+\\undertilde/{S} { out ("\\textsubtilde"); }
+\\underwedge/{S} { out ("\\textsubwedge"); }
+\\polishhook/{S} { out ("\\textpolhook"); }
+\\underarch/{S} { out ("\\textsubarch"); }
+
+\\dia(top|under)/{S} { BEGIN _dia; }
+
+
+\n { line++;
+ fputc ('\n', yyout);
+ }
+
+<_dia>"{" { BEGIN _open; }
+
+<_open>"|" { fputc ('{', yyout);
+ BEGIN INITIAL;
+ }
+
+%%
+
+int main (int argc, char *argv [])
+{
+ get_programname (argv [0]);
+
+ switch (argc) {
+ case 1:
+ if (isatty (fileno (stdin)))
+ syntax ();
+ yyin = stdin;
+ filename = "(stdin)";
+ break;
+ case 2:
+ yyin = fopen (argv [1], "r");
+ if (! yyin)
+ errit ("Opening file \"%s\": %s", argv [1], strerror (errno));
+ filename = argv [1];
+ break;
+ default:
+ syntax ();
+ }
+
+ yylex ();
+
+ if (yyin != stdin)
+ fclose (yyin);
+
+ fprintf (stderr, "%li change%s made.\n", count, (count == 1) ? "" : "s");
+
+ return 0;
+}
+
+void out (char const *s)
+{
+ fputs (s, yyout);
+ count++;
+}
+
+void warn ()
+{
+ fputs (yytext, yyout);
+ fprintf (stderr, "%s:%i: UNTRANSLATED: %s\n", filename, line, yytext);
+}
+
+void get_programname (char const *argv0)
+{
+#ifdef __MSDOS__
+ char
+ name [MAXFILE];
+ fnsplit (argv0, NULL, NULL, name, NULL);
+ programname = strdup (name);
+#else /* unix */
+ char
+ *p;
+ p = strrchr (argv0, '/');
+ if (p)
+ programname = strdup (p + 1);
+ else
+ programname = strdup (argv0);
+#endif
+}
+
+void errit (char const *format, ...)
+{
+ va_list
+ list;
+
+ fprintf (stderr, "\nError %s: ", programname);
+
+ va_start (list, format);
+ vfprintf (stderr, format, list);
+
+ fprintf (stderr, "\n\n");
+
+ exit (1);
+}
+
+void syntax ()
+{
+ fprintf (
+ stderr,
+ "\n"
+ "Usage: %s [file.tex]\n"
+ "\n"
+ "This program translates wsuipa font commands into tipa font commands.\n"
+ "\n",
+ programname
+ );
+
+ exit (1);
+}