removed_sections = {
    "references",
    "works cited",
    "bibliography",
    "further reading",
    "published works",
    "external links",
    "notes",
    "notes and references",
    "further reading",
    "external links",
    "literature cited",
    "sources",
    "citations",
    "sources and further reading",
    "footnotes",
    "sources cited",
}

# Some templates are really large sections of the page and
# should be removed before continuing preprocessing to minimize
# processing error. Use startswith for detection
big_templates_to_remove = {
    "football",
    "fs ",  # shorthand for football squad
    "quote box",
    "infobox",
    "multiple",
    "portal",
    "listen",
    "speciesbox",
    "video game reviews",
    "tree chart",
    "album ratings",
    "film ratings",
    "game ratings",
    "music ratings",
    "song ratings",
    "television episode ratings",
    "television season ratings",
    "television ratings",
    "tv ratings",
    "wide image",
    "automatic taxobox",
    "pp",
    "pp-move",
    "pp-vandalism",
    "s-ttl",
}

# Template names should have the first letter lowercased, with
# underscores replaced by spaces
templates_to_keep = {
    "abbr",
    "asterisk",
    "as of",
    "bibleverse",
    # blockquote
    "blockquote",
    "bq",
    "quote",
    "bquote",
    "quotation",
    # birth date
    "birth date",
    "birth date and age",
    "birth year",
    "birth year and age",
    "death date",
    "death date and age",
    "death year and age",
    # end birth date
    "block indent",
    "center",
    "circa",
    # clear
    "clear",
    "-",
    "clr",
    # chem
    "chem",
    "chem2",
    # end chem
    "convert",
    "cquote",
    "currentyear",
    "cvt",
    "dash year",
    "date",
    "delta",
    "dinogloss",
    "em",
    # scientific notation
    "e",
    "10^",
    "x10^",
    # em dash
    "em dash",
    "--",
    "mdash",
    # en dash
    "endash",
    "en dash",
    "ndash",
    "nsndns",
    # end en dash
    "equationNote",
    "equationRef",
    "f1",
    # flag
    "flag",
    "flagu",
    "flagIOC",
    "flagIOC2",
    "flaglink",
    "fbw",
    "flagathlete",
    # format price
    "format price",
    "formatprice",
    # fraction
    "fraction",
    "frac",
    "sfrac",
    # end fraction
    "gRT",
    "hyphen",
    "ill",
    "interlanguage link",
    # inflation
    # "inflation", doesn't work well with expandtemplates
    # "inflation-year",
    # "inflation/year",
    # rupee
    "iNR",
    "indian Rupee",
    "iNRConvert",
    # phonetics
    "iPAc-en",
    "respell",
    # end phonetics
    "inrconvert",
    "jcon",
    "jct",
    "lang",
    "langnf",
    "lambda",
    # h-phrases
    "h-phrases",
    "p-phrases",
    # literal translation
    "literal translation",
    "lit",
    "lit.",
    "literally",
    # end literal translation
    "mabs",
    # sports years
    "mLB Year",
    "mlby",
    "baseball year",
    "nbay",
    "nBA Year",
    "nFL Year",
    # math
    "math",
    "mset",
    "mvar",
    "abs",
    "norm",
    # mono
    "mono",
    "monospace",
    "tt",
    "ttt",
    # nbsp
    "nbsp",
    "&nbsp",
    "nbs",
    "nbsp",
    "nbsp;",
    "space",
    "spcs",
    # non-breaking en dash
    "non breaking en dash",
    "nbnd",
    "nbndash",
    # end non-breaking en dash
    "navy",
    "nee",
    "nihongo",
    "nihongo2",
    "nFLplayer",
    "nobold",
    "nuclide",
    # not a typo
    "not a typo",
    "as written",
    "chem name",
    "proper name",
    "typo",
    "not typo",
    "nat",
    "NAT",
    # nostyling
    "nobold",
    "noitalic",
    "ni",
    "yesitalic",
    # end nostyling
    "nowrap",
    "nobr",
    "nobreak",
    # "numBlk",  TODO: don't remove div generated by this
    "okina",
    # percent
    "percent",
    "percentage",
    "pct",
    "winning percentage",
    # end percent
    "pi",
    "plainlist",
    "post-nominals",
    # poemquote
    "poem quote",
    "poemquote",
    # end poemquote
    "radic",
    "ratio",
    # refbegin
    # this is necessary to avoid contents rendering by accident in markdown
    # div HTML tag removal should get rid of this anyways
    "refbegin",
    "refend",
    # reign
    "reign",
    "r.",
    "reigned",
    "rexit",
    "ruled",
    # round
    "round",
    "rnd",
    # ships (TODO: incomplete)
    "sclass",
    "sclass2",
    "ship",
    "hMS",
    "sS",
    "uSNS",
    "uSS",
    "sMS",
    "sMU",
    # end ships
    "sic",
    "small",
    # station link
    "stl",
    "station link",
    "rws",
    "stnlnk",
    "station",
    "stn",
    # allcaps
    "allcaps",
    "caps",
    "nocaps",
    "smallcaps",
    "smallcaps2",
    "smallcapsall",
    "aut",
    "sc",
    "sc1",
    "sc2",
    "sm",
    # end allcaps
    "sms",
    # spaced en dash
    "spaced en dash",
    "spaced ndash",
    "dash",
    "snd",
    "spnd",
    "sndash",
    "spndash",
    # end spaced en dash
    "sqrt",
    "start date",
    # strikethrough
    "strikethrough",
    "strike",
    "s",
    # end strikethrough
    "strong",
    "sub",
    "sup",
    # transliteration
    "transliteration",
    "transl",
    "trans",
    # lists
    "unbulleted list",
    "ubl",
    "ubt",
    "ublist",
    "unbullet",
    "ordered list",
    "plain list",
    "plainlist",
    "pL",
    # end lists
    "ushr",
    # US politician abbreviation
    "uSpolabbr",
    "u.S. politician abbreviation",
    # end US politician abbreviation
    "uS$",
    "val",
    "wikidata",
    "yEAR",
    "zh",
    "+",
    "=",
    # bullet
    "•",
    "*",
    "bull",
    "bullet",
    # end bullet
    "'",
    "'-",
    "'s",
    "'\"",
    "\"'",
    # single + double
    "' \"",
    "single+double",
    # MAGIC VARIABLES
    "cURRENTYEAR",
    "cURRENTMONTH",
    "cURRENTMONTH1",
    "cURRENTMONTH2",
    "cURRENTMONTHNAME",
    "cURRENTMONTHNAMEGEN",
    "cURRENTMONTHABBREV",
}

