Add page header author / title support.
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Dan Helfman 2024-01-04 11:09:58 -08:00
parent 5d3eba05ff
commit a4663d8139
2 changed files with 32 additions and 9 deletions

View File

@ -10,18 +10,20 @@ Example usage:
$ format-novel manuscript.docx
```
This assumes the document already contains a single title page. It applies the
following formatting, modifying the file in-place:
This assumes the document already contains a single title page, which is
skipped for formatting purposes. It applies the following formatting,
modifying the file in-place:
* apply double spacing
* indent the first line of each paragraph (0.5 inches) except for the initial
paragraph in a chapter or section
* remove vertical spacing between paragraphs
* set a default font of Times New Roman
* enable page numbering starting on the second page (upper right) or the first page if filtering by chapter
* put the author last name, project title, and page number into the page header
(e.g. "Corey / Leviathan Wakes / 99")
### Chapter excerpting
### Chapter excerpts
You can optionally filter the output to only include certain chapters by
number. For instance:
@ -35,10 +37,16 @@ other chapters. For this to work, the input document must indicate chapter
titles with the "Heading 2" style.
## Planned features
## Page header
* Support for specifying author and project title to show up in the header
alongside page number.
When constructing the page header, format-novel tries to determine the author
last name from the first line of the manuscript and the project title from the
filename. But if it gets those wrong, you can specify them on them on the
command-line. For example:
```bash
$ format-novel manuscript.docx --author Corey --title "Leviathan Wakes"
```
## Installation

View File

@ -1,6 +1,7 @@
#!/usr/bin/python
import argparse
import os
import sys
import docx
@ -136,8 +137,20 @@ def parse_arguments(unparsed_arguments):
'--chapters',
metavar='CHAPTER',
nargs='+',
help='Chapter numbers or ranges to include in output',
help='Chapter numbers or ranges to include in output, defaults to all',
)
parser.add_argument(
'-a',
'--author',
metavar='LAST NAME',
help='Author last name to show in page headers, defaults to parsing the first line of the manuscript for the name',
)
parser.add_argument(
'-t',
'--title',
help='Project title to show in page headers, defaults to the manuscript filename without the file extension',
)
return parser.parse_args(unparsed_arguments)
@ -145,10 +158,12 @@ def parse_arguments(unparsed_arguments):
def main():
arguments = parse_arguments(sys.argv[1:])
document = docx.Document(arguments.document_filename)
author_last_name = arguments.author or document.paragraphs[0].text.split('\n')[0].split(' ')[-1]
project_title = arguments.title or os.path.splitext(arguments.document_filename)[0]
filter_chapters(document, arguments.chapters)
set_default_font(document)
# add_header_text(document, 'Author / Project Title / ')
add_header_text(document, f'{author_last_name} / {project_title} / ')
add_header_page_number(document)
if not arguments.chapters: