# Development guide for Crosswords
----------------------------------

This is the development guide for *Crosswords* and *Crossword
Editor*. It will help you understand how the applications fit together
and how best to work with the codebase and project.

# Contributing to the Project

For those interested in contributing to the project, please follow the
guides below. In particular:

* [Building and running it from source](build-and-run.md) (Additional [Mac OS](macos-build.md) hints)
* Contributor's guide — _coming soon!_
* [Coding Style Guide](style-guide.md)
* [Design Doc Instructions and Philosophy](design-docs.md) ([Template](design-doc-template.md))
* [Bugs Tracker](https://gitlab.gnome.org/jrb/crosswords/issues)

## Navigating the code base

The codebase can be complex to navigate. These guides help developers
understand how things fit together.

* **[*Crosswords* overview](overview-crosswords.md)** — guide to the main game
* **[*Crosswords Editor* overview](overview-crossword-editor.md)** — guide to the editor
* **[Shared code overview](overview-internals.md)** — guide to code shared between the two applications
* **[Naming disambiguation](naming-disambiguation.md)** — guide to understanding source code file names

# Designs

Complex sections of the code have their own documentation to describe
how they work. This is a list of the current designs:

**Crosswords:**
* [PlayXwordColumn](play-xword-column.md)
* [Puzzle Downloader](puzzle-downloader.md)

**Puzzle Sets:**
* [Puzzle Sets](puzzle-sets.md)
* [Puzzle Set Resource](puzzle-set-resource.md)
* [Puzzle Set Tags](puzzle-set-tags.md)

**Crossword Editor:**
* [Acrostic Editing](acrostic-editing.md)
* [Acrostic Support](acrostic-support.md)
* [Word Entry](word-entry.md)
* [Word Solver](word-solver.md)

**Shared Code:**
* [Background shapes for cells](cell-shapebg.md)
* [ClueGrid widget](clue-grid.md)
* [Crossword Quirks](language-quirks.md)
* [CSS in Crosswords](css.md)
* [Grid Layout](grid-layout.md)
* [Immutable XwordState](stateless.md)
* [libipuz Edit Interface](ipuz-edit-interface.md)
* [Overlays on the grid](overlays.md)
* [Play Cell](play-cell.md)
* [Play Grid Sizing](play-grid-sizing.md)
* [Play State Modes refactor](xword-state-modes.md)
* [The PuzzleStack](puzzle-stack.md)
* [Word List](word-list.md)

## In progresss / Drafts

These are proposals that haven't been implemented yet, or still need
review.

* [Basic Types](basic-types.md)
* [Startup Actions](startup-actions.md)
* [Word Scores](word-scores.md)

## Deprecated Designs

Some designs are obsolete and no longer are relevant. We keep them
around for historical interest, and to help reconstruct complex
decisions.

* [Crossword Editor Panel Widgets](panel-widgets.md)
* [Edit Autosolve Dialog](edit-autofill-dialog.md)
* [Game State](game-state.md)
* [Crossword State](xword-state.md)
* [Grid State Modes](grid-state-modes.md)

# Packagers

Tips for distributing Crosswords:

* [Notes on packaging Crosswords](PACKAGING.md)

# Maintainers

Internal documentation for the core Maintainers:

* [Release process instructions](RELEASING.md)
* TODO: CI documentation

