mrichards42 / xword

Cross-platform crossword solving
https://mrichards42.github.io/xword/
GNU General Public License v3.0
42 stars 13 forks source link

XWord - A cross platform crossword solving program

XWord is a cross-platform crossword puzzle program designed to be highly configurable. It reads multiple puzzle file formats.

See it in action

In 2013 Alex Boisvert and Tyler Hinman made a series of videos called "Crossword Race" where they race to solve puzzles using XWord, with Tyler having different handicaps each time. Some of the handicaps showcase features of XWord and the puzzle formats it supports, including non-standard word directions and diagramless solving.

Features

XWord is extensible via the lua scripting language. A number of plugins are available. See Tools > Package Manager.

Diagramless Puzzles

XWord allows the user to solve diagramless puzzles similarly to normal puzzles with the exception that black squares are allowed to be selected. When selected, black squares are outlined in the focused square color. To make a white square black, type a period ("."). To make a black square white, type a period or enter another letter.

XWord provides some guidance when solving diagramless puzzles: clue numbers in the grid are automatically calculated when a square is made black or white. Numbers in the grid that do not appear in the clue list are highlighted in red. Naturally, this automatic calculation of grid numbers only works if the puzzle follows the normal rules of numbering a grid.

Building XWord

XWord uses the wxWidgets cross-platform toolkit (statically linked). wxaui-tweaks.patch slightly alters aui/framemanager. wxWidgets-osx-private-build-fix.patch is an upstream patch to wxWidgets 3.1.3 which fixes Mac builds. If you would like to use these patches, apply them to the wxWidgets directory.

XWord uses premake to generate project files. Version 5 is required.

To build project files:

$ premake5 [target]

# Examples:
$ premake5 vs2008
$ premake5 xcode4

On windows, the %WXWIN% environmental variable will be used to find the wxWidgets directory. On other platforms, wx-config is used. You can override either %WXIN% or the default wx-config (see options below).

XWord-specific premake options:

--disable-lua
--wx-prefix="wxWidgets directory"
--wx-config="wx-config path" # mac/linux

# List all options
$ premake5 --help

Dependencies

Versions listed are the most recent that I have build XWord against. I'm sure the simpler libraries could be updated.

Windows builds include dlls for everything except curl, lua, and wxWidgets.

Curl (for Windows) can be built with build-curl.sh; LuaJIT can be built with build-luajit.sh.

A debug build of wxWidgets is needed for debug builds of XWord, and likewise for release builds. The following configure options should work as a baseline for release builds:

$ ./configure --disable-shared --enable-compat28

For debug builds, add --enable-debug. For Mac OS builds, add --enable-universal-binary=i386 --with-macosx-version-min=10.6. You may also want to add -fvisibility-inlines-hidden to CFLAGS, CXXFLAGS, CPPFLAGS, OBJCFLAGS, and OBJCXXFLAGS, as this is the default option used by the Mac toolchain, and this option should be used consistently across an app and all of its dependencies.

Lua libraries

Source included in lua directory