project/kiwipycon/proceedings/booklet/mk_scipy_paper.py
author Madhusudan.C.S <madhusudancs@gmail.com>
Thu, 01 Apr 2010 11:59:35 +0530
changeset 93 e86755df35da
permissions -rw-r--r--
Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
93
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 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
     5
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
     6
import shutil
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
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
     8
from glob import glob
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
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
from docutils import core as docCore
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
conf_name = 'SciPy2009'
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
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
current_dir = '/media/python/workspace/kiwipycon/project/kiwipycon/proceedings/booklet'
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
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
outdir = current_dir + os.sep + 'output'
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
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
sourcedir = current_dir + os.sep + 'sources'
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
try:
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
    os.mkdir(outdir)
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
except:
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
    pass
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
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
outfilename = outdir + os.sep + 'booklet.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
    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
# Routines for supervised execution
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
##############################################################################
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
from threading import Thread
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
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
    32
import signal
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
from subprocess import Popen
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
from time import sleep
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 delayed_kill(pid, delay=10):
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
    sleep(delay)
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
    try:
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
        os.kill(pid, signal.SIGTERM)
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
    except OSError:
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
        pass
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
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
def supervise_popen(command, timeout=10):
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
    process = Popen(command)
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
    Thread(target=delayed_kill, args=(process.pid,timeout),).start()
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
    process.wait()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    48
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    49
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    50
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    51
##############################################################################
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    52
# LaTeX generation functions.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    53
##############################################################################
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    54
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    55
def protect(string):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    56
    r''' Protects all the "\" in a string by adding a second one before
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    57
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    58
    >>> protect(r'\foo \*')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    59
    '\\\\foo \\\\*'
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    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
    61
    return re.sub(r"\\", r"\\\\", string)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    62
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    63
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    64
def safe_unlink(filename):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    65
    """ Remove a file from the disk only if it exists, if not r=fails silently
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
    if os.path.exists(filename):
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
        os.unlink(filename)
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
rxcountpages = re.compile(r"$\s*/Type\s*/Page[/\s]", re.MULTILINE|re.DOTALL)
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 count_pages(filename):
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
    data = file(filename,"rb").read()
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
    return len(rxcountpages.findall(data))
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
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
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
def tex2pdf(filename, remove_tex=True, timeout=10, runs=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
    78
    """ Compiles a TeX file with pdfLaTeX (or LaTeX, if or dvi ps requested)
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
        and cleans up the mess afterwards
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
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    81
    current_dir = os.getcwd()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    82
    os.chdir(os.path.dirname(filename))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    83
    print >> sys.stderr, "Compiling document to pdf"
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    84
    basename = os.path.splitext(os.path.basename(filename))[0]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    85
    if os.path.exists(basename + '.pdf'):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    86
        os.unlink(basename + '.pdf')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    87
    for _ in range(runs):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    88
        supervise_popen(("pdflatex",  "--interaction", "scrollmode",
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    89
                        os.path.basename(filename)), timeout=timeout)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    90
    error_file = None
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    91
    errors =  file(os.path.abspath(basename + '.log')).readlines()[-1]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    92
    if not os.path.exists(basename + '.pdf') or \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    93
                                    "Fatal error" in errors:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    94
        error_file = os.path.abspath(basename + '.log')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    95
    if remove_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
    96
        safe_unlink(filename+".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
    97
        safe_unlink(filename+".log")
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    98
    safe_unlink(filename+".aux")
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    99
    safe_unlink(filename+".out")
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   100
    os.chdir(current_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
   101
    return error_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
   102
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   103
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   104
def rst2latex(rst_string, no_preamble=True, allow_latex=True):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   105
    """ Calls docutils' engine to convert a rst string to a 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
   106
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   107
    overrides = {'output_encoding': 'utf-8', 'initial_header_level': 3,
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   108
                 'no_doc_title': True, 'use_latex_citations': True, 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   109
                 'use_latex_footnotes':True}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   110
    if allow_latex:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   111
        rst_string = u'''.. role:: math(raw)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   112
                    :format: latex
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   113
                    \n\n''' + rst_string
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   114
    tex_string = docCore.publish_string(
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   115
                source=rst_string,
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   116
                writer_name='latex2e', 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   117
                settings_overrides=overrides)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   118
    if no_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
   119
        extract_document = \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   120
            re.compile(r'.*\\begin\{document\}(.*)\\end\{document\}',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   121
            re.DOTALL)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   122
        matches = extract_document.match(tex_string)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   123
        tex_string = matches.groups()[0]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   124
    return tex_string
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   125
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   126
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   127
def get_latex_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
   128
    """ Retrieve the required preamble from docutils.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   129
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   130
    full_document = rst2latex('\n', no_preamble=False)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   131
    preamble = re.split(r'\\begin\{document\}', full_document)[0]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   132
    ## Remove the documentclass.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   133
    preamble = r"""
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   134
                %s
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   135
                \makeatletter
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   136
                \newcommand{\class@name}{gael}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   137
                \makeatother
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   138
                \usepackage{ltxgrid}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   139
                %s
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   140
                """ % (
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   141
                    preamble.split('\n')[0],
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   142
                    '\n'.join(preamble.split('\n')[1:]),
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   143
                )
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   144
    return 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
   145
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   146
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   147
##############################################################################
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   148
# Functions to generate part of the booklet
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   149
##############################################################################
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   150
def addfile(outfile, texfilename):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   151
    """ Includes the content of a tex file in our 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
   152
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   153
    include = codecs.open(texfilename, 'r')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   154
    data = include.readlines()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   155
    outfile.write(ur'\thispagestyle{empty}' + u'\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
   156
    outfile.writelines(data)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   157
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   158
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   159
def 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
   160
    outfile.write(r'''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   161
    %s
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   162
    \usepackage{abstracts}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   163
    \usepackage{ltxgrid}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   164
    \usepackage{amssymb,latexsym,amsmath,amsthm}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   165
    \usepackage{longtable}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   166
    \geometry{left=.8cm, textwidth=17cm, bindingoffset=0.6cm,
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   167
                textheight=25.3cm, twoside}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   168
    \usepackage{hyperref}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   169
    \hypersetup{pdftitle={Proceedings of the 8th Annual Python in Science Conference}}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   170
    \begin{document}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   171
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   172
    '''.encode('utf-8') % get_latex_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
   173
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   174
    # XXX SciPy08 should not be hard coded, but to run out of the webapp
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   175
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   176
def hack_include_graphics(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
   177
    """ 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
   178
        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
   179
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   180
    latex_text = re.sub(r'\\setlength\{\\rightmargin\}\{\\leftmargin\}',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   181
                        r'\\setlength{\\leftmargin}{4ex}\\setlength{\\rightmargin}{0ex}',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   182
                        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
   183
    latex_text = re.sub(r'\\begin\{quote\}\n\\begin\{itemize\}',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   184
                        r'\\begin{itemize}',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   185
                        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
   186
    latex_text = re.sub(r'\\end\{itemize\}\n\\end\{quote\}',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   187
                        r'\\end{itemize}',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   188
                        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
   189
    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
   190
                        r'\includegraphics[width=\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
   191
                        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
   192
    latex_text = re.sub(r'\\href\{([^}]+)\}\{http://(([^{}]|(\{[^}]*\}))+)\}', 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   193
                        r'''%
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   194
% Break penalties to have URL break easily:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   195
\mathchardef\UrlBreakPenalty=0
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   196
\mathchardef\UrlBigBreakPenalty=0
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   197
%\hskip 0pt plus 2em
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   198
\href{\1}{\url{\1}}''',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   199
                        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
   200
    latex_text = re.sub(r'\\href\{([^}]+)\}\{https://(([^{}]|(\{[^}]*\}))+)\}', 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   201
                        r'''%
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   202
% Break penalties to have URL break easily:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   203
\mathchardef\UrlBreakPenalty=0
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   204
\mathchardef\UrlBigBreakPenalty=0
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   205
\linebreak
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   206
\href{\1}{\url{\1}}''',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   207
                        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
   208
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   209
    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
   210
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   211
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   212
def render_abstract(outfile, abstract, start_page=None):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   213
    """ Writes the LaTeX string corresponding to one abstract.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   214
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   215
    if start_page is not None:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   216
        outfile.write(r"""
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   217
\setcounter{page}{%i}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   218
""" % start_page)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   219
    else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   220
        if hasattr(abstract, 'start_page'):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   221
            start_page = abstract.start_page
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   222
        else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   223
            start_page = 1
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   224
    if not abstract.authors:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   225
        author_list = abstract.owners
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   226
    else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   227
        author_list = abstract.authors
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   228
    authors = []
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   229
    print dir(author_list[0])
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   230
    for author in author_list:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   231
        # If the author has no surname, he is not an author 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   232
        if author.surname:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   233
            if author.email_address:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   234
                email = r'(\email{%s})' % author.email_address
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   235
            else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   236
                email = ''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   237
            authors.append(ur'''\otherauthors{
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   238
                            %s %s
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   239
                            %s --
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   240
                            \address{%s, %s}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   241
                            }''' % (author.first_names, author.surname,
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   242
                                    email,
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   243
                                    author.institution,
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   244
                                    author.city))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   245
    if authors:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   246
        authors = u'\n'.join(authors)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   247
        authors += r'\addauthorstoc{%s}' % ', '.join(
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   248
                '%s. %s' % (author.first_names[0], author.surname)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   249
                for author in author_list
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   250
                )
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   251
        author_cite_list = ['%s. %s' % (a.first_names[0], a.surname) 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   252
                                for a in author_list]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   253
        if len(author_cite_list) > 4:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   254
            author_cite_list = author_cite_list[:3]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   255
            author_cite_list.append('et al.')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   256
        citation = ', '.join(author_cite_list) + \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   257
        'in Proc. SciPy 2009, G. Varoquaux, S. van der Walt, J. Millman (Eds), '
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   258
        copyright = '\\copyright 2009, %s' % ( ', '.join(author_cite_list))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   259
    else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   260
        authors = ''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   261
        citation = 'Citation'
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   262
        copyright = 'Copyright'
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   263
    if hasattr(abstract, 'num_pages'):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   264
        citation += 'pp. %i--%i' % (start_page, start_page +
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   265
                                        abstract.num_pages)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   266
    else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   267
        citation += 'p. %i'% start_page
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   268
    if hasattr(abstract, 'number'):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   269
        abstract.url = 'http://conference.scipy.org/proceedings/%s/paper_%i' \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   270
        % (conf_name, abstract.number)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   271
        url = r'\url{%s}' % abstract.url
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   272
    else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   273
        url = ''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   274
    paper_text = abstract.paper_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
   275
    if paper_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
   276
        paper_text = abstract.summary
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   277
    # XXX: It doesn't seem to be right to be doing this, but I get a
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   278
    # nasty UnicodeDecodeError on some rare abstracts, elsewhere.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   279
    paper_text = codecs.utf_8_decode(hack_include_graphics(
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   280
                                rst2latex(paper_text)))[0]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   281
    paper_abstract = abstract.paper_abstract
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   282
    if paper_abstract is None:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   283
        paper_abstract = ''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   284
    if not paper_abstract=='':
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   285
        paper_abstract = ur'\begin{abstract}%s\end{abstract}' % \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   286
                    paper_abstract#.encode('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
   287
    abstract_dict = {
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   288
            'text': paper_text.encode('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
   289
            'abstract': paper_abstract.encode('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
   290
            'authors': authors.encode('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
   291
            'title': abstract.title.encode('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
   292
            'citation': citation.encode('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
   293
            'copyright': copyright.encode('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
   294
            'url': url.encode('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
   295
        }
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   296
    outfile.write(codecs.utf_8_decode(ur'''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   297
