From 0e1bf1973771ed5d87fd71332e6cf30e0c38780e Mon Sep 17 00:00:00 2001 From: Dorota Czaplejewicz Date: Sun, 15 Dec 2019 20:43:35 +0000 Subject: [PATCH] docs: Create with tutorial Create docs, based on Sphinx with Commonmark, seeding it with https://forums.puri.sm/t/translations-and-virtual-touch-keyboards-tracking-localization/7669/48?u=dcz --- .gitlab-ci.yml | 14 +++- doc/build.sh | 18 ++++++ doc/conf.py | 165 ++++++++++++++++++++++++++++++++++++++++++++++++ doc/index.md | 21 ++++++ doc/tutorial.md | 53 ++++++++++++++++ 5 files changed, 270 insertions(+), 1 deletion(-) create mode 100755 doc/build.sh create mode 100644 doc/conf.py create mode 100644 doc/index.md create mode 100644 doc/tutorial.md diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e40975b0..2ec7a758 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,7 +14,16 @@ before_script: - echo "deb http://ci.puri.sm/ scratch librem5" > /etc/apt/sources.list.d/ci.list - wget -O- https://ci.puri.sm/ci-repo.key | apt-key add - - apt-get -y update - - apt-get -y build-dep . + +build_docs: + <<: *tags + stage: build + artifacts: + paths: + - _build + script: + - apt-get -y install python3-recommonmark python3-sphinx + - ./doc/build.sh _build build_meson: <<: *tags @@ -24,6 +33,7 @@ build_meson: - _build expire_in: 3h script: + - apt-get -y build-dep . - meson . _build/ -Ddepdatadir=/usr/share - ninja -C _build install @@ -34,6 +44,7 @@ build_deb: paths: - "*.deb" script: + - apt-get -y build-dep . - apt-get -y install devscripts - debuild -i -us -uc -b - cp ../*.deb . @@ -53,4 +64,5 @@ test: needs: - build_meson script: + - apt-get -y build-dep . - ninja -C _build test diff --git a/doc/build.sh b/doc/build.sh new file mode 100755 index 00000000..3c6a8dc7 --- /dev/null +++ b/doc/build.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +# Builds the documentation and places in the selected directory, +# or the working directory. + +set -e + +SCRIPT_PATH="$(realpath "$0")" +DOCS_DIR="$(dirname "$SCRIPT_PATH")" + +TARGET_DIR="${1:-./}" + +SPHINX=sphinx-build + +if ! which sphinx-build ; then + SPHINX=sphinx-build-3 +fi +$SPHINX -b html "${DOCS_DIR}" "${TARGET_DIR}" diff --git a/doc/conf.py b/doc/conf.py new file mode 100644 index 00000000..67827f42 --- /dev/null +++ b/doc/conf.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'squeekboard' +copyright = 'Squeekboard contributors' +author = 'Dorota Czaplejewicz' + +# The short X.Y version +version = '' +# The full version, including alpha/beta/rc tags +release = '' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'recommonmark' +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.md' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'squeekboarddoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'squeekboard.tex', 'squeekboard Documentation', + 'Dorota Czaplejewicz', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'squeekboard', 'squeekboard Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'squeekboard', 'squeekboard Documentation', + author, 'squeekboard', 'One line description of project.', + 'Miscellaneous'), +] + +from recommonmark.transform import AutoStructify + +def setup(app): + app.add_config_value('recommonmark_config', { + 'enable_auto_toc_tree': True, + 'auto_toc_tree_section': 'Contents', + }, True) + app.add_transform(AutoStructify) diff --git a/doc/index.md b/doc/index.md new file mode 100644 index 00000000..1d4efa62 --- /dev/null +++ b/doc/index.md @@ -0,0 +1,21 @@ +Welcome to squeekboard's documentation! +======================================= + +Contents +-------- + +* [Tutorial](tutorial.md) + +Introduction +------------ + +Squeekboard is the on-screen keyobard for the Librem 5 phone. For more information, look at the [README](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md). + +Layouts +------- + +Squeekboard allows user-provided keyboard layouts. They can be created without recompiling the keyboard code. The tutorial](/tutorial.md) explains the process in detail. + +Layouts are created using a text-based format, based on YAML. + +TODO: Provide a description of the format. diff --git a/doc/tutorial.md b/doc/tutorial.md new file mode 100644 index 00000000..e493ab00 --- /dev/null +++ b/doc/tutorial.md @@ -0,0 +1,53 @@ +Kareema's guide to creating layouts +=================================== + +It’s long overdue to write a comprehensive guide how to add a keyboard layout from start. But unfortunately, I don’t have much time left ATM. A lot of information can be found in [this ](https://forums.puri.sm/t/using-non-latin-language-on-librem-5/7103/5) thread. + +So at least I will try to start writing a short how-to here and edit this post as I find the time. Hope this helps a bit - comments and corrections welcome. + +**Get one of the existing keyboard layouts** + +* You can get one of the keyboards from the squeekboard git repository : [https://source.puri.sm/Librem5/squeekboard ](https://source.puri.sm/Librem5/squeekboard) +* The keyboard layouts are located in the subdirectory `data/keyboard/` in the `.yaml` files +* Take a look and try to understand them :slight_smile: + +**Fork your own copy of squeekboard** + +* Best way would be to start with a fork of the squeekboard repository: Create a user account at https://source.puri.sm/, go the the squeekboard git repository, press “Fork” in the web interface. You can find further instructions [here](https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html#creating-a-fork). +* Clone your fork locally with `git clone` and use the uri of your forked repo there + +**Workflow to edit your keyboard and get it merged** + +* A generic guide how the workflow to contribute works, can be found at https://developer.puri.sm/Librem5/Contact/Contributing.html +* Create a branch: Name it “keyboard-layout-mylanguage” or whatever +* Checkout your branch, edit your keyboard layout and commit your changes +* Push the local changes (to the branch of your fork of squeekboard) +* Create a merge request for the branch to get your changes merged to the official squeekboard git repository + +**Compile squeekboard** + +* Follow the instructions found in “Building” section of the squeekboard’s README: Running squeekboard: [https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#building ](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#building) + +**Running squeekboard** + +* Follow these instructions to run squeekboard: [https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#running ](https://source.puri.sm/Librem5/squeekboard/blob/master/README.md#running) +* Additionally take a look at https://source.puri.sm/Librem5/squeekboard/blob/master/HACKING.md#testing +* You can either test it locally on your Linux system or use the [QEMU Librem 5 image ](https://developer.puri.sm/Librem5/Development_Environment/Boards/emulators.html) +* To test squeekboard locally, you need phoc. Either compile that from the sources as well or use the CI repository ci.puri.sm for Debian based systems: +`deb [arch=amd64] http://ci.puri.sm/ scratch librem5` +Squeekboard can be installed from there as a Debian package, too (that’s what I often do). But beware - there be dragons! You could bork your system with these packages and you should probably disable this repository again after installing what you need - these packages are not meant for production systems (or so I heard :wink: ) + +**Creating the keyboard layout** + +* To be written: For the time being, take a look at [Using non-latin language on Librem 5 ](https://forums.puri.sm/t/using-non-latin-language-on-librem-5/7103/5) +* The correct name of the .yaml file can be found with the command `gsettings get org.gnome.desktop.input-sources sources` +The output should be something like this: `[('xkb', 'us'), ('xkb', 'de')]` +So f.ex. “de.yaml” would be the correct name for the German keyboard layout. +* The translations for the keyboard layout names in the different languages can be found at `data/langs/` +* Don’t forget to add your newly created layout or translation to `src/resources.rs` and the layout to `tests/meson.build` (that’s for me, because I always forget it) + +**Testing the layout** + +* Copy your yaml file to `~/.local/share/squeekboard/keyboards/` for testing purposes. From there it should get picked up by squeekboard +* To test the translations in `data/langs/` , you have to compile squeekboard +