import curses.ascii
import locale
import codecs
+import getopt
+import os
+import sys
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()
for number in range(0,10):
superscript_numbers[str(number)] = str(number)
-crossworddata = codecs.open("g2-20090701.txt", "r", "utf-8").read()
+filename = None
+
+(options, args) = getopt.getopt(sys.argv[1:], "f:", "file=")
+
+for option in options:
+ if option[0] == "-f" or option[0] == "--file":
+ filename = option[1]
+
+if not filename and len(args) > 0:
+ filename = args[0]
+
+if not filename:
+ sys.stderr.write("No crossword file specified, exiting.\n")
+ sys.exit(0)
+
+if os.path.exists(filename) and os.path.isfile(filename):
+ crossworddata = codecs.open(filename, "r", "utf-8").read()
+else:
+ sys.stderr.write("Couldn't open file %s\n" %(filename))
+ sys.exit(0)
def parsecrossword(crossworddata):
ingrid = False
parts = line.split()
question_number = int(parts[0])
clue = " ".join(parts[1:])
- crossword["across"][int(question_number)] = clue
+ crossword["across"][int(question_number)] = clue.encode('utf-8')
if indown:
if line != "":
parts = line.split()
question_number = int(parts[0])
clue = " ".join(parts[1:])
- crossword["down"][int(question_number)] = clue
+ crossword["down"][int(question_number)] = clue.encode('utf-8')
num_cols = len(crossword["grid"][0])
num_rows = len(crossword["grid"])
curx += 4
curx -= 1
stdscr.addch(cury, curx, curses.ACS_LRCORNER)
+ # draw the clues in
+ cury = (len(crossword["grid"]) * 2) + 1
+ curx = 0
+ stdscr.addstr(cury, curx, "Across")
+ cury += 1
+ for cluenumber in crossword["across"].keys():
+ stdscr.addstr(cury, curx, "%3s: %s" %(str(cluenumber), crossword["across"][cluenumber]))
+ cury += 1
+
+ cury += 1
+ stdscr.addstr(cury, curx, "Down")
+ cury += 1
+ for cluenumber in crossword["down"].keys():
+ stdscr.addstr(cury, curx, "%3s: %s" %(str(cluenumber), crossword["down"][cluenumber]))
+ cury += 1
+
curx = 3
cury = 1
- stdscr.move(1,3)
+ gridx = 0
+ gridy = 0
+
+ while crossword["grid"][gridy][gridx] == "x":
+ curx += 4
+ gridx += 1
+
+ stdscr.move(cury,curx)
+
while 1:
c = stdscr.getch()
if c == curses.ascii.ESC:
break
if c == curses.KEY_RIGHT:
- curx += 4
- stdscr.move(cury, curx)
+ if gridx < (len(crossword["grid"][0]) - 1):
+ gridx += 1
+ curx += 4
+ while gridx < (len(crossword["grid"][0]) -1) \
+ and crossword["grid"][gridy][gridx] == "x":
+ gridx += 1
+ curx += 4
+ while crossword["grid"][gridy][gridx] == "x":
+ gridx -= 1
+ curx -= 4
+ stdscr.move(cury, curx)
if c == curses.KEY_LEFT:
- curx -= 4
- stdscr.move(cury, curx)
+ if gridx > 0:
+ curx -= 4
+ gridx -= 1
+ while gridx > 0 \
+ and crossword["grid"][gridy][gridx] == "x":
+ gridx -= 1
+ curx -= 4
+ while crossword["grid"][gridy][gridx] == "x":
+ gridx += 1
+ curx += 4
+ stdscr.move(cury, curx)
if c == curses.KEY_UP:
- cury -= 2
- stdscr.move(cury, curx)
+ if gridy > 0:
+ gridy -= 1
+ cury -= 2
+ while gridy > 0 \
+ and crossword["grid"][gridy][gridx] == "x":
+ gridy -= 1
+ cury -= 2
+ while crossword["grid"][gridy][gridx] == "x":
+ gridy += 1
+ cury += 2
+ stdscr.move(cury, curx)
if c == curses.KEY_DOWN:
- cury += 2
+ if gridy < (len(crossword["grid"]) - 1):
+ gridy += 1
+ cury += 2
+ while gridy < (len(crossword["grid"]) - 1) \
+ and crossword["grid"][gridy][gridx] == "x":
+ gridy += 1
+ cury += 2
+ while crossword["grid"][gridy][gridx] == "x":
+ gridy -= 1
+ cury -= 2
+ stdscr.move(cury, curx)
+ if curses.ascii.isalpha(c) or c == ord(" "):
+ stdscr.addch(cury, curx, c)
+ stdscr.move(cury, curx)
+ if c == curses.KEY_BACKSPACE or c == curses.KEY_DC:
+ stdscr.addch(cury, curx, ord(" "))
stdscr.move(cury, curx)