diff --git a/examples/Big-Fish.pdf b/examples/Big-Fish.pdf index c326c88..e1bac05 100644 Binary files a/examples/Big-Fish.pdf and b/examples/Big-Fish.pdf differ diff --git a/examples/Brick-and-Steel.pdf b/examples/Brick-and-Steel.pdf index 656da95..a4aee38 100644 Binary files a/examples/Brick-and-Steel.pdf and b/examples/Brick-and-Steel.pdf differ diff --git a/examples/The-Last-Birthday-Card.pdf b/examples/The-Last-Birthday-Card.pdf index 704cf18..fe70dcb 100644 Binary files a/examples/The-Last-Birthday-Card.pdf and b/examples/The-Last-Birthday-Card.pdf differ diff --git a/screenplain/export/pdf.py b/screenplain/export/pdf.py index 6331178..57d5468 100644 --- a/screenplain/export/pdf.py +++ b/screenplain/export/pdf.py @@ -193,6 +193,7 @@ def __init__( self.parenthentical_style = ParagraphStyle( 'parenthentical', default_style, leftIndent=13 * self.character_width, + rightIndent=self.frame_width - (38 * self.character_width), keepWithNext=1, ) self.action_style = ParagraphStyle( @@ -265,13 +266,12 @@ def draw(self): self.settings.font_size ) - # Left margin: Position to the left of frame - left_x = -0.75 * inch - canvas.drawString(left_x, 0, self.scene_number) - - # Right margin: Right-aligned inside right margin area - right_x = self.settings.frame_width - canvas.drawRightString(right_x, 0, self.scene_number) + margin_offset = 0.75 * inch + right_edge = ( + self.settings.page_width - margin_offset - self.settings.left_margin + ) + canvas.drawString(-margin_offset, 0, self.scene_number) + canvas.drawRightString(right_edge, 0, self.scene_number) canvas.restoreState() @@ -298,12 +298,14 @@ def __init__(self, *args, **kwargs): id='title', leftPadding=0, topPadding=0, rightPadding=0, bottomPadding=0 ) - pageTemplates = [ - PageTemplate(id='title', frames=[title_frame]), - PageTemplate(id='standard', frames=[frame]) + title_template = PageTemplate(id='title', frames=[title_frame]) + standard_template = PageTemplate(id='standard', frames=[frame]) + page_templates = [ + *([title_template] if self.has_title_page else []), + standard_template, ] BaseDocTemplate.__init__( - self, pageTemplates=pageTemplates, *args, **kwargs + self, pageTemplates=page_templates, *args, **kwargs ) def handle_pageBegin(self): @@ -351,29 +353,34 @@ def add_slug(story, para, settings): story.append(paragraph) +def _scaled_style(style, name, proportion) -> ParagraphStyle: + """Rebuild a style with both indents scaled to a narrower column. + + Scaling every indent generically keeps a style's column intact: an + indent left unscaled would be measured against the full frame width + and swallow the narrower column. + """ + return ParagraphStyle( + name, style, + leftIndent=style.leftIndent * proportion, + rightIndent=style.rightIndent * proportion, + ) + + def _dialog_to_flowables( dialog, settings: Settings, column_width=None ) -> list[Flowable]: # If column_width is set, adjust indents proportionally if column_width is not None: proportion = column_width / settings.frame_width - character_left = settings.character_style.leftIndent * proportion - dialog_left = settings.dialog_style.leftIndent * proportion - parenthentical_left = (settings.parenthentical_style.leftIndent * - proportion) - dialog_right = settings.dialog_style.rightIndent * proportion - character_style = ParagraphStyle( - 'character-dual', settings.character_style, - leftIndent=character_left + character_style = _scaled_style( + settings.character_style, 'character-dual', proportion ) - dialog_style = ParagraphStyle( - 'dialog-dual', settings.dialog_style, - leftIndent=dialog_left, - rightIndent=dialog_right + dialog_style = _scaled_style( + settings.dialog_style, 'dialog-dual', proportion ) - parenthentical_style = ParagraphStyle( - 'parenth-dual', settings.parenthentical_style, - leftIndent=parenthentical_left + parenthentical_style = _scaled_style( + settings.parenthentical_style, 'parenth-dual', proportion ) else: character_style = settings.character_style diff --git a/tests/files/dual-dialogue-parenthetical.fountain b/tests/files/dual-dialogue-parenthetical.fountain new file mode 100644 index 0000000..d01e936 --- /dev/null +++ b/tests/files/dual-dialogue-parenthetical.fountain @@ -0,0 +1,7 @@ +GIRL +(quietly) +Hello there friend. + +GUY^ +(loudly) +Hi back at you. diff --git a/tests/files/dual-dialogue-parenthetical.pdf b/tests/files/dual-dialogue-parenthetical.pdf new file mode 100644 index 0000000..f32af83 Binary files /dev/null and b/tests/files/dual-dialogue-parenthetical.pdf differ diff --git a/tests/files/dual-dialogue.pdf b/tests/files/dual-dialogue.pdf index 49c5b18..cc13e91 100644 Binary files a/tests/files/dual-dialogue.pdf and b/tests/files/dual-dialogue.pdf differ diff --git a/tests/files/scene-numbers.pdf b/tests/files/scene-numbers.pdf index 649ee19..a1aec75 100644 Binary files a/tests/files/scene-numbers.pdf and b/tests/files/scene-numbers.pdf differ