From a6ec80836fdb61ba50f1d39a9d0662e54735308c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 18 Sep 2020 21:30:44 +0000 Subject: dviasm (18sep20) git-svn-id: svn://tug.org/texlive/trunk@56373 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/man/man1/dviasm.1 | 121 +++++++++++++++++++++++++ Master/texmf-dist/doc/man/man1/dviasm.man1.pdf | Bin 0 -> 25356 bytes Master/texmf-dist/scripts/dviasm/dviasm.py | 42 +++++++-- Master/tlpkg/libexec/ctan2tds | 1 + 4 files changed, 154 insertions(+), 10 deletions(-) create mode 100644 Master/texmf-dist/doc/man/man1/dviasm.1 create mode 100644 Master/texmf-dist/doc/man/man1/dviasm.man1.pdf (limited to 'Master') diff --git a/Master/texmf-dist/doc/man/man1/dviasm.1 b/Master/texmf-dist/doc/man/man1/dviasm.1 new file mode 100644 index 00000000000..e5f67116ccc --- /dev/null +++ b/Master/texmf-dist/doc/man/man1/dviasm.1 @@ -0,0 +1,121 @@ +.TH DVIASM 1 +.SH NAME +DVIasm \- a TeX utility program for editing DVI files directly +.SH SYNOPSIS +\fBdviasm\fR [<\fIoptions\fR>] <\fIdvi_file\fR>|<\fIdvi_dump_file\fR> +.SH DESCRIPTION +\fBDVIasm\fR is a TeX utility program which is +designed for editing DeVice-Independent (DVI) files directly. +It consists of a single Python script, dviasm.py, +in a human readable text format. +It runs on any platform in which Python 3 is installed. +.TP 2 +Features of \fBDVIasm\fR includes: +.IP +1) Disassemble a DVI file (or XeTeX XDV file) into +a human-readable text file, the contents of which are easy to modify. +.IP +2) Assembles the output text file back to the binary format. +.TP 2 +There are several alternatives for dumping and editing DVI files: +.IP +1) \fBDVItype\fR developed by Donald E. Knuth supports +one-way conversion from DVI to a text format. +There are also some derivatives: \fBpDVItype\fR for pTeX, +\fBupDVItype\fR for upTeX, \fBODVItype\fR for Omega. +.IP +2) The programs \fBdv2dt\fR and \fBdt2dv\fR can be used +in pairs to allow two-way conversion between DVI and +the DVI Text Language (DTL). +.IP +3) The program \fBdvispc\fR (part of DVIOUT previewer) +also has an ability to convert between DVI and text. +.PP +Among those, \fBDVIasm\fR is designed to allow users to edit +DVI files easily, for example by unifying +``right1''\-``right4'' to a single command ``right'' +which can be used regardless of the amount of move. +.SH OPTIONS +.PP +.TP 10 +\fB--version\fR +Show program's version number and exit. +.TP 10 +\fB-h\fR, \fB--help\fR +Show this help message and exit. +.TP 10 +\fB-u\fR <\fISTR\fR>, \fB--unit=\fR<\fISTR\fR> +Set unit [default: `pt']. +Allowed values are: `sp', `pt', `bp', `mm', `cm' and `in'. +.TP 10 +\fB-o\fR <\fIFILE\fR>, \fB--output=\fR<\fIFILE\fR> +Set filename for output instead of stdout. +.TP 10 +\fB-e\fR <\fISTR\fR>, \fB--encoding=\fR<\fISTR\fR> +Set encoding for input/output of dumped text [default: `utf8']. +Allowed values are: `ascii', `latin1', `utf8', `sjis' and `eucjp'. +When used with the option \fB-p\fR (or \fB--ptex\fR), +allowed values are only `utf8', `sjis' and `eucjp'. +.RS 10 +# NOTE: This feature does not support dumping through stdout. +.RE +.TP 10 +\fB-x\fR <\fISTR\fR>, \fB--xxx-encoding=\fR<\fISTR\fR> +Set encoding for interpreting `xxx:' strings [default: `none']. +Allowed values are: `none', `utf8', `sjis' and `eucjp'. +.RS 10 +This option allows users to specify the correct encoding for +dumping/compiling the contents of \\special. +.TP 2 +Typical usages are as follows: +.IP +1) By default, the contents of \\special are dumped/compiled +as byte-to-byte escape sequences in `\\x..' format. +This would suffice when you don't need to read/edit +the contents of \\special. +.IP +3) For XeTeX and upTeX users, `\fB-x utf8\fR' would be useful +since these engines use UTF-8 to encode strings inside +\\special commands. +.IP +2) For pTeX users with ISO-2022-JP-encoded DVI, +it would be helpful to select the appropriate option +`\fB-x eucjp\fR' (for Unix) or `\fB-x sjis\fR' (for Windows) +to be consistent with the internal Kanji encoding used by +pTeX engine. +.RE +.TP 10 +\fB-t\fR <\fIINT\fR>, \fB--tabsize=\fR<\fIINT\fR> +Set tab size for push/pop [default: 2]. +.TP 10 +\fB-p\fR, \fB--ptex\fR +Dump and compile ISO-2022-JP-encoded DVI for Japanese pTeX. +This option is required to decode or encode Japanese characters +being typeset (using `set2' or `put2') properly. +.TP 10 +\fB-s\fR <\fISTR\fR>, \fB--subfont=\fR<\fISTR\fR> +Specify the list of fonts with UCS2 subfont scheme +in the comma-separated format. +If <\fISTR\fR> is empty, the pre-defined internal subfont list +is disabled. +.RS 10 +This option would be useful for example when using CJK package. +.RE +.SH EXAMPLE +Documentation of +.B DVIasm +by the original author Jin-Hwan Cho is published as: + http://tug.org/TUGboat/Articles/tb28-2/tb89cho.pdf (TUGboat) + http://ajt.ktug.kr/assets/2008/5/1/0201cho.pdf (Asian Journal of TeX) +.SH AUTHORS +The first version was written in Python 2 by Jin-Hwan Cho in 2007. +Khaled Hosny started to support dumping/compiling XeTeX XDV format in 2014. +Arthur Reutenauer ported the script to Python 3 in 2019. +Current maintainer of \fBDVIasm\fR is Hironobu Yamashita, since 2020. +.SH BUG REPORT +Please visit the GitHub repository . +.SH SEE ALSO +.BR dvitype (1), +.BR dv2dt (1), +.BR dt2dv (1), +.BR dvispc (1). diff --git a/Master/texmf-dist/doc/man/man1/dviasm.man1.pdf b/Master/texmf-dist/doc/man/man1/dviasm.man1.pdf new file mode 100644 index 00000000000..d70bb720ac4 Binary files /dev/null and b/Master/texmf-dist/doc/man/man1/dviasm.man1.pdf differ diff --git a/Master/texmf-dist/scripts/dviasm/dviasm.py b/Master/texmf-dist/scripts/dviasm/dviasm.py index a516fd398aa..2e7fc34d6f9 100755 --- a/Master/texmf-dist/scripts/dviasm/dviasm.py +++ b/Master/texmf-dist/scripts/dviasm/dviasm.py @@ -455,7 +455,7 @@ class DVI(object): if o == SET_RULE: s.append([SET_RULE, [p, SignedQuad(fp)]]) elif o in (PUT1, PUT2, PUT3, PUT4): - s.append([PUT1, p]) + s.append([PUT1, [p]]) elif o == PUT_RULE: s.append([PUT_RULE, [p, SignedQuad(fp)]]) elif o == NOP: @@ -492,7 +492,7 @@ class DVI(object): elif o < FNT_NUM_0 + 64 or o in (FNT1, FNT2, FNT3, FNT4): s.append([FNT1, p]) elif o in (XXX1, XXX2, XXX3, XXX4): - q = fp.read(p).decode('utf8') + q = fp.read(p) s.append([XXX1, q]) elif o in (FNT_DEF1, FNT_DEF2, FNT_DEF3, FNT_DEF4): self.DefineFont(p, fp) @@ -644,10 +644,20 @@ class DVI(object): if cmd[1] < 64: s.append(bytes.fromhex('%02x' % (FNT_NUM_0 + cmd[1]))) else: s.append(self.CmdPairU(cmd)) elif cmd[0] == XXX1: - cmd1 = cmd[1].encode('utf8') - l = len(cmd[1]) - if l < 256: s.append(bytes.fromhex('%02x' % XXX1) + bytes.fromhex('%02x' % l) + cmd1) - else: s.append(bytes.fromhex('%02x' % XXX4) + PutSignedQuad(l) + cmd1) + if options.xxx_encoding == "none": + l = len(cmd[1]) # leave encoding untouched + else: + cmd1 = cmd[1].encode(options.xxx_encoding) + l = len(cmd1) + if l < 256: + s.append(bytes.fromhex('%02x' % XXX1) + bytes.fromhex('%02x' % l)) + else: + s.append(bytes.fromhex('%02x' % XXX4) + PutSignedQuad(l)) + if options.xxx_encoding == "none": + for o in cmd[1]: + s.append(bytes.fromhex('%02x' % ord(o))) + else: + s.append(cmd1) elif cmd[0] == DIR: s.append(bytes.fromhex('%02x' % DIR) + bytes.fromhex('%02x' % cmd[1])) elif cmd[0] == BEGIN_REFLECT: @@ -806,7 +816,10 @@ class DVI(object): else: self.cur_page.append([SET1, ol]) elif key == 'put': - self.cur_page.append([PUT1, GetStr(val)]) + ol = GetStr(val) + if len(ol) != 1: + warning('only one character is allowed for put!') + self.cur_page.append([PUT1, ol]) elif key == 'setrule': v = val.split(' ') if len(v) != 2: @@ -937,7 +950,10 @@ class DVI(object): fp.write("push:\n") indent += tabsize elif cmd[0] == XXX1: - fp.write("xxx: %s\n" % repr(cmd[1])) + if options.xxx_encoding == "none": + fp.write("xxx: %s\n" % PutStrASCII(cmd[1])) # leave encoding untouched + else: + fp.write("xxx: '%s'\n" % cmd[1].decode(options.xxx_encoding)) elif cmd[0] == DIR: fp.write("dir: %d\n" % cmd[1]) elif cmd[0] == BEGIN_REFLECT: @@ -1147,7 +1163,7 @@ binary format. It is fully documented at Please report bugs to https://github.com/aminophen/dviasm""" - version = """This is %prog-20200912 + version = """This is %prog-20200918 Copyright (C) 2007-2008 by Jin-Hwan Cho Copyright (C) 2011-2017 by Khaled Hosny @@ -1172,6 +1188,10 @@ the Free Software Foundation, either version 3 of the License, or action="store", type="string", dest="encoding", metavar="STR", help="encoding for input/output [default=%default]") + parser.add_option("-x", "--xxx-encoding", + action="store", type="string", dest="xxx_encoding", + metavar="STR", + help="encoding for interpreting xxx strings [default=%default]") parser.add_option("-t", "--tabsize", action="store", type="int", dest="tabsize", metavar="INT", @@ -1183,12 +1203,14 @@ the Free Software Foundation, either version 3 of the License, or action="append", type="string", dest="subfont", metavar="STR", help="the list of fonts with UCS2 subfont scheme (comma separated); disable internal subfont list if STR is empty") - parser.set_defaults(unit='pt', encoding='utf8', tabsize=2) + parser.set_defaults(unit='pt', encoding='utf8', xxx_encoding='none', tabsize=2) (options, args) = parser.parse_args() if not options.unit in ['sp', 'pt', 'bp', 'mm', 'cm', 'in']: parser.error("invalid unit name '%s'!" % options.unit) if options.tabsize < 0: parser.error("negative tabsize!") + if not options.xxx_encoding in ['none', 'utf8', 'sjis', 'eucjp']: + parser.error("invalid xxx-encoding '%s'!" % options.xxx_encoding) if not options.encoding in ['ascii', 'latin1', 'utf8', 'sjis', 'eucjp']: parser.error("invalid encoding '%s'!" % options.encoding) if options.ptex: diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 44f5f93c838..5b9dd875fd4 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -3373,6 +3373,7 @@ $standardttf = '\.ttf|\.TTC'; 'ctan-o-mat' => '\.1$', 'ctanify' => '\.1$', 'dosepsbin' => 'dosepsbin.man', + 'dviasm' => '\.1$', 'epstopdf' => 'r?epstopdf.1|epstopdf.man1.pdf', # don't keep pdf 'findhyph' => 'findhyph.1', 'fontools' => '\.1$', -- cgit v1.2.3