|
#!/usr/bin/python
|
|
from string import Template
|
|
import subprocess
|
|
import sys
|
|
|
|
with open('all_settings.tex', 'r') as f:
|
|
template = Template(f.read())
|
|
|
|
|
|
themes = 'Default', 'Rays', 'Basic', 'Simple', 'Envelope', 'Wave', 'Board', 'Autumn', 'Desert'
|
|
|
|
colors = 'Default', 'Australia', 'Britain', 'Sweden', 'Spain', 'Russia', 'Denmark', 'Germany'
|
|
|
|
palettes = 'Default', 'BlueGrayOrange', 'GreenGrayViolet', 'PurpleGrayBlue', 'BrownBlueOrange'
|
|
|
|
backgrounds = 'Default', 'VerticalGradation', 'Rays', 'BottomVerticalGradation', 'Empty'
|
|
|
|
titles = 'Default', 'Basic', 'Empty', 'Filled', 'Envelope', 'Wave', 'VerticalShading'
|
|
|
|
blocks = 'Default', 'Basic', 'Minimal', 'Envelope', 'Corner', 'Slide', 'TornOut'
|
|
|
|
notes = 'Default', 'VerticalShading', 'Corner', 'Sticky'
|
|
|
|
|
|
|
|
|
|
##################################################################################
|
|
## This function creates a latex document from the template in
|
|
## "all_settings.tex" by substituting the values for the theme, and
|
|
## for the color, background, title, block and note commands, and
|
|
## adding a specific message as the title and a sub-message as the
|
|
## author of the document. Then it compiles this file (called
|
|
## "filename.tex"), keeps only the pdf file, and remembers its name
|
|
## for future.
|
|
##
|
|
## We also need latex commands because the resulting pdf contains the
|
|
## code of the document. So we need to modify certain characters for
|
|
## latex.
|
|
##
|
|
def createTexAndCompile( message, submessage, theme, colorcommand,
|
|
backgroundcommand, titlecommand,
|
|
blockcommand, notecommand, themelatexcommand,
|
|
colorlatexcommand, backgroundlatexcommand,
|
|
titlelatexcommand, blocklatexcommand,
|
|
notelatexcommand, filename, filelist ):
|
|
|
|
page = template.substitute(
|
|
{
|
|
'messagevar': message,
|
|
'submessagevar': submessage,
|
|
'themevar': theme,
|
|
'colorvar': colorcommand,
|
|
'backgroundvar': backgroundcommand,
|
|
'titlevar': titlecommand,
|
|
'blockvar': blockcommand,
|
|
'notevar': notecommand,
|
|
'themestylevar': themelatexcommand,
|
|
'colorstylevar': colorlatexcommand,
|
|
'backgroundstylevar': backgroundlatexcommand,
|
|
'titlestylevar': titlelatexcommand,
|
|
'blockstylevar': blocklatexcommand,
|
|
'notestylevar': notelatexcommand,
|
|
}
|
|
)
|
|
|
|
## create a tex file
|
|
with open(filename + '.tex', 'w') as f:
|
|
f.write(page)
|
|
|
|
## compile the tex file
|
|
subprocess.call('pdflatex {}.tex'.format(filename).split())
|
|
|
|
## clean up auxiliary files (non-pdf)
|
|
subprocess.call('rm -f {}.tex'.format(filename).split())
|
|
subprocess.call('rm -f {}.aux'.format(filename).split())
|
|
subprocess.call('rm -f {}.log'.format(filename).split())
|
|
|
|
## remember the name of the file for future
|
|
filelist.append(filename)
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## This function is for testing styles using the Default theme, or for
|
|
## testing each theme without modifications.
|
|
##
|
|
## This function creates latex commands for each style, depending on
|
|
## the values of theme, color, palette, background, title, block and
|
|
## note. Then calls function createTexAndCompile that uses these
|
|
## commands to create and compile the actual document.
|
|
##
|
|
## The main difference of this function with
|
|
## createTexAndCompileAllOptions is follows. The generated pdf
|
|
## contains the code used to generate it, so that users could easily
|
|
## see the settings. In this function the code is kept minimal, so the
|
|
## commands of the form \usesomestyle{Default} are not
|
|
## displayed. Therefore, if one uses a non-Default theme and then, for
|
|
## instance, default block style, it would have effect in the
|
|
## generated pdf, but the code in the pdf would not be correct.
|
|
##
|
|
## Thus, in principle this function can be used for arbitrary
|
|
## combinations of options, but the correctness of the code in the pdf
|
|
## file is guaranteed only for testing styles using the Default theme,
|
|
## or for testing each theme without modifications.
|
|
##
|
|
def createTexAndCompileOneOption( message, submessage, theme, color, palette,
|
|
background, title, block, note, filelist ):
|
|
|
|
themelatexcommand = ''
|
|
colorcommand = colorlatexcommand = ''
|
|
backgroundcommand = backgroundlatexcommand = ''
|
|
titlecommand = titlelatexcommand = ''
|
|
blockcommand = blocklatexcommand = ''
|
|
notecommand = notelatexcommand = ''
|
|
|
|
## only if theme is the default one, we also specify other styles
|
|
if theme != 'Default' and theme != '':
|
|
themelatexcommand = r'\bs usetheme\{' + theme + r'\}\\'
|
|
|
|
if color != '':
|
|
if palette != '':
|
|
colorcommand = r'\usecolorstyle[colorPalette=' + palette + ']{' + color + '}'
|
|
colorlatexcommand = r'\bs usecolorstyle[colorPalette=' + palette + ']\{' + color + r'\}\\'
|
|
else:
|
|
colorcommand = r'\usecolorstyle{' + color + '}'
|
|
colorlatexcommand = r'\bs usecolorstyle\{' + color + r'\}\\'
|
|
if colorcommand == r'\usecolorstyle{Default}' or colorcommand == r'\usecolorstyle[colorPalette=Default]{Default}':
|
|
colorcommand = colorlatexcommand = ''
|
|
elif palette != '' and palette != 'Default':
|
|
colorcommand = r'\usecolorstyle[colorPalette=' + palette + ']{Default}'
|
|
colorlatexcommand = r'\bs usecolorstyle[colorPalette=' + palette + r']\{Default\}\\'
|
|
|
|
if background != 'Default' and background != '':
|
|
backgroundcommand = r'\usebackgroundstyle{' + background + '}'
|
|
backgroundlatexcommand = r'\bs usebackgroundstyle\{' + background + r'\}\\'
|
|
|
|
if title != 'Default' and title != '':
|
|
titlecommand = r'\usetitlestyle{' + title + '}'
|
|
titlelatexcommand = r'\bs usetitlestyle\{' + title + r'\}\\'
|
|
|
|
if block != 'Default' and block != '':
|
|
blockcommand = r'\useblockstyle{' + block + '}'
|
|
blocklatexcommand = r'\bs useblockstyle\{' + block + r'\}\\'
|
|
|
|
if note != 'Default' and note != '':
|
|
notecommand = r'\usenotestyle{' + note + '}'
|
|
notelatexcommand = r'\bs usenotestyle\{' + note + r'\}\\'
|
|
|
|
filename = 'ff_' + theme + color + palette + background + title + block + note
|
|
|
|
createTexAndCompile( message, submessage, theme, colorcommand,
|
|
backgroundcommand, titlecommand,
|
|
blockcommand, notecommand, themelatexcommand,
|
|
colorlatexcommand, backgroundlatexcommand,
|
|
titlelatexcommand, blocklatexcommand,
|
|
notelatexcommand, filename, filelist )
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## This function is for testing all combinations of styles.
|
|
##
|
|
## This function creates latex commands for each style, depending on
|
|
## the values of color, palette, background, title, block and note.
|
|
## Then calls function createTexAndCompile that uses these commands to
|
|
## create and compile the actual document.
|
|
##
|
|
def createTexAndCompileAllOptions( message, submessage, theme, color,
|
|
palette, background, title, block, note,
|
|
filelist ):
|
|
|
|
themelatexcommand = ''
|
|
colorcommand = colorlatexcommand = ''
|
|
backgroundcommand = backgroundlatexcommand = ''
|
|
titlecommand = titlelatexcommand = ''
|
|
blockcommand = blocklatexcommand = ''
|
|
notecommand = notelatexcommand = ''
|
|
|
|
if theme != '':
|
|
themelatexcommand = r'\bs usetheme\{' + theme + r'\}\\'
|
|
else:
|
|
themelatexcommand = r'\bs usetheme\{Default\}\\'
|
|
|
|
if color != '':
|
|
if palette != '':
|
|
colorcommand = r'\usecolorstyle[colorPalette=' + palette + ']{' + color + '}'
|
|
colorlatexcommand = r'\bs usecolorstyle[colorPalette=' + palette + ']\{' + color + r'\}\\'
|
|
else:
|
|
colorcommand = r'\usecolorstyle{' + color + '}'
|
|
colorlatexcommand = r'\bs usecolorstyle\{' + color + r'\}\\'
|
|
elif palette != '':
|
|
colorcommand = r'\usecolorstyle[colorPalette=' + palette + ']{Default}'
|
|
colorlatexcommand = r'\bs usecolorstyle[colorPalette=' + palette + r']\{Default\}\\'
|
|
|
|
if background != '':
|
|
backgroundcommand = r'\usebackgroundstyle{' + background + '}'
|
|
backgroundlatexcommand = r'\bs usebackgroundstyle\{' + background + r'\}\\'
|
|
|
|
if title != '':
|
|
titlecommand = r'\usetitlestyle{' + title + '}'
|
|
titlelatexcommand = r'\bs usetitlestyle\{' + title + r'\}\\'
|
|
|
|
if block != '':
|
|
blockcommand = r'\useblockstyle{' + block + '}'
|
|
blocklatexcommand = r'\bs useblockstyle\{' + block + r'\}\\'
|
|
|
|
if note != '':
|
|
notecommand = r'\usenotestyle{' + note + '}'
|
|
notelatexcommand = r'\bs usenotestyle\{' + note + r'\}\\'
|
|
|
|
|
|
filename = 'ff_' + theme + color + palette + background + title + block + note
|
|
|
|
createTexAndCompile( message, submessage, theme, colorcommand,
|
|
backgroundcommand, titlecommand,
|
|
blockcommand, notecommand, themelatexcommand,
|
|
colorlatexcommand, backgroundlatexcommand,
|
|
titlelatexcommand, blocklatexcommand,
|
|
notelatexcommand, filename, filelist )
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## A function to combine all pdfs whose names are given in the list filelist,
|
|
## in a file called outputFile
|
|
##
|
|
def combinePdfs( outputFile, filelist ):
|
|
## merging all pdfs in filelist
|
|
command = 'gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=' + outputFile + '.pdf'
|
|
subprocess.call(
|
|
command.split() + [t + '.pdf' for t in filelist]
|
|
)
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## A function to remove pdf files whose names are given in the list filelist
|
|
##
|
|
def removePdfs( filelist ):
|
|
## removing the pdfs
|
|
for filename in filelist:
|
|
subprocess.call('rm -f {}.pdf'.format(filename).split())
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## A function to combine all pdfs whose names are given in the list filelist,
|
|
## in a file called outputFile, then remove these files
|
|
##
|
|
def combineAndRemovePdfs( outputFile, filelist ):
|
|
combinePdfs( outputFile, filelist )
|
|
removePdfs( filelist )
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## A function to try all options: color palettes, color styles, backgrounds,
|
|
## titles, blocks and notes separately
|
|
def testAllOptionsSeparately( ):
|
|
filenames = []
|
|
|
|
##########------------------------------##########
|
|
##########------------------------------##########
|
|
########## varying themes
|
|
color = palette = background = title = block = note = ''
|
|
submessage = 'All options are defined by the theme'
|
|
outputFile = 'all_themes'
|
|
|
|
for theme in themes:
|
|
message = 'Using ' + theme + ' theme'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
|
|
##########------------------------------##########
|
|
########## varying color styles
|
|
del filenames[:]
|
|
theme = background = title = block = note = 'Default'
|
|
palette = ''
|
|
submessage = 'with the rest being Default'
|
|
outputFile = 'all_colors'
|
|
|
|
for color in colors:
|
|
message = 'Using ' + color + ' color style'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
|
|
########## varying color palettes
|
|
del filenames[:]
|
|
theme = color = background = title = block = note = 'Default'
|
|
submessage = 'with the Default color style'
|
|
outputFile = 'all_palettes'
|
|
|
|
for palette in palettes:
|
|
message = 'Using ' + palette + ' color palette'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
|
|
##########------------------------------##########
|
|
########## varying backgrounds
|
|
del filenames[:]
|
|
theme = color = palette = title = block = note = 'Default'
|
|
submessage = 'with the rest being Default'
|
|
outputFile = 'all_backgrounds'
|
|
|
|
for background in backgrounds:
|
|
message = 'Using ' + background + ' background style'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
|
|
##########------------------------------##########
|
|
########## varying titles
|
|
del filenames[:]
|
|
theme = color = palette = background = block = note = 'Default'
|
|
submessage = 'with the rest being Default'
|
|
outputFile = 'all_titles'
|
|
|
|
for title in titles:
|
|
message = 'Using ' + title + ' title style'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
|
|
##########------------------------------##########
|
|
########## varying blocks
|
|
del filenames[:]
|
|
theme = color = palette = background = title = note = 'Default'
|
|
submessage = 'with the rest being Default'
|
|
outputFile = 'all_blocks'
|
|
|
|
for block in blocks:
|
|
message = 'Using ' + block + ' block style'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
|
|
##########------------------------------##########
|
|
########## varying notes
|
|
del filenames[:]
|
|
theme = color = palette = background = title = block = 'Default'
|
|
submessage = 'with the rest being Default'
|
|
outputFile = 'all_notes'
|
|
|
|
for note in notes:
|
|
message = 'Using ' + note + ' note style'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
del filenames[:]
|
|
|
|
###############--------------------###############
|
|
############### combine the 7 pdfs into one called all_settings
|
|
outputs = 'all_themes', 'all_colors', 'all_palettes', 'all_backgrounds', 'all_titles', 'all_blocks', 'all_notes'
|
|
combinePdfs('all_settings', outputs)
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## A function to try all combinations of options: themes, palettes,
|
|
## color, background, title, block and note styles
|
|
##
|
|
def testAllOptionsCombined( ):
|
|
filenames = []
|
|
outputFile = 'all_combinations'
|
|
|
|
for theme in themes:
|
|
for color in colors:
|
|
for palette in palettes:
|
|
for background in backgrounds:
|
|
for title in titles:
|
|
for block in blocks:
|
|
for note in notes:
|
|
message = 'Using ' + theme + ', ' + palette
|
|
submessage = color + background + title + block + note
|
|
|
|
createTexAndCompileAllOptions(message,
|
|
submessage,
|
|
theme, color,
|
|
palette,
|
|
background,
|
|
title, block,
|
|
note,
|
|
filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
del filenames[:]
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
## A function to test all predefined themes
|
|
def testThemes( ):
|
|
filenames = []
|
|
color = palette = background = title = block = note = ''
|
|
submessage = 'All options are defined by the theme'
|
|
outputFile = 'all_themes'
|
|
|
|
for theme in themes:
|
|
message = 'Using ' + theme + ' theme'
|
|
createTexAndCompileOneOption(message, submessage, theme, color, palette,
|
|
background, title, block, note, filenames)
|
|
|
|
combineAndRemovePdfs(outputFile, filenames)
|
|
del filenames[:]
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
def usageMessage():
|
|
print 'usage: '
|
|
print ' all_settings.py'
|
|
print ' produces all_settings.pdf by '
|
|
print ' testing all themes and all options separately, and '
|
|
print ' combining them into one file.'
|
|
print r' all_settings.py all'
|
|
print r' tests all combinations of all options. Be careful! 352800 combinations'
|
|
|
|
return
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
############################## Main Body #########################################
|
|
##################################################################################
|
|
|
|
def main():
|
|
if len(sys.argv) == 1:
|
|
## tests all options separately, and generates files all_settings,
|
|
## all_themes, all_colors, all_palettes, all_backgrounds,
|
|
## all_titles, all_blocks, and all_notes
|
|
testAllOptionsSeparately()
|
|
|
|
elif len(sys.argv) == 2:
|
|
if sys.argv[1] == 'all':
|
|
testAllOptionsCombined()
|
|
else:
|
|
## in future we can allow more parameters, for instance compiling
|
|
## all options for a particular theme
|
|
usageMessage()
|
|
sys.exit(2)
|
|
else:
|
|
usageMessage()
|
|
sys.exit(2)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|