def makeDocument(): u"""Demo page composer.""" tt = time() # Keep track of time, in case SHOW_TIMER is True # Set some values of the default template (as already generated by the document). # Make squential unique names for the flow boxes inside the templates flowId0 = MAIN_FLOW+'0' flowId1 = MAIN_FLOW+'1' flowId2 = MAIN_FLOW+'2' # Template 1 template1 = Template(rs) # Create template of main size. Front page only. # Show grid columns and margins if rootStyle.showGrid or rootStyle.showGridColumns are True template1.grid(rs) # Show baseline grid if rs.showBaselineGrid is True template1.baselineGrid(rs) # Create empty image place holders. To be filled by running content on the page. template1.cContainer(4, 0, 2, 4, rs) # Empty image element, cx, cy, cw, ch template1.cContainer(0, 5, 2, 3, rs) # Create linked text boxes. Note the "nextPage" to keep on the same page or to next. template1.cTextBox('', 0, 0, 2, 5, rs, flowId0, nextBox=flowId1, nextPage=0, fill=BOX_COLOR) template1.cTextBox('', 2, 0, 2, 8, rs, flowId1, nextBox=flowId2, nextPage=0, fill=BOX_COLOR) template1.cTextBox('', 4, 4, 2, 4, rs, flowId2, nextBox=flowId0, nextPage=1, fill=BOX_COLOR) # Create page number box. Pattern pageNumberMarker is replaced by actual page number. template1.cText(rs['pageNumberMarker'], 6, 0, rs, font=BOOK, fontSize=12, fill=BOX_COLOR) # Template 2 template2 = Template(rs) # Create second template. This is for the main pages. # Show grid columns and margins if rootStyle.showGrid or rootStyle.showGridColumns are True template2.grid(rs) # Show baseline grid if rs.showBaselineGrid is True template2.baselineGrid(rs) template2.cContainer(4, 0, 2, 3, style=rs) # Empty image element, cx, cy, cw, ch template2.cContainer(0, 5, 2, 3, style=rs) template2.cContainer(2, 2, 2, 2, style=rs) template2.cContainer(2, 0, 2, 2, style=rs) template2.cContainer(4, 6, 2, 2, style=rs) template2.cTextBox('', 0, 0, 2, 5, style=rs, flowId0, nextBox=flowId1, nextPage=0, fill=BOX_COLOR) template2.cTextBox('', 2, 4, 2, 4, style=rs, flowId1, nextBox=flowId2, nextPage=0, fill=BOX_COLOR) template2.cTextBox('', 4, 3, 2, 3, style=rs, flowId2, nextBox=flowId0, nextPage=1, fill=BOX_COLOR) # Create page number box. Pattern pageNumberMarker is replaced by actual page number. template2.cText(rs['pageNumberMarker'], 6, 0, style=rs, font=BOOK, fontSize=12, fill=BOX_COLOR) # Create new document with (w,h) and fixed amount of pages. # Make number of pages with default document size. # Initially make all pages default with template2 doc = Document(rs, autoPages=2, template=template2) # Cache some values from the root style that we need multiple time to create the tag styles. fontSize = rs['fontSize'] leading = rs['leading'] rLeading = rs['rLeading'] listIndent = rs['listIndent'] language = rs['language'] # Add styles for whole document and text flows. # Note that some values are defined here for clarity, even if their default root values # are the same. doc.newStyle(name='chapter', font=BOOK) doc.newStyle(name='title', fontSize=3*fontSize, font=BOLD) doc.newStyle(name='subtitle', fontSize=2*fontSize, font=BOOK_ITALIC) doc.newStyle(name='author', fontSize=2*fontSize, font=BOOK, fill=(1, 0, 0)) doc.newStyle(name='h1', fontSize=fontSize, font=SEMIBOLD, fill=(1, 0, 0), leading=2*fontSize, tracking=H1_TRACK, postfix='\n') doc.newStyle(name='h2', fontSize=fontSize, font=SEMIBOLD, fill=(0, 0.5, 1), leading=1*fontSize, rLeading=0, tracking=H2_TRACK, postfix='\n') doc.newStyle(name='h3', fontSize=fontSize, font=MEDIUM, fill=0, leading=1*fontSize, rLeading=0, rNeedsBelow=2*rLeading, tracking=H3_TRACK, postfix='\n') # Spaced paragraphs. doc.newStyle(name='p', fontSize=fontSize, font=BOOK, fill=0.1, prefix='', postfix='\n', rTracking=P_TRACK, leading=14, rLeading=0, align=LEFT, hyphenation=True) doc.newStyle(name='b', font=SEMIBOLD) doc.newStyle(name='em', font=BOOK_ITALIC) doc.newStyle(name='hr', stroke=(1, 0, 0), strokeWidth=4) doc.newStyle(name='br', postfix='\n') # Simplest way to make <br/> be newline doc.newStyle(name='img', leading=leading, fontSize=fontSize, font=BOOK,) # Footnote reference index. doc.newStyle(name='sup', font=MEDIUM, rBaselineShift=0.6, fontSize=0.65*fontSize) doc.newStyle(name='li', fontSize=fontSize, font=BOOK, tracking=P_TRACK, leading=leading, hyphenation=True, # Lists need to copy the listIndex over to the regalar style value. tabs=[(listIndent, LEFT)], indent=listIndent, firstLineIndent=1, postfix='\n') doc.newStyle(name='ul',) doc.newStyle(name='literatureref', fill=0.5, rBaselineShift=0.2, fontSize=0.8*fontSize) doc.newStyle(name='footnote', fill=(1, 0, 0), fontSize=0.8*U, font=BOOK) doc.newStyle(name='caption', tracking=P_TRACK, language=language, fill=0.2, leading=leading*0.8, fontSize=0.8*fontSize, font=BOOK_ITALIC, indent=U/2, tailIndent=-U/2, hyphenation=True) if SHOW_TIMER: print 'Time styles %0.3f' % (time()-tt) tt = time() # Change template of page 1 page0 = doc[0] page0.setTemplate(template1) ttt = '' for n in range(100): ttt += 'abcdefg%d\n' % n ttt = newFS(ttt, rs) ttt = page0.textBox(ttt, point(rs.get('pl'), rs.get('pt')), w=11*14, h=50*14, fill=(0.8, 0.8, 0.8, 0.5)) page0.textBox(ttt, point=(rs.get('pl')+11*14+14, rs.get('pt')), w=11*14, h=50*14, fill=(0.8, 0.8, 0.8, 0.5)) if SHOW_TIMER: print 'Time template %0.3f' % (time()-tt) tt = time() # Create main Galley for this page, for pasting the sequence of elements. g = Galley() t = Typesetter(doc, g) t.typesetFile(MD_PATH) if SHOW_TIMER: print 'Time typesetter %0.3f' % (time()-tt) tt = time() # Fill the main flow of text boxes with the ML-->XHTML formatted text. c = Composer(doc) c.compose(g, doc[0], flowId0) if SHOW_TIMER: print 'Time compose %0.3f' % (time()-tt) return doc
def makeDocument(): u"""Demo Bitcount Reference composer.""" # Set some values of the default template (as already generated by the document). # Make squential unique names for the flow boxes inside the templates coverTitleId = 'coverTitleId' # To find the placement of the cover title. coverAuthorId = 'coverAuthorId' # Find the placement for the author name. tocId = 'toc' # Id of target textBox, containing the table of content. flowId1 = MAIN_FLOW + '1' flowIds = [flowId1] # Names of boxes that contain footnote text in flow. footnotesId = 'footnotes' # Id of target textBox containing footnotes per page. literatureIndexId = 'literatureIndex' imageIndexId = 'imageIndex' pageNumberId = 'pageNumberId' # Template for Cover page templateCover = Template() # Create new template newColTextBox(0, 0, w=W, h=H, fill=(1, 0, 0), parent=templateCover) # Placement of first <h1> in the Galley, holding the Thesis title. newColTextBox('Title of the page', 1, 1, 6, 5, eId=coverTitleId, fill=BOX_COLOR, parent=templateCover) # Placement of first <h4> in the Galley, holding the author name(s) newColTextBox('Subhead of the page', 1, 8, 6, 5, eId=coverAuthorId, fill=BOX_COLOR, parent=templateCover) # Template for Table of Content templateToc = Template() # Create template for Table of Content newColTextBox('\nTable of Content', 3, 0, 4, 1, fill=BOX_COLOR, fontSize=32, parent=templateToc) newColTextBox('', 3, 1, 4, 8, eId=tocId, fill=BOX_COLOR, parent=templateToc) # Template for literature reference index. templateLiteratureIndex = Template( ) # Create template for Table of Content newColTextBox('\nLiterature index', 3, 0, 4, 1, fill=BOX_COLOR, fontSize=32, parent=templateLiteratureIndex) newColTextBox('', 3, 1, 4, 8, eId=literatureIndexId, fill=BOX_COLOR, parent=templateLiteratureIndex) # Template for image reference index. templateImageIndex = Template() # Create template for Table of Content newColTextBox('\nImage index', 3, 0, 4, 1, fill=BOX_COLOR, fontSize=32, parent=templateImageIndex) newColTextBox('', 3, 1, 4, 8, eId=imageIndexId, fill=BOX_COLOR, parent=templateImageIndex) # Template 1 template1 = Template() # Create template of main size. Front page only. # Create empty image place holders. To be filled by running content on the page. # In this templates the images fill the left column if there is a reference on the page. newColPlacer(0, 0, 3, 3, parent=template1) # Empty image element, cx, cy, cw, ch newColPlacer(0, 3, 3, 3, parent=template1) newColPlacer(0, 6, 3, 3, parent=template1) # Create linked text boxes. Note the "nextPage" to keep on the same page or to next. newColTextBox('ABC', 3, 0, 4, 9, eId=flowId1, nextBox=flowId1, nextPage=1, fill=BOX_COLOR, parent=template1) newColTextBox('', 3, 9, 3, 2, eId=footnotesId, fill=BOX_COLOR, parent=template1) # Create page number box. Pattern pageNumberMarker is replaced by FormattedString of actual page number. # Mark the text box, so we can find it back later. newColTextBox(['pageIdMarker'], 6, 9, 1, 1, eId=pageNumberId, font=BOOK, fontSize=12, fill=BOX_COLOR, xAlign=RIGHT, parent=template1) # Create new document with (w,h) and fixed amount of pages. # Make number of pages with default document size. # Initially make all pages default with template2 doc = Document(autoPages=5, template=template1) rs = doc.getRootStyle() rs['openTypeFeatures'] = dict(zero=Slashed_Zero, smcp=Smallcaps, c2sc=Caps_As_Smallcaps, ss08=Italic_Shapes, ss07=Condensed, ss01=Extended_Ascenders, ss02=Extended_Capitals, ss03=Extended_Descenders, ss04=Contrast_Pixel, ss09=Alternative_g, onum=LC_Figures) # Cache some values from the root style that we need multiple time to create the tag styles. fontSize = rs['fontSize'] leading = rs['leading'] rLeading = rs['rLeading'] listIndent = rs['listIndent'] language = rs['language'] # Add styles for whole document and text flows. # Note that some values are defined here for clarity, even if their default root values # are the same. doc.newStyle(name='chapter', font=BOOK) doc.newStyle(name='title', fontSize=3 * fontSize, font=BOLD) doc.newStyle(name='subtitle', fontSize=2.6 * fontSize, font=BOOK_ITALIC) doc.newStyle(name='author', fontSize=2 * fontSize, font=BOOK, fill=(1, 0, 0)) doc.newStyle(name='h1', fontSize=7 * fontSize, font=SEMIBOLD_CONDENSED, fill=(1, 0, 0), leading=7.2 * fontSize, tracking=H1_TRACK, prefix='', postfix='\n') doc.newStyle(name='h2', fontSize=1.5 * fontSize, font=SEMIBOLD_CONDENSED, fill=0, leading=1.6 * fontSize, rLeading=0, rTracking=H2_TRACK, prefix='\n', postfix='\n', paragraphTopSpacing=U) doc.newStyle(name='h3', fontSize=1.1 * fontSize, font=MEDIUM, fill=0, paragraphTopSpacing=2 * U, paragraphBottomSpacing=U, leading=leading, rLeading=0, rNeedsBelow=2 * rLeading, rTracking=H3_TRACK, prefix='\n', postfix='\n') doc.newStyle(name='h4', fontSize=1.1 * fontSize, font=BOOK, fill=0, leading=leading, rLeading=0, rNeedsBelow=2 * rLeading, rTracking=H3_TRACK, paragraphTopSpacing=U, paragraphBottomSpacing=U, prefix='\n', postfix='\n') # Spaced paragraphs. doc.newStyle( name='p', fontSize=fontSize, font=BOOK, fill=0.1, prefix='', postfix='\n', rTracking=P_TRACK, leading=14, rLeading=0, xAlign=LEFT, hyphenation=True, indent=0, firstLineIndent=2 * U, firstParagraphIndent=0) # TODO: Make firstParagraphIndent to work. # Inline tags need to refined prefix and postfix as non-\n, otherwise they # will inherit these attributes from the parent <p> doc.newStyle(name='b', font=SEMIBOLD, prefix='', postfix='') doc.newStyle(name='em', font=BOOK_ITALIC, textFill=(1, 0, 0), prefix='', postfix='') doc.newStyle(name='hr', stroke=(1, 0, 0), strokeWidth=4) doc.newStyle(name='br', postfix='\n') # Simplest way to make <br/> show newline doc.newStyle(name='a', prefix='', postfix='') # Literature reference. doc.newStyle(name='literatureref', textFill=0.3, fontSize=fontSize - 1) # Footnote reference index. doc.newStyle(name='sup', font=MEDIUM, baselineShift=2, prefix='', postfix=' ', fontSize=fontSize - 2) doc.newStyle( name='li', fontSize=fontSize, font=BOOK, rTracking=P_TRACK, leading=leading, hyphenation=True, # Lists need to copy the listIndex over to the regalar style value. tabs=[(listIndent, LEFT)], indent=listIndent, firstLineIndent=1, postfix='\n') doc.newStyle(name='ul', prefix='', postfix='') doc.newStyle(name='footnote', fill=0, fontSize=0.9 * fontSize, font=BOOK, rTracking=P_TRACK, tabs=[(listIndent, LEFT)], indent=listIndent, firstLineIndent=1, postfix='\n') # Image & captions doc.newStyle( name='img', stroke=0.3, fill=None, rTracking=P_TRACK, language=language, textFill=0.2, strokeWidth=1, leading=leading * 0.8, fontSize=0.8 * fontSize, font=BOOK_ITALIC, hyphenation=True, indent=0, firstLineIndent=0, # Use style['fill'] = transparant color as overlay on image. ) # Generic document layout # Page 1 Cover # Page 2 Title # Page 3 Table of Content # Page 4+ Content (footnotes are shown on the page of their reference) # Page -1 Alphabetical literature reference. # Change template of cover page. # Create filtered Galley for cover page. # See https://docs.python.org/2/library/xml.etree.elementtree.html#xpath-support # for XPath filter syntax. gTitle = Galley() t = Typesetter(doc, gTitle) #t.typesetFile(MD_PATH, style=dict(textFill=1, fontSize=80, font=MEDIUM, leading=84), # xPath='h1') gAuthor = Galley() t = Typesetter(doc, gAuthor) #t.typesetFile(MD_PATH, style=dict(textFill=1, fontSize=24, font=MEDIUM), # xPath='h4') # First one is the author coverPage = doc[1] coverPage.applyTemplate(templateCover) c = Composer(doc) #c.compose(gTitle, coverPage, coverTitleId) #c.compose(gAuthor, coverPage, coverAuthorId) # Change template of Table of Content page tocPage = doc[2] tocPage.applyTemplate(templateToc) mainPage = doc[3] # Create main Galley for this page, for pasting the sequence of elements. g = Galley() t = Typesetter(doc, g) t.typesetFile(MD_PATH) # Fill the main flow of text boxes with the ML-->XHTML formatted text. c = Composer(doc) c.compose(g, mainPage, flowId1) # Now all text is composed on pages, scan for the pages that contain footnotes. # TODO: This will be implemented a function inside Composer in a later version. # Assume the tocBox (Table of Content) to be available on the first page. literatureRefs = {} tocBox, (_, _) = tocPage[tocId] for pageId, page in sorted(doc.pages.items()): if page in (tocPage, coverPage): # Skip these for toc collect and footnotes. continue # Get page box for footnotes fnBox, (_, _) = page[footnotesId] assert fnBox is not None # Otherwise there is a template error. Footnote box needs to exist. for flowId in flowIds: # BUG: Need to check if the marker was really found in the textbox area. # If it is part of the overflow, then it should not be found here. flow, _ = page[flowId] for marker, arguments in findMarkers(flow.fs): if marker == 'footnote': footNoteIsInOverflow = False # Process the foot note. footnoteId = int(arguments) # Footnode ids are numbers. # @@@ Hack to check if the marker is in the overflow text. # In that case, ignore it. for overFlowMarker, overFlowArguments in findMarkers( flow.getOverflow()): # If this marker is a footnote and one that we are looking for, # we can ignore it, because it is in the overflow part of the flow.fs if overFlowMarker == 'footnote' and footnoteId == int( overFlowArguments): footNoteIsInOverflow = True break if not footNoteIsInOverflow: # We found a footnote that is visible on this page and # not in one of the overflow texts. # Process the footnote id and content, usng the “footnote“ content style. # We are re-using the typesetter here. This may become a separate typesetter, if this code # becomes a method of the composer. # TODO: Make this into Galley, in case footnote <p> has child nodes. footnoteText = doc.context.newString( '%d\t%s\n' % (footnoteId, doc.footnotes[footnoteId]['p'].text), page, t.getCascadedStyle(doc.getStyle('footnote'))) # Add the footnote content to the box (it may not be the first to be added. fnBox.append(footnoteText) elif marker in ('h1', 'h2', 'h3', 'h4'): # For now we want them all in the TOC #doc.addToc(marker) pass elif marker == 'literature': # The "arguments" contains the refId, so we can find it in the collected literature references # and then add this page number. # @@@ TODO: check if reference marker is in overflow. Then ignore processing it. doc.literatureRefs[int(arguments)]['pageIds'].append( pageId) # Build the alphabetical literature reference page. # Scan the created pages for literature references and build an index on a new page. literatureIndexPage = doc.newPage(template=templateLiteratureIndex) # Make an alfabetic sorted list of name-->(reference, (pageNumber, ...)) references = {} for refIndex, item in doc.literatureRefs.items(): references[item['nodeId']] = item literatureRefBox = literatureIndexPage.getElement(literatureIndexId) for refId, item in sorted(references.items()): # Now we have a sorted list of reference items, we need to make it into a galley. # Several ways of doing it: Create MarkDown, HTML/XML or directly writing FormattedText. pageNumbers = [] for pageNumber in item['pageIds']: pageNumbers.append( ` pageNumber `) literatureRefBox.append(u'%s – %s\n' % (refId, ', '.join(pageNumbers))) print refId, item['nodeId'], item['node'], item['p'], item['pageIds'] # Build the alphabetical image reference page. # Scan the created pages for image references and build an index on a new page. imageIndexPage = doc.newPage(template=templateImageIndex) # Make an alfabetic sorted list of name-->(reference, (pageNumber, ...)) references = {} for refIndex, item in doc.imageRefs.items(): references[item['nodeId']] = item for imageRefId, item in sorted(references.items()): print imageRefId, item['nodeId'], item['node'], item['p'], item[ 'pageIds'] # Set all pagenumbers and other page-based info for pageId, page in sorted(doc.pages.items()): for e in page.elements: if e.eId == pageNumberId: e.setText('%s' % pageId) break return doc
def makeDocument(rs): u"""Demo page composer.""" # Set some values of the default template (as already generated by the document). # Make squential unique names for the flow boxes inside the templates flowId1 = MAIN_FLOW + '1' flowId2 = MAIN_FLOW + '2' flowId3 = MAIN_FLOW + '3' # Template 1 template1 = Template(rs) # Create template of main size. Front page only. # Show grid columns and margins if rootStyle.showGrid or rootStyle.showGridColumns are True template1.grid(rs) # Show baseline grid if rs.showBaselineGrid is True template1.baselineGrid(rs) # Create empty image place holders. To be filled by running content on the page. template1.cContainer(4, 0, 2, 4, rs) # Empty image element, cx, cy, cw, ch template1.cContainer(0, 5, 2, 3, rs) # Create linked text boxes. Note the "nextPage" to keep on the same page or to next. template1.cTextBox(FS, 0, 0, 2, 5, rs, flowId1, nextBox=flowId2, nextPage=0, fill=BOX_COLOR) template1.cTextBox(FS, 2, 0, 2, 8, rs, flowId2, nextBox=flowId3, nextPage=0, fill=BOX_COLOR) template1.cTextBox(FS, 4, 4, 2, 4, rs, flowId3, nextBox=flowId1, nextPage=1, fill=BOX_COLOR) # Create page number box. Pattern pageNumberMarker is replaced by actual page number. template1.cText(FS + rs['pageIdMarker'], 6, 0, style=rs, font=BOOK, fontSize=12, fill=BOX_COLOR) # Template 2 template2 = Template( rs) # Create second template. This is for the main pages. # Show grid columns and margins if rootStyle.showGrid or rootStyle.showGridColumns are True template2.grid(rs) # Show baseline grid if rs.showBaselineGrid is True template2.baselineGrid(rs) template2.cContainer(4, 0, 2, 3, rs) # Empty image element, cx, cy, cw, ch template2.cContainer(0, 5, 2, 3, rs) template2.cContainer(2, 2, 2, 2, rs) template2.cContainer(2, 0, 2, 2, rs) template2.cContainer(4, 6, 2, 2, rs) template2.cTextBox(FS, 0, 0, 2, 5, rs, flowId1, nextBox=flowId2, nextPage=0, fill=BOX_COLOR) template2.cTextBox(FS, 2, 4, 2, 4, rs, flowId2, nextBox=flowId3, nextPage=0, fill=BOX_COLOR) template2.cTextBox(FS, 4, 3, 2, 3, rs, flowId3, nextBox=flowId1, nextPage=1, fill=BOX_COLOR) # Create page number box. Pattern pageNumberMarker is replaced by actual page number. template2.cText(FS + rs['pageIdMarker'], 6, 0, style=rs, font=BOOK, fontSize=12, fill=BOX_COLOR) # Create new document with (w,h) and fixed amount of pages. # Make number of pages with default document size. # Initially make all pages default with template2 doc = Document(rs, autoPages=3, template=template2) # Cache some values from the root style that we need multiple time to create the tag styles. fontSize = rs['fontSize'] leading = rs['leading'] rLeading = rs['rLeading'] listIndent = rs['listIndent'] language = rs['language'] # Add styles for whole document and text flows. # Note that some values are defined here for clarity, even if their default root values # are the same. doc.newStyle(name='chapter', font=BOOK) doc.newStyle(name='title', fontSize=3 * fontSize, font=BOLD) doc.newStyle(name='subtitle', fontSize=2.6 * fontSize, font=BOOK_ITALIC) doc.newStyle(name='author', fontSize=2 * fontSize, font=BOOK, fill=(1, 0, 0)) doc.newStyle(name='h1', fontSize=2 * fontSize, font=BLACK, fill=(1, 0, 0), leading=2.5 * leading, tracking=H1_TRACK, postfix='\n') doc.newStyle(name='h2', fontSize=5 * fontSize, font=LIGHT_CONDENSED, fill=0, leading=1 * leading, rLeading=0, tracking=H2_TRACK, prefix='', postfix='\n') doc.newStyle(name='h3', fontSize=1.1 * fontSize, font=MEDIUM, fill=0, leading=leading, rLeading=0, rNeedsBelow=2 * rLeading, tracking=H3_TRACK, prefix='', postfix='\n') doc.newStyle(name='h4', fontSize=1.1 * fontSize, font=BOOK, fill=0, leading=leading, rLeading=0, rNeedsBelow=2 * rLeading, tracking=H3_TRACK, paragraphTopSpacing=U, paragraphBottomSpacing=U, prefix='', postfix='\n') # Spaced paragraphs. doc.newStyle(name='p', fontSize=fontSize, font=BOOK, fill=0.1, prefix='', postfix='\n', rTracking=P_TRACK, leading=14, rLeading=0, align=LEFT_ALIGN, hyphenation=True) doc.newStyle(name='b', font=SEMIBOLD) doc.newStyle(name='em', font=BOOK_ITALIC) doc.newStyle(name='hr', stroke=(1, 0, 0), strokeWidth=4) doc.newStyle(name='br', postfix='\n') # Simplest way to make <br/> show newline doc.newStyle(name='a', prefix='', postfix='') doc.newStyle(name='img', leading=leading, fontSize=fontSize, font=BOOK, stroke=1, fill=None) # Footnote reference index. doc.newStyle(name='sup', font=MEDIUM, rBaselineShift=0.6, prefix='', postfix=' ', fontSize=0.6 * fontSize) doc.newStyle( name='li', fontSize=fontSize, font=BOOK, tracking=P_TRACK, leading=leading, hyphenation=True, # Lists need to copy the listIndex over to the regalar style value. tabs=[(listIndent, LEFT_ALIGN)], indent=listIndent, firstLineIndent=1, postfix='\n') doc.newStyle(name='ul', prefix='', postfix='') doc.newStyle(name='literatureref', fill=0.5, rBaselineShift=0.2, fontSize=0.8 * fontSize) doc.newStyle(name='footnote', fill=(1, 0, 0), fontSize=0.8 * U, font=BOOK) doc.newStyle(name='caption', tracking=P_TRACK, language=language, fill=0.2, leading=leading * 0.8, fontSize=0.8 * fontSize, font=BOOK_ITALIC, indent=U / 2, tailIndent=-U / 2, hyphenation=True) # Change template of page 1 page1 = doc[1] page1.setTemplate(template1) # Create main Galley for this page, for pasting the sequence of elements. galley = Galley() t = Typesetter(doc, galley) t.typesetFile(MD_PATH) # Fill the main flow of text boxes with the ML-->XHTML formatted text. c = Composer(doc) c.compose(galley, page1, flowId1) return doc