I like making crossword puzzles. But it needs a lot of time without the right tools.
At the moment this is some kind of fill-in sheet with attached dictionary to look for matching words.
I hope it will evolve in a tool that makes creating and sharing crossword puzzles just fun.
Additionally you need a
settings_webserver.py that gets copied as
It can contain every kind of local settings, at least the database password.
If you don’t need a public API, comment “rest_framework” in
- active users
- questions get automatically saved to personal dictionary
- save puzzles as private
- manage words and their descriptions in several dictionaries
- import word lists
- optional RESTful API with djangorestframework (rest_framework)_
Using the search field in the toolbar you can look up words that contain defined letters at discrete locations.
You can use _ and ? as wildcards for single letters, * and % for an undefined number of letters (including none).
E.g. if you look up
_Y__O_ you get PYTHON and SYMBOL (depending on dictionaries, of course);
if you look up
RAM*, you get e.g. RAM, RAMBLE, RAMADAN etc. Of course you can mix wildcards at will.
All letters get uppercased, German umlauts get converted from Ä, Ö, Ü to AE, OE, UE; other international characters get de-accented. (If your language needs other conversions, please contact the developer.)
Searching works only if you activate at least one dictionary first.
Query results are limited to 100 answers.
Here’s how to make your own crossword puzzle:
Click the “star” button to create a grid in your favourite size (12x12 is good).
You can move around in the grid with the arrow keys (tab, shift-tab, backspace, delete work also). If you write letters, the cursor will move right to the next cell; if you press shift, it will move downward. Please write slowly, otherwise the key handler swallows characters.
Write some words into the grid “by heart” - in an empty grid, you’d get thousands of possible words.
Perhaps write only one letter in the corners - that’s how I mostly start. Press ? (question mark) in any square, and after a short delay you’ll get two lists of words that match in this place horizontally and vertically.
You can click on the words in the result list to place them in the grid. The list will adapt automatically to the new situation.
To mark cells as “blockers”, press space (and again to remove the block).
To set a number as start-of-word mark, press # (number sign). The numbering works automatically. A question field is added to the horizontal and/or vertical list, it gets filled with the first solution from your selected dictionaries.
Just press # again to remove the number and the question field.
Make a wordlist
- use the provided wordlists for German, English and Esperanto (derived from ispell dictionaries); you can upload them directly
- use a dictionary from aspell:
aspell dump master > mydict.txt
- get some long text, e.g. from Project Gutenberg
- write your own
- The wordlist file is expected in UTF-8 encoding.
- Format is “(word)\t(description)\t(priority)\n”. Description and priority are optional (default to word and 0).
make-wordlist.pyon it (or several), result is
Make a dictionary
- upload a wordlist file to your croisee installation (Wordlist Upload); that may take a while.
- fix descriptions and priorities, if you like.
I’m planning to implement the following features in about this order:
- enable user registration (django registration)
- export grid and solution as text (done) / HTML / LaTeX (cwpuzzle, done) / ConTeXt (done) / PDF / InDesign markup
- export of dictionaries
- edit personal dictionary (or all for admins)
- use tagging for puzzles
- delete anonymous puzzles after e.g. 1 month
- allow adopting of anonymous puzzles by users
- import text files (JSON, YAML?)
- different types of crossword grids (fat lines instead of blocked cells, uneven outline...)
- mark letters for extra solution (competition word)
- automate filling the grid (algorithm?)
- set up a paid service
- get rich
- world domination
Bugs / Todo
- only German keyboards work well; seems we use key codes instead of character codes
- word numbers are rather small in Mozilla (and probably other browsers than WebKit-based)
- admin: if adding to an existing dict, disable other fields
- clean up redundant template/view code
- update libraries and optimize JS code
- still not really a reusable app (to be integrated in fiëé cérébrale)
- still no tests!
- add Sphinx documentation
- add setup.py
- bind anonymous puzzles to one session to avoid puzzles being edited by several anonymous users at the same time
- add sample settings_local.py
Internal workflow (how it should work)
If you save a puzzle for the first time, a new hash code is generated from your IP address and the local datetime. The puzzle’s address is becoming something like “/puzzle/abcdef123456/”.
as anonymous user
Your saved puzzles are always public (otherwise you couldn’t access it later). Everyone can change it. Your solutions (i.e. questions for words) are only saved with the puzzle.
as logged in user
You can decide to make your puzzles public, but only you can change it. Your solutions are also saved to your personal dictionary. If you’re a staff member, your solutions can be saved to a public dictionary and you can use non-public dictionaries. You can export your personal dictionary to use it with your own croisee installation. You can claim (adopt) puzzles of anonymous users (e.g. your own, while you weren’t logged in).
GPLv3, see http://www.gnu.org/copyleft/gpl.html
Feel free to ask for different, additional licensing.
I don’t plan to release my edited dictionaries, because in them’s the most work.
Everything related to fiëé visuëlle (logo, names) is copyrighted and contained only for the sake of completeness. That means you must not use the fiëé logo, fiëé favicon or any name containing fiëé in public, except in a descriptive manner, where it is encouraged (e.g. “this is derived from / based on”).
- Henning Hraban Ramm, fiëé visuëlle, <email@example.com>, http://www.fiee.net
- Heiko Oberdiek: enhancement of LaTeX template, http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1110&L=tex-d-l&T=0&P=3297
- inspiration and code snippets by several other people & projects