summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-06-26 20:24:07 +0000
committerKarl Berry <karl@freefriends.org>2022-06-26 20:24:07 +0000
commit393f24336f0d0a9e419b29b0fd2baa85633544d9 (patch)
tree4439586690f1a81825e582caacf03a9018a5f707 /Master/texmf-dist/tex
parentabc2dcf35aec49abd426128b0ac9e1a3e7935dc9 (diff)
lt3luabridge (26jun22)
git-svn-id: svn://tug.org/texlive/trunk@63732 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.sty8
-rw-r--r--Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.tex407
-rw-r--r--Master/texmf-dist/tex/generic/lt3luabridge/t-lt3luabridge.tex4
3 files changed, 419 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.sty b/Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.sty
new file mode 100644
index 00000000000..fc786140c6f
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.sty
@@ -0,0 +1,8 @@
+\RequirePackage{expl3}
+\ProvidesExplPackage
+ {lt3luabridge}%
+ {2022-06-25}%
+ {1.0.0}%
+ {An expl3 package that allows you to execute Lua code in LuaTeX or any other
+ TeX engine that exposes the shell}
+\input lt3luabridge\relax
diff --git a/Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.tex b/Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.tex
new file mode 100644
index 00000000000..0c2b8f8ddd6
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/lt3luabridge/lt3luabridge.tex
@@ -0,0 +1,407 @@
+\ifx\ExplSyntaxOn\undefined
+ \input expl3-generic\relax
+\fi
+\ExplSyntaxOn
+\int_const:Nn \c__luabridge_method_write_eighteen_int { 0 }
+\int_const:Nn \c__luabridge_method_os_execute_int { 1 }
+\int_const:Nn \c__luabridge_method_directlua_int { 2 }
+\int_if_exist:NF
+ \g__luabridge_method_int
+ {
+ \int_new:N
+ \g__luabridge_method_int
+ \cs_if_exist:NTF
+ \directlua
+ {
+ \int_gset_eq:NN
+ \g__luabridge_method_int
+ \c__luabridge_method_directlua_int
+ }
+ {
+ \int_gset_eq:NN
+ \g__luabridge_method_int
+ \c__luabridge_method_write_eighteen_int
+ }
+ }
+\msg_new:nnn
+ { luabridge }
+ { unknown-method }
+ {
+ Unknown~bridging~method:~#1
+ }
+\msg_new:nnn
+ { luabridge }
+ { method-write-eighteen }
+ {
+ Using~shell~escape~via~write18~as~the~bridging~method
+ }
+\msg_new:nnn
+ { luabridge }
+ { method-os-execute }
+ {
+ Using~shell~escape~via~os.execute()~as~the~bridging~method
+ }
+\msg_new:nnn
+ { luabridge }
+ { method-directlua }
+ {
+ Using~direct~Lua~access~as~the~bridging~method
+ }
+\int_case:nnF
+ { \g__luabridge_method_int }
+ {
+ { \c__luabridge_method_write_eighteen_int }
+ {
+ \msg_info:nn
+ { luabridge }
+ { method-write-eighteen }
+ }
+ { \c__luabridge_method_os_execute_int }
+ {
+ \msg_info:nn
+ { luabridge }
+ { method-os-execute }
+ }
+ { \c__luabridge_method_directlua_int }
+ {
+ \msg_info:nn
+ { luabridge }
+ { method-directlua }
+ }
+ }
+ {
+ \msg_error:nnx
+ { luabridge }
+ { unknown-method }
+ { \g__luabridge_method_int }
+ }
+\bool_if:nTF
+ {
+ \int_compare_p:nNn
+ { \g__luabridge_method_int }
+ =
+ { \c__luabridge_method_write_eighteen_int } ||
+ \int_compare_p:nNn
+ { \g__luabridge_method_int }
+ =
+ { \c__luabridge_method_os_execute_int }
+ }
+ {
+ \int_const:Nn \c__luabridge_level_disabled_int { 0 }
+ \int_const:Nn \c__luabridge_level_enabled_int { 1 }
+ \int_const:Nn \c__luabridge_level_restricted_int { 2 }
+ \int_new:N
+ \g__luabridge_level_int
+ \cs_if_exist:NTF
+ \pdfshellescape
+ {
+ \int_gset:Nn
+ \g__luabridge_level_int
+ { \pdfshellescape }
+ }
+ {
+ \cs_if_exist:NTF
+ \shellescape
+ {
+ \int_gset:Nn
+ \g__luabridge_level_int
+ { \shellescape }
+ }
+ {
+ \int_case:nnF
+ { \g__luabridge_method_int }
+ {
+ { \c__luabridge_method_write_eighteen_int }
+ {
+ \int_gset_eq:NN
+ \g__luabridge_level_int
+ \c__luabridge_level_enabled_int
+ }
+ }
+ {
+ \int_gset:Nn
+ \g__luabridge_level_int
+ {
+ \directlua
+ {
+ tex.sprint(status.shell_escape or "1")
+ }
+ }
+ }
+ }
+ }
+ \msg_new:nnn
+ { luabridge }
+ { unknown-level }
+ {
+ Unknown~shell~escape~level:~#1
+ }
+ \msg_new:nnnn
+ { luabridge }
+ { level-disabled }
+ {
+ Shell~escape~seems~to~be~disabled
+ }
+ {
+ You~may~need~to~run~TeX~with~the~--shell-escape~or~the~
+ --enable-write18~flag,~or~write~shell_escape=t~in~the~
+ texmf.cnf~file.
+ }
+ \msg_new:nnn
+ { luabridge }
+ { level-enabled }
+ {
+ Shell~escape~seems~to~be~enabled
+ }
+ \msg_new:nnnn
+ { luabridge }
+ { level-restricted }
+ {
+ Shell~escape~seems~to~be~restricted
+ }
+ {
+ You~may~need~to~run~TeX~with~the~--shell-escape~or~the~
+ --enable-write18~flag,~or~write~shell_escape=t~in~the~
+ texmf.cnf~file.
+ }
+ \str_const:Nn \c__luabridge_default_output_dirname_str { . }
+ \str_const:Nx \c__luabridge_default_helper_script_filename_str { \jobname.luabridge.lua }
+ \str_const:Nx \c__luabridge_default_error_output_filename_str { \jobname.luabridge.err }
+ \str_const:Nx \c__luabridge_default_standard_output_filename_str { \jobname.luabridge.out }
+ \int_case:nnF
+ { \g__luabridge_level_int }
+ {
+ { \c__luabridge_level_disabled_int }
+ {
+ \msg_warning:nn
+ { luabridge }
+ { level-disabled }
+ }
+ { \c__luabridge_level_enabled_int }
+ {
+ \msg_info:nn
+ { luabridge }
+ { level-enabled }
+ }
+ { \c__luabridge_level_restricted_int }
+ {
+ \msg_warning:nn
+ { luabridge }
+ { level-restricted }
+ }
+ }
+ {
+ \msg_error:nnx
+ { luabridge }
+ { unknown-level }
+ { \g__luabridge_level_int }
+ }
+ \cs_new:Nn
+ \_luabridge_assert_shell_escape:
+ {
+ \int_case:nnF
+ { \g__luabridge_level_int }
+ {
+ { \c__luabridge_level_disabled_int }
+ {
+ \msg_error:nn
+ { luabridge }
+ { level-disabled }
+ }
+ }
+ }
+ \int_case:nn
+ { \g__luabridge_method_int }
+ {
+ { \c__luabridge_method_write_eighteen_int }
+ {
+ \cs_new:Nn
+ \_luabridge_execute_shell:n
+ {
+ \_luabridge_assert_shell_escape:
+ \immediate
+ \write 18
+ { #1 }
+ }
+ }
+ { \c__luabridge_method_os_execute_int }
+ {
+ \cs_new:Nn
+ \_luabridge_execute_shell:n
+ {
+ \_luabridge_assert_shell_escape:
+ \directlua
+ {
+ os.execute(
+ " \luaescapestring { #1 } "
+ )
+ }
+ }
+ }
+ }
+ \str_if_exist:NF
+ \g__luabridge_output_dirname_str
+ {
+ \str_new:N
+ \g__luabridge_output_dirname_str
+ \tl_gset:Nn
+ \g__luabridge_output_dirname_str
+ \c__luabridge_default_output_dirname_str
+ }
+ \str_if_exist:NF
+ \g__luabridge_helper_script_filename_str
+ {
+ \str_gset_eq:NN
+ \g__luabridge_helper_script_filename_str
+ \c__luabridge_default_helper_script_filename_str
+ }
+ \str_if_exist:NF
+ \g__luabridge_error_output_filename_str
+ {
+ \str_gset_eq:NN
+ \g__luabridge_error_output_filename_str
+ \c__luabridge_default_error_output_filename_str
+ }
+ \str_if_exist:NF
+ \g__luabridge_standard_output_filename_str
+ {
+ \str_gset_eq:NN
+ \g__luabridge_standard_output_filename_str
+ \c__luabridge_default_standard_output_filename_str
+ }
+ \cs:w newwrite \cs_end:
+ \l__luabridge_output_stream
+ \cs_new:Nn
+ \_luabridge_execute:n
+ {
+ \immediate \openout
+ \l__luabridge_output_stream
+ \g__luabridge_helper_script_filename_str
+ \msg_info:nnV
+ { luabridge }
+ { writing-helper-script }
+ \g__luabridge_helper_script_filename_str
+ \tl_set:Nx
+ \l_tmpa_tl
+ {
+ local~ran_ok,~error~=~pcall(function()~
+ local~ran_ok,~kpse~=~pcall(require,~"kpse")~
+ if~ran_ok~then~kpse.set_program_name("luatex")~end~
+ #1~
+ end)~
+ if~not~ran_ok~then~
+ local~file~=~io.open("
+ \g__luabridge_output_dirname_str /
+ \g__luabridge_error_output_filename_str
+ ",~"w")~
+ if~file~then~
+ file:write(error~..~" \iow_char:N \\ n ")~
+ file:close()~
+ end~
+ print('
+ \iow_char:N \\ \iow_char:N \\ begingroup
+ \iow_char:N \\ \iow_char:N \\ ExplSyntaxOn
+ \iow_char:N \\ \iow_char:N \\ msg_error:nnvv
+ { luabridge }
+ { failed-to-execute }
+ { g__luabridge_output_dirname_str }
+ { g__luabridge_output_dirname_str }
+ \iow_char:N \\ \iow_char:N \\ endgroup
+ ')~
+ end
+ }
+ \immediate \write
+ \l__luabridge_output_stream
+ { \exp_not:V \l_tmpa_tl }
+ \immediate \closeout
+ \l__luabridge_output_stream
+ \msg_info:nnVV
+ { luabridge }
+ { executing-helper-script }
+ \g__luabridge_helper_script_filename_str
+ \g__luabridge_standard_output_filename_str
+ \tl_set:Nx
+ \l_tmpa_tl
+ {
+ texlua~"
+ \g__luabridge_output_dirname_str /
+ \g__luabridge_helper_script_filename_str
+ "~>~"
+ \g__luabridge_output_dirname_str /
+ \g__luabridge_standard_output_filename_str
+ "
+ }
+ \_luabridge_execute_shell:V
+ \l_tmpa_tl
+ \file_if_exist_input:VF
+ \g__luabridge_standard_output_filename_str
+ {
+ \msg_error:nn
+ { luabridge }
+ { level-disabled }
+ }
+ }
+ \cs_generate_variant:Nn
+ \msg_info:nnn
+ { nnV }
+ \cs_generate_variant:Nn
+ \msg_info:nnnn
+ { nnVV }
+ \cs_generate_variant:Nn
+ \msg_error:nnnn
+ { nnvv }
+ \cs_generate_variant:Nn
+ \_luabridge_execute_shell:n
+ { V }
+ \prg_generate_conditional_variant:Nnn
+ \file_if_exist_input:n
+ { V }
+ { F }
+ \msg_new:nnn
+ { luabridge }
+ { writing-helper-script }
+ {
+ Writing~a~helper~Lua~script~to~file~#1
+ }
+ \msg_new:nnn
+ { luabridge }
+ { executing-helper-script }
+ {
+ Executing~a~helper~Lua~script~from~file~#1~
+ and~storing~the~result~in~file~#2
+ }
+ \msg_new:nnnn
+ { luabridge }
+ { failed-to-execute }
+ {
+ An~error~was~encountered~while~executing~Lua~code
+ }
+ {
+ For further clues, examine file #1/#2
+ }
+ }
+ {
+ \cs_new:Nn
+ \_luabridge_execute:n
+ {
+ \directlua
+ {
+ local~function~print(input)~
+ input~=~tostring(input)~
+ local~output~=~{}~
+ for~line~in~input:gmatch("[^
+ \iow_char:N \\ r
+ \iow_char:N \\ n
+ ]+")~do~
+ table.insert(output,~line)~
+ end~
+ tex.print(output)~
+ end~
+ #1
+ }
+ }
+ }
+\cs_new_protected:Npn
+ \luabridgeExecute
+ { \_luabridge_execute:n }
+\ExplSyntaxOff
diff --git a/Master/texmf-dist/tex/generic/lt3luabridge/t-lt3luabridge.tex b/Master/texmf-dist/tex/generic/lt3luabridge/t-lt3luabridge.tex
new file mode 100644
index 00000000000..12f8b18aff9
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/lt3luabridge/t-lt3luabridge.tex
@@ -0,0 +1,4 @@
+\writestatus{loading}{ConTeXt User Module / lt3luabridge}
+\startmodule[lt3luabridge]
+\unprotect
+\input lt3luabridge\relax