User:GemmaBot/theindiandrum.py

From Wikisource
Jump to navigation Jump to search
# Spaces between – is COMMENTED OUT for The Surakarta, please put this back for next book
# Bug fixes: In dictionary generation, if repeat chapter name exists, place [2] at the end of it. Put in some logic here at PLB to read that and cut it off the end.
import re
import time
print("Importing pywikibot...")
import pywikibot
print("Imported!")

pagename = "Page:The Star in the Window.pdf/347"
site = pywikibot.Site()

page = pywikibot.Page(site, pagename)
text = page.text

book_name = "THE INDIAN DRUM"
pageroot = "The Indian Drum (1917 original).pdf"
chapter_begin_root = "{{c|CHAPTER "

chapters = {'Man Whom the Storm Haunted': 1, 'Who Is Alan Conrad?': 19, 'Discussion of a Shadow': 34, '"Arrived Safe; Well"': 57, 'An Encounter': 69, 'Constance Sherrill': 95, 'The Deed in Trust': 112, "Mr. Corvet's Partner": 126, 'Violence': 145, 'A Walk Beside the Lake': 162, 'A Caller': 179, 'The Land of the Drum': 199, "Things from Corvet's Pockets": 210, 'The Owner of the Watch': 229, 'Old Burr of the Ferry': 254, 'A Ghost Ship': 266, '"He Killed Your Father"': 288, 'Mr. Spearman Goes North': 298, 'The Watch Upon the Beach': 318, 'The Sounding of the Drum': 335, 'The Fate of the "Miwaka"': 347}

jobs = [
    "add/fix headers and footers",
    "convert en dashes to em dashes",
    "templatize quote-apostrophe combinations",
    "convert double em dash to [[Template:bar]]",
    "convert two returns to [[Template:dhr]]",
    "take out spaces before returns",
    "shrink plate image size to 500px, since that seems more accurate throughout",
    "replace ’ with '", "replace ‘ with '",
    "replace ” with \"", "replace “ with \"",
    "\" ?\" -> \"?\"",
    "\" !\" -> \"!\"",
    "\" :\" -> \":\"",
    "\" ;\" -> \";\"",
    "\"\" -> \"\"",
    "\"\" -> \"\"",
    "\" -\" at end of line -> \"\"",
    "\"-\" at end of line -> \"\"",
    "\" - \" -> \"\"",
    "fix double line break before {{nop}}",
    ""]

# IF "{{c|PLATE " in

num = 16
last_page = 385
# CHANGE THIS BACK NEXT TIME
start_num = num
chapter_num = 1
extra = 0