parser_functions = {
    "#count",
    "#explode",
    "#expr",
    "#if",
    "#ifeq",
    "#iferror",
    "#ifexpr",
    "#ifexist",
    "#len",
    "#pos",
    "#replace",
    "#rpos",
    "#switch",
    "#time",
    "#timeel",
    "#urldecode",
    "formatnum",
    "#dateformat",
    "#formatdate",
}

_country_templates_raw = [
    "ABW",
    "ARU",
    "AFG",
    "AGO",
    "ANG",
    "ANT",
    "AHO",
    "AIA",
    "ALA",
    "ALB",
    "AND",
    "ARE",
    "UAE",
    "ARG",
    "ARM",
    "ASM",
    "ASA",
    "ATA",
    "ATF",
    "ATG",
    "AUS",
    "AUT",
    "AZE",
    "BDI",
    "BEL",
    "BEN",
    "BES",
    "BFA",
    "BGD",
    "BGR",
    "BUL",
    "BHR",
    "BHS",
    "BAH",
    "BIH",
    "BLM",
    "BLR",
    "BLZ",
    "BIZ",
    "BMU",
    "BER",
    "BOL",
    "BRA",
    "BRB",
    "BAR",
    "BRN",
    "BRU",
    "BTN",
    "BHU",
    "BVT",
    "BWA",
    "BOT",
    "CAF",
    "CTA",
    "CAN",
    "CCK",
    "CHE",
    "SUI",
    "SWI",
    "CHL",
    "CHI",
    "CHN",
    "PRC",
    "CHN-ROC",
    "CIV",
    "CMR",
    "COD",
    "COG",
    "CGO",
    "COK",
    "COL",
    "COM",
    "CPV",
    "CRI",
    "CRC",
    "CUB",
    "CUW",
    "CUR",
    "CXR",
    "CYM",
    "CAY",
    "CYP",
    "CZE",
    "CSK",
    "TCH",
    "DEU",
    "GER",
    "GDR",
    "DDR",
    "FRG",
    "DJI",
    "DMA",
    "DNK",
    "DEN",
    "DOM",
    "DZA",
    "ALG",
    "ECU",
    "EGY",
    "ERI",
    "ESH",
    "SADR",
    "ESP",
    "EST",
    "ETH",
    "FIN",
    "FJI",
    "FIJ",
    "FLK",
    "FRA",
    "FRO",
    "FSM",
    "GAB",
    "GBR",
    "UK",
    "ENG",
    "SCO",
    "SCT",
    "WAL",
    "WLS",
    "NIR",
    "GEO",
    "GGY",
    "GHA",
    "GIB",
    "GIN",
    "GUI",
    "GLP",
    "GMB",
    "GAM",
    "GNB",
    "GBS",
    "GNQ",
    "GEQ",
    "EQG",
    "GRC",
    "GRE",
    "GRD",
    "GRN",
    "GRL",
    "GTM",
    "GUA",
    "GUF",
    "GUM",
    "GUY",
    "HKG",
    "HKG-CHN",
    "HMD",
    "HND",
    "HON",
    "HRV",
    "CRO",
    "HTI",
    "HAI",
    "HUN",
    "IDN",
    "INA",
    "IMN",
    "IND",
    "IOT",
    "IRL",
    "IRN",
    "IRI",
    "IRQ",
    "ISL",
    "ISR",
    "ITA",
    "JAM",
    "JEY",
    "JOR",
    "JPN",
    "KAZ",
    "KEN",
    "KGZ",
    "KHM",
    "CAM",
    "KIR",
    "KNA",
    "SKN",
    "KOR",
    "ROK",
    "KWT",
    "KUW",
    "LAO",
    "LBN",
    "LIB",
    "LBR",
    "LBY",
    "LBA",
    "LCA",
    "LIE",
    "LKA",
    "SRI",
    "LSO",
    "LES",
    "LTU",
    "LUX",
    "LVA",
    "LAT",
    "MAC",
    "MAC-CHN",
    "MAF",
    "MAR",
    "MCO",
    "MON",
    "MDA",
    "MDG",
    "MAD",
    "MDV",
    "MEX",
    "MHL",
    "MKD",
    "NMK",
    "MLI",
    "MLT",
    "MMR",
    "MYA",
    "MNE",
    "MNG",
    "MGL",
    "MNP",
    "MOZ",
    "MRT",
    "MTN",
    "MSR",
    "MTQ",
    "MUS",
    "MRI",
    "MWI",
    "MAW",
    "MYS",
    "MAS",
    "MYT",
    "NAM",
    "NCL",
    "NER",
    "NIG",
    "NFK",
    "NGA",
    "NGR",
    "NIC",
    "NCA",
    "NIU",
    "NLD",
    "NED",
    "NOR",
    "NPL",
    "NEP",
    "NRU",
    "NZL",
    "NZ",
    "OMN",
    "OMA",
    "PAK",
    "PAN",
    "PCN",
    "PER",
    "PHL",
    "PHI",
    "PLW",
    "PNG",
    "POL",
    "PRI",
    "PUR",
    "PRK",
    "DPRK",
    "PRT",
    "POR",
    "PRY",
    "PAR",
    "PSE",
    "PLE",
    "PYF",
    "QAT",
    "REU",
    "ROU",
    "ROM",
    "RUS",
    "RWA",
    "SAU",
    "KSA",
    "SDN",
    "SUD",
    "SEN",
    "SGP",
    "SIN",
    "SGS",
    "SHN",
    "SJM",
    "SLB",
    "SOL",
    "SLE",
    "SLV",
    "ESA",
    "SMR",
    "SOM",
    "SPM",
    "SRB",
    "SSD",
    "STP",
    "SUR",
    "SVK",
    "SVN",
    "SLO",
    "SWE",
    "SWZ",
    "SXM",
    "SYC",
    "SEY",
    "SYR",
    "TCA",
    "TCD",
    "CHA",
    "TGO",
    "TOG",
    "THA",
    "TJK",
    "TKL",
    "TKM",
    "TLS",
    "ETM",
    "TON",
    "TGA",
    "TTO",
    "TRI",
    "TUN",
    "TUR",
    "TUV",
    "TWN",
    "ROC",
    "TWN-ROC",
    "ROC-TW",
    "TPE",
    "CHN-ROC",
    "TZA",
    "TAN",
    "UGA",
    "UKR",
    "UMI",
    "UNO",
    "URS",
    "URY",
    "URU",
    "USA",
    "US",
    "USSR",
    "UZB",
    "VAT",
    "VCT",
    "VIN",
    "VEN",
    "VGB",
    "IVB",
    "VIR",
    "ISV",
    "VNM",
    "VIE",
    "VUT",
    "VAN",
    "WLF",
    "WSM",
    "SAM",
    "YEM",
    "YUG",
    "FR-YUG",
    "ZAF",
    "RSA",
    "ZMB",
    "ZAM",
    "ZWE",
    "ZIM",
]
country_templates = {
    name.replace(name[0], name[0].lower(), 1).strip() for name in _country_templates_raw
}