\phantomsection
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   298
\hypertarget{chapter}{} 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   299
\vspace*{-2em}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   300
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   301
\resetheadings{%(title)s}{%(citation)s}{%(url)s}{%(copyright)s}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   302
\title{%(title)s}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   303
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   304
\begin{minipage}{\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
   305
%(authors)s
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   306
\end{minipage}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   307
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   308
\noindent\rule{\linewidth}{0.2ex}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   309
\vspace*{-0.5ex}
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   310
\twocolumngrid
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   311
%(abstract)s
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   312
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   313
\sloppy
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   314
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   315
%(text)s
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   316
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   317
\fussy
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   318
\onecolumngrid
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   319
\smallskip
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   320
\vfill
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   321
\filbreak
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   322
\clearpage
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   323
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   324
'''.encode('utf-8') % abstract_dict )[0])
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   325
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   326
def copy_files(dest=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
   327
    """ Copy the required file from the source dir to the output 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
   328
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   329
    dirname = os.path.dirname(dest)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   330
    if dirname == '':
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   331
        dirname = '.'
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   332
    for filename in glob(sourcedir+os.sep+'*'):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   333
        destfile = os.path.abspath(dirname + os.sep +
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   334
                                os.path.basename(filename))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   335
        shutil.copy2(filename, destfile)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   336
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   337
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   338
def mk_abstract_preview(abstract, outfilename, attach_dir, start_page=None):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   339
    """ Generate a preview for an given paper.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   340
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   341
    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
   342
    outdir = os.path.dirname(os.path.abspath(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
   343
    for f in glob(os.path.join(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
   344
        if  os.path.isdir(f) and not os.path.exists(f):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   345
            os.makedirs(f)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   346
        else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   347
            if not outdir == os.path.dirname(os.path.abspath(f)):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   348
                shutil.copy2(f, outdir)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   349
    for f in glob(os.path.join(sourcedir, '*')):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   350
        if  os.path.isdir(f):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   351
            os.makedirs(f)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   352
        else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   353
            destfile = os.path.abspath(os.path.join(outdir, f))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   354
            shutil.copy2(f, outdir)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   355
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   356
    outbasename = os.path.splitext(outfilename)[0]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   357
    outfilename = outbasename + '.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
   358
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   359
    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
   360
    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
   361
    render_abstract(outfile, abstract, start_page=start_page)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   362
    outfile.write(ur'\end{document}' + u'\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
   363
    outfile.close()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   364
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   365
    tex2pdf(outbasename, remove_tex=False)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   366
    abstract.num_pages = count_pages(outbasename + '.pdf')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   367
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   368
    # Generate the tex file again, now that we know the length.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   369
    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
   370
    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
   371
    render_abstract(outfile, abstract, start_page=start_page)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   372
    outfile.write(ur'\end{document}' + u'\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
   373
    outfile.close()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   374
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   375
    return tex2pdf(os.path.splitext(outfilename)[0], remove_tex=False)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   376
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   377
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   378
##############################################################################
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   379
# Code for using outside of the webapp.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   380
##############################################################################
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   381
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   382
def mk_zipfile():
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   383
    """ Generates a zipfile with the required files to build an
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   384
        abstract.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   385
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   386
    from zipfile import ZipFile
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   387
    zipfilename = os.path.join(os.path.dirname(__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
   388
                            'mk_scipy_paper.zip')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   389
    z = ZipFile(zipfilename, 'w')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   390
    for filename in glob(os.path.join(sourcedir, '*')):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   391
        if not os.path.isdir(filename):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   392
            z.write(filename, arcname='source/' + os.path.basename(filename))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   393
    z.write(__file__, arcname='mk_scipy_paper.py')
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   394
    return zipfilename
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   395
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   396
class Bunch(dict):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   397
    def __init__(self, **kwargs):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   398
        dict.__init__(self, **kwargs)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   399
        self.__dict__ = 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
   400
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   401
    def __reprt(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
   402
        return repr(self.__dict__)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   403
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   404
author_like = Bunch(
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   405
        first_names='XX', 
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   406
        surname='XXX',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   407
        email_address='xxx@XXX',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   408
        institution='XXX',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   409
        address='XXX',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   410
        country='XXX'
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   411
)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   412
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   413
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   414
abstract_like = Bunch(
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   415
        paper_abstract='An abstract',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   416
        authors=[author_like, ],
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   417
        title='',
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   418
    )
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   419
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   420
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
   421
    from optparse import OptionParser
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   422
    parser = OptionParser()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   423
    parser.add_option("-o", "--output", dest="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
   424
                    default="./paper.pdf",
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   425
                    help="output to FILE", metavar="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
   426
    parser.usage = """%prog [options] rst_file [data_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
   427
    Compiles a given rest file and information file to pdf for the SciPy
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   428
    proceedings.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   429
    """
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   430
    
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   431
    (options, args) = parser.parse_args()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   432
    if not len(args) in (1, 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
   433
        print "One or two arguments required: the input rest file and " \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   434
                "the input data 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
   435
        print ''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   436
        parser.print_help()
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   437
        sys.exit(1)
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   438
    infile = args[0]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   439
    if len(args)==1:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   440
        data_file = 'data.py'
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   441
        if os.path.exists('data.py'):
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   442
            print "Using data file 'data.py'"
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   443
        else:
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   444
            print "Generating the data file and storing it in data.py"
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   445
            print "You will need to edit this file to add title, author " \
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   446
                "information, and abstract."
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   447
            abstract = abstract_like
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   448
            file('data.py', 'w').write(repr(abstract))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   449
    elif len(args)==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
   450
        data_file = args[1]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   451
    
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   452
    abstract = Bunch( **eval(file(data_file).read()))
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   453
    abstract.authors = [Bunch(**a) for a in abstract.authors]
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   454
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   455
    abstract['summary'] = u''
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   456
    abstract['paper_text'] = file(infile).read().decode('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
   457
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   458
    outfilename = options.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
   459
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   460
    mk_abstract_preview(abstract, options.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
   461
                        os.path.dirname(options.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
   462
    # Ugly, but I don't want to wait on the thread.
e86755df35da Add admin interface and views for proceedings. Booklet is also setup to generate paper.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   463
    sys.exit()