diff options
Diffstat (limited to 'arabluatex.lua')
-rw-r--r-- | arabluatex.lua | 84 |
1 files changed, 56 insertions, 28 deletions
diff --git a/arabluatex.lua b/arabluatex.lua index c0d9022..ac6a251 100644 --- a/arabluatex.lua +++ b/arabluatex.lua | |||
@@ -49,7 +49,7 @@ local cmdstar = lpeg.Cs(spce * lpeg.P("*")) | |||
49 | local bsqbracketsii = lpeg.Cs(bsqbrackets^-2) | 49 | local bsqbracketsii = lpeg.Cs(bsqbrackets^-2) |
50 | local bcbracesii = lpeg.Cs(bcbraces^-2) | 50 | local bcbracesii = lpeg.Cs(bcbraces^-2) |
51 | local cmd = lpeg.Cs(dblbkslash * ascii^1 * cmdstar^-1) | 51 | local cmd = lpeg.Cs(dblbkslash * ascii^1 * cmdstar^-1) |
52 | local cmdargs = lpeg.Cs(spce * bsqbracketsii * bcbracesii * bsqbrackets^-1) | 52 | local cmdargs = lpeg.Cs(spce^-1 * bsqbracketsii * bcbracesii * bsqbrackets^-1) |
53 | local arbargs = lpeg.Cs(spce^-1 * bsqbrackets^-1 * bcbraces) | 53 | local arbargs = lpeg.Cs(spce^-1 * bsqbrackets^-1 * bcbraces) |
54 | local baytargs = lpeg.Cs(spce * bcbraces * bsqbrackets^-1 * bcbraces) | 54 | local baytargs = lpeg.Cs(spce * bcbraces * bsqbrackets^-1 * bcbraces) |
55 | 55 | ||
@@ -642,7 +642,9 @@ local function processbuckw(str) | |||
642 | return str | 642 | return str |
643 | end | 643 | end |
644 | 644 | ||
645 | --- *** | 645 | -- The following functions produce a copy of the original .tex source |
646 | -- file in which all arabtex strings are replaced with Unicode | ||
647 | -- equivalents | ||
646 | local utffilesuffix = "_out" | 648 | local utffilesuffix = "_out" |
647 | local export_utf = "no" | 649 | local export_utf = "no" |
648 | 650 | ||
@@ -671,14 +673,21 @@ function al_openstream() | |||
671 | end | 673 | end |
672 | 674 | ||
673 | local function processarbtoutf(str) | 675 | local function processarbtoutf(str) |
674 | str = "\n\\begin{arbexport}\n"..str | 676 | str = "\\begin{arabexport}"..str |
675 | str = string.gsub(str, "(\\prname)%s?(%b{})", function(tag, body) | 677 | str = string.gsub(str, "(\\prname)%s?(%b{})", function(tag, body) |
676 | body = string.sub(body, 2, -2) | 678 | body = string.sub(body, 2, -2) |
677 | return string.format("\\arb[trans]{\\uc{%s}}", body) | 679 | return string.format("\\arb[trans]{\\uc{%s}}", body) |
678 | end) | 680 | end) |
679 | str = string.gsub(str, "(\\begin%s?{arab})(%b[])", "\\par\\bgroup\\arbpardir\\arb%2{") | 681 | str = string.gsub(str, "(\\begin%s?{arab})(%b[])", function(tag, body) |
682 | if string.find(body, "trans") then | ||
683 | return string.format("\\par\\bgroup\\setLR\\arb%s{", body) | ||
684 | else | ||
685 | return string.format("\\par\\bgroup\\setRL\\arb%s{", body) | ||
686 | end | ||
687 | end) | ||
680 | str = string.gsub(str, "(\\begin%s?{arab})", "\\par\\bgroup\\arbpardir\\arb{") | 688 | str = string.gsub(str, "(\\begin%s?{arab})", "\\par\\bgroup\\arbpardir\\arb{") |
681 | str = string.gsub(str, "\\end%s?{arab}", "}\\egroup\\par") | 689 | str = string.gsub(str, "\\end%s?{arab}", "}\\egroup\\par") |
690 | -- This does not work, while the following two do. Look into this later. | ||
682 | -- str = gsub(str, lpeg.Cs("\\arb") * spcenc * bsqbrackets^-1 * bcbraces, function(tag, opt, body) | 691 | -- str = gsub(str, lpeg.Cs("\\arb") * spcenc * bsqbrackets^-1 * bcbraces, function(tag, opt, body) |
683 | -- body = string.sub(body, 2, -2) | 692 | -- body = string.sub(body, 2, -2) |
684 | -- return string.format("%s%s\\@al@pr@ob%s\\@al@pr@cb", tag, opt, body) | 693 | -- return string.format("%s%s\\@al@pr@ob%s\\@al@pr@cb", tag, opt, body) |
@@ -699,50 +708,50 @@ local function processarbtoutf(str) | |||
699 | body = string.sub(body, 2, -2) | 708 | body = string.sub(body, 2, -2) |
700 | return string.format("%s\\@al@pr@ob%s\\@al@pr@cb", tag, body) | 709 | return string.format("%s\\@al@pr@ob%s\\@al@pr@cb", tag, body) |
701 | end) | 710 | end) |
702 | str = string.gsub(str, "{", "\\@al@ob ") | 711 | str = string.gsub(str, "{", "\\@al@ob") |
703 | str = string.gsub(str, "}", "\\@al@cb ") | 712 | str = string.gsub(str, "}", "\\@al@cb") |
704 | str = string.gsub(str, "\\@al@pr@ob", "{") | 713 | str = string.gsub(str, "\\@al@pr@ob", "{") |
705 | str = string.gsub(str, "\\@al@pr@cb", "}") | 714 | str = string.gsub(str, "\\@al@pr@cb", "}") |
706 | str = string.gsub(str, "(%b{})", function(body) | 715 | str = string.gsub(str, "(%b{})", function(body) |
707 | body = string.sub(body, 2, -2) | 716 | body = string.sub(body, 2, -2) |
708 | body = string.gsub(body, "\\@al@ob%s?", "{") | 717 | body = string.gsub(body, "(%s?)(\\@al@ob)", "%1{") |
709 | body = string.gsub(body, "\\@al@cb%s?", "}") | 718 | body = string.gsub(body, "(\\@al@cb)(%s?)", "}%2") |
710 | return string.format("{%s}", body) | 719 | return string.format("{%s}", body) |
711 | end) | 720 | end) |
712 | str = str.."\n\\end{arbexport}" | 721 | str = str.."\\end{arabexport}" |
713 | return str | 722 | return str |
714 | end | 723 | end |
715 | 724 | ||
716 | function arbtoutf(str) | 725 | function arbtoutf(str) |
717 | str = processarbtoutf(str) | 726 | str = processarbtoutf(str) |
718 | str = "\\ToOutFile{"..str.."}" | 727 | str = "\\ArbOutFile{"..str.."}" |
719 | str = string.gsub(str, "(\\ToOutFile)%s?(%b{})", function(tag, body) | 728 | str = string.gsub(str, "(\\ArbOutFile)%s?(%b{})", function(tag, body) |
720 | body = string.sub(body, 2, -2) | 729 | body = string.sub(body, 2, -2) |
721 | body = gsub(body, lpeg.Cs("\\arb") * arbargs, "}%1%2\\ToOutFile{") | 730 | body = gsub(body, lpeg.Cs("\\arb") * arbargs, "}%1%2\\ArbOutFile{") |
722 | return string.format("%s{%s}", tag, body) | 731 | return string.format("%s{%s}", tag, body) |
723 | end) | 732 | end) |
724 | str = string.gsub(str, "(\\ToOutFile)%s?(%b{})", function(tag, body) | 733 | str = string.gsub(str, "(\\ArbOutFile)%s?(%b{})", function(tag, body) |
725 | body = string.sub(body, 2, -2) | 734 | body = string.sub(body, 2, -2) |
726 | body = string.gsub(body, "(\\abjad)%s?(%b{})", "}%1%2\\ToOutFile{") | 735 | body = string.gsub(body, "(\\abjad)%s?(%b{})", "}%1%2\\ArbOutFile{") |
727 | return string.format("%s{%s}", tag, body) | 736 | return string.format("%s{%s}", tag, body) |
728 | end) | 737 | end) |
729 | str = string.gsub(str, "(\\ToOutFile)%s?(%b{})", function(tag, body) | 738 | str = string.gsub(str, "(\\ArbOutFile)%s?(%b{})", function(tag, body) |
730 | body = string.sub(body, 2, -2) | 739 | body = string.sub(body, 2, -2) |
731 | body = string.gsub(body, "(\\arbmark)%s?(%b{})", "}%1%2\\ToOutFile{") | 740 | body = string.gsub(body, "(\\arbmark)%s?(%b{})", "}%1%2\\ArbOutFile{") |
732 | return string.format("%s{%s}", tag, body) | 741 | return string.format("%s{%s}", tag, body) |
733 | end) | 742 | end) |
734 | -- str = string.gsub(str, "(\\arb%s?)(%b[])(%b{})", "}%1%2%3\\ToOutFile{") | 743 | -- str = string.gsub(str, "(\\arb%s?)(%b[])(%b{})", "}%1%2%3\\ArbOutFile{") |
735 | -- str = string.gsub(str, "(\\arb)%s?(%b{})", "}%1%2\\ToOutFile{") | 744 | -- str = string.gsub(str, "(\\arb)%s?(%b{})", "}%1%2\\ArbOutFile{") |
736 | -- str = gsub(str, lpeg.Cs("\\bayt") * baytargs, "}\\ToOutFile{\\bayt}%1%2\\ToOutFile{") | 745 | -- str = gsub(str, lpeg.Cs("\\bayt") * baytargs, "}\\ArbOutFile{\\bayt}%1%2\\ArbOutFile{") |
737 | -- str = gsub(str, lpeg.Cs("\\arb") * arbargs, "}%1%2\\ToOutFile{") | 746 | -- str = gsub(str, lpeg.Cs("\\arb") * arbargs, "}%1%2\\ArbOutFile{") |
738 | -- str = string.gsub(str, "(\\abjad)%s?(%b{})", "}%1%2\\ToOutFile{") | 747 | -- str = string.gsub(str, "(\\abjad)%s?(%b{})", "}%1%2\\ArbOutFile{") |
739 | -- str = string.gsub(str, "(\\abjad)(%s?)(%b{})", "}%1%3\\tooutfile{") | 748 | -- str = string.gsub(str, "(\\abjad)(%s?)(%b{})", "}%1%3\\ArbOutFile{") |
740 | -- str = string.gsub(str, "(\\begin%s?{arab})", "}%1") | 749 | -- str = string.gsub(str, "(\\begin%s?{arab})", "}%1") |
741 | -- str = string.gsub(str, "(\\end%s?{arab})", "%1\\ToOutFile{") | 750 | -- str = string.gsub(str, "(\\end%s?{arab})", "%1\\ArbOutFile{") |
742 | -- str = string.gsub(str, "(\\begin)", "\n%1") | 751 | -- str = string.gsub(str, "(\\begin)", "\n%1") |
743 | -- str = string.gsub(str, "(\\end)", "\n%1") | 752 | -- str = string.gsub(str, "(\\end)", "\n%1") |
744 | -- str = string.gsub(str, "(\\bayt)", "\n%1") | 753 | -- str = string.gsub(str, "(\\bayt)", "\n%1") |
745 | -- str = string.gsub(str, "(\\\\)", "%1\n") | 754 | -- str = string.gsub(str, "(\\\\)", "%1\n") |
746 | return str | 755 | return str |
747 | end | 756 | end |
748 | 757 | ||
@@ -784,8 +793,11 @@ function al_closestream() | |||
784 | --]] | 793 | --]] |
785 | t = string.gsub(t, "\\arabicfont{}", "") | 794 | t = string.gsub(t, "\\arabicfont{}", "") |
786 | t = string.gsub(t, "\\par ", "\n\n") | 795 | t = string.gsub(t, "\\par ", "\n\n") |
787 | t = string.gsub(t, "\\@al@ob%s?", "{") | 796 | t = string.gsub(t, "(%s?)(\\@al@ob%s?)", "{") |
788 | t = string.gsub(t, "\\@al@cb", "}") | 797 | t = string.gsub(t, "(\\@al@cb)(%s?)", "}%2") |
798 | t = gsub(t, lpeg.Cs("\\begin") * spcenc^-1 * bcbraces * cmdargs, "\n%1%2%3\n") | ||
799 | t = string.gsub(t, "(\\\\)", "%1\n") | ||
800 | t = string.gsub(t, "(\\end%s?)(%b{})", "\n%1%2") | ||
789 | t = string.gsub(t, "\n\n\n", "\n\n") | 801 | t = string.gsub(t, "\n\n\n", "\n\n") |
790 | if string.find(t, "\\begin%s?{document}.-\\arb%s?[%[%{]") then | 802 | if string.find(t, "\\begin%s?{document}.-\\arb%s?[%[%{]") then |
791 | tex.print([[\unexpanded{\PackageWarningNoLine{arabluatex}{There are still 'arabtex' strings to be converted. Open ]]..tex.jobname..utffilesuffix..".tex"..[[ and compile it one more time}}]]) | 803 | tex.print([[\unexpanded{\PackageWarningNoLine{arabluatex}{There are still 'arabtex' strings to be converted. Open ]]..tex.jobname..utffilesuffix..".tex"..[[ and compile it one more time}}]]) |
@@ -800,7 +812,7 @@ function al_closestream() | |||
800 | return true | 812 | return true |
801 | end | 813 | end |
802 | 814 | ||
803 | 815 | -- Process standard arabluatex modes: | |
804 | function processvoc(str, rules, scheme) | 816 | function processvoc(str, rules, scheme) |
805 | str = takeoutarb(str) | 817 | str = takeoutarb(str) |
806 | str = processarbnull(str, scheme) | 818 | str = processarbnull(str, scheme) |
@@ -820,6 +832,10 @@ function processvoc(str, rules, scheme) | |||
820 | if export_utf == "yes" then | 832 | if export_utf == "yes" then |
821 | tofile = "\\txarb{"..str.."}" | 833 | tofile = "\\txarb{"..str.."}" |
822 | tooutfile(tofile) | 834 | tooutfile(tofile) |
835 | elseif export_utf == "arabverse" then | ||
836 | tofile = "\\txarb{"..str.."}" | ||
837 | tooutfile(tofile) | ||
838 | return str | ||
823 | else | 839 | else |
824 | return str | 840 | return str |
825 | end | 841 | end |
@@ -847,6 +863,10 @@ function processfullvoc(str, rules, scheme) | |||
847 | if export_utf == "yes" then | 863 | if export_utf == "yes" then |
848 | tofile = "\\txarb{"..str.."}" | 864 | tofile = "\\txarb{"..str.."}" |
849 | tooutfile(tofile) | 865 | tooutfile(tofile) |
866 | elseif export_utf == "arabverse" then | ||
867 | tofile = "\\txarb{"..str.."}" | ||
868 | tooutfile(tofile) | ||
869 | return str | ||
850 | else | 870 | else |
851 | return str | 871 | return str |
852 | end | 872 | end |
@@ -872,6 +892,10 @@ function processnovoc(str, rules, scheme) | |||
872 | if export_utf == "yes" then | 892 | if export_utf == "yes" then |
873 | tofile = "\\txarb{"..str.."}" | 893 | tofile = "\\txarb{"..str.."}" |
874 | tooutfile(tofile) | 894 | tooutfile(tofile) |
895 | elseif export_utf == "arabverse" then | ||
896 | tofile = "\\txarb{"..str.."}" | ||
897 | tooutfile(tofile) | ||
898 | return str | ||
875 | else | 899 | else |
876 | return str | 900 | return str |
877 | end | 901 | end |
@@ -899,7 +923,11 @@ function processtrans(str, mode, rules, scheme) | |||
899 | str = unprotectarb(str) | 923 | str = unprotectarb(str) |
900 | if export_utf == "yes" then | 924 | if export_utf == "yes" then |
901 | tofile = str | 925 | tofile = str |
902 | tooutfile(str) | 926 | tooutfile(str) |
927 | elseif export_utf == "arabverse" then | ||
928 | tofile = str | ||
929 | tooutfile(tofile) | ||
930 | return str | ||
903 | else | 931 | else |
904 | return str | 932 | return str |
905 | end | 933 | end |