From 2e92319cc54ed15a097f0fa5491ba1cb85594fac Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 1 Jun 2005 13:16:26 +0000 Subject: [PATCH] * scripts/lilypond-book.py (do_options): --psfonts doesn't take argument anymore. * make/ly-vars.make (DVIPS_FLAGS): use .psfonts as extension. * input/tutorial/lbook-latex-test.tex: add line length test. * scripts/lilypond-book.py (set_default_options): new function. Call this before dissecting snippets, so linewidth settings reach the snippets. --- ChangeLog | 13 ++++ Documentation/user/lilypond-book.itely | 18 +++--- input/tutorial/lbook-latex-test.tex | 23 +++++++ make/ly-rules.make | 7 ++- make/ly-vars.make | 2 +- python/fontextract.py | 1 - scripts/lilypond-book.py | 84 ++++++++++++++------------ 7 files changed, 96 insertions(+), 52 deletions(-) diff --git a/ChangeLog b/ChangeLog index 380c3d2ecc..12c696f5a9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2005-06-01 Han-Wen Nienhuys + + * scripts/lilypond-book.py (do_options): --psfonts doesn't take + argument anymore. + + * make/ly-vars.make (DVIPS_FLAGS): use .psfonts as extension. + + * input/tutorial/lbook-latex-test.tex: add line length test. + + * scripts/lilypond-book.py (set_default_options): new + function. Call this before dissecting snippets, so linewidth + settings reach the snippets. + 2005-06-01 Jan Nieuwenhuizen * scm/lily.scm (PLATFORM, slashify): Remove double slashes. diff --git a/Documentation/user/lilypond-book.itely b/Documentation/user/lilypond-book.itely index 5ec8f5a062..c29e882b61 100644 --- a/Documentation/user/lilypond-book.itely +++ b/Documentation/user/lilypond-book.itely @@ -93,7 +93,7 @@ Under Unix, you can view the results as follows @example cd input/tutorial mkdir -p out/ -lilypond-book --output=out --psfonts=psfonts lilybook.tex +lilypond-book --output=out --psfonts lilybook.tex @emph{lilypond-book (GNU LilyPond) 2.6.0} @emph{Reading lilybook.tex...} @emph{..lots of stuff deleted..} @@ -107,7 +107,7 @@ xdvi lilybook To convert the file into a PDF document, run the following commands @example -dvips -Ppdf -h psfonts lilybook +dvips -Ppdf -h lilybook.psfonts lilybook ps2pdf lilybook.ps @end example @@ -285,13 +285,13 @@ a PostScript file, add the following options to the @command{dvips} command line: @example --Ppdf -h psfonts +-Ppdf -h @var{file}.psfonts @end example @noindent -where the @command{psfonts} file is obtained from +where the @var{file}@command{psfonts} file is obtained from @command{lilypond-book}, @xref{Invoking lilypond-book} for details. PDF -can then be produced with a PostScript to PDF translator like +can then be produced with a PostScript to PDF translator like @code{ps2pdf} (which is part of GhostScript). @cindex international characters @@ -567,7 +567,7 @@ To produce PDF output from the lilypond-book file (here called @code{yourfile.lytex}), you should do @example -lilypond-book --psfonts=tempfonts.ps yourfile.lytex +lilypond-book --psfonts yourfile.lytex latex yourfile.tex dvips -h tempfonts.ps -Ppdf yourfile.dvi ps2pdf yourfile.ps @@ -639,9 +639,9 @@ Process LilyPond snippets using @var{command}. The default command is @code{lilypond}. @code{lilypond-book} will not --filter and --process at the same time. -@itemx --psfonts=FILE -extract all PostScript fonts into FILE for LaTeX. This is necessary -for @command{dvips -h FILE}. +@itemx --psfonts +extract all PostScript fonts into @file{@var{file}.psfonts} for dvips. +This is necessary for @command{dvips -h @var{file}.psfonts}. @item -V @itemx --verbose diff --git a/input/tutorial/lbook-latex-test.tex b/input/tutorial/lbook-latex-test.tex index f5cfa1c515..3930443891 100644 --- a/input/tutorial/lbook-latex-test.tex +++ b/input/tutorial/lbook-latex-test.tex @@ -22,4 +22,27 @@ Larger examples can be put in a separate file, and introduced with %\lilypondfile[quote,noindent]{screech-boink.ly} + + +The line length of a \LaTeX{} document matches the length of music +fragment: bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla +bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla +bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla +bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla +bla bla bla bla bla bla + +\begin{lilypond} +{ +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' c''4 c'' c'' c'' +} +\end{lilypond} + + \end{document} diff --git a/make/ly-rules.make b/make/ly-rules.make index b9581518ca..7900db9cf4 100644 --- a/make/ly-rules.make +++ b/make/ly-rules.make @@ -1,18 +1,19 @@ .SUFFIXES: .doc .dvi .tely .texi .ly -$(outdir)/%.latex $(outdir)/%.fonts.ps: %.doc +$(outdir)/%.latex $(outdir)/%.psfonts: %.doc $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --verbose $(LILYPOND_BOOK_FLAGS) $< # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir. # it is not, for --srcdir builds $(outdir)/%.texi: %.tely rm -f $$(grep -LF '% eof' $(outdir)/lily-*systems.tex 2>/dev/null) - $(PYTHON) $(LILYPOND_BOOK) --psfonts=$(basename $<).fonts.ps $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) --verbose $(LILYPOND_BOOK_FLAGS) $< + $(PYTHON) $(LILYPOND_BOOK) --psfonts $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) --verbose $(LILYPOND_BOOK_FLAGS) $< + $(outdir)/%.texi: $(outdir)/%.tely rm -f $$(grep -LF '% eof' $(outdir)/lily-*systems.tex 2>/dev/null) - $(PYTHON) $(LILYPOND_BOOK) --psfonts=$(notdir $(basename $<)).fonts.ps $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) --verbose $(LILYPOND_BOOK_FLAGS) $< + $(PYTHON) $(LILYPOND_BOOK) --psfonts $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND) $(LILYPOND_BOOK_INCLUDES)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) --verbose $(LILYPOND_BOOK_FLAGS) $< # # DON'T REMOVE SOURCE FILES, otherwise the .TEXI ALWAYS OUT OF DATE. # rm -f $< diff --git a/make/ly-vars.make b/make/ly-vars.make index 7f574563db..9135bc4741 100644 --- a/make/ly-vars.make +++ b/make/ly-vars.make @@ -17,4 +17,4 @@ TEXINFO_SOURCES += $(TELY_FILES) $(ITELY_FILES) $(ITEXI_FILES) EXTRA_DIST_FILES +=$(TELY_FILES) $(LY_FILES) $(ITEXI_FILES) $(ITELY_FILES) $(ILY_FILES) -DVIPS_FLAGS= -h $(subst pdf,fonts.ps,$(subst .ps,.fonts.ps, $(notdir $@ ))) +DVIPS_FLAGS= -h $(subst .pdf,.psfonts,$(subst .ps,.psfonts, $(notdir $@ ))) diff --git a/python/fontextract.py b/python/fontextract.py index 7066df3f79..1233921be8 100644 --- a/python/fontextract.py +++ b/python/fontextract.py @@ -81,7 +81,6 @@ def extract_fonts_from_file (extract_from_this, font_dict, filename): % (string.join (extract_from_this, ', '), filename)) def write_extracted_fonts (output_file_name, font_dict): - if verbose: sys.stderr.write( _('Writing fonts to %s') % output_file_name + '\n') output = open (output_file_name, 'w') diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 8dfaa411df..1c17298915 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -13,6 +13,9 @@ classic lilypond-book: lilypond-book --process="lilypond" BOOK.tely TODO: + + * this script is too complex. Modularize. + * ly-options: intertext? * --linewidth? * eps in latex / eps by lilypond -b ps? @@ -93,9 +96,9 @@ option_definitions = [ _ ("write output to DIR")), (_ ("COMMAND"), 'P', 'process', _ ("process ly_files using COMMAND FILE...")), - (_('FILE'), '', 'psfonts', - _ ('''extract all PostScript fonts into FILE for LaTeX - must use this with dvips -h FILE''')), + (_(''), '', 'psfonts', + _ ('''extract all PostScript fonts into INPUT.psfonts for LaTeX + must use this with dvips -h INPUT.psfonts''')), ('', 'V', 'verbose', _ ("be verbose")), ('', 'v', 'version', @@ -111,7 +114,7 @@ lilypond_binary = os.path.join ('@bindir@', 'lilypond') if '@bindir@' == ('@' + 'bindir@') or not os.path.exists (lilypond_binary): lilypond_binary = 'lilypond' -psfonts_file = '' +psfonts_p = 0 use_hash_p = 1 format = 0 output_name = '' @@ -650,6 +653,27 @@ def split_options (option_string): def invokes_lilypond (): return re.search ('^[\'\"0-9A-Za-z/]*lilypond', process_cmd) +def set_default_options (source): + global default_ly_options + if not default_ly_options.has_key (LINEWIDTH): + if format == LATEX: + textwidth = get_latex_textwidth (source) + default_ly_options[LINEWIDTH] = \ + '''%.0f\\pt''' % textwidth + elif format == TEXINFO: + for (k, v) in texinfo_linewidths.items (): + # FIXME: @layout is usually not in + # chunk #0: + # + # \input texinfo @c -*-texinfo-*- + # + # Bluntly search first K items of + # source. + # s = chunks[0].replacement_text () + if re.search (k, source[:1024]): + default_ly_options[LINEWIDTH] = v + break + class Chunk: def replacement_text (self): return '' @@ -1417,6 +1441,9 @@ def do_file (input_filename): source = in_handle.read () ly.progress ('\n') + set_default_options (source) + + # FIXME: Containing blocks must be first, see # find_toplevel_snippets. snippet_types = ( @@ -1433,27 +1460,6 @@ def do_file (input_filename): chunks = find_toplevel_snippets (source, snippet_types) ly.progress ('\n') - global default_ly_options - textwidth = 0 - if not default_ly_options.has_key (LINEWIDTH): - if format == LATEX: - textwidth = get_latex_textwidth (source) - default_ly_options[LINEWIDTH] = \ - '''%.0f\\pt''' % textwidth - elif format == TEXINFO: - for (k, v) in texinfo_linewidths.items (): - # FIXME: @layout is usually not in - # chunk #0: - # - # \input texinfo @c -*-texinfo-*- - # - # Bluntly search first K items of - # source. - # s = chunks[0].replacement_text () - if re.search (k, source[:1024]): - default_ly_options[LINEWIDTH] = v - break - if filter_cmd: write_if_updated (output_filename, [c.filter_text () for c in chunks]) @@ -1487,7 +1493,7 @@ def do_file (input_filename): raise Compile_error def do_options (): - global format, output_name, psfonts_file + global format, output_name, psfonts_p global filter_cmd, process_cmd, verbose_p (sh, long) = ly.getopt_args (option_definitions) @@ -1532,7 +1538,7 @@ def do_options (): elif o == '--verbose' or o == '-V': verbose_p = 1 elif o == '--psfonts': - psfonts_file = a + psfonts_p = 1 elif o == '--warranty' or o == '-w': if 1 or status: ly.warranty () @@ -1546,6 +1552,9 @@ def main (): ly.exit (2) file = files[0] + + basename = os.path.splitext (file)[0] + global process_cmd, format if not format: format = guess_format (files[0]) @@ -1566,11 +1575,13 @@ def main (): try: chunks = do_file (file) - if psfonts_file and invokes_lilypond (): + if psfonts_p and invokes_lilypond (): fontextract.verbose = verbose_p snippet_chunks = filter (lambda x: is_derived_class (x.__class__, Lilypond_snippet), chunks) + + psfonts_file = basename + '.psfonts' if not verbose_p: ly.progress (_ ("Writing fonts to %s...") % psfonts_file) fontextract.extract_fonts (psfonts_file, @@ -1583,20 +1594,17 @@ def main (): ly.exit (1) if format == TEXINFO or format == LATEX: - psfonts = 'PSFONTS-FILE' - if not psfonts_file: - ly.warning (_ ("option --psfonts=FILE not used")) + if not psfonts_p: + ly.warning (_ ("option --psfonts not used")) ly.warning (_ ("processing with dvips will have no fonts")) - else: - psfonts = os.path.join (output_name, psfonts_file) - - output = os.path.join (output_name, - os.path.splitext (os.path.basename - (file))[0]) + '.dvi' + + psfonts_file = os.path.join (output_name, basename + '.psfonts') + output = os.path.join (output_name, basename + '.dvi' ) + ly.progress ('\n') ly.progress (_ ("DVIPS usage:")) ly.progress ('\n') - ly.progress (" dvips -h %(psfonts)s %(output)s" % vars ()) + ly.progress (" dvips -h %(psfonts_file)s %(output)s" % vars ()) ly.progress ('\n') if __name__ == '__main__': -- 2.39.2