summaryrefslogtreecommitdiff
path: root/language/chinese/ctex/ctxdocstrip.tex
blob: 425496c0e5c44fe19867e7ede8129d6f8a398ecb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
%%
%% File ctxdocstrip.tex
%%
%%     Copyright (C) 2016--2020
%%     CTEX.ORG and any individual authors listed in the documentation.
%%---------------------------------------------------------------------
%%
%%     This work may be distributed and/or modified under the
%%     conditions of the LaTeX Project Public License, either
%%     version 1.3c of this license or (at your option) any later
%%     version. This version of this license is in
%%        http://www.latex-project.org/lppl/lppl-1-3c.txt
%%     and the latest version of this license is in
%%        http://www.latex-project.org/lppl.txt
%%     and version 1.3 or later is part of all distributions of
%%     LaTeX version 2005/12/01 or later.
%%
%%     This work has the LPPL maintenance status "maintained".
%%
%%---------------------------------------------------------------------
%%
\csname ctxDocstripLoaded\endcsname
\let\ctxDocstripLoaded\endinput
\input l3docstrip %
\edef\ctxResetCatcode{%
  \catcode\number`\$=\the\catcode`\$\relax
  \catcode\number`\@=\the\catcode`\@\relax
}
\makeOther\$
\catcode`\@=11\relax
\def\plusOption+#1>#2$#3$\endLine{%
  \maybeMsg{<+#1 . >}%
  \Evaluate{#1}%
  \def\ctxCMD{#2}%
  \def\ctxID{$#3$}%
  \def\do##1##2##3{%
    \if1\Expr{##2}%
      \ctxReadIDFile
      \StreamPut##1{\inLine}%
    \fi
  }%
  \activefiles
}
\def\ctxReadIDFile{%
  \openin\inputcheck=\jobname.id\relax
  \ifeof\inputcheck\else
    \read \inputcheck to \inLine
    \closein\inputcheck
    \ifx\inLine\empty\else
      \let\ctxID\inLine
    \fi
  \fi
  \maybeMsg{^^J\ctxID^^J}%
  \def\inLine{\ctxCMD\ctxID}%
}
\keepsilent
\askforoverwritefalse
\declarepreamble\emptypreamble
\endpreamble
\declarepostamble\emptypostamble
\endpostamble
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname directlua\endcsname\relax
  \expandafter\ctxResetCatcode\expandafter\endinput
\fi
\let\OriginalStreamClose\StreamClose
\def\ctxStreamClose#1{%
  \OriginalStreamClose{#1}%
  \ctxConvFile{#1}%
}
\def\ctxConvFile#1{%
  \ifcsname zhconv@\csstring#1\endcsname
    \ctxConv{\lastnamedcs}%
            {\begincsname pth@\csstring#1\endcsname}%
  \fi
}
\def\ctxLuaFunc{%
  \directlua{
    local zhconv = require("zhconv").conv
    local scan_string = token.scan_string
    local t = lua.get_functions_table()
    local id = 233
    while t[id] do id = id + 1 end
    t[id] = function ()
      local enc  = scan_string()
      local file = scan_string()
      return zhconv(enc, file, file)
    end
    token.set_lua("ctxConv", id, "global", "protected")
  }%
  \global\let\ctxLuaFunc\relax
}
\def\convfile{%
  \ifx\@file\file
    \expandafter\ctxfile\else
    \expandafter\setconvfile\fi
}
\def\setconvfile#1#2{%
  \ctxLuaFunc
  \Name\def{zhconv@#2}{#1}%
  \let\StreamClose\ctxStreamClose
}
\def\ctxfile#1#2{%
  \setconvfile{#1}{#2}%
  \file{#2}%
}
\ctxResetCatcode
%%
%%
%% End of file ctxdocstrip.tex