project/kiwipycon/proceedings/booklet/mk_booklet.py
author Madhusudan.C.S <madhusudancs@gmail.com>
Tue, 11 May 2010 03:48:47 +0530
changeset 96 3ece0de11641
parent 94 e86755df35da
permissions -rw-r--r--
Modify views and templates for proceedings to work.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
94
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     1
# encoding: utf-8
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     2
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     3
import os
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     4
import sys
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     5
import codecs
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     6
import re
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     7
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     8
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     9
from mk_scipy_paper import tex2pdf, current_dir , copy_files, preamble, \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    10
        render_abstract, addfile, sourcedir, outdir, outfilename
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    11
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    12
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    13
def hack_include_graphics(latex_text, attach_dir):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    14
    """ Replaces all the \includegraphics call with call that impose the
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    15
        width to be 0.9\linewidth.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    16
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    17
    latex_text = re.sub(r'\\includegraphics(\[.*\])?\{',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    18
                        r'\includegraphics\1{' + attach_dir,
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    19
                        latex_text)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    20
    return latex_text
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    21
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    22
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    23
class MyStringIO(object):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    24
    """ An unicode-friendly stringIO-like object.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    25
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    26
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    27
    def __init__(self):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    28
        self.lines = []
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    29
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    30
    def write(self, line):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    31
        self.lines.append(line)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    32
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    33
    def getvalue(self):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    34
        return u''.join(self.lines)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    35
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    36
def mk_booklet_tex(outfilename):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    37
    """ Generate the entire booklet latex file.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    38
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    39
    outfile = codecs.open(outfilename, 'w', 'utf-8')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    40
    preamble(outfile)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    41
    copy_files()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    42
    #addfile(outfile, sourcedir + os.sep + 'title.tex')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    43
    addfile(outfile, sourcedir + os.sep + 'introduction.tex')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    44
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    45
    #outfile.write(ur'\setcounter{page}{0}' + '\n')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    46
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    47
    #from sanum.controllers import Root as Controller
96
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    48
#    abstracts = model.Abstract.select()
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    49
#    for abstract in abstracts:
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    50
#        if not abstract.approved:
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    51
#            continue
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    52
#        print abstract.title
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    53
#        # Hack: I don't use a stringIO, because it is not unicode-safe.
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    54
#        tmpout = MyStringIO()
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    55
#        # Hack: I don't wont to be bound to the controller, to be
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    56
#        # abstractle to run without cherrypy.
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    57
#        #attach_dir = Controller._paper_attach_dir(abstract.id)
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    58
#        attach_dir = os.path.abspath(os.sep.join(
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    59
#                    (os.path.dirname(sanum.__file__), 'static', 
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    60
#                    'papers', '%i' % abstract.id))) + os.sep
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    61
#        render_abstract(tmpout, abstract)
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    62
#        outstring = hack_include_graphics(tmpout.getvalue(),
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    63
#                            attach_dir)
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    64
#        outfile.write(outstring)
3ece0de11641 Modify views and templates for proceedings to work.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 94
diff changeset
    65
#        #outfile.write(ur'\fillbreak' + '\n')
94
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    66
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    67
    outfile.write(ur'\end{document}' + '\n')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    68
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    69
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    70
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    71
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    72
def mk_booklet(outfilename=outfilename):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    73
    """ Generate the entire booklet pdf file.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    74
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    75
    name, ext = os.path.splitext(outfilename)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    76
    mk_booklet_tex(name + '.tex')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    77
    return tex2pdf(name, remove_tex=False, timeout=60)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    78
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    79
if __name__ == '__main__':
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    80
    mk_booklet(outfilename)