%bcond docs 1 %bcond tests 1 # The libipuz shared library version %global ipuz_soversion 0.5 Name: crosswords Version: 0.3.17 Release: 1.20260323151051747018.main.255.g1b0a3e77%{?dist} Summary: Solve crossword puzzles # * crosswords itself is GPL-3.0-or-later # * the puzzle sets it bundles are CC-BY-SA-4.0 # * the broda word list is LicenseRef-Fedora-UltraPermissive per # https://gitlab.com/fedora/legal/fedora-license-data/-/issues/627 # * the wordnik word list is MIT per word-lists/LICENSE.wordnik License: GPL-3.0-or-later AND CC-BY-SA-4.0 AND LicenseRef-Fedora-UltraPermissive AND MIT URL: https://gitlab.gnome.org/jrb/crosswords Source: crosswords-0.3.17.tar.gz # Big endian systems are not supported # https://jrb.pages.gitlab.gnome.org/crosswords/devel-docs/PACKAGING.html ExcludeArch: s390x BuildRequires: blueprint-compiler BuildRequires: desktop-file-utils BuildRequires: cmake BuildRequires: gcc BuildRequires: libappstream-glib BuildRequires: meson BuildRequires: python3-devel BuildRequires: sed %if %{with docs} BuildRequires: python3dist(sphinx) BuildRequires: python3dist(sphinx-rtd-theme) BuildRequires: python3dist(myst-parser) %endif %if %{with tests} # gen-word-list requires en_US.UTF8 # https://gitlab.gnome.org/jrb/crosswords/-/issues/109 BuildRequires: glibc-langpack-en %endif BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gio-unix-2.0) BuildRequires: pkgconfig(gtk4) BuildRequires: pkgconfig(iso-codes) BuildRequires: pkgconfig(json-glib-1.0) BuildRequires: pkgconfig(libadwaita-1) BuildRequires: pkgconfig(libipuz-%{ipuz_soversion}) BuildRequires: pkgconfig(libpanel-1) BuildRequires: pkgconfig(librsvg-2.0) Requires: dbus-common Requires: %{name}-puzzle-sets-cats-and-dogs = %{version}-%{release} Requires: %{name}-puzzle-sets-uri = %{version}-%{release} Recommends: %{name}-thumbnailer = %{version}-%{release} Suggests: crossword-editor = %{version}-%{release} %if %{with docs} Suggests: %{name}-doc = %{version}-%{release} %endif %description A simple and fun game of crosswords. Load your crossword files, or play one of the included games. Features include: - Support for shaped and colored crosswords - Loading .ipuz and .puz files - Hint support, such as showing mistakes and suggesting words - Dark mode support - Locally installed crosswords as well as support for 3rd party downloaders %package puzzle-sets-cats-and-dogs Summary: Puzzles about cats and dogs for GNOME Crosswords Requires: %{name} = %{version}-%{release} BuildArch: noarch %description puzzle-sets-cats-and-dogs This package contains a puzzle set about cats and dogs for GNOME Crosswords. %package puzzle-sets-internal Summary: Load additional puzzles for GNOME Crosswords Requires: %{name} = %{version}-%{release} Provides: crosswords-puzzle-sets-uri = %{version}-%{release} Obsoletes: crosswords-puzzle-sets-uri < 0.3.6-3 BuildArch: noarch # Used to load .puz files from disk Recommends: ipuz-convertor = %{version}-%{release} %description puzzle-sets-internal This package contains puzzle sets used internally by GNOME Crosswords to load additional puzzles from disk. %package thumbnailer Summary: GNOME Crosswords Thumbnailer %description thumbnailer This package provides a thumbnailer for crosswords puzzles in formats supported by GNOME Crosswords. %if %{with docs} %package doc Summary: Documentation for %{name} BuildArch: noarch %description doc This package contains additional documentation for GNOME Crosswords. %endif %package -n crossword-editor Summary: Crossword puzzle editor Requires: %{name}%{?_isa} = %{version}-%{release} Recommends: %{name}-thumbnailer = %{version}-%{release} # Used to load .puz files from disk Recommends: ipuz-convertor = %{version}-%{release} Suggests: ipuz2pdf = %{version}-%{release} %description -n crossword-editor Standalone-tool to create crossword puzzles based on GNOME Crosswords. It can be used to create simple puzzles with grids and clues. It has a pattern solver and grid autofill dialog for filling in hard-to-finish corners, and will make suggestions of words when creating the grid. %package -n ipuz-convertor Summary: Converts puz files to ipuz files BuildArch: noarch Requires: crosswords Requires: python3 Requires: python3dist(beautifulsoup4) Requires: python3dist(dateparser) Requires: python3dist(lxml) Requires: python3dist(puzpy) Requires: python3dist(regex) Requires: python3dist(requests) Requires: python3dist(xdfile) %description -n ipuz-convertor ipuz-convertor is a script to convert puzzle files from puz to ipuz. %package -n ipuz2pdf Summary: Export IPUZ puzzles to printable PDF documents %description -n ipuz2pdf ipuz2pdf is a tool to export IPUZ puzzles to printable PDF documents. %prep %autosetup -p1 -n crosswords-0.3.17 # Relax regex version pin sed -i 's:^regex==.*$:regex:' requirements.txt # Update image references in README mkdir images cp -p data/images/{a-dogs-day,hero}.png images/ sed -i 's:data/images/:images/:g' README.md # Relax lxml version pin on older releases %if 0%{?fedora} < 42 sed -i 's:^lxml>=.*:lxml:' requirements.txt %endif # Generate Python dependencies for the converter %generate_buildrequires %pyproject_buildrequires -N requirements.txt %build %meson -Ddevelopment=false %meson_build %if %{with docs} sphinx-build-3 docs html rm -rf html/.{doctrees,buildinfo} %endif %install %meson_install %find_lang %{name} # https://gitlab.gnome.org/jrb/crosswords/-/blob/master/docs/PACKAGING.md#version-0316 rm -f %{buildroot}%{_libexecdir}/gen-word-list-resource %if %{with tests} %check %meson_test appstream-util validate-relax --nonet \ %{buildroot}%{_metainfodir}/org.gnome.Crosswords.metainfo.xml desktop-file-validate \ %{buildroot}/%{_datadir}/applications/org.gnome.Crosswords.desktop \ %{buildroot}/%{_datadir}/applications/org.gnome.Crosswords.Editor.desktop %endif %files -f %{name}.lang %license COPYING %doc CONTRIBUTING.md NEWS.md README.md TODO.md images %{_bindir}/%{name} %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/puzzle-sets %dir %{_datadir}/%{name}/word-lists/ %{_datadir}/%{name}/word-lists/player.gresource %{_datadir}/applications/org.gnome.Crosswords.desktop %{_datadir}/dbus-1/services/org.gnome.Crosswords.service %{_datadir}/glib-2.0/schemas/org.gnome.Crosswords.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.Crosswords.Editor.gschema.xml %{_datadir}/icons/hicolor/scalable/apps/org.gnome.Crosswords.svg %{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Crosswords-symbolic.svg %{_datadir}/mime/packages/org.gnome.Crosswords.xml %{_metainfodir}/org.gnome.Crosswords.metainfo.xml %if %{with docs} %files doc %license COPYING %doc html %endif %files puzzle-sets-cats-and-dogs %license COPYING %{_datadir}/%{name}/puzzle-sets/cats-and-dogs %files puzzle-sets-internal %license COPYING %{_datadir}/%{name}/puzzle-sets/* %exclude %{_datadir}/%{name}/puzzle-sets/cats-and-dogs %files thumbnailer %license COPYING %{_bindir}/%{name}-thumbnailer %dir %{_datadir}/thumbnailers %{_datadir}/thumbnailers/%{name}.thumbnailer %files -n crossword-editor %license word-lists/LICENSE.wordnik %{_bindir}/crossword-editor %{_datadir}/%{name}/word-lists/broda.gresource %{_datadir}/%{name}/word-lists/wordnik.gresource %{_datadir}/applications/org.gnome.Crosswords.Editor.desktop %{_datadir}/dbus-1/services/org.gnome.Crosswords.Editor.service %{_datadir}/icons/hicolor/scalable/apps/org.gnome.Crosswords.Editor.svg %{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Crosswords.Editor-symbolic.svg %{_metainfodir}/org.gnome.Crosswords.Editor.metainfo.xml %files -n ipuz-convertor %license COPYING %{_datadir}/%{name}/ipuz-convertor %{_libexecdir}/ipuz-convertor %files -n ipuz2pdf %license COPYING %{_bindir}/ipuz2pdf %changelog * Mon Mar 23 2026 Packit - 0.3.17-1.20260323151051747018.main.255.g1b0a3e77 - Add Portuguese translation (Hugo Carvalho) - Update Ukrainian translation (Yuri Chornoivan) - Update Georgian translation (Ekaterine Papava) - Update Serbian translation (Марко Костић) - Add Serbian translation (Марко Костић) - Update Georgian translation (Ekaterine Papava) - Explicitly free contents instead of using g_autofree() (Jonathan Blandford) - Fix the build (Jonathan Blandford) - Guard against words that are too long (Jonathan Blandford) - Make earlier test use g_file_open_tmp() (Jonathan Blandford) - Add a test to check if we make too big a skip_list (Jonathan Blandford) - Argh! Somehow deleted the if conditional in this error block (Jonathan Blandford) - Use ipuz_charset_check_text() (Jonathan Blandford) - Guard against very large files (Jonathan Blandford) - Add a limit of 1,000 words to the SkipListModel (Jonathan Blandford) - Add a sample largish skip-list file to test with. (Jonathan Blandford) - Manually implement skip_list_model_load_from_file() (Jonathan Blandford) - Only filter the words if there's actually a skip list (Jonathan Blandford) - Add has_active to see if there are any skip items to filter (Jonathan Blandford) - Rerender things when the filter changes (Jonathan Blandford) - Default active to FALSE (Jonathan Blandford) - Add a "filter-changed" signal (Jonathan Blandford) - Update text to differentiate across the different install paths (Jonathan Blandford) - hook up the SkipListModel to the EditWordList (Jonathan Blandford) - Pass the skip list all the way to the model. (Jonathan Blandford) - skip_list_model_copy_to_table(): Change hashtable mem management (Jonathan Blandford) - Merge with head (Jonathan Blandford) - Add a comment that references improvements in Bug #392 (Jonathan Blandford) - Filter text added to the EditSkipList entry by SkipList charset (Jonathan Blandford) - Add resource and charset properties (Jonathan Blandford) - Implement loading the skip list from file (Jonathan Blandford) - Simple test for load/save functionality to the skip-list (Jonathan Blandford) - Initial implementation of skip_list_model_load_from_file() (Jonathan Blandford) - EditSkipList: Convert g_warning to dialogs (Jonathan Blandford) - Drive by string cleanup (Jonathan Blandford) - EditSkipList: Hook up the Save dialog to the button (Jonathan Blandford) - Implement skip_list_model_save_to_file() (Jonathan Blandford) - Remove redundant [end] tag (Jonathan Blandford) - Hook up clear button to the EditSkipList (Jonathan Blandford) - Set selection mode to none for EditSkipList (Jonathan Blandford) - Hook up the Delete button (Jonathan Blandford) - Add a reminder comment on top (Jonathan Blandford) - React to word_list resource changes (Jonathan Blandford) - Add a "changed" signal to SkipListModelRow (Jonathan Blandford) - Clear the entry and grab focus after entering words (Jonathan Blandford) - Continue moving to g_set_object() (Jonathan Blandford) - Clean up resource updating (Jonathan Blandford) - Uppercase text before adding it to the skip list (Jonathan Blandford) - Minor style clean up (Jonathan Blandford) - Update the resource in the skip list when it changes (Jonathan Blandford) - Adjust SkipListModel to take a resource, instead of a word list (Jonathan Blandford) - Get WordListRescource for test files (Jonathan Blandford) - Hook up add_word and create a row (Jonathan Blandford) - Remove old handler id (Jonathan Blandford) - s/model/skip_list_model/g (Jonathan Blandford) - Share the CSS with the two editable lists (Jonathan Blandford) - Add CSS for the skip list (Jonathan Blandford) - Add load and save buttons, and clean up wording (Jonathan Blandford) - Remove "register-session" from the app creation (Jonathan Blandford) - Add an icon for the word list property page (Jonathan Blandford) - Pipe the SkipListModel all the way to the EditSkipList widget (Jonathan Blandford) - Initial set cut at the edit skip list ui (Jonathan Blandford) - Add EditSkipList to the ensured types (Jonathan Blandford) - Add stub for EditSkipList widget (Jonathan Blandford) - Add some additional clarification to style-guide.md (Jonathan Blandford) - Add a SkipListModel to the EditWindow (Jonathan Blandford) - Add a test to make sure the unique and sort property is maintained (Jonathan Blandford) - Test copy_to_table (Jonathan Blandford) - Enable the tests, now that we pass (Jonathan Blandford) - Flesh out the basic operations in the test (Jonathan Blandford) - Forgot the g_steal_pointer() (Jonathan Blandford) - Implement copy_to_table() (Jonathan Blandford) - Implement lookup_active() (Jonathan Blandford) - Implement remove() (Jonathan Blandford) - Implement skip_list_model_add() (Jonathan Blandford) - Implement clear() (Jonathan Blandford) - Update the hash after a word list change (Jonathan Blandford) - s/is_active/active/g (Jonathan Blandford) - Add set_word_list (Jonathan Blandford) - Add a skip-list-model test (Jonathan Blandford) - Move row_new to the top (Jonathan Blandford) - Initial implementation of SkipListModel (Jonathan Blandford) - Reorder header file to break each member into sections (Jonathan Blandford) - Remove unused changed_id (Jonathan Blandford) - Move the label below the slider (Jonathan Blandford) - Set autofill widgets to be insensitive correctly (Jonathan Blandford) - Add tooltip for invalid skip list words (Pranay22077) - Update Ukrainian translation (Yuri Chornoivan) - Update Slovenian translation (Martin) - docs: recommend using the container image to test puzzle sets (Pranay22077) - Change JUMP to go up 1/3 of the tree, instead of a fixed amount (Jonathan Blandford) - Change the wording of the backtrack mode (Jonathan Blandford) - Change default number of solutions to 50 (Jonathan Blandford) - Move the accept button to the end (Jonathan Blandford) - Initial implementation of backtrack enum in UI (Jonathan Blandford) - Fix _word_solver_task_run_helper() again (Jonathan Blandford) - Clean up the loop for word_solver_task_run() (Jonathan Blandford) - Make _word_solver_task_run_helper() return TRUE when successful (Jonathan Blandford) - Add a loop for _word_solver_task_run_helper() (Jonathan Blandford) - Remove vestigal code (Jonathan Blandford) - We don't want to jump beyond the root (Jonathan Blandford) - Add some comments (Jonathan Blandford) - Keep the words in the skip_list with ROOT_UNIQUE (Jonathan Blandford) - Add BACKTRACK_ROOT (Jonathan Blandford) - backtrack_debt should be a uint (Jonathan Blandford) - Free skip_table in dispose (Jonathan Blandford) - Implement BACKTRACK_JUMP. (Jonathan Blandford) - Add the depth to run_helper () (Jonathan Blandford) - Add a comment for the enum (Jonathan Blandford) - Add a BACKTRACK enum to define backtrack strategy for the solver (Jonathan Blandford) - Add a benchmark for the autofill task (Jonathan Blandford) - Make word_solver_task_run_helper and set_cancellable exported but private (Jonathan Blandford) - Fix an out-of-bounds error (Jonathan Blandford) - Remove the two strlens() from this function (Jonathan Blandford) - If there are no crossings, the score is automatically 0 (Jonathan Blandford) - ci: install puzzle sets and xword-dl automatically during container builds (Pranay22077) - remove unused acrostic editor's utility functions (riteshco) - Update Basque translation (Asier Saratsua Garmendia) - ...and add a section on pregenerating the bitsets (Jonathan Blandford) - Remove the suggestion to sort the fragments! (Jonathan Blandford) - Add a description of the Bitset cache and the other optimizations (Jonathan Blandford) - Add a few more comments (Jonathan Blandford) - Get the bitset from the header (Jonathan Blandford) - Add getter for bitsets (Jonathan Blandford) - Precalculate bitsets for sharing across all the wordlists (Jonathan Blandford) - New approach to intersection: bitsets (Jonathan Blandford) - Expand on the PROFILE_TEST a little bit more (Jonathan Blandford) - Assemble the section externally for word_list_lookup_word (Jonathan Blandford) - greeter: allow unselecting theme words with ctrl-click (Pranay22077) - Sort the fragment list from shortest to longest before the intersection (Jonathan Blandford) - Improve intersection inner loop (Jonathan Blandford) - Replace the code to load the unaligned floats / guints with a memcpy (Jonathan Blandford) - Add a #define THUMBNAIL_SIZE 64 (Jonathan Blandford) - Use the new xwd_puzzle_thumbnail_async function (Jonathan Blandford) - New functions: xwd_thumnbail_puzzle_async() (Jonathan Blandford) - Add a puzzle thumbnail for the row (Jonathan Blandford) - Update Ukrainian translation (Yuri Chornoivan) - Adjust vertical space in PickerList header to be more compact (Jonathan Blandford) - Make the vertical space match GridPicker (Jonathan Blandford) - Delete unused code (Jonathan Blandford) - Switch to a normal button when only single height. (Jonathan Blandford) - Move the padding for the content from the outer stack to the clamps (Jonathan Blandford) - tweak padding a bit more (Jonathan Blandford) - Reenable the flatpak guard (Jonathan Blandford) - Split the admonition into a header and a body (Jonathan Blandford) - Add the admonition note svg that gi-docgen uses (Jonathan Blandford) - Add an admonition to the main welcome screen (Jonathan Blandford) - Update Slovenian translation (Martin) - Add Vinson as well (Jonathan Blandford) - Update copyright dates (Jonathan Blandford) - Add Tobias and Jakub to the designer list (Jonathan Blandford) - Patch from Tobias Bernard to fix adwaita override padding (Jonathan Blandford) - Fix typo in text (Jonathan Blandford) - Keep the title widget center-aligned (Jonathan Blandford) - New filter icon from Jakab (Jonathan Blandford) - greeter: remove unnecessary null checks (Pranay22077) - Remove edit-grid.blp from POTFILES.in (Jonathan Blandford) - Clean up text. (Jonathan Blandford) - code style improvement: remove braces from single-line if statement (riteshco) - Add a note at the top of the MR template (Jonathan Blandford) - More additions to the contributors guide (Jonathan Blandford) - s/Sans/Adwaita Sans/g (Jonathan Blandford) - add a check whether to emit signal when updating source text in edit-acrostic window (riteshco) - Updat to new GNOME Runtime (Jonathan Blandford) - Update to new GNOME SDK (Jonathan Blandford) - greeter: allow unselecting theme words with ctrl-double-click (Pranay22077) - s/master/main/g (Jonathan Blandford) - s/master/main (Jonathan Blandford) - add grid.unches action (Jonathan Blandford) - Add a filter menu with an unch menu item (Jonathan Blandford) - Simple implementation of an overlay for unches (Jonathan Blandford) - Pass tasks to edit_grid_update() (Jonathan Blandford) - Add play_cell_get_coord (Jonathan Blandford) - Forgot to close this (Jonathan Blandford) - implement focus_cell in terms of get_cell (Jonathan Blandford) - implement pos_to_cell in terms of get_cell (Jonathan Blandford) - Add play_grid_get_cell() (Jonathan Blandford) - Start migrating the tasks to EditStateTasks (Jonathan Blandford) - Move PuzzleInfo into an EditStateTasks field (Jonathan Blandford) - Remove the BIN layout (Jonathan Blandford) - Clean up calculating the coordinates of clicks (Jonathan Blandford) - Fix comment (Jonathan Blandford) - Change EditGrid to inherit from PlayGrid (Jonathan Blandford) - Guard against not having children (Jonathan Blandford) - Guard against last_allocated_config not being set yet. (Jonathan Blandford) - Assert if viewport <0 (Jonathan Blandford) - Updated last_allocated_config in the wrong loop (Jonathan Blandford) - Guard against non-positive viewports (Jonathan Blandford) - EditGrid rebase: Start process of changing EditGrid to inherit from PlayGrid (Jonathan Blandford) - Fix libipuz wrap to use 'main' branch after upstream rename (Vinson Lee) - greeter: allow editing theme words by selection (Pranay22077) - Initialize child_alloc to 0 (Jonathan Blandford) - Add an extra warning for potential GSoC students (Jonathan Blandford) - Revert "Merge branch 'edit-theme-words-v2' into 'master'" (Jonathan Blandford) - Changed xword.zoom actions to win.grid.zoom (Jonathan Blandford) - Change commit-pencil to Ctrl-Enter (Jonathan Blandford) - Only toggle the direction in cells for a 'naked' return (Jonathan Blandford) - Split xword.zoom_in_out (Jonathan Blandford) - Add keybindings for zoom-in-out (Jonathan Blandford) - Add plus/minus buttons to the OverlayDock (Jonathan Blandford) - Forgot to include the headers. (Jonathan Blandford) - Fix wrong function signature for edit_window_actions_indicator_hints (Jonathan Blandford) - Set an xword.zoom-in-out per-window (Jonathan Blandford) - Public function to force EditWindow to update when zoom changes (Jonathan Blandford) - Set initial zoom for EditWindow and propagate to EditGrid (Jonathan Blandford) - Allow setting of the LayoutConfig for use with the EditGrid (Jonathan Blandford) - Shrink padding around osd items to 12px (Jonathan Blandford) - Add default css values for the XwdOverlayDock (Jonathan Blandford) - Move grid margin values to CSS (Jonathan Blandford) - Add 'align' property to XdgOverlayDockItem (Jonathan Blandford) - Insert an OverlayDock before the swindow in EditPaned (Jonathan Blandford) - Revert "Drop EditPaned for GtkPaned" (Jonathan Blandford) - Default EditPaned to fixed (Jonathan Blandford) - Drop EditPaned for GtkPaned (Jonathan Blandford) - Disable items altogether when opacity is 0 (Jonathan Blandford) - Use gtk_widget_pick to see if we're in a widget (Jonathan Blandford) - use g_clear_handle_id() (Jonathan Blandford) - Add CSS classses to the OverlayDock (Jonathan Blandford) - Use gtk_selection_model_unselect_all instead (Pranay22077) - updated the MR with required changes (Pranay22077) - Add autohide to XwdOverlayDockItem (Jonathan Blandford) - Add an autohide option to XwdOverlayDockItem (Jonathan Blandford) - Hook up the XwdOverlayDock to the print dialog (Jonathan Blandford) - Initial implementation of XwdOverlayDock (Jonathan Blandford) - greeter: allow editing theme words by selection (Pranay22077) - Allow editing theme words by selecting them (Pranay22077) - Switch from SettabilityBucket to IpuzSettabilityBucket (Jonathan Blandford) - Settle on Wordplay Indicator as the main term we use (Jonathan Blandford) - Add settability score to EditGridInfo (Jonathan Blandford) - Bump libipuz requirement (Jonathan Blandford) - Start template for NEWS for next cycle (Jonathan Blandford) - Remove Greeter from TODO (Jonathan Blandford) - merge accept_clicked and accept_triggered to one action under the action name dialog.accept (riteshco) - greeter-theme-dialog: accept the dialog (and exit dialog box) when Ctrl+Enter is pressed (riteshco) - word-list-resources: Correctly check for empty resource list (riteshco) - Change the tooltip text to match the right menus (Jonathan Blandford) - Enable ruff F rules and fix lint errors (Vinson Lee) - Updated the tooltip text: 'Menu' to 'Main Menu' for consistency (Pranay22077) - Add tooltip to menu button (Pranay22077)