summaryrefslogtreecommitdiff
path: root/support/ligatex/ligatex.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/ligatex/ligatex.l
Initial commit
Diffstat (limited to 'support/ligatex/ligatex.l')
-rw-r--r--support/ligatex/ligatex.l420
1 files changed, 420 insertions, 0 deletions
diff --git a/support/ligatex/ligatex.l b/support/ligatex/ligatex.l
new file mode 100644
index 0000000000..d99097fd60
--- /dev/null
+++ b/support/ligatex/ligatex.l
@@ -0,0 +1,420 @@
+%pointer
+%s LIGATEX
+%x KLAMMER GARNICHT
+NN [ ,.;\n\t\r<-]
+kon [b-df-hj-np-tv-z]
+vok ([aeiouäüö]|(&auml;)|(\"a)|(&uuml;)|(\"u)|(&ouml;)|(\"o))
+kss [bdfghklmnpqrstvwxz]
+klein ([a-zäüöß]|(&auml;)|(\"a)|(&uuml;)|(\"u)|(&ouml;)|(\"o)|ß|(\"s)|(&szlig;))
+grosz ([A-ZÄÖÜ]|(&Auml;)|(\"A)|(&Uuml;)|(\"U)|(&Ouml;)|(\"O))
+endung (e|(en)|(es)|(em)|(er)|(est)|(este)|(esten)|(ester)|(estes)|(estem)|(ste)|(ster)|(stes)|(sten)|(stem)|(st)|(ste)|(stes)|(sten)|(stem)|(ster))
+konjugiert (e|(en)|(st)|(en)|t|(te)|(test)|(ten)|(tet))
+ae (ä|(&auml;)|(\"a))
+ue (ü|(&uuml;)|(\"u))
+oe (ö|(&ouml;)|(\"o))
+Ae (Ä|(&Auml;)|(\"A))
+Ue (Ü|(&Uuml;)|(\"U))
+Oe (Ö|(&Ouml;)|(\"O))
+uml (ä|(&auml;)|(\"a)|ü|(&uuml;)|(\"u)|ö|(&ouml;)|(\"o))
+Uml (Ä|(&Auml;)|(\"A)|Ü|(&Uuml;)|(\"U)|Ö|(&Ouml;)|(\"O))
+sz (ß|(\"s)|(&szlig;))
+sstp (((ssch)|(sst)|(ssp))([a-z]|(ä|(&auml;)|(\"a)|ü|(&uuml;)|(\"u)|ö|(&ouml;)|(\"o))))
+
+%{
+/* Ligatex
+ Copyright (C) 1999,2000 Gerhard Killesreiter <gerhard@killesreiter.de>
+
+Ligatex ist ein freies Programm; Sie können es unter den
+Bedingungen der GNU General Public Licence, wie sie von der Free
+Software Foundation veröffentlicht wurde, verteilen und/oder
+modifizieren. Sie können die zweite Version verwenden oder nach
+ihrer Wahl jedwede später erscheinende Version.
+
+Ligatex wird in der Hoffnung verteilt, daß es nützlich sei, aber
+OHNE JEDWEDE GARANTIE, sogar ohne auch nur die implizite Garantie
+der HANDELBARKEIT oder der EIGNUNG FüR EINEN BESTIMMTEN ZWECK. Lesen
+Sie die GNU General Public Licence, um mehr Details zu erfahren.
+
+Sie sollten in der Datei COPYING eine Kopie der GNU General Public
+Licence mit Ligatex erhalten haben. Falls nicht, schreiben Sie
+an die Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
+USA. In der Datei LIZENZ befindet sich eine Übersetzung der GNU
+General Public Licence ins Deutsche, im Zweifelsfall ist die
+englische Originalversion die ausschlaggebende.
+
+Ligatex 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.
+
+Ligatex is distributed in the hope that it will be usefull,
+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 Ligatex; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+%}
+ char zeich;
+ int i,j;
+ int umlleng = 1;
+ int latex = 0;
+ int klammer = 0;
+ int scan = 0;
+ int foreign = 0;
+ char *szp;
+ char *aep;
+ char *deutsch;
+%%
+[öäüßÖÄÜ] {ECHO; umlleng=1; szp = "ß";aep = "ä";}
+((&[Aa]uml;)|(&[Uu]uml;)|(&[Uu]uml;)|(&szlig;)) {ECHO; umlleng= 6;
+ szp = "&szlig;";
+ aep = "&auml;";}
+((\"[Aa])|(\"[Uu])|(\"[Oo])|(\"s)) {ECHO; umlleng = 2; szp = "\"s";
+ aep = "\"a";}
+^[ \t]*"\\documentclass[" {printf(yytext); latex = 1;}
+^[ \t]*"\\documentclass" {printf(yytext);
+ latex = 1;}
+^[ \t]*"\\documentclass["[a-z,]*n?german[a-z,]*"]" {printf(yytext);
+ deutsch = "babel";
+ latex = 1;}
+^[ \t]*"\\documentclass["[a-z,]*n?austrian[a-z,]*"]" {printf(yytext);
+ deutsch = "babel";
+ latex = 1;}
+^[ \t]*"\\usepackage{"[a-z,]*n?german[a-z,]*"}" {printf(yytext);
+ deutsch = "german";}
+^[ \t]*"\\usepackage["[a-z,]*n?german"]{babel}" {printf(yytext);
+ deutsch = "babel2";}
+^[ \t]*"\\usepackage["[a-z,]*n?german[a-z,]*"]{babel}" {printf(yytext);
+ deutsch = "babel";}
+^[ \t]*"\\usepackage["[a-z,]*n?austrian"]{babel}" {printf(yytext);
+ deutsch = "babel2";}
+^[ \t]*"\\usepackage["[a-z,]*n?austrian[a-z,]*"]{babel}" {printf(yytext);
+ deutsch = "babel";}
+^[ \t]*"\\begin{document}" {printf(yytext);
+ if ( deutsch == "german" ||
+ deutsch == "babel2"){
+ BEGIN(LIGATEX);
+ scan = 1;}}
+<GARNICHT,INITIAL>^%*"\\begin{ligatex}" {printf(yytext);
+ BEGIN(LIGATEX);
+ scan = 1;}
+"\\selectlanguage{"[a-z]+"}" {
+ int stamm = yyleng - 17;
+ char sprache[yyleng - 17];
+ printf(yytext);
+ if ( stamm >= 7 ){
+ for (i = 0;i < stamm; i++){
+ sprache[i] = yytext[16 + i];
+ }
+ if(strncmp(sprache,"german",6) == 0 ||
+ strncmp(sprache,"\\german",7) == 0 ||
+ strncmp(sprache,"ngerman",7) == 0 ||
+ strncmp(sprache,"austrian",8) == 0 ||
+ strncmp(sprache,"naustrian",9) == 0)
+ {
+ BEGIN(LIGATEX);
+ scan = 1;} else{
+ BEGIN(INITIAL);
+ scan = 0;}
+ } else {BEGIN(INITIAL);
+ scan = 0;}
+ }
+"\\begin{otherlanguage}{"[a-z]+"}" {
+ int stamm = yyleng - 23;
+ char sprache[yyleng - 23];
+ printf(yytext);
+ if ( stamm >= 6 ){
+ for (i = 0;i< stamm; i++){
+ sprache[i] = yytext[22 + i];
+ }
+ if(strncmp(sprache,"german",6) == 0 ||
+ strncmp(sprache,"ngerman",7) == 0 ||
+ strncmp(sprache,"austrian",8) == 0 ||
+ strncmp(sprache,"naustrian",9) == 0)
+ {
+ BEGIN(LIGATEX);
+ scan = 1;} else{
+ BEGIN(INITIAL);
+ scan = 0;}
+ } else {BEGIN(INITIAL);
+ scan = 0;}
+ }
+"\\begin{otherlanguage*}{"[a-z]*"}" {
+ int stamm = yyleng - 24;
+ char sprache[yyleng - 24];
+ printf(yytext);
+ if ( stamm >= 6 ){
+ for (i = 0;i < stamm;i++){
+ sprache[i] = yytext[23 + i];
+ }
+ if( strncmp(sprache,"german",6) == 0 ||
+ strncmp(sprache,"ngerman",7) == 0 ||
+ strncmp(sprache,"austrian",8) == 0 ||
+ strncmp(sprache,"naustrian",9) == 0)
+ {
+ BEGIN(LIGATEX);
+ scan = 1;} else{
+ BEGIN(INITIAL);
+ scan = 0;}
+ } else {BEGIN(INITIAL);
+ scan = 0;}
+ }
+"\\end{otherlanguage}" {printf(yytext);
+ if(scan == 1){
+ BEGIN(INITIAL);
+ scan = 0;}
+ else {
+ BEGIN(LIGATEX);
+ scan = 1;}}
+"\\foreignlanguage{"[a-z]+"}{" {
+ int stamm = yyleng - 19;
+ char sprache[yyleng - 19];
+ printf(yytext);
+ if ( stamm >= 6 &&
+ stamm <= 9 ){
+ for (i = 0;i < stamm ; i++){
+ sprache[i] = yytext[17 + i];
+ }
+ if(strncmp(sprache,"german",6) == 0 ||
+ strncmp(sprache,"ngerman",7) == 0 ||
+ strncmp(sprache,"austrian",8) == 0 ||
+ strncmp(sprache,"naustrian",9) == 0)
+ {
+ BEGIN(LIGATEX);
+ scan = 1;
+ klammer = 1;
+ foreign = 1;
+ } else{
+ BEGIN(KLAMMER);
+ scan = 0;
+ foreign = 0;
+ klammer = 1;
+ }
+ } else {BEGIN(KLAMMER);
+ scan = 0;
+ klammer = 1;
+ foreign = 0;
+ }
+ }
+<LIGATEX>"\\{" ECHO;
+<LIGATEX>"\\}" ECHO;
+<LIGATEX>"{" {printf(yytext);
+ if (foreign == 1 ){
+ klammer = klammer + 1;}}
+<LIGATEX>"}" {printf(yytext);
+ if (foreign == 1 ){
+ klammer = klammer - 1;}
+ if ( klammer == 0 &&
+ foreign == 1){
+ BEGIN(INITIAL);
+ scan = 0;
+ foreign = 0;
+ }}
+<KLAMMER>"\\{" ECHO;
+<KLAMMER>"\\}" ECHO;
+<KLAMMER>"{" {printf(yytext);
+ klammer = klammer + 1;}
+<KLAMMER>"}" {printf(yytext);
+ klammer = klammer - 1;
+ if ( klammer == 0){
+ BEGIN(LIGATEX);
+ scan = 1;
+ }}
+^[ \t]*"\\end{document}" {printf(yytext);
+ BEGIN(INITIAL);
+ scan = 0;}
+^%*"\\end{ligatex}" {printf(yytext);
+ BEGIN(GARNICHT);
+ scan = 0;}
+<LIGATEX>{
+"\\"({grosz}{klein}*)* printf(yytext);/*TeX Makros*/
+"\\"{klein}*{NN} printf(yytext);
+"\\"{klein}*"\\" printf(yytext);
+"\\begin{"{grosz}{klein}*"}" printf(yytext);/*Umgebungen*/
+"\\begin{"{klein}*"}" printf(yytext);/*Umgebungen*/
+"\\end{"{grosz}{klein}*"}" printf(yytext);/*Umgebungen*/
+"\\end{"{klein}*"}" printf(yytext);/*Umgebungen*/
+[Tt]"iefl" {for (i = 0;i < yyleng - 1;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("l");
+[Tt]"ieffl" {for (i = 0;i < yyleng - 2;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("fl");
+"Aufl." printf("Aufl.");
+[^Bb][Aa]"ufl" {for (i = 0;i < yyleng - 1;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("l");
+[Aa]"uffl" {for (i = 0;i < yyleng - 2;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("fl");
+[Aa]"uffi" {for (i = 0;i < yyleng - 2;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("fi");
+[Aa]"uff" {for (i = 0;i < yyleng - 1;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("f");
+[Cc]"heffl" {for (i = 0;i < yyleng - 2;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("fl");
+[Cc]"hefi" {for (i = 0;i < yyleng - 1;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("i");
+[Dd]"ampfl" {for (i=0;i < yyleng -1;i++){
+ printf("%c",yytext[i]);}
+ };printf("\"|");printf("l");
+[Ff]"reiberufl" {for (i=0;i < yyleng -1;i++){
+ printf("%c",yytext[i]);}
+ };printf("\"|");printf("l");
+"pffl" {for (i = 0;i < yyleng - 2;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("fl");
+[Kk]"ampff" {for (i=0;i < yyleng -1;i++){
+ printf("%c",yytext[i]);}
+ };printf("\"|");printf("f");
+[Kk]"opflastig" printf("%c",yytext[0]);printf("opf\"|lastig");
+{NN}[Oo]"ffl" {for (i = 0;i < yyleng - 1;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("l");
+[Ss]"chaffell" printf("%c",yytext[0]);printf("chaf\"|fell");
+[Ss]"chaufl" {for (i = 0;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };
+[Ss]"chlupfl" printf("%c",yytext[0]);printf("chlupf\"|l");
+[Ss]"chn"{ue}"ffl" {for (i = 0;i < yyleng -3 ;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("ff\"|l");
+[Ss]"umpfl" {for (i=0;i < yyleng -1;i++){
+ printf("%c",yytext[i]);}
+ };printf("\"|");printf("l");
+[Cc]"hauffi" {for (i = 0;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };
+[Cc]"hauff" {for (i = 0;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };
+[alp]"flos"([^s]|{NN}) {printf("%c",yytext[0]);
+ printf("f\"|los");
+ printf("%c",yytext[5]);}
+"flich"({endung}|{NN}) printf("f\"|lich");{
+ for (i = 5;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }};
+"flisch"({endung}|{NN}) printf("f\"|lisch");{
+ for (i = 6;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }};
+"flig"({endung}|{NN}) printf("f\"|lig");{
+ for (i = 4;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }};
+[^Pp]"flich"({endung}|{NN}) {printf("%c",yytext[0]);
+ printf("f\"|lich");{
+ for (i = 6;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }};}
+"lffach"{NN} {printf("lf\"|fach");
+ printf("%c",yytext[6]);}
+"lffach"{endung} {printf("lf\"|fach");
+ {for (i = 6;i < yyleng;i++ ){
+ printf("%c",yytext[i]);
+ }};}
+[Ss]"chiefl" {for (i = 0;i < yyleng - 1;i++ ){
+ printf("%c",yytext[i]);}
+ printf("\"|");printf("l");}
+"fling" printf("f\"|ling");
+"flein" printf("f\"|lein");
+"flung" printf("f\"|lung");
+"afle" printf("af\"|le");
+"ifle" printf("if\"|le");
+"ofle" printf("of\"|le");
+"opflo" printf("opf\"|lo");
+"opfle" printf("opf\"|le");
+"afli" printf("af\"|li");
+"rafla" printf("raf\"|la");
+"rifl" printf("rif\"|l");
+({oe}|o)"pfl"{oe} {for (i = 0;i < yyleng - umlleng - 1;i++ )
+ { printf("%c",yytext[i]);}
+ printf("\"|l");
+ for (i = yyleng - umlleng;i < yyleng ;i++ ){
+ printf("%c",yytext[i]);
+ }}
+"mpflie" printf("mpf\"|lie");
+"mpflu" printf("mpf\"|lu");
+"mpffi" printf("mpf\"|fi");
+"offin" printf("off\"|in");
+"lffi" printf("lf\"|fi");
+"nffi" printf("nf\"|fi");
+"nffa" printf("nf\"|fa");
+"flichkeit" printf("f\"|lichkeit");
+[Kk]"aufin" {for (i = 0;i < yyleng - 2;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("in");
+[Ss]"treiflicht" {for (i = 0;i < yyleng - 5;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("licht");
+[Ww]"aldorflehrer" {for (i = 0;i < yyleng - 6;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("lehrer");
+[Zz]"upfin" {for (i = 0;i < yyleng - 2;i++ ){
+ printf("%c",yytext[i]);
+ }
+ };printf("\"|");printf("in");
+"fff" printf("ff\"|f"); /*RSR ist doof*/
+}
+%%
+
+
+#define HELP \
+"Usage: %s [OPTIONS]\n\n\
+The following mutually exclusiv options are recognized:\n\n\
+ --help display this help and exit\n\
+ --version output version information and exit\n\n\
+
+This program is a filter; it reads data from standard input, processes it,\n\
+and writes the results to standard output.\n\
+The data can be text encoded either in latin-1, TeX, or Html.\n\
+"
+
+#define VERSION "Ligatex 0.2.0"
+
+
+extern int parse_args(int, char **, char *, char *);
+
+int main(int argc, char **argv)
+{
+ parse_args(argc, argv, HELP, VERSION);
+/* fputs(GERMAN,stderr); */
+/* fputs(BABEL,stderr); */
+/* fputc('\n', stderr); */
+ yylex();
+
+ return(EXIT_SUCCESS);
+}
+
+
+