From 917e457fe5c125059af0b19091eacf0291ca0c72 Mon Sep 17 00:00:00 2001 From: Tomas Pecka <peckato1@fit.cvut.cz> Date: Sun, 30 Aug 2015 15:19:26 +0200 Subject: [PATCH] README.md --- LICENSE | 1 + README.md | 75 ++++++++++++++++++++++++++++++++++++++------------ docs/logo.png | Bin 0 -> 13350 bytes 3 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 LICENSE create mode 100644 docs/logo.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..1333ed77b7 --- /dev/null +++ b/LICENSE @@ -0,0 +1 @@ +TODO diff --git a/README.md b/README.md index 1a624b4e14..829f3c8447 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ - Automata (Algorithms) Library Toolkit ===================================== +![automaton][logo] What is it? ----------- - The automata (algorithm) library toolkit (ALT) is a mathematical implementation of various types of automata, grammars, and other common structires along with mathematical implementation of algorithms over these structures. @@ -14,49 +13,89 @@ University in Prague. It supposed to be a reference implementation of formal algorithms as-are in papers, hence allowing practical reuse of existing algorithms in form of by pipe comunicating tools. + The Latest Version ------------------ +Details of the latest version can be found visitng our [gitlab project page][1]. + + +Requirements +------------ +Project is pure C++ builded by makefile. Some tests are handled by +shell scripts. + + * `make >= 3.9` + * `g++ >= 4.8` or `clang++ >= 3.5` + * `binutils-dev` + * `libiberty-dev` + * `libcppunit-dev` + * `libtclap-dev` + * `doxygen` (optional for documentation generation) + * `graphviz` (optional for documentation generation and automata +visualizations) + + +Installation +------------ + 1. Clone the repo: `git clone` or download sources of [stable release][3] +and extract it. + 2. Change directory and compile: `cd automata-library` and `make`. + 3. Run :) + +* *Optional step:* Generate documentation by executing `make doc`. -Details of the latest version can be found on the project page on our [gitlab][1]. Documentation ------------- +Developer documentation is available for generation using makefile (requires +`doxygen`) and will be attached in release packages. -The documentation will be available in each release as HTML format for -data and algo libraries in doc/ directory. -Installation +Contributing ------------ +Feel free to [fork][4] this project and send your merge requests there. + + +Developers +---------- +The formatting of the code in ALT is defined by *uncrustify* configuration file +and *clang-format* configuration file in cooperation (both had some +side-effects). Every developer contributing to the project shall format the +code before making the commit. Pre-commit hook and both configuration +files are present in the repository. -Project is pure c++ builded by makefile. Minimal version of make is 3.9 -and of g++ is 4.8. Dependencies include binutils-dev libiberty-dev libcppunit-dev libtclap-dev. +Please install `uncrustify` and `clang-format`. Then move/copy `.pre-commit` +file to `.git/hooks/pre-commit`. + +Vim configuration for this project is available in `.lvimrc` file and +[localvimrc][2] Vim extension is used to load this file. -Vim configuration is available in .lvimrc file and [localvimrc][2] is used to load this file. Licensing --------- +Please see LICENSE file. -TODO Contacts -------- - - o If you want to be informed about new code releases, bug fixes, + * If you want to be informed about new code releases, bug fixes, security fixes, general news and information about the ALT subscribe to the ?? mailing list as described under ?? - - o If you want freely available support for running ALT please see the + * If you want freely available support for running ALT please see the resources at ?? - - o If you have a concrete bug report for ALT please see the instructions + * If you have a concrete bug report for ALT please see the instructions for bug reporting at ?? - - o If you want to participate in actively developing ALT please + * If you want to participate in actively developing ALT please subscribe to the ?? mailing list as described at ?? Authors ------- + * Author 1 + * Author 2 [1]: https://gitlab.fit.cvut.cz/travnja3/automata-library. [2]: http://www.vim.org/scripts/script.php?script_id=441 +[3]: https://gitlab.fit.cvut.cz/travnja3/automata-library/tags +[4]: https://gitlab.fit.cvut.cz/travnja3/automata-library/fork/new +[logo]: docs/logo.png diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..99eb4e4e58dc4745ae45467bb1f97451461a381b GIT binary patch literal 13350 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 Kh39e?@BBa6WLMJw literal 0 HcmV?d00001 -- GitLab