User:GemmaBot/sheila.py
Jump to navigation
Jump to search
# <( = {{c|{{larger|}}}}
# { only = {{dhr}}
# / to / = {{sc|}}
# *i8 = {{***|3|char=·}}
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 = "SHEILA AND OTHERS"
pageroot = "Sheila and Others (1920).djvu"
chapters = {'Sheila': 1, 'Mrs. Montrose': 19, 'Williams': 35, 'Thin Ice': 44, 'Charm of Manner': 58, 'Our Loquacious Poll': 70, 'Abel Goodfriend': 85, 'Suppression of a Cuckoo Clock': 106, 'A Doubtful Point': 114, 'Considering Keddo': 127, 'The Faultless Adelina': 144, 'Our Wash-Ladies': 160, 'Concerning Catherine': 180, 'On Being Alone in the House': 191}
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 -> \"—\"",
"\" - \" -> \"—\"",
""]
# IF "{{c|PLATE " in
num = 12
last_page = 208
# 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...")
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])
#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()
header = ""
footer = ""
if page_num != 1:
if page_num == chapter_begin:
header = ""
footer = f"{{{{c|{{{{fine|{page_num}}}}}}}}}"
else:
footer = ""
if page_num % 2 == 0:
header = f"{{{{rh|{{{{fine|{page_num}}}}}|{{{{fine|{book_name}}}}}}}}}"
else:
header = f"{{{{rh||{{{{fine|{chapter_name}}}}}|{{{{fine|{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