]> git.donarmstrong.com Git - lilypond.git/blobdiff - stepmake/bin/ls-latex.py
Merge branch 'jneeman' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond into jneeman
[lilypond.git] / stepmake / bin / ls-latex.py
index 2f88134be42b77f2faa1e7901cd343ec64a81cf5..3c97ed9791122b284d9b171bd8920b0ebf35521e 100644 (file)
@@ -8,53 +8,61 @@ version = '0.1'
 import sys
 import os
 import string
-
-def gulp_file (fn):
-       f = open (fn)
-       return f.read ()
-
 import __main__
 import glob
-
 import re
 
 format_names  = {'ps.gz': 'Compressed PostScript',
-                'html' : 'HTML'
-                }
+                'html' : 'HTML'
+                }
+
+def gulp_file(f):
+    try:
+        i = open(f)
+        i.seek (0, 2)
+        n = i.tell ()
+        i.seek (0,0)
+    except:
+        sys.stderr.write ("can't open file: %s\n" % f)
+        return ''
+    s = i.read (n)
+    if len (s) <= 0:
+        sys.stderr.write ("gulped empty file: %s\n" % f)
+    i.close ()
+    return s
 
 class Latex_head:
     def __init__ (self):
-       self.author = ''
-       self.title = ''
-       self.date = ''
-       self.format = ''
-       
+        self.author = ''
+        self.title = ''
+        self.date = ''
+        self.format = ''
+        
 def read_latex_header (s):
     header = Latex_head()
     m = re.search(r'\\author{([^}]+)}', s)
     if m:
-       header.author = m.group (1)
+        header.author = m.group (1)
 
     m = re.search (r'\\title{([^}]+)}',s )
     if m:
-       header.title = m.group (1)
+        header.title = m.group (1)
 
     header.formats = ['ps.gz']
     return  header
 
 
 def read_bib_header (s):
-
     m = re.search ('% *AUTHOR *= *(.*)\n',s)
 
     header = Latex_head()
 
     if m:
-       header.author = m.group (1)
+        header.author = m.group (1)
 
     m = re.search ('% *TITLE *= *(.*)\n',s )
     if m:
-       header.title = m.group (1)
+        header.title = m.group (1)
 
     header.formats = ['html']
     return header
@@ -66,49 +74,85 @@ def read_pod_header (s):
     i = re.search( '[^\n \t]', s)
     s = s[i:]
     i = re.search( '\n\n', s)
-    s = s[i+2:]    
+    s = s[i+2:]        
     i = re.search( '\n\n', s)
     header.title = s[:i]
 
+    header.formats = ['html']
     return  header
 
 def read_texinfo_header (s):
     header = Latex_head ()
 
-    m = re.search( '@settitle (.*$)', s)
+    m = re.search( '@settitle (.*)\n', s)
     if m:
-       header.title = m.group (1)
-
+        header.title = m.group (1)
+    m = re.search( '@author (.*)\n', s)
+    if m:
+        header.author = m.group (1)
+    
     header.formats = ['html', 'ps.gz']
     return header
 
+# urg
+# should make a 'next_parens '
+yo_article_re = re.compile ('article(\\([^)]*\\))[ \t\n]*(\\([^)]*\\))')
+yo_report_re = re.compile ('report(\\([^)]*\\))[\t\n ]*(\\([^)]*\\))')
+yo_sect_re  =  re.compile ('sect(\\([^)]*\\))')
+yo_chapter_re  =  re.compile ('chapter(\\([^)]*\\))')
+
+def read_yodl_header (s):
+    header = Latex_head ()
+    report = yo_report_re.search (s)
+    article = 0
+    sect = 0
+    chapter = 0
+    if report:
+        header.author = report.group (2)
+        header.title = yo_report_re.group (1)
+    else:
+        article = yo_article_re.search (s)
+        if article:
+            header.author = article.group (2)
+            header.title = article.group (1)
+        else:
+            chapter = yo_chapter_re.search (s)
+            if chapter:
+                header.title = chapter.group (1)
+            else:
+                sect = yo_sect_re.search (s)
+                if sect:
+                    header.title = sect.group (1)
+
+    header.formats = ['html']
+    return  header
 
 
 def print_html_head (l,o,h):
     pre =o
-
     
     fn = pre + h.basename
 
     t = h.filename 
     if h.title :
-       t = t + ': '+ h.title
+        t = t + ': '+ h.title
 
     l.write ('<li>%s </a>' % t)
 
     if h.author:
-       l.write ('<p>by %s</p>' % h.author)
+        l.write ('<p>by %s</p>' % h.author)
 
     for f in h.formats:
-       l.write ('(<a href=%s.%s>%s</a>)' % (fn, f, format_names [f]))
+        l.write ('(<a href=%s.%s>%s</a>)' % (fn, f, format_names [f]))
     l.write ('</li>\n')
 
 def help ():
-    sys.stdout.write ("Usage: ls-latex [OPTION]... FILE...\n"
-                "Generate html index file for FILE...\n\n"
-                + "Options:\n"
-                + "  -h, --help             print this help\n"
-                     )
+    sys.stdout.write (r"""Usage: ls-latex [OPTIONS]... FILE...
+Generate html index file for FILE...
+
+Options:
+-h, --help                print this help
+""")
     sys.exit (0)
 
 import getopt
@@ -124,11 +168,11 @@ for opt in options:
     o = opt[0]
     a = opt[1]
     if o == '--prefix':
-       pre = a
+        pre = a
     elif o == '--title':
-       title = a  
+        title = a  
     elif o == '-h' or o == '--help':
-       help ()
+            help ()
 
 
 l = sys.stdout
@@ -147,13 +191,14 @@ read_header_funcs = {
     'latex' : read_latex_header,
     'tely' : read_texinfo_header,
     'texi': read_texinfo_header,
-}    
+    'yo': read_yodl_header, 
+}        
 
 
 for x in files:
     m = re.search ('\\.([^.]*)$', x)
     if m == None:
-       continue
+        continue
 
     s = gulp_file (x)
     head = read_header_funcs [m.group(1)] (s)