while 1:
    num += 1
    if num > last_page:
        break
    jobs_done = []
    pagename = f"Page:{pageroot}/{num}"
    site = pywikibot.Site()
    page = pywikibot.Page(site, pagename)
    print(f"Checking {pagename}...")
    #functions just didn't work for this, for some STUPID reason, so here we do this uglier thing...
    # ----
    #finding extra pages and subtracting them from page_num
    nextpagename = f"Page:{pageroot}/{num+1}"
    nextpage = pywikibot.Page(site, nextpagename)
    if not page.text.endswith("<noinclude></noinclude>") and not page.text.endswith("<noinclude>\n<references/></noinclude>") and not page.text.endswith("<noinclude>\n<references /></noinclude>") and not page.text.endswith("<noinclude>{{smallrefs}}</noinclude>") and not page.text.endswith("/e}}</noinclude>"):
        print(page.text)
        continueornot = input(f"Found something new in a footer. Continue running? ")
    if "[[File:" in page.text and "pagequality level=\"0\"" in nextpage.text:
        print("Not a page. Skipping...")
        print("----")
        extra +=1
        continue
    if "pagequality level=\"0\"" in page.text:
        print("Not a page. Skipping...")
        # print("Not a page. Exiting...")
        extra +=1
        print("----")
        continue
        # extra +=1
        # break
    if "’" in page.text:
        page.text = page.text.replace("’", "'")
        jobs_done.insert(0, jobs[7])
    if "‘" in page.text:
        page.text = page.text.replace("‘", "'")
        jobs_done.insert(0, jobs[8])
    if "”" in page.text:
        page.text = page.text.replace("”", "\"")
        jobs_done.insert(0, jobs[9])
    if "“" in page.text:
        page.text = page.text.replace("“", "\"")
        jobs_done.insert(0, jobs[10])
    #endash to emdash
    if "–" in page.text:
        page.text = page.text.replace("–", "—")
        jobs_done.insert(0, jobs[1])
    #quotes to templates
    if "\"'" in page.text or "'\"" in page.text:
        ogpage = page.text
        page.text = page.text.replace("\"'\"", "{{\" ' \"}}")
        page.text = page.text.replace("'\"'", "{{' \" '}}")
        page.text = page.text.replace("\"'", "{{\" '}}")
        page.text = page.text.replace("'\"", "{{' \"}}")
        page.text = page.text.replace("'{{' \"}}", "''\"")
        page.text = page.text.replace("{{\" '}}'", "\"''")
        if ogpage != page.text:
            jobs_done.insert(0, jobs[2])
    if "——" in page.text:
        page.text = page.text.replace("——", "{{bar|2}}")
        jobs_done.insert(0, jobs[3])
    if "\n\n\n" in page.text:
        page.text = page.text.replace("\n\n\n", "\n{{dhr}}\n")
        jobs_done.insert(0, jobs[4])
    if " \n" in page.text:
        page.text = page.text.replace(" \n", "\n")
        jobs_done.insert(0, jobs[5])
    if " ?" in page.text:
        page.text = page.text.replace(" ?", "?")
        jobs_done.insert(0, jobs[11])
    if " !" in page.text:
        page.text = page.text.replace(" !", "!")
        jobs_done.insert(0, jobs[12])
    if " :" in page.text:
        page.text = page.text.replace(" :", ":")
        jobs_done.insert(0, jobs[13])
    if " ;" in page.text:
        page.text = page.text.replace(" ;", ";")
        jobs_done.insert(0, jobs[14])
    if " — " in page.text:
        page.text = page.text.replace(" — ", "—")
        jobs_done.insert(0, jobs[15])
    if " —" in page.text:
        page.text = page.text.replace(" —", "—")
        jobs_done.insert(0, jobs[16])
    if " -\n" in page.text:
        page.text = page.text.replace(" -\n", "—\n")
        jobs_done.insert(0, jobs[17])
    if "-\n" in page.text:
        page.text = page.text.replace("-\n", "—\n")
        jobs_done.insert(0, jobs[18])
    if " - " in page.text:
        page.text = page.text.replace(" - ", "—")
        jobs_done.insert(0, jobs[19])
    if "\n\n{{nop}}" in page.text:
        page.text = page.text.replace("\n\n{{nop}}", "\n{{nop}}")
        jobs_done.insert(0, jobs[20])
    #logic for headers/footers
    page_num = num - start_num - extra
    try:
        chapter_end = int(chapters[list(chapters.keys())[chapter_num]])
        if chapter_end == page_num:
            chapter_num +=1
    except:
        pass
    chapter_begin = int(chapters[list(chapters.keys())[chapter_num-1]])
    chapter_name = list(chapters.keys())[list(chapters.values()).index(chapter_begin)].upper()
    if " MC" in chapter_name or chapter_name.startswith("MC"):
        chapter_name = chapter_name.replace("MC", "Mc")
    header = ""
    footer = ""
    if page_num == chapter_begin:
        if chapter_begin_root not in page.text:
            print("FATAL ERROR: Chapter does not begin where the table of contents you gave says it does!")
            print("\nError log:\n")
            print(f"Page name: {pagename}")
            print(f"Chapter: {chapter_name}")
            print(f"Chapter begin: {chapter_begin}")
            print(f"Chapter end: {chapter_end}")
            print(f"Page number: {page_num}")
            print(f"Extra: {extra}")
            exit()
        # header = ""
        # footer = f"{{{{c|{{{{fine|{page_num}}}}}}}}}"
        pass
    else:
        footer = ""
        if page_num % 2 == 0:
            header = f"{{{{rh|{{{{larger|{page_num}}}}}|{{{{larger|{book_name}}}}}}}}}"
        else:
            header = f"{{{{rh||{{{{larger|{chapter_name}}}}}|{{{{larger|{page_num}}}}}}}}}"
        jobs_done.insert(0, jobs[0])
    # if {{fine block/s}} or /e in header/footer
    if "{{fine block/s}}</noinclude>" in page.text:
        header = header + "{{fine block/s}}"
    if "{{fine block/e}}</noinclude>" in page.text:
        footer = "{{fine block/e}}" + footer
    if "{{block center/s}}</noinclude>" in page.text:
        header = header + "{{block center/s}}"
    if "{{block center/e}}</noinclude>" in page.text:
        footer = "{{block center/e}}" + footer
    if "{{smallrefs}}</noinclude>" in page.text:
        footer = "{{smallrefs}}" + footer
    parser = page.text.split("<")
    headerplace = parser[2]
    # headerplace comes out as, fx, <pagequality level="3" user="PseudoSkull" />{{rh|2|A WILD-GOOSE CHASE}}
    headerparse = headerplace.split(">")
    parser.pop(2)
    headerparse.pop(1)
    headerparse.insert(1, header)
    headerparse = ">".join(headerparse)
    parser.insert(2, headerparse)
    # print(parser)
    # footers
    parser.pop(len(parser) - 1)
    parser.pop(len(parser) - 1)
    parser = "<".join(parser)
    final_list = [parser, f"<noinclude>{footer}</noinclude>"]
    page.text = "".join(final_list)
    if len(jobs_done) > 0:
        jobs_done = ", ".join(jobs_done)
    else:
        jobs_done = "absolutely nothing!"
    # print(header)
    # print(footer)
    print(f"Chapter: {chapter_name}")
    print(f"Chapter begin: {chapter_begin}")
    print(f"Chapter end: {chapter_end}")
    print(f"Page number: {page_num}")
    print(f"Extra: {extra}")
    edit_summary = f"Bot: {jobs_done}"
    print(edit_summary)
    print("Sleeping 50 seconds...")
    time.sleep(50)
    page.save(edit_summary)
    print("----")

I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.

In case this is not legally possible:

I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.

Public domainPublic domainfalsefalse