aboutsummaryrefslogtreecommitdiff
path: root/arabluatex.lua
diff options
context:
space:
mode:
authorRobert Alessi <alessi@robertalessi.net>2018-08-15 11:42:50 +0200
committerRobert Alessi <alessi@robertalessi.net>2018-08-15 11:42:50 +0200
commitc6543e722b554437618e19fcb6ccb5caf73cfc40 (patch)
treef8ecb572d1452be076e441295803cec221064332 /arabluatex.lua
parent136c4a8f6ce140ecf7325c0fb0a92dc4bb6464a9 (diff)
downloadarabluatex-c6543e722b554437618e19fcb6ccb5caf73cfc40.tar.gz
arabtex2utf: done programming functions exporting running paragraphs or Arabic verses
Diffstat (limited to 'arabluatex.lua')
-rw-r--r--arabluatex.lua84
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("*"))
49local bsqbracketsii = lpeg.Cs(bsqbrackets^-2) 49local bsqbracketsii = lpeg.Cs(bsqbrackets^-2)
50local bcbracesii = lpeg.Cs(bcbraces^-2) 50local bcbracesii = lpeg.Cs(bcbraces^-2)
51local cmd = lpeg.Cs(dblbkslash * ascii^1 * cmdstar^-1) 51local cmd = lpeg.Cs(dblbkslash * ascii^1 * cmdstar^-1)
52local cmdargs = lpeg.Cs(spce * bsqbracketsii * bcbracesii * bsqbrackets^-1) 52local cmdargs = lpeg.Cs(spce^-1 * bsqbracketsii * bcbracesii * bsqbrackets^-1)
53local arbargs = lpeg.Cs(spce^-1 * bsqbrackets^-1 * bcbraces) 53local arbargs = lpeg.Cs(spce^-1 * bsqbrackets^-1 * bcbraces)
54local baytargs = lpeg.Cs(spce * bcbraces * bsqbrackets^-1 * bcbraces) 54local baytargs = lpeg.Cs(spce * bcbraces * bsqbrackets^-1 * bcbraces)
55 55
@@ -642,7 +642,9 @@ local function processbuckw(str)
642return str 642return str
643end 643end
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
646local utffilesuffix = "_out" 648local utffilesuffix = "_out"
647local export_utf = "no" 649local export_utf = "no"
648 650
@@ -671,14 +673,21 @@ function al_openstream()
671end 673end
672 674
673local function processarbtoutf(str) 675local 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
714end 723end
715 724
716function arbtoutf(str) 725function 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
747end 756end
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
801end 813end
802 814
803 815-- Process standard arabluatex modes:
804function processvoc(str, rules, scheme) 816function 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