40 views
# Feature ideas for GNOME Crosswords ## Ideas for GSoC project ### Notes #### Aid settings * Give default settings for each aid, for each puzzle type. For example, unches are expected in cryptics, so the unch detector should be disabled for cryptics. * Does this mean that the user can also change the aid settings for each puzzle type? #### Highlights * I think it's good to use two different types of highlights, depending on the warning: * Slot highlights, for problems with the slot (like unches and unfillable slots). * Word highlights, for problems with the word (like non-word-list words and duplicate substrings). * Word highlight means changing the color of the word. * Need to consider overlapping highlights. * Does each aid have its own color? * Visibility issues? * What if two highlights of the same type overlap? * Priority list? * Split the letter/cell in half and use different colors? * Alternating colors striped pattern? * Unique color that means "multiple warnings"? * What about cell styling colors? * Mouse hover tooltip that shows the warnings? ### Ideas 1. Detect unches and two-cell-long slots. * Highlight the slot to warn the user. * Settings: * Enable/disable. * Set minimum slot length. 1. Detect words that are not in the word list. * Highlight the letters to warn the user. * Fade away the highlight after a while. By then, it's clear that the user is okay with the word. It's too distracting otherwise. * Maybe a right click "add to word list" option. * Settings: * Enable/disable. 1. Heat map. * Highlight slot/cell based on how constrained it is. * Show ghost letters when there is only one choice. * Show multiple ghost letters when there are 2-9 possible letters for a cell. * Toggle on/off easily with keyboard hotkey. * Hold down hotkey to enable temporarily. * Heat map. 1. Jump to the most constrained slot. 1. Detect duplicate substrings. * Highlight the letters to warn the user. * Settings: * Enable/disable. * Set maximum duplicate substring length. 1. Detect solution words in clues. * Highlight the words in the clues, to warn the user. * Root word? * What about solution words that are impossible to avoid in clues (Like *perhaps*, *not*, *its*.)? * It shouldn't be too distracting in the first place. * We can manually add a blacklist for words that are common in crossword clues. * Just because a word is common in clues doesn't necessarily mean it's okay to be in the puzzle. Maybe the fact that a word is common in clues is itself a good reason not to use that word on the grid? So maybe the warning is actually fine. * Settings: * Enable/disable. 1. Detect if the grid is fillable or not. 1. Detect root word duplicates. 1. Detect reversals. 1. Detect anagrams. ## Non-GSoC ideas ### Notes * I've ==highlighted== the ideas that I think are better. * Despite writing a lengthy prior art doc, I know there are still some features that I missed and did not document. * The higher quality editors have a lot of features. Some features are a bit cryptic and complicated, and I did not have the time to investigate them as much as I would have liked. * I think it could be a seperate issue to investigate the high quality editors further, expand the prior art doc, and generate new feature ideas. * In particular, I think it is worth exploring how different editors handle their word suggestion list and autofill features. * For the open source ones, there may also be value in digging through their source code. * High quality editors worth further investigation: * Qxw (open source). * Exet (open source). * Crossfire. * Crossword Compiler. * Crosserville. * Ingrid (open source core). * I only included features that I think are useful. It's possible that some of the features I omitted are also good, but I misjudged them or didn't have enough time to test them properly. * I tried to use the same key words as I used in the prior art doc. So you can Ctrl+F a feature name in the prior art doc, to see which editor it came from. * Sometimes, I explicitly name the editor that a feature came from. * I didn't add any any ideas that require the Outreachy project (i.e. ideas that use word metrics). ### Puzzle info and stats * ==Change wording:== ``` "Clue size" -> "(Word | Slot) size" ``` * ==Missing letters.== * Which letters are needed to make the puzzle a pangram? * If there's room, we could list out all letters, even ones not on the board. And maybe highlight the missing letters. * ==Percent of grid that is a black cell.== * ==Is the grid symmetrical?== * Choose the slots that I want to see stats for: * All slots. * Across slots only. * Down slots only. * Average word score. * ==Average scrabble score. (Unsure if this is actually useful.)== * [Grid flow](https://www.crosserville.com/FAQ#:~:text=are%20grid%20scores%3F-,What%20is%20Grid%20Flow%3F,-What%20are%20stale) (how connected are the slots). * Smallest horizontal and vertical [through cuts](https://github.com/viresh-ratnakar/exet#:~:text=The%20Analysis%20tab,the%20Analysis%20panel.). (Still don't understand what this is or if it's useful.) ### Word list * ==Modify word list from within the editor.== * Change the score of a word. * Add or delete a word. * Change the spelling of a word. ### Grid * ==Grid pattern generator with parameters.== * A possible simplified version of this feature is a random pattern generator, no parameters. Supposedly, Phil (open source) does this. But I think they may just be cycling through a few preset grid patterns. * ==Transform grid (rotate, flip, etc.).== ### Fill algorithm * ==Filter lists:== * Whitelist (only use these words). * Blacklist (never use these words). * Prefered list (use these words if possible). * ==Calculate and consider grid score.== * Crossfire and Crosserville both have this, but I think they calculate it differently. But the meaning of the score is basically, "how well does *X* word fit into *Y* slot." So the score is dynamic, based on the grid state, and the specific slot on the grid. * ==Constraints:== * Minimum word score. * Maximum size shared substring. * Duplicate root word. * Target certain metrics? * ==Word suggestions:== * Fuzzy search or regex search suggested words list. * Autofill: * Target certain metrics? * Try to get a pangram. * Subgrid autofill. * For the editors that I tried, they do not fill any letters beyond the subgrid, even if it means half-filling a slot. This differs from our implementation. ==I do think that their behaviour looks cleaner and is preferable, but this is more of a stylistic thing.== ### Related words (mainly for cryptics) These are all from Exet, which provides a good reference implementation. * ==Anagrams.== == * Including reversals.== * ==Containments.== == * Including anagrams of contianments.== * ==Charades.== * ==Anagrammed deletions.== * ==Hiddens and reverse hiddens (words that contain the \[reversed\] target word).== * Exet uses [Nutrimatic](https://nutrimatic.org/), but it doesn't seem very reliable. It almost always runs into a computation limit. ([More info](https://nutrimatic.org/2024/usage.html).) * ==Alterations.== * \[Same note about Nutrimatic.\] * ==Edits (deletions, insertions, and substitutions).== * ==Homophones and spoonerisms.== * Exet uses the [Carnegie Mellon Pronouncing Dictionary](https://github.com/cmusphinx/cmudict). ### Clues * ==Text formatting (italics, bold).== * Markdown? [HTML](https://raw.githubusercontent.com/viresh-ratnakar/exet/master/exet-format.png)? Keyboard shortcuts? GUI buttons? * ==Cross-reference clues (e.g. "See 1-Down").== * These clues should highlight the relevant slots and clues. * [Ipuz reference](https://libipuz.org/ipuz-spec.html#:~:text=%22continued%22%3A%20%5B%20CrossReference%2C%20...%20%5D,by%20this%20clue). * Third-party [clue database](https://tiwwdty.com/clue/)? ### Miscellaneous * ==Link to various crossword resources.== * Exet has a "Resources" tab, for example. They open the webpage in-app, which I don't think makes sense. But I do think having a list of resources would be a good idea. Or it could just be a GitLab link to a markdown file in the repo that contains all the resources * Break it down into categories (dictionaries, data from past crosswords, cryptics, etc.). * ==Create school-style crossword from list of words.==