#!/usr/bin/env texlua -- splitindex.tlu -- Copyright (c) Markus Kohm, 2013-2014 -- -- $Id: splitindex_main.tlu 4 2016-02-18 10:13:32Z mjk $ -- -- This file is part of the SplitIndex bundle. -- -- This work may be distributed and/or modified under the conditions of -- the LaTeX Project Public License, version 1.3c of the license. -- The latest version of this license is in -- http://www.latex-project.org/lppl.txt -- and version 1.3c or later is part of all distributions of LaTeX -- version 2005/12/01 or later and of this work. -- -- This work has the LPPL maintenance status "author-maintained". -- -- The Current Maintainer and author of this work is Markus Kohm. -- -- The list of all files belongig to the SplitIndex bundle is given in -- in the file `manifest.txt'. Files generated by means of unpacking the -- distribution (using, for example, the docstrip program) or by means -- of compiling them from a source file, for example, from splitindex.c -- or splitindex.java may be distributed at the distributor's discretion. -- However if they are distributed then a copy of the SplitIndex bundle -- must be distributed together with them. -- -- The list of derived (unpacked or compiled) files belongig to the -- distribution and covered by LPPL is defined by the unpacking scripts -- (with extension .ins) and the installation script (with name -- install.sh) which are part of the distribution. -- -- Two often ignorred clauses from LPPL 1.3c you should not ignore: -- ---------------------------------------------------------------- -- 2. You may distribute a complete, unmodified copy of the Work as you -- received it. Distribution of only part of the Work is considered -- modification of the Work, and no right to distribute such a Derived -- Work may be assumed under the terms of this clause. -- 3. You may distribute a Compiled Work that has been generated from a -- complete, unmodified copy of the Work as distributed under Clause 2 -- above, as long as that Compiled Work is distributed in such a way that -- the recipients may install the Compiled Work on their system exactly -- as it would have been installed if they generated a Compiled Work -- directly from the Work. local version_number = string.sub( '$Revision: 4 $', 12, -2 ) local action_version = ' r'..version_number..'\n'..[[ Copyright (c) 2013 Markus Kohm. License: lppl 1.3c or later. See <http://www.latex-project.org/lppl.txt>. ]] local action_help = [[ options: -h, --help Print this help message. -i, --identify <regular expression> Setup the regular expression to match the entries. -m, --makeindex <program name> Use <program name> instead of `makeindex'. -r, --resultis <pattern> Create line to be written from <pattern> after matching. -s, --suffixis <pattern> Create suffix to be used from <pattern> after matching. -v, --verbose Be more verbose. -V,--version Print the version information. ]] local action_opts = { ['-h'] = 'help', ['--help'] = 'help', ['-i'] = 'identify', ['--identify'] = 'identify', ['-m'] = 'makeindex', ['--makeindex'] = 'makeindex', ['-r'] = 'resultis', ['--resultis'] = 'resultis', ['-s'] = 'suffixis', ['--suffixis'] = 'suffixis', ['-v'] = 'verbose', ['--verbose'] = 'verbose', ['-V'] = 'version', ['--version'] = 'version', ['--'] = '--', } local identify = '^(\\indexentry)%[([^]]*)%](.*)$' local makeindex = 'makeindex' local resultis = '%1%3' local suffixis = '-%2' local verbose = 0 while arg[1] do local action = action_opts[arg[1]] if action == '--' then table.remove(arg,1) break elseif action == 'help' then print( arg[0]..action_version ) print( 'Usage: ' .. arg[0] .. ' -h/--help' ) print( ' ' .. arg[0] .. ' -V/--version' ) print( ' ' .. arg[0] .. ' [<option> ...] \\ \ <intermediate index file> \\ \ [<makeindex option> ...]' ) print( action_help ); os.exit( 0 ); elseif action == 'identify' then table.remove(arg,1) if arg[1] == nil then error( 'value expected after option -i or --identify' ) end identify = arg[1] table.remove(arg,1) elseif action == 'makeindex' then table.remove(arg,1) if arg[1] == nil then error( 'value expected after option -m or --makeindex' ) end makeindex = arg[1] table.remove(arg,1) elseif action == 'resultis' then table.remove(arg,1) if arg[1] == nil then error( 'value expected after option -r or --resultis' ) end resultis = string.gsub(arg[1],'%$','%%') table.remove(arg,1) elseif action == 'suffixis' then table.remove(arg,1) if arg[1] == nil then error( 'value expected after option -s or --suffixis' ) end suffixis = string.gsub(arg[1],'%$','%%') table.remove(arg,1) elseif action == 'verbose' then table.remove(arg,1) verbose = verbose + 1 elseif action == 'version' then print( arg[0] .. action_version ); os.exit( 0 ); else break; end end if arg[1] == nil then error( 'intermediate file missing' ) end local ifilename = arg[1] table.remove(arg,1) local bfilename = string.gsub(ifilename,'^(.*)%.idx$','%1') local f=io.open(ifilename,"rb") if f~=nil then io.close(f); elseif ifilename ~= bfilename..'.idx' then f=io.open(bfilename..'.idx',"rb") if f~=nil then io.close(f) ifilename=bfilename..'.idx' end end local makeindexargs='' while arg[1] do makeindexargs = makeindexargs..' "'..arg[1]..'"' table.remove(arg,1) end local ofiles={} local line for line in io.lines(ifilename) do local newline=string.gsub(line,identify,resultis) local ext,matches=string.gsub(line,identify,suffixis) if matches == 0 then ext = string.gsub(suffixis,'%%[1234567890]','idx') end if ofiles[ext] == nil then local msg ofiles[ext],msg = io.open(bfilename..ext..'.idx','w') if ofiles[ext] == nil then error(msg) end end assert( ofiles[ext]:write(newline,"\n") ) end local k,v for k,v in pairs(ofiles) do assert( v:close() ) local cmd=makeindex..makeindexargs..' "'..bfilename..k..'.idx"' if makeindex ~= '' then local s,t,n=os.execute(cmd) if not s then error('failed to execute ' .. cmd ) end end end -- -- End of file `splitindex.tlu'