Skip to content

xpuz.ipuz ¤

Module implementing ipuz export functionality.

IPuz ¤

IPuz(
    cwrapper: CrosswordWrapper,
    starting_word_matrix: List[List[int]],
    definitions_a: List[Dict[int, Tuple[str]]],
    definitions_d: List[Dict[int, Tuple[str]]],
)

Bases: dict

Export a generated crossword in ipuz format.

Parameters:

Name Type Description Default
cwrapper CrosswordWrapper

The crossword wrapper.

required
starting_word_matrix List[List[int]] required
definitions_a List[Dict[int, Tuple[str]]] required
definitions_d List[Dict[int, Tuple[str]]] required
Source code in src/xpuz/ipuz.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def __init__(
    self,
    cwrapper: CrosswordWrapper,
    starting_word_matrix: List[List[int]],
    definitions_a: List[Dict[int, Tuple[str]]],
    definitions_d: List[Dict[int, Tuple[str]]],
) -> None:
    """Initialise crossword data and the crossword wrapper object.

    Args:
        cwrapper: The crossword wrapper.
        starting_word_matrix: 
            [read this function](utils.md#xpuz.utils._interpret_cword_data)
        definitions_a: 
            [read this function](utils.md#xpuz.utils._interpret_cword_data)
        definitions_d: 
            [read this function](utils.md#xpuz.utils._interpret_cword_data)
    """
    self.cwrapper = cwrapper
    self.crossword = self.cwrapper.crossword

    self.starting_word_matrix = starting_word_matrix
    self.definitions_a, self.definitions_d = definitions_a, definitions_d

write ¤

write() -> None

Compile the data of the generated crossword into self, and write it to filepath.

Source code in src/xpuz/ipuz.py
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
def write(self) -> None:
    """Compile the data of the generated crossword into ``self``, and write
    it to ``filepath``.
    """
    filepath = _get_saveas_filename(
        _("Select a destination to export your ipuz to"),
        self.cwrapper.display_name,
        ".json",
        [("JSON files", "*.json")],
    )
    if not filepath:
        return
    if not filepath.endswith(".json"):
        filepath += ".ipuz.json"
    else:
        filepath = filepath.replace(".json", ".ipuz.json")

    self = IPuzV2.create(
        dimensions={
            "width": self.crossword.dimensions,
            "height": self.crossword.dimensions,
        },
        puzzle=self.starting_word_matrix,
        solution=list(
            map(
                lambda row: [
                    cell if cell != EMPTY else None for cell in row
                ],
                self.crossword.grid,
            )
        ),
        clues={
            "Across": [
                [
                    list(definition.keys())[0],
                    list(definition.values())[0][1],
                ]
                for definition in self.definitions_a
            ],
            "Down": [
                [
                    list(definition.keys())[0],
                    list(definition.values())[0][1],
                ]
                for definition in self.definitions_d
            ],
        },
        date=date.today().strftime("%m/%d/%Y"),
        difficulty=self.cwrapper.translated_difficulty,
        title=self.cwrapper.translated_name,
    )

    with open(filepath, "w") as f:
        dump(self, f, indent=None)
    GUIHelper.show_messagebox(ipuz_write_success=True)