def export_image (self, pngfile, htmlfile=None, puztitle="Crossword Puzzle",
solution=True):
# don't export if grid is not frozen
- if self.frozen_grid is False:
- raise FrozenGridException
+ self.assert_frozen_grid ()
# create cairo image surface and context
px = 30
# get the AcrossLite(TM) data for exporting
def export_acrosslite (self, title, author, copyright):
# don't export if grid is not frozen
- if self.frozen_grid is False:
- raise FrozenGridException
+ self.assert_frozen_grid ()
across_data = []
across_data.append ("<ACROSS PUZZLE>\r\n")
# setting a down word
def set_word_down (self, row, col, word):
- # if the grid is frozen the abort
- if self.frozen_grid is True:
- raise FrozenGridException
+ # if the grid is frozen then abort
+ self.assert_unfrozen_grid ()
# if the word length greater than totalrows - startrow
if len(word) > self.rows - row:
# setting an across word
def set_word_across (self, row, col, word):
- # if the grid is frozen the abort
- if self.frozen_grid is True:
- raise FrozenGridException
+ # if the grid is frozen then abort
+ self.assert_unfrozen_grid ()
# is the word length greater than totalcols - startcol?
if len(word) > self.cols - col:
self.frozen_grid = False
+ # raise an exception if the grid is frozen
+ def assert_unfrozen_grid (self):
+ if self.frozen_grid is True:
+ raise FrozenGridException
+
+ # raise an exception if the grid is NOT frozen
+ def assert_frozen_grid (self):
+ if self.frozen_grid is False:
+ raise FrozenGridException
+
# reset the entire grid
def reset_grid (self):
# run through the grid
self.data[row][col].reset ()
self.frozen_grid = False
+
+ # remove an across word at position
+ def remove_word_across (self, row, col):
+ # if grid is frozen don't allow removal of word
+ assert_unfrozen_grid ()
+
+ word, brow, bcol, l = self.get_word_across (row, col)
+
+ # traverse from the beginning to end of the word and erase it
+ c = bcol
+ while True:
+ if self.data[brow][c].occupied_across is True:
+ self.data[brow][c].clear_across_data ()
+ else:
+ break
+ c += 1
+
+ # remove a down word at position
+ def remove_word_down (self, row, col):
+ # if grid is frozen don't allow removal of word
+ self.assert_unfrozen_grid ()
+
+ word, brow, bcol, l = self.get_word_down (row, col)
+ # traverse from the beginn to end of the word and erase it
+ r = brow
+ while True:
+ if self.data[r][bcol].occupied_down is True:
+ self.data[r][bcol].clear_down_data ()
+ else:
+ break
+ r += 1
+
+
+