You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
5.2 KiB
183 lines
5.2 KiB
%%
|
|
%% This is file `l3sys-shell.sty',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% l3sys-shell.dtx (with options: `package')
|
|
%%
|
|
%% Copyright (C) 2018-2020 The LaTeX3 Project
|
|
%%
|
|
%% It may be distributed and/or modified under the conditions of
|
|
%% the LaTeX Project Public License (LPPL), either version 1.3c of
|
|
%% this license or (at your option) any later version. The latest
|
|
%% version of this license is in the file:
|
|
%%
|
|
%% http://www.latex-project.org/lppl.txt
|
|
%%
|
|
%% This file is part of the "l3experimental bundle" (The Work in LPPL)
|
|
%% and all files in that bundle must be distributed together.
|
|
%%
|
|
%% File: l3sys-shell.dtx
|
|
\RequirePackage{expl3}
|
|
\ProvidesExplPackage{l3sys-shell}{2020-08-07}{}
|
|
{L3 Experimental system shell functions}
|
|
\scan_new:N \s__sys_stop
|
|
\quark_new:N \q__sys_nil
|
|
\__kernel_quark_new_conditional:Nn \__sys_quark_if_nil:N { F }
|
|
\cs_new:Npn \__sys_path_to_win:n #1
|
|
{
|
|
\exp_after:wN \__sys_path_to_win:w \tl_to_str:n {#1} ~ \s__sys_stop
|
|
}
|
|
\cs_new:Npn \__sys_path_to_win:w #1 ~ #2 \s__sys_stop
|
|
{
|
|
\__sys_path_to_win:N #1 \q__sys_nil
|
|
\tl_if_empty:nF {#2}
|
|
{
|
|
\c_space_tl
|
|
\__sys_path_to_win:w #2 \s__sys_stop
|
|
}
|
|
}
|
|
\cs_new:Npn \__sys_path_to_win:N #1
|
|
{
|
|
\__sys_quark_if_nil:NF #1
|
|
{
|
|
\token_if_eq_meaning:NNTF #1 /
|
|
{ \c_backslash_str }
|
|
{#1}
|
|
\__sys_path_to_win:N
|
|
}
|
|
}
|
|
\cs_new_protected:Npx \sys_shell_cp:nn #1#2
|
|
{
|
|
\sys_if_shell_unrestricted:T
|
|
{
|
|
\sys_shell_now:x
|
|
{
|
|
\sys_if_platform_unix:T
|
|
{
|
|
cp~-f~ \exp_not:N \tl_to_str:n {#1} ~
|
|
\exp_not:N \tl_to_str:n {#2}
|
|
}
|
|
\sys_if_platform_windows:T
|
|
{
|
|
copy~/y~ \exp_not:N \__sys_path_to_win:n {#1} ~
|
|
\exp_not:N \__sys_path_to_win:n {#2}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
\cs_new_protected:Npx \sys_shell_mkdir:n #1
|
|
{
|
|
\sys_if_shell_unrestricted:T
|
|
{
|
|
\sys_shell_now:x
|
|
{
|
|
\sys_if_platform_unix:T
|
|
{ mkdir~-p~ \exp_not:N \tl_to_str:n {#1} }
|
|
\sys_if_platform_windows:T
|
|
{
|
|
if~not~exist~
|
|
\exp_not:N \__sys_path_to_win:n { #1 / nul } ~
|
|
mkdir~ \exp_not:N \__sys_path_to_win:n {#1}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
\cs_new_protected:Npx \sys_shell_mv:nn #1#2
|
|
{
|
|
\sys_if_shell_unrestricted:T
|
|
{
|
|
\sys_shell_now:x
|
|
{
|
|
\sys_if_platform_unix:T
|
|
{
|
|
mv~ \exp_not:N \tl_to_str:n {#1} ~
|
|
\exp_not:N \tl_to_str:n {#2}
|
|
}
|
|
\sys_if_platform_windows:T
|
|
{
|
|
copy~/y~ \exp_not:N \__sys_path_to_win:n {#1} ~
|
|
\exp_not:N \__sys_path_to_win:n {#2}
|
|
\token_to_str:N & \token_to_str:N &
|
|
del~/f~/q~\exp_not:N \__sys_path_to_win:n {#1}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
\cs_new_protected:Npx \sys_shell_rm:n #1
|
|
{
|
|
\sys_if_shell_unrestricted:T
|
|
{
|
|
\sys_shell_now:x
|
|
{
|
|
\sys_if_platform_unix:T
|
|
{ rm~-f~ \exp_not:N \tl_to_str:n {#1} }
|
|
\sys_if_platform_windows:T
|
|
{ del~/f~/q~ \exp_not:N \__sys_path_to_win:n {#1} }
|
|
}
|
|
}
|
|
}
|
|
\cs_new_protected:Npx \sys_shell_rmdir:n #1
|
|
{
|
|
\sys_if_shell_unrestricted:T
|
|
{
|
|
\sys_shell_mkdir:n {#1}
|
|
\sys_shell_now:x
|
|
{
|
|
\sys_if_platform_unix:T
|
|
{ rm~-rf~ \exp_not:N \tl_to_str:n {#1} }
|
|
\sys_if_platform_windows:T
|
|
{ rmdir~/s~/q~ \exp_not:N \__sys_path_to_win:n {#1} }
|
|
}
|
|
}
|
|
}
|
|
\tl_new:N \l__sys_tmp_tl
|
|
\cs_new_protected:Npx \sys_get_shell_pwd:N #1
|
|
{
|
|
\sys_if_shell_unrestricted:T
|
|
{
|
|
\exp_not:N \sys_get_shell:nnN
|
|
{
|
|
\sys_if_platform_unix:T { pwd }
|
|
\sys_if_platform_windows:T { cd }
|
|
}
|
|
{
|
|
\char_set_catcode_other:N \exp_not:N \\
|
|
\char_set_catcode_other:N \exp_not:N \#
|
|
\char_set_catcode_other:N \exp_not:N \~
|
|
\char_set_catcode_other:N \exp_not:N \%
|
|
\char_set_catcode_space:N \exp_not:N \ %
|
|
\tex_endlinechar:D -1 \scan_stop:
|
|
}
|
|
\exp_not:N \l__sys_tmp_tl
|
|
\str_set:NV #1 \exp_not:N \l__sys_tmp_tl
|
|
}
|
|
}
|
|
\cs_new_protected:Npx \sys_shell_split_ls:nN #1#2
|
|
{
|
|
\sys_if_shell_unrestricted:T
|
|
{
|
|
\exp_not:N \sys_get_shell:nnN
|
|
{
|
|
\sys_if_platform_unix:T { ls~-1~ #1 }
|
|
\sys_if_platform_windows:T { dir~/b~ #1 }
|
|
}
|
|
{
|
|
\ExplSyntaxOff
|
|
\char_set_catcode_other:N \exp_not:N \\
|
|
\char_set_catcode_other:N \exp_not:N \#
|
|
\char_set_catcode_other:N \exp_not:N \~
|
|
\char_set_catcode_other:N \exp_not:N \%
|
|
\char_set_catcode_other:n { 13 }
|
|
}
|
|
\exp_not:N \l__sys_tmp_tl
|
|
\str_set:NV \exp_not:N \l__sys_tmp_tl \exp_not:N \l__sys_tmp_tl
|
|
\seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } }
|
|
\exp_not:N \l__sys_tmp_tl
|
|
\seq_pop_right:NN #2 \exp_not:N \l__sys_tmp_tl
|
|
}
|
|
}
|
|
%%
|
|
%%
|
|
%% End of file `l3sys-shell.sty'.
|
|
|