X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fly2dvi.py;h=d81879fa64e8efee378d0cd5d42cffd2892129b5;hb=3abcf40ffcc86fa452df2d3e79cc2c27b60fc6bd;hp=26f7bd263545c309d9380a982347985c9f8ac442;hpb=9651bafcd832c72a8f81ade4b602199583d61f37;p=lilypond.git diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index 26f7bd2635..d81879fa64 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -9,8 +9,15 @@ # +# +# TODO: should allow to set a central pk cache directory from the command line. +# TODO: should allow to switch off pk cache. +# + + # Note: gettext work best if we use ' for docstrings and " -# for gettextable strings +# for gettextable strings. +# --> DO NOT USE """ for docstrings. ''' TODO: @@ -71,12 +78,14 @@ except: return s -layout_fields = ['title', 'subtitle', 'subsubtitle', 'footer', 'head', - 'composer', 'arranger', 'instrument', 'opus', 'piece', 'metre', - 'meter', 'poet'] +layout_fields = ['dedication', 'title', 'subtitle', 'subsubtitle', + 'footer', 'head', 'composer', 'arranger', 'instrument', + 'opus', 'piece', 'metre', 'meter', 'poet', 'texttranslator'] -# init to empty; values here take precedence over values in the file +# init to empty; values here take precedence over values in the file + +## TODO: change name. extra_init = { 'language' : [], 'latexheaders' : [], @@ -98,6 +107,9 @@ help_summary = _ ("Generate .dvi with LaTeX for LilyPond") include_path = ['.'] lily_p = 1 paper_p = 1 +cache_pks_p = 1 + +PK_PATTERN='feta.*\.[0-9]+pk' output_name = '' targets = { @@ -124,7 +136,8 @@ if program_version == '@' + 'TOPLEVEL_VERSION' + '@': original_dir = os.getcwd () -temp_dir = '%s.dir' % program_name +temp_dir = os.path.join (original_dir, '%s.dir' % program_name) + keep_temp_dir_p = 0 verbose_p = 0 @@ -135,9 +148,9 @@ verbose_p = 0 # feta16.{afm,mf,tex,tfm}, and only set env upon failure. # environment = { - 'MFINPUTS' : datadir + '/mf:', - 'TEXINPUTS': datadir + '/tex:' + datadir + '/ps:.:', - 'TFMFONTS' : datadir + '/tfm:', + 'MFINPUTS' : ':' + datadir + '/mf', + 'TEXINPUTS': ':' + datadir + '/tex:' + datadir + '/ps', + 'TFMFONTS' : ':' + datadir + '/tfm', 'GS_FONTPATH' : datadir + '/afm:' + datadir + '/pfa', 'GS_LIB' : datadir + '/ps', } @@ -146,7 +159,7 @@ def setup_environment (): for key in environment.keys (): val = environment[key] if os.environ.has_key (key): - val = val + os.pathsep + os.environ[key] + val = os.environ[key] + os.pathsep + val os.environ[key] = val def identify (): @@ -179,7 +192,7 @@ def warning (s): def error (s): - """Report the error S. Exit by raising an exception. Please + '''Report the error S. Exit by raising an exception. Please do not abuse by trying to catch this error. If you donn't want a stack trace, write to the output directly. @@ -187,7 +200,7 @@ def error (s): None - """ + ''' progress (_ ("error: ") + s) raise _ ("Exiting ... ") @@ -261,6 +274,9 @@ def help (): map (sys.stdout.write, ls) def setup_temp (): + """ + Create a temporary directory, and return its name. + """ global temp_dir if not keep_temp_dir_p: temp_dir = tempfile.mktemp (program_name) @@ -268,7 +284,8 @@ def setup_temp (): os.mkdir (temp_dir, 0777) except OSError: pass - os.chdir (temp_dir) + + return temp_dir def system (cmd, ignore_error = 0): @@ -279,9 +296,14 @@ def system (cmd, ignore_error = 0): Exit status of CMD """ + if ( os.name != 'posix' ): + cmd = re.sub (r'''\\''', r'''\\\\\\''', cmd) + cmd = "sh -c \'%s\'" % cmd + + if verbose_p: progress (_ ("Invoking `%s\'") % cmd) - st = os.system (cmd) >> 8 + st = os.system (cmd) if st: name = re.match ('[ \t]*([^ \t]*)', cmd).group (1) msg = name + ': ' + _ ("command exited with value %d") % st @@ -445,7 +467,7 @@ def one_latex_definition (defn, first): else: s = s + '\\def\\mustmakelilypondpiecetitle{}\n' - s = s + '\\input %s' % defn[0] + s = s + '\\input %s\n' % defn[0] # The final \n seems important here. It ensures that the footers and taglines end up on the right page. return s @@ -497,11 +519,13 @@ lily output file in TFILES after that, and return the Latex file constructed. ' orientation = extra['orientation'][0] # set sane geometry width (a4-width) for linewidth = -1. - if not extra['linewidth'] or extra['linewidth'][0] < 0: - linewidth = 597 + maxlw = max (extra['linewidth'] + [-1]) + if maxlw < 0: + # who the hell is 597 ? + linewidth = '597' else: - linewidth = extra['linewidth'][0] - s = s + '\geometry{width=%spt%s,headheight=2mm,headsep=12pt,footskip=2mm,%s}\n' % (linewidth, textheight, orientation) + linewidth = maxlw + s = s + '\geometry{width=%spt%s,headheight=2mm,footskip=2mm,%s}\n' % (linewidth, textheight, orientation) if extra['latexoptions']: s = s + '\geometry{twosideshift=4mm}\n' @@ -532,11 +556,25 @@ lily output file in TFILES after that, and return the Latex file constructed. ' first = 0 s = s + r''' -% I do not see why we want to clobber the footer here -\vfill\hfill\parbox{\textwidth}{\mbox{}\makelilypondtagline} -%\makeatletter -%\renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}% -%\makeatother +%% I do not see why we want to clobber the footer here +%% \vfill\hfill\parbox{\textwidth}{\mbox{}\makelilypondtagline} +%% Well, maybe you don't submit music to mutopia? +%% I would not object to this kind of change, but I don't know how +%% to get the last mutopia tagline right (ie: no footer on last page) +%% Please check that mutopia footers and endfooter are OK before changing +%% this again. -- jcn +% the \mbox{} helps latex if people do stupid things in tagline +\makeatletter +\if@twoside + \ifodd\thepage + \renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}% + \else + \renewcommand{\@evenfoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}% + \fi + \else + \renewcommand{\@thefoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}% +\fi +\makeatother ''' s = s + '\\end{document}' @@ -560,12 +598,9 @@ None f.write (s) f.close () - if ( os.name == 'posix' ): - cmd = 'latex \\\\nonstopmode \\\\input %s' % latex_fn - else: - cmd = 'latex \\nonstopmode \\input %s' % latex_fn + cmd = 'latex \\\\nonstopmode \\\\input %s' % latex_fn - if not verbose_p: + if not verbose_p and os.name == 'posix': progress ( _("Running %s...") % 'LaTeX') cmd = cmd + ' 1> /dev/null 2> /dev/null' @@ -590,10 +625,9 @@ None. cmd = 'dvips %s -o%s %s' % (opts, outbase + '.ps', outbase + '.dvi') - if not verbose_p: + if not verbose_p and os.name == 'posix': progress ( _("Running %s...") % 'dvips') - if os.name == 'posix': - cmd = cmd + ' 1> /dev/null 2> /dev/null' + cmd = cmd + ' 1> /dev/null 2> /dev/null' system (cmd) @@ -698,8 +732,15 @@ if files and files[0] != '-': files = map (lambda x: strip_extension (x, '.ly'), files) + (outdir, outbase) = ('','') if not output_name: - output_name = os.path.basename (files[0]) + outbase = os.path.basename (files[0]) + outdir = abspath('.') + elif output_name[-1] == os.sep: + outdir = abspath (output_name) + outbase = os.path.basename (files[0]) + else: + (outdir, outbase) = os.path.split (abspath (output_name)) for i in ('.dvi', '.latex', '.ly', '.ps', '.tex'): output_name = strip_extension (output_name, i) @@ -712,10 +753,16 @@ if files and files[0] != '-': dep_prefix = 0 reldir = os.path.dirname (output_name) - (outdir, outbase) = os.path.split (abspath (output_name)) - + if outdir != '.' and (track_dependencies_p or targets.keys ()): + mkdir_p (outdir, 0777) + setup_environment () - setup_temp () + tmpdir = setup_temp () + if cache_pks_p : + os.chdir (outdir) + cp_to_dir (PK_PATTERN, tmpdir) + + os.chdir (tmpdir) extra = extra_init @@ -752,15 +799,12 @@ if files and files[0] != '-': if targets.has_key ('PS'): run_dvips (outbase, extra) - if outdir != '.' and (track_dependencies_p or targets.keys ()): - mkdir_p (outdir, 0777) - # add DEP to targets? if track_dependencies_p: depfile = os.path.join (outdir, outbase + '.dep') generate_dependency_file (depfile, depfile) if os.path.isfile (depfile): - progress (_ ("dependencies output to %s...") % depfile) + progress (_ ("dependencies output to `%s'...") % depfile) for i in targets.keys (): ext = string.lower (i) @@ -770,17 +814,20 @@ if files and files[0] != '-': if reldir != '.': outname = os.path.join (reldir, outname) if os.path.isfile (abs): - progress (_ ("%s output to %s...") % (i, outname)) + progress (_ ("%s output to `%s'...") % (i, outname)) elif verbose_p: warning (_ ("can't find file: `%s'") % outname) - + + if cache_pks_p: + cp_to_dir (PK_PATTERN, outdir) + os.chdir (original_dir) cleanup_temp () else: # FIXME help () - errorport.write ("ly2dvi: error: " + _ ("no files specified on command line.\n")) + errorport.write ("ly2dvi: " + _ ("error: ") + _ ("no files specified on command line.") + '\n') sys.exit (2)