User:David Eppstein/jstor.py
Appearance
#!/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:] + ["}}"]))