User:David Eppstein/jstor.py

Source: Wikipedia, the free encyclopedia.
#!/usr/bin/env python3

"""Convert jstor to citation

Should convert text like

Mark Green
The American Mathematical Monthly
The American Mathematical Monthly
Vol. 109, No. 7 (Aug. - Sep., 2002), pp. 675-678 (4 pages)
Published by: Taylor & Francis, Ltd. on behalf of the Mathematical Association of America
Previous Item | Next Item
DOI: 10.2307/3072450
https://www.jstor.org/stable/3072450

into

{{citation|title=none|author=Mark Green|journal=The American Mathematical Monthly|volume=109|issue=7|date=Aug-Sep 2002|pages=675–687|doi=10.2307/3072450|jstor=3072450}}
"""

import sys
lines = [line.strip() for line in sys.stdin]

for i in range(len(lines)):
    if lines[i].startswith("Previous Item") or \
            lines[i].startswith("Published by:") or \
            lines[i].startswith("Stable URL"):
        lines[i] = ""
    elif lines[i] == lines[i-1]:
        lines[i] = ""
    elif lines[i].startswith("DOI: ") or lines[i] == "DOI":
        lines[i] = "|doi=" + lines[i][5:]
    elif lines[i].startswith("https://www.jstor.org/stable/"):
        lines[i] = "|jstor=" + lines[i][29:]
    elif lines[i].startswith("Vol. "):
        lines[i] = "|volume=" + lines[i][5:]
        lines[i] = "|issue=".join(lines[i].split(", No. "))
        parts = lines[i].split("(")
        parts = [parts[0]] + parts[1].split(")")
        parts = [p.strip() for p in parts]
        parts[0] = parts[0].split(",")[0]
        parts[1] = ''.join(c for c in parts[1] if c not in ".,")
        parts[2] = "|pages=".join(parts[2].split(", pp. "))
        parts[2] = "|page=".join(parts[2].split(", p. "))
        parts[2] = "–".join(parts[2].split("-"))
        lines[i] = parts[0] + "|date=" + parts[1] + parts[2]

print(''.join(["{{citation|title=none|author="] + [lines[0]] +
               ["|journal="] + lines[1:] + ["}}"]))