From 8bf14bbd585036c0cfda88c2ace825f1aa471730 Mon Sep 17 00:00:00 2001 From: Harishankar Date: Mon, 6 Dec 2010 09:39:09 +0530 Subject: [PATCH] Completed the HTML exporter Completed the HTML exporter including export of clues --- crosswordpuzzle.py | 47 +++++++++++++++++++++++++++++++++++++-- crosswordpuzzlecreator.py | 25 +++++++++++++-------- 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/crosswordpuzzle.py b/crosswordpuzzle.py index e660800..7d3b270 100644 --- a/crosswordpuzzle.py +++ b/crosswordpuzzle.py @@ -4,6 +4,7 @@ # Class for the puzzle data representation +# for export to PNG image import cairo class GridItem: @@ -76,7 +77,8 @@ class CrosswordPuzzle: self.data[i].append (GridItem ()) # export to an image - def export_image (self, filename, solution=False): + 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 @@ -90,6 +92,11 @@ class CrosswordPuzzle: ctx.rectangle (0, 0, self.cols*px, self.rows*px) ctx.fill () + # get the clues across and down + clues_across = self.get_clues_across () + clues_down = self.get_clues_down () + + # traverse through the grid for row in range (self.rows): for col in range (self.cols): @@ -121,7 +128,43 @@ class CrosswordPuzzle: ctx.move_to (col*px+10, row*px+20) ctx.show_text (self.data[row][col].char) - surf.write_to_png (open (filename, "wb")) + surf.write_to_png (open (pngfile, "wb")) + + # if solution is false, publish the clues and the image in a HTML file + if htmlfile and solution is False: + html_contents = ["", "", ""] + html_contents.append (puztitle) + html_contents.append ("") + html_contents.append ("") + html_contents.append ("") + html_contents.append ("

" + puztitle + "

") + html_contents.append ('puzzle') + + html_contents.append ("

Across clues

") + html_contents.append ("

") + for word, clue in clues_across: + clue_str = str (self.data[word[1]][word[2]].numbered) + " - " \ + + clue + html_contents.append (clue_str) + html_contents.append ("
") + html_contents.append ("

") + + html_contents.append ("

Down clues

") + html_contents.append ("

") + for word, clue in clues_down: + clue_str = str (self.data[word[1]][word[2]].numbered) + " - " \ + + clue + html_contents.append (clue_str) + html_contents.append ("
") + html_contents.append ("

") + html_contents.append ("") + html_contents.append ("") + + html_str = "\r\n".join (html_contents) + + fhtml = open (htmlfile, "wb") + fhtml.write (html_str) + fhtml.close () # get the AcrossLite(TM) data for exporting def export_acrosslite (self, title, author, copyright): diff --git a/crosswordpuzzlecreator.py b/crosswordpuzzlecreator.py index 1816ff6..5a0ae11 100644 --- a/crosswordpuzzlecreator.py +++ b/crosswordpuzzlecreator.py @@ -194,17 +194,24 @@ class CrosswordPuzzleCreator: sys.stderr.write ("Word cannot be added to a frozen puzzle.\n") # Export to image/HTML - def on_export_image (self, solution=False): + def on_export_image (self, solution=True): try: sys.stdout.write (self.BLUE + "Exporting puzzle to image/HTML\n") - filename = raw_input (self.BRICKRED + "Filename (PNG): " + self.ENDCOL) - - self.puzzle.export_image (filename, solution) - sys.stdout.write (self.BLUE + "Successfully exported to file: " + - filename + "\n" + self.ENDCOL) + pngfile = raw_input (self.BRICKRED + "Filename (PNG): " + self.ENDCOL) + if solution is False: + htmlfile = raw_input (self.BRICKRED + "Filename (HTML): " + + self.ENDCOL) + puztitle = raw_input (self.BRICKRED + "Title of puzzle: " + + self.ENDCOL) + self.puzzle.export_image (pngfile, htmlfile, puztitle, solution) + else: + self.puzzle.export_image (pngfile) + sys.stdout.write (self.BLUE + "Successfully exported!") except crosswordpuzzle.FrozenGridException: - sys.stderr.write ("Cannot export as grid is not frozen/finalized") + sys.stderr.write ("Cannot export as grid is not frozen/finalized\n") + except crosswordpuzzle.NoWordsException: + sys.stderr.write ("No words to export!\n") # Export to across lite def on_export_acrosslite (self): @@ -269,9 +276,9 @@ class CrosswordPuzzleCreator: elif ch == "E" or ch == "e": self.on_export_acrosslite () elif ch == "H" or ch == "h": - self.on_export_image () + self.on_export_image (False) elif ch == "I" or ch == "i": - self.on_export_image (True) + self.on_export_image () elif ch == "X" or ch == "x": break -- 2.20.1