mirror of https://gitlab.com/pamhyr/pamhyr2
300 lines
9.5 KiB
Org Mode
300 lines
9.5 KiB
Org Mode
# documentation.org -- Pamhyr developers documentation
|
|
# Copyright (C) 2023 INRAE
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#+STARTUP: indent
|
|
|
|
#+INCLUDE: ../tools/macro.org
|
|
#+INCLUDE: ../tools/latex.org
|
|
|
|
#+TITLE: Developers documentation
|
|
#+SUBTITLE: Version: {{{version}}}
|
|
#+AUTHOR: {{{INRAE}}}
|
|
|
|
#+OPTIONS: toc:t
|
|
#+LANGUAGE: UKenglish
|
|
|
|
#+BEGIN_abstract
|
|
This document is for the use of developers. It describes the project
|
|
architecture, the tools available to assist development and
|
|
debugging. It also describes the procedures for creating packages and
|
|
the configurations required to set up the gitlab runners. Finally,
|
|
this document explains how documentation is written and modified, and
|
|
how to contribute to the project by modifying, improving or adding
|
|
documentation, translations or code.
|
|
#+END_abstract
|
|
|
|
* Introduction
|
|
|
|
Pamhyr2 is free and open source software (FOSS) graphical user
|
|
interface (GUI) for 1D hydro-sedimentary modelling of rivers developed
|
|
in Python (with version 3.8). It use PyQt at version 5 and matplotlib
|
|
in version 3.4.1 or later for the user insterface (see
|
|
{{{file(/requirements.txt)}}} for details). The architecture of
|
|
project code follow the Qt Model/View architecture [fn:qt-arch] (see
|
|
details in section [[Architecture]]). Pamhyr2 packages can be build
|
|
manually (see section [[Building packages]]), but there are automatically
|
|
build with the gitlab-ci (see the section [[Setup the CI
|
|
environment]]). Documentation files are written with org-mode[fn:org],
|
|
let see section [[Documentation files]]. Finally, to see the contribution
|
|
rules, see the section [[How to contribute?]].
|
|
|
|
[fn:qt-arch] Qt Model/View documentation:
|
|
https://doc.qt.io/qt-5/model-view-programming.html (last access
|
|
2023-09-15)
|
|
[fn:org] The org-mode website: https://orgmode.org/ (last access
|
|
2023-09-15)
|
|
|
|
* TODO Architecture
|
|
** TODO Model
|
|
** TODO Solver
|
|
** TODO View
|
|
** TODO Unit tests
|
|
** TODO The debug mode
|
|
* TODO Build the project
|
|
|
|
The project uses gitlab-ci runners to build packages, but it is possible
|
|
to build packages manually.
|
|
|
|
** Building packages
|
|
|
|
If you need an hand made package, you can script available in
|
|
{{{file(packages)}}} directory.
|
|
|
|
*** GNU/Linux
|
|
|
|
On GNU/Linux building GNU/Linux packages is easy, you just need python
|
|
in version 3.8 must be installed with venv and pyinstaller packages
|
|
(see Listing [[linux-env-deb]] for Debian and derived system). Finally,
|
|
run the {{{file(linux.sh)}}} script (see Listing [[linux-pkg]]).
|
|
|
|
#+NAME: linux-env-deb
|
|
#+CAPTION: Install environment on GNU/Linux
|
|
#+begin_src shell
|
|
sudo apt install python3.8
|
|
python3 -m pip install venv
|
|
python3 -m pip install pyinstaller
|
|
#+end_src
|
|
|
|
#+NAME: linux-pkg
|
|
#+CAPTION: Build GNU/Linux package
|
|
#+begin_src shell
|
|
cd packages
|
|
./linux.sh
|
|
#+end_src
|
|
|
|
*** Windows
|
|
|
|
To make the Windows packages you have two choice: If you use Windows
|
|
you can use the script {{{file(packages/windows.bat)}}}, other else
|
|
you can use the script {{{file(packages/wine.sh)}}}. Each script need
|
|
a specific software environment.
|
|
|
|
On windows, you needs python on version 3.8, pyinstaller and
|
|
NSIS[fn:nsis] installed. On GNU/Linux you need wget, wine and
|
|
winetricks installed.
|
|
|
|
[fn:nsis] The NSIS web site: https://sourceforge.net/projects/nsis/
|
|
|
|
** TODO Setup the CI environment
|
|
* Documentation files
|
|
|
|
This document and the user documentation are org files. This text file
|
|
format is formatted so that it can be exported in different formats:
|
|
PDF (with latex), ODT, HTML, etc. It was originally designed for the
|
|
GNUEmacs[fn:emacs] text editor, but can be edited with any text editor. Here we
|
|
take a look at the different features used in these documents.
|
|
|
|
[fn:org] The org-mode website: https://orgmode.org/ (last access
|
|
2023-09-15)
|
|
[fn:emacs] The GNUEmacs project website: https://gnu.org/s/emacs/
|
|
(last access 2023-09-15)
|
|
|
|
** Org-mode
|
|
*** Document structure
|
|
|
|
Org uses the =*= character to define a new document section. To add a
|
|
sub-section, you can add an additional =*= to the current section[fn::
|
|
See document structure documentation:
|
|
https://orgmode.org/org.html#Headlines (last access 2023-09-15)].
|
|
|
|
#+BEGIN_EXAMPLE
|
|
* Top level headline
|
|
** Second level
|
|
*** Third level
|
|
some text
|
|
*** Third level
|
|
more text
|
|
* Another top level headline
|
|
#+END_EXAMPLE
|
|
|
|
*** Format
|
|
|
|
Org-mode is a markup file, using markup in the text to modify the
|
|
appearance of a portion of text[fn:: See markup documentation:
|
|
https://orgmode.org/org.html#Emphasis-and-Monospace (last access
|
|
2023-09-15)].
|
|
|
|
| Markup | Results |
|
|
|--------------------+------------------|
|
|
| =*Bolt*= | *Bolt* |
|
|
| =/Italic/= | /Italic/ |
|
|
| =_underline_= | _underline_ |
|
|
| ==verbatim== | =verbatim= |
|
|
| =~code~= | ~code~ |
|
|
| =+strike-through+= | +strike-through+ |
|
|
|
|
*** Source code blocks
|
|
|
|
You can add some code blocks[fn:: See org-mode documentation for
|
|
source code: https://orgmode.org/org.html#Working-with-Source-Code
|
|
(last access 2023-09-15)] in the document.
|
|
|
|
Here is an example for python source code:
|
|
#+BEGIN_EXAMPLE
|
|
#+CAPTION: Get os type name in Python code
|
|
#+begin_src python
|
|
import os
|
|
|
|
print(f"Document build on system: {os.name}")
|
|
#+end_src
|
|
#+END_EXAMPLE
|
|
|
|
If you use GNUEmacs, it is also possible to run the code inside a
|
|
block and export (or not) the reuslts in the document.
|
|
|
|
#+OPTIONS: float:nil
|
|
#+CAPTION: Get os type name in Python code
|
|
#+begin_src python :python python3 :results output :exports both :noweb yes
|
|
import os
|
|
|
|
print(f"Document build on system: {os.name}")
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
: Document build on system: posix
|
|
|
|
*** Latex
|
|
|
|
If we export the file to PDF, org-mode use {{{latex}}}. So we can add
|
|
some piece of {{{latex}}} into the document[fn:: See {{{latex}}} part
|
|
in documentation: https://orgmode.org/org.html#Embedded-LaTeX (last
|
|
access 2023-09-15)]. For exemple, we can add math formula like
|
|
=$E=mc^2$= ($E=mc^2$) or =\[E=mc^2\]=:
|
|
|
|
\[E=mc^2\]
|
|
|
|
But we can also add every type of {{{latex}}}:
|
|
|
|
#+BEGIN_EXAMPLE
|
|
# Add latex in line
|
|
#+LATEX: <my line of latex>
|
|
|
|
# Add multiple line of LaTeX
|
|
#+BEGIN_EXPORT latex
|
|
<my latex here>
|
|
#+END_EXPORT
|
|
#+END_EXAMPLE
|
|
|
|
It is also possible to add specific {{{latex}}} file header with
|
|
=#+LATEX_HEADER=. In this document we use the file
|
|
{{{file(doc/tools/latex.org)}}} for all {{{latex}}} headers.
|
|
|
|
*** Macro
|
|
|
|
In this document, we use a few macros[fn:: See marcos documentation
|
|
https://orgmode.org/org.html#Macro-Replacement (last access
|
|
2023-09-15)] to simplify writing. They allow you to define sequences
|
|
of text to be replaced, so that the macro name is replaced by its
|
|
value. They are defined in the {{{file(doc/tools/macro.org)}}}
|
|
file. Once defined, they can be used in the document as follows:
|
|
={{{<macro-name>}}}=. You can also have macros with arguments, in this
|
|
case: ={{{<macro-name>(arg1,...)}}}=. Les macros peuvent aussi
|
|
utiliser du code emacs-lisp.
|
|
|
|
#+BEGIN_EXAMPLE
|
|
# Exemple of macro définition
|
|
|
|
#+MACRO: toto tata
|
|
#+MACRO: add \(($1 + $2)\)
|
|
#+MACRO: emacs-version (eval (nth 2 (split-string (emacs-version))))
|
|
#+END_EXAMPLE
|
|
|
|
#+MACRO: toto tata
|
|
#+MACRO: add \(($1 + $2)\)
|
|
#+MACRO: emacs-version (eval (nth 2 (split-string (emacs-version))))
|
|
|
|
Macro apply:
|
|
- Marco ={{{toto}}}=: {{{toto}}}
|
|
- Marco ={{{add(x,y)}}}=: {{{add(x,y)}}}
|
|
- Marco ={{{emacs-version}}}=: {{{emacs-version}}}
|
|
|
|
*** Footnotes
|
|
|
|
Footnote in org-mode is define with marker =[fn:...]=[fn:: Create
|
|
footnotes in org-mode documentation
|
|
https://orgmode.org/org.html#Creating-Footnotes (last access
|
|
2023-09-15)]:
|
|
#+BEGIN_EXAMPLE
|
|
The Org website[fn:1] now looks a lot better than it used to.
|
|
...
|
|
[fn:1] The link is: https://orgmode.org
|
|
#+END_EXAMPLE
|
|
or:
|
|
#+BEGIN_EXAMPLE
|
|
The Org website[fn:: The link is: https://orgmode.org] now looks
|
|
a lot better than it used to.
|
|
...
|
|
#+END_EXAMPLE
|
|
|
|
*** References
|
|
|
|
The references use the {{{latex}}} bibtex tools. The bib file is in
|
|
{{{file(/doc/tools/ref.bib)}}} and use for developers and user
|
|
documentation. In document, use ={{{cite(<name>)}}}= to cite a paper.
|
|
|
|
** Export
|
|
|
|
To export the files, a {{{build.sh}}} script is available in the org
|
|
files directories. On GNU/Linux system you can build the documentation
|
|
PDF file with the command =./build.sh=. Texlive package must be
|
|
installed, you can install only needed packages or all texlive
|
|
packages, for example on Debian (and some derived system) use command
|
|
Listing [[texlive-install]].
|
|
|
|
#+NAME: texlive-install
|
|
#+CAPTION: Installation command for texlive full on Debian system
|
|
#+begin_src shell
|
|
sudo apt install texlive-full
|
|
#+end_src
|
|
|
|
Some org-mode configuration used in documentations files are define
|
|
in =/doc/tools/=:
|
|
- {{{file(PamhyrDoc.cls)}}}: The {{{latex}}} document class
|
|
- {{{file(macro.org)}}}: Available macro
|
|
- {{{file(latex.org)}}}: {{{latex}}} configutation for documentations
|
|
files
|
|
- {{{file(setup.el)}}}: GNUEmacs configuration to build documentations
|
|
- {{{file(ref.bib)}}}: Bibtex files for documentations files
|
|
|
|
* TODO How to contribute?
|
|
** TODO Contribution rules
|
|
** TODO Translate
|
|
** TODO Code contribution
|
|
|
|
{{{biblio}}}
|