From 5806a50b3258b02e18c8d04312ef70257ac9e067 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Wed, 27 Mar 2024 12:09:49 +0100 Subject: [PATCH 01/12] Create jekyll.yml --- .github/workflows/jekyll.yml | 64 ++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/jekyll.yml diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml new file mode 100644 index 0000000..61cb2f0 --- /dev/null +++ b/.github/workflows/jekyll.yml @@ -0,0 +1,64 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["master"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Ruby + uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0 + with: + ruby-version: '3.1' # Not needed with a .ruby-version file + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + cache-version: 0 # Increment this number if you need to re-download cached gems + - name: Setup Pages + id: pages + uses: actions/configure-pages@v4 + - name: Build with Jekyll + # Outputs to the './_site' directory by default + run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" + env: + JEKYLL_ENV: production + - name: Upload artifact + # Automatically uploads an artifact from the './_site' directory by default + uses: actions/upload-pages-artifact@v3 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From ca2b9c1d76c23f97d5b20a33d2f361079bcad963 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Wed, 27 Mar 2024 13:24:52 +0100 Subject: [PATCH 02/12] Copy content of README.md into index.md --- index.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/index.md b/index.md index d6e39c3..9c91b69 100644 --- a/index.md +++ b/index.md @@ -3,4 +3,76 @@ title: Home layout: home --- -Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rhetorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie [...] +![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) + +# Metafacture Documentation + +Metafacture is a toolkit for processing semi-structured data with a focus on library metadata. It provides a versatile set of tools for reading, writing and transforming data. Metafacture can be used as a stand-alone application via CLI or as a Java library in other applications. There is also a playground where you can test workflows. + +[Have a look here for a quick intro into metafacture.](./MF-in-5-min.md) + +This is the central place for the documentation about Metafacture. + +Metafacture comprises three main parts: **Framework**, **Flux** and one of the **Transformation-Modules Fix and Morph**. It can be extended with modules. + +> [!NOTE] +> With regard to the Transformation-Modules this documentation focusses on Fix instead of MORPH. If you want to find out more about MORPH. Have a look at [the old documentation](https://github.com/metafacture/metafacture-core/wiki/Metamorph-User-Guide) and the german cookbook by [Swissbib](https://swissbib.gitlab.io/metamorph-doku/). + + +Our goal with this repo is to collaboratively create comprehensive documentation on Metafacture in the [issue tracker](https://github.com/culturegraph/metafacture-documentation/issues?q=). Feel free to open issues not only for bugs or enhancements, but also questions about Metafacture usage, or to share your experiences. We hope that over time, in that way we can create useful tutorials, how-tos, and collect good practices for using Metafacture. + +__________________ + +Deciding which parts are relevant to you depends on the way you are using Metafacture: + +## Using Metafacture via playground or CLI + +> [!NOTE] +> No Java-Code is necessary!!! + +While working with the playground or the command line you only need [Flux](#flux) and the transformation module [Fix](#fix). +Have a look here for [Getting started](/Getting-Started.md). + +## Framework for Java integration/development + +If you plan to use Metafacture as a Java library or if you wish to add commands to Flux. You should get familar with the [Framework](#framework). + +__________________ + +## FLUX + +Flux is a scripting language to easily build and run processing pipelines. No Java programming is necessary - it's used as a command line. To use Flux you may download the binary distribution of Metafacture. + +For more information on how to use Flux, see the [Flux User Guide](/Flux-User-Guide.md). + +See [here a list for all available FLUX-Commands](/flux-commands.md). + +__________________ + +## FIX + +Metafix is a domain specific language for metadata transformation based on Catmandu FIX. The FIX object performing the transformation is used as part of a processing pipeline. + +If you are using **Metafacture with CLI or Playground** and therefore the Flux scripting language to build and run pipelines, use the `fix` command in your FLUX-Pipeline. + +If you are using **Metafacture as a Java library**, just create a Metafix object and add it to your pipeline (see also the [Framework User Guide](#framework)). + +The transformation itself is declared in a fix-object which can be a file. For more information on how to declare transformations see [Metafix User Guide](/Fix-User-Guide.md). + +See [here a list for all available FIX functions and a cookbook for using fix](/Fix-function-and-Cookbook.md). + +> [!NOTE] +> PS: There is also the transformation modul MORPH. Have a look at[ the old documentation](https://github.com/metafacture/metafacture-core/wiki/Metamorph-User-Guide) and the german cookbook by [Swissbib](https://swissbib.gitlab.io/metamorph-doku/). + +__________________ + +## Framework + +> [!NOTE] +>Relevant for developers + +The framework includes the interfaces and abstract classes which form the foundation of the data processing pipelines. This part of Metafacture is only relevant for you if you plan to use Metafacture as a Java library or if you wish to add pipe elements to Flux. + +For more information see the [Framework User Guide](/Framework-User-Guide.md). + + From 865d8ff75f3c8957b9273b29c4d1e7d6c76a9cc9 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Thu, 28 Mar 2024 10:41:45 +0100 Subject: [PATCH 03/12] Restructure files/pages, add YAML headers to generate the desired navigation --- ...ching a transformation with metafacture.md | 6 +++ .../Documentation-Maintainer-Guide.md | 7 +++ Getting-Started.md => docs/Getting-Started.md | 6 +++ LICENSE => docs/LICENSE | 0 docs/LICENSE.md | 27 ++++++++++ MF-in-5-min.md => docs/MF-in-5-min.md | 6 +++ .../fix/Fix-User-Guide.md | 7 +++ .../fix/Fix-function-and-Cookbook.md | 7 +++ docs/fix/fix.md | 19 +++++++ .../flux/Flux-User-Guide.md | 7 +++ .../flux/flux-commands.md | 7 +++ docs/flux/flux.md | 14 ++++++ .../java-integration/Framework-User-Guide.md | 7 +++ docs/java-integration/java-integration.md | 15 ++++++ index.md | 49 ++----------------- 15 files changed, 139 insertions(+), 45 deletions(-) rename Approaching a transformation with metafacture.md => docs/Approaching a transformation with metafacture.md (92%) rename Documentation-Maintainer-Guide.md => docs/Documentation-Maintainer-Guide.md (96%) rename Getting-Started.md => docs/Getting-Started.md (98%) rename LICENSE => docs/LICENSE (100%) create mode 100644 docs/LICENSE.md rename MF-in-5-min.md => docs/MF-in-5-min.md (99%) rename Fix-User-Guide.md => docs/fix/Fix-User-Guide.md (99%) rename Fix-function-and-Cookbook.md => docs/fix/Fix-function-and-Cookbook.md (99%) create mode 100644 docs/fix/fix.md rename Flux-User-Guide.md => docs/flux/Flux-User-Guide.md (99%) rename flux-commands.md => docs/flux/flux-commands.md (99%) create mode 100644 docs/flux/flux.md rename Framework-User-Guide.md => docs/java-integration/Framework-User-Guide.md (97%) create mode 100644 docs/java-integration/java-integration.md diff --git a/Approaching a transformation with metafacture.md b/docs/Approaching a transformation with metafacture.md similarity index 92% rename from Approaching a transformation with metafacture.md rename to docs/Approaching a transformation with metafacture.md index cbc326a..524ab4f 100644 --- a/Approaching a transformation with metafacture.md +++ b/docs/Approaching a transformation with metafacture.md @@ -1,3 +1,9 @@ +--- +layout: default +title: Approaching a transformation with metafacture +nav_order: 4 +--- + Every approach to transform metadata with metafacture is quite similiar: - You need to know the type and source of the input and the type and destination of the output: diff --git a/Documentation-Maintainer-Guide.md b/docs/Documentation-Maintainer-Guide.md similarity index 96% rename from Documentation-Maintainer-Guide.md rename to docs/Documentation-Maintainer-Guide.md index 735cd63..faddeca 100644 --- a/Documentation-Maintainer-Guide.md +++ b/docs/Documentation-Maintainer-Guide.md @@ -1,3 +1,10 @@ +--- +layout: default +title: Maintainer Guide +nav_order: 8 +--- + +# Maintainer Guide ## how to change flux-commands.md diff --git a/Getting-Started.md b/docs/Getting-Started.md similarity index 98% rename from Getting-Started.md rename to docs/Getting-Started.md index e473475..27ff29e 100644 --- a/Getting-Started.md +++ b/docs/Getting-Started.md @@ -1,3 +1,9 @@ +--- +layout: default +title: Getting Started +nav_order: 2 +--- + ![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) diff --git a/LICENSE b/docs/LICENSE similarity index 100% rename from LICENSE rename to docs/LICENSE diff --git a/docs/LICENSE.md b/docs/LICENSE.md new file mode 100644 index 0000000..3d56621 --- /dev/null +++ b/docs/LICENSE.md @@ -0,0 +1,27 @@ +--- +layout: default +title: LICENSE +nav_order: 9 +--- + +MIT License + +Copyright (c) 2022 just-the-docs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/MF-in-5-min.md b/docs/MF-in-5-min.md similarity index 99% rename from MF-in-5-min.md rename to docs/MF-in-5-min.md index b4a2b5d..76e581e 100644 --- a/MF-in-5-min.md +++ b/docs/MF-in-5-min.md @@ -1,3 +1,9 @@ +--- +layout: default +title: 5 min Intro into MF +nav_order: 3 +--- + # Introduction - A quick 5 minute introduction to Metafacture ## HELLO WORLD diff --git a/Fix-User-Guide.md b/docs/fix/Fix-User-Guide.md similarity index 99% rename from Fix-User-Guide.md rename to docs/fix/Fix-User-Guide.md index 415d52c..503f7a6 100644 --- a/Fix-User-Guide.md +++ b/docs/fix/Fix-User-Guide.md @@ -1,3 +1,10 @@ +--- +layout: default +title: Fix User Guide +parent: Fix +nav_order: 1 +--- + ![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) # Fix User Guide diff --git a/Fix-function-and-Cookbook.md b/docs/fix/Fix-function-and-Cookbook.md similarity index 99% rename from Fix-function-and-Cookbook.md rename to docs/fix/Fix-function-and-Cookbook.md index 8c882e5..02745ae 100644 --- a/Fix-function-and-Cookbook.md +++ b/docs/fix/Fix-function-and-Cookbook.md @@ -1,3 +1,10 @@ +--- +layout: default +title: Fix Functions and Cookbook +parent: Fix +nav_order: 2 +--- + This page is a replication of the passage of the Fix Readme.md. ## Functions and cookbook diff --git a/docs/fix/fix.md b/docs/fix/fix.md new file mode 100644 index 0000000..de6fbf5 --- /dev/null +++ b/docs/fix/fix.md @@ -0,0 +1,19 @@ +--- +layout: default +title: Fix +nav_order: 6 +has_children: true +--- + +Metafix is a domain specific language for metadata transformation based on Catmandu FIX. The FIX object performing the transformation is used as part of a processing pipeline. + +If you are using **Metafacture with CLI or Playground** and therefore the Flux scripting language to build and run pipelines, use the `fix` command in your FLUX-Pipeline. + +If you are using **Metafacture as a Java library**, just create a Metafix object and add it to your pipeline (see also the [Framework User Guide](#framework)). + +The transformation itself is declared in a fix-object which can be a file. For more information on how to declare transformations see [Metafix User Guide](/Fix-User-Guide.md). + +See [here a list for all available FIX functions and a cookbook for using fix](/Fix-function-and-Cookbook.md). + +> [!NOTE] +> PS: There is also the transformation modul MORPH. Have a look at[ the old documentation](https://github.com/metafacture/metafacture-core/wiki/Metamorph-User-Guide) and the german cookbook by [Swissbib](https://swissbib.gitlab.io/metamorph-doku/). \ No newline at end of file diff --git a/Flux-User-Guide.md b/docs/flux/Flux-User-Guide.md similarity index 99% rename from Flux-User-Guide.md rename to docs/flux/Flux-User-Guide.md index eb13f3f..c1f6046 100644 --- a/Flux-User-Guide.md +++ b/docs/flux/Flux-User-Guide.md @@ -1,3 +1,10 @@ +--- +layout: default +title: Flux User Guide +parent: Flux +nav_order: 1 +--- + ![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) # Flux User Guide diff --git a/flux-commands.md b/docs/flux/flux-commands.md similarity index 99% rename from flux-commands.md rename to docs/flux/flux-commands.md index 1e52834..66f26e5 100644 --- a/flux-commands.md +++ b/docs/flux/flux-commands.md @@ -1,3 +1,10 @@ +--- +layout: default +title: Flux Commands +parent: Flux +nav_order: 2 +--- + Available flux commands ======================= diff --git a/docs/flux/flux.md b/docs/flux/flux.md new file mode 100644 index 0000000..2ae2cf0 --- /dev/null +++ b/docs/flux/flux.md @@ -0,0 +1,14 @@ +--- +layout: default +title: Flux +nav_order: 5 +has_children: true +--- + +# FLUX + +Flux is a scripting language to easily build and run processing pipelines. No Java programming is necessary - it's used as a command line. To use Flux you may download the binary distribution of Metafacture. + +For more information on how to use Flux, see the [Flux User Guide](/Flux-User-Guide.md). + +See [here a list for all available FLUX-Commands](/flux-commands.md). \ No newline at end of file diff --git a/Framework-User-Guide.md b/docs/java-integration/Framework-User-Guide.md similarity index 97% rename from Framework-User-Guide.md rename to docs/java-integration/Framework-User-Guide.md index 7c06e5a..0a03a75 100644 --- a/Framework-User-Guide.md +++ b/docs/java-integration/Framework-User-Guide.md @@ -1,3 +1,10 @@ +--- +layout: default +title: Framework User Guide +parent: Java Integration +nav_order: 1 +--- + ![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) # Framework User Guide diff --git a/docs/java-integration/java-integration.md b/docs/java-integration/java-integration.md new file mode 100644 index 0000000..517432e --- /dev/null +++ b/docs/java-integration/java-integration.md @@ -0,0 +1,15 @@ +--- +layout: default +title: Java Integration +nav_order: 7 +has_children: true +--- + +## Framework for Java integration/development + +> [!NOTE] +>Relevant for developers + +The framework includes the interfaces and abstract classes which form the foundation of the data processing pipelines. This part of Metafacture is only relevant for you if you plan to use Metafacture as a Java library or if you wish to add pipe elements to Flux. + +For more information see the [Framework User Guide](/Framework-User-Guide.md). \ No newline at end of file diff --git a/index.md b/index.md index 9c91b69..fd1fa71 100644 --- a/index.md +++ b/index.md @@ -1,6 +1,9 @@ --- +layout: default title: Home -layout: home +nav_order: 1 +description: "This is the central place for the documentation about Metafacture." +permalink: / --- ![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) @@ -32,47 +35,3 @@ Deciding which parts are relevant to you depends on the way you are using Metafa While working with the playground or the command line you only need [Flux](#flux) and the transformation module [Fix](#fix). Have a look here for [Getting started](/Getting-Started.md). - -## Framework for Java integration/development - -If you plan to use Metafacture as a Java library or if you wish to add commands to Flux. You should get familar with the [Framework](#framework). - -__________________ - -## FLUX - -Flux is a scripting language to easily build and run processing pipelines. No Java programming is necessary - it's used as a command line. To use Flux you may download the binary distribution of Metafacture. - -For more information on how to use Flux, see the [Flux User Guide](/Flux-User-Guide.md). - -See [here a list for all available FLUX-Commands](/flux-commands.md). - -__________________ - -## FIX - -Metafix is a domain specific language for metadata transformation based on Catmandu FIX. The FIX object performing the transformation is used as part of a processing pipeline. - -If you are using **Metafacture with CLI or Playground** and therefore the Flux scripting language to build and run pipelines, use the `fix` command in your FLUX-Pipeline. - -If you are using **Metafacture as a Java library**, just create a Metafix object and add it to your pipeline (see also the [Framework User Guide](#framework)). - -The transformation itself is declared in a fix-object which can be a file. For more information on how to declare transformations see [Metafix User Guide](/Fix-User-Guide.md). - -See [here a list for all available FIX functions and a cookbook for using fix](/Fix-function-and-Cookbook.md). - -> [!NOTE] -> PS: There is also the transformation modul MORPH. Have a look at[ the old documentation](https://github.com/metafacture/metafacture-core/wiki/Metamorph-User-Guide) and the german cookbook by [Swissbib](https://swissbib.gitlab.io/metamorph-doku/). - -__________________ - -## Framework - -> [!NOTE] ->Relevant for developers - -The framework includes the interfaces and abstract classes which form the foundation of the data processing pipelines. This part of Metafacture is only relevant for you if you plan to use Metafacture as a Java library or if you wish to add pipe elements to Flux. - -For more information see the [Framework User Guide](/Framework-User-Guide.md). - - From bfa7d8b434ae39c407025b4f9f3bc9b0d65da2a3 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Thu, 28 Mar 2024 12:49:43 +0100 Subject: [PATCH 04/12] Add logo to header/sidebar, remove from pages --- _config.yml | 6 +++++- assets/images/favicon.ico | Bin 0 -> 1581 bytes assets/images/metafacture_small.png | Bin 0 -> 14450 bytes docs/Getting-Started.md | 3 --- docs/fix/Fix-User-Guide.md | 2 -- docs/flux/Flux-User-Guide.md | 2 -- docs/java-integration/Framework-User-Guide.md | 2 -- index.md | 2 -- 8 files changed, 5 insertions(+), 12 deletions(-) create mode 100644 assets/images/favicon.ico create mode 100644 assets/images/metafacture_small.png diff --git a/_config.yml b/_config.yml index d05090c..bbc0dec 100644 --- a/_config.yml +++ b/_config.yml @@ -5,4 +5,8 @@ theme: just-the-docs url: https://Phu2.github.io/metafacture-documentation aux_links: - Template Repository: https://github.com/Phu2/metafacture-documentation + Metafacture Documentation on Github: https://github.com/Phu2/metafacture-documentation + +# Set a path/url to a logo that will be displayed instead of the title +logo: "/assets/images/metafacture_small.png" +favicon_ico: "/assets/images/favicon.ico" diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4fd4115e27400cc991ab78832376a6ab370c9d16 GIT binary patch literal 1581 zcmV+|2GaS7P)=Ni0IdlapqULL)eh9Ws>#T>QHrb6yAesT#W*-Ao6{bw(3LnkpbNmM_9! zY*f&XFKX-{MMlJGY~Yj@aB4dwn|DLHU@@fM=|B`VyI*`CrC1Th5r>Yf8 zOXL2?7+QJ;P}|mvQ?A?4ySw4&>Br#67<=x#JBZlgMi8A7Qf&)lYAa-vK&c6mQZpn< z3uH<&h|Yz#3-s_kek5Lk0DO~=5%f-m?)U=Kvp`$leWdCgn5Qv}eU^VCh)khU2M z=EY;zfqYc9_v7OeCXizWkYh$RPFCi?%lprQWE{fw0yW4hiYAc4W{_eth{D4E3Jh3O z(aZ>3>Ggn=SP-kVGhnXN%&OqZuCXnoW{ef}jo5pn7-YpJymaV% z2v{O-fMowU-e{CamIkpKz6RNG6qkEFIDNbvx%s~^0$!g#w4{TcQB*p+u%p2Vg|!_4 zpBIEVm2DRrxXM~%G`yf`Z|23xBybn2x++!-1n7iU(1p+nVV%5E|8r{ zkR_kvjZYJ?ZA&^9EnW=y;lsSM0s-bFYV2r1cyK!;3L_*b-+-)0fo%IhkOQ?i)%G_V zba(6#)||0`l)FGaS_!grHOTQckfU_@40ugr#fB@laLY5njJ##*R>Z}{AtxsXUavQ- zkBEB+Yea0HDlH%hn;=QeX3IgU+;~-GMn~VEXp{J0zdMBai$28ao%^uI+Kq!vH*vQ0 zFLd=kpqrO9A{u37Wk^d)!`iiL;dZ-2N{E}A&|?T!;R5%q7P7Q##GL5@QQAP{zeC=1 z<4F?|CQm-X2k$R{tHu75l(bQKy*_rXR;!Vfm4)o=Y_ztvh7ovr2`XDbHtzx1sbS81 zPuq-j*#|K>>IpHXFAf?P^tFhOe-pza{1)~4>H1E!V%nztyaIZ?9_!by$Ht8t(b3T{ z1A!7F=B(R>mAcEQY`+JS)rJOr4PTYtADT!%9u_WKh{VLi(6h*vEsS+Kok&PXz^YZN zW+qTpe-%Icn8RNMeb8#u>?I*iOd~%(AIp|4WAf4vR1t?TeqdmLfiGXa94?n@dIIGt zC4Rejkq42>(QGt^DikEu>2y#kl}JubMrUVdD5033KtQ;co}SJWtE;OE<%>$7u&9WA zp|rKNK`xg+B|ZIY%FD|`b#*l|Gc!Zgi^0SM1fbm9TqGqWp{lBCdIG_zBp#0k6BGPr zlQ{X<82_fr$jE@jVhJUS1dp6YJwxYCPVz6eXyX|HK~8ZJAq3VYlL@J*sbSJTD`7OS z>Bf@CKMLY=fmljP3TkU>!${4fz_UJXqACzAgb7qahrs*i5=G%H_EPc>DS-bkkWH z2)Grwx>eb9>hPkkRjDPtQIOxg3;7}?=3SvPa{s95EvBIm<;Hw7 z!=deFlUR&Cf2A`75tA%Hi>(F8^BDX<>rE!`{NjZm=6^3DGr`B;9f^_W-xKi6-2w;1 zw!_c86>zUVqgFhB{%t4XcbQnhr>D-GJUk&-zy5dZeL{_Aj8sUeMuk|JIyDDJ^?a@O zFY@HI=i_w{8+AW_|NiRt@81xJwY7D&dgkKw$m2;-xbG(;0@H(!zU(G!6`bry5Jy6IyzC`zTw~!5KzB*1wUP3fJpgW zr!Vt=&$CVQjW%>;do0h<#igrAIS&GnjwO@S)+W-`)m>Rx2{Z_Jz(WaxU0Pb|>+j!5 zjM2*6_5y>DM_h9qMZmf?S8J0jHZ_r=R6CnqP(N<$cM===A`GP1I( zdwZw^1O(5|%f>cp9y;=W2Tzi@t)+#;%E}4}1tqwm;wUTC6)|_}!60v}V{#HNGBVQe zCA6)r%}@(JEG(?DzFzvnhd6m2bFcp<7LyTKUwRmf1hrIjpeh5`yJJ#HEF>&^{P6vK zTTU)67zh-TEc*W5mkt-@`N`U!9{DTA&OqGs9#DCSAz9nleEs$fmYkd%jfA%{E~RIJ zpM;bY8ytTyUk?XK&&a?gBKl;~`#A_J`1shdrlw{_qIBzjF~&5yHfhbp&dxqMIvQA1 zL>D1JRb6vkH~PTM#Du1=uirO3428fWB8pRe&HnilM?pb>H{h{FzQ)_1Bk?&j2VZ%I zi3P>SXIC`Ug^Jk_02sFg%W;iBum=V^t&V@R6p-Ij4>HGZ`ONb z^YZf%UeL%@&eG6R!ed}y9G{>6zFH2zOfi^DbGR4iWUt+oqjxgf| z@*$qMbKQTO^P|7 ztfhtQ;c;c3#Gj8lIXQW~9xKe|v?dYJz2-gwCRS1s!PnRK$1Y-v)JTXlCITfq7Z;bM zrKO0hEUMyZJ#C&8DX-@akt;h9yb z{}(~$Y)Ud?qoa@@5ePp&zmm-Azkl#NJUqPo{CP!1MY5OLWQlP{W!4@+BH7bx{MHu` zEL_}BVjlbBg0%U_g#}$)JiL?Ol`%7UeLCDkLCV6E+8frDOO$Eoh*IHZTk|k0$v=So(9X&gecMd;~Dcz&L6@SqevRa z8MCB_>!0&m#s;J3=GkW^Uj{agFD_c`WQEBDF=g^` zE-o(m{`?U$HGRdR*A%+FZ8^+|j*gBMDRE1ECSX4@Gi}Mq>$ZzqppfA`(EC#+U(DLN zq`&Rgi&k_*21Ade)U09)H#awLGf|c#la4?b z^Zbg^(sey%AILvvJ`@xbHq*W@IzowQsi{hOdND9?P{+*ya88iFl{GXFJv=<3-eos6 z5rG>7!RqMbw2E+}LFFY=C3wM5_dQ`nMV^t92~{KVWfZL5Nkv4^%k6`)VVm6Yatvl> zW-x$R%0EZ_DpVOR{)DMAY(%ypW;ZmvEGsK}$!R&t{Q3^8JrL)+q@td=JSL92uqenc zp=@V;eEGQGf{=3pNLo~MG#VNqJ3LVgbh=zGq`h6Z9rr29aO|r0#H1PxEgwP&$tNx!V#$2lHb;1g>>Lw>qktPa?$U7tn*n$t9pVrol zJ-xkCIal5Bms4?Rd=vO_qTPt5TwKSZf-O%sf}wTK>-Pm_@_z02N8$8 zA0(1fQ&R(x8m>gg$v+L&C5fOnE-F4#$85F58~=OHiOI>%+1V6wwblh)j-9kP-bE^? z5fW1N>)S!oN^*fRQdd?#j9p>05zpePo6M8ZVT3s$bprzjPHiJUKf&L|Z`yMLqUKbl zU2QO587p!r{Vjp!;~wJhNB`7V{fK~#CHwtg?r}6nJek8np+50orpn}{pf@L2EOQ$} zHs{dMnVHZL*3DJnVxCdUBUq%DY^tSW)uAx)3@tcxziwy7vMJJo2mAU&EG>&9Gm5~> z;zYuO!J=bi6n}brSUotf8#C?9`}kFWj_iKb!*`hiPTc-yCZGfi zgh|jKk5rRHJ6HX~t8CnC+-t5TO!Kg??Cfkv8n@lAFjRs{^C6%g&QMA&H1&-y#zleVR%9q~2adu(n~tUmdq?a%Eat;*rpP8y>OSj*`Z4ni*?JIhlc zHQXTrXE0ctINecVW7Ff}S#{sP!~21oOZ47J=Vj6xTKr1%aEAD;vJsx*?VVMx!s+}~ zwy+-(d@QV&72~P#U1vp>V&QT^Qj$0me%I{mEL9mL7Z)C=jUZc!Sy|DWvJ);WEL?AR zvi3%d#8QR0vCR}Vtgxz>NY2tTzR4v3Y`vHM<+(!EmEb?4|1_voBo@qhOX;gH)M)L z*UU-;s>&xVG~6wS`z1xz>#pK_qG>WBIE@teP^^UpC%A{(i@n6#{DJ~1Dym;=u5w5A z6BsV>Qs`bbsJLZifl_AY^&tx+jRyOk<8Yh12&22sgHd;RiZ&kTLU7kJS!tyY;B_P4L!n3 z==mw%=*ScL=3*CCghXEp|H~kS{P_bGG!iQ->oY=uL&W$e z{_4D=O-)}pGJr&`dk3GNZr^lN38ijGFcTJ*4IW8tdM#u7F`1;m&B5oSmwHC^H3Bs* zO#H^wp+iYlJR6oW*De`Khy+#VyhD3To8O)B>`$|~{&2JTjHb46BmntKcCBp{`#Tj8 zYK!7aS6@+SjxHltEOKGj#1!ubWyMuiqu?vn<3fsAx?DDTmB^}bg;kaE?54SeOKil^ zyE}`7k~yr4gfL>5m9@1|Vx-^<3=B%+e`U&^f5I1G;(CkqL ze^?L^1qBQ!I+3Yb?d8#OET79}Ho!#y=@pfha_p+~cGbzisG^wSCFMzWiBXxdO-!R= zxx0ro2TWV-v#7zTq|_-oec?ofE#i7dE$5sZ)zKdV9Abl{7u{_a(*e zV;{>CF2g4a2vY7H78?!Nsa-rw6jC#V#B{%K4Z&T zuu0W+T=gbgQW)&4V(=bk@~9r*nO=QRCi66R=0)lXgm^xzXx$fT!iOtGy@L%EQF28n zaSM?4^yK{%^+`!tD{_sP=h$0}<#IYosr)-dG=xGs=8Fmn6&5Vj8_1^@98hCpgF^nc zMePlg`&6|+NonV7=Sz6FKlFEOq8uvZX;8?Q77rwpTBu`_*TeD<2O0%DMf9b^qD&Ol z=pW*_qi&qO?>GzBKCf6_y*3_>-bt=n=kzZtP{I*yzUh8B(?rz5IM@@#Di9kQ3Lj0% zj}MT<$;pZ5)uPAAm^67#NeN13W+vcPuw85!J%00TI)Hc9)NleC>gx5k{Xn99#}a3$ z|3hxLSvD1{pIL-GuS%c_eioF&)3;>m?)C9QYhT=rW^HFjaHrngV~CxBeQ)Kc(!a#S zuCqK7o*~|eZQBD)gYer))H%O^hg&yKFE1@$k=z4QBl~kcvc&$n#x{J+BiT*|6lu;P zdL*M7`1wo7_)rK-)OYlmn^8HCD&Yfs$PgHMoMrj*4HFnh&}@IF^SMwYJmdOok0iT9 z#*^L)l^+7BL7coHNC*diV8tArdqm`puiEnF4@_^>m=sE+8c`r!jtqw0jn(jcF22X( z!=##Lx87LoIUUp$!Mt9U^C{SnX%-mT0N7k((ePL}O?)ibj>j#SYzpx^7Jhnj#i&kj z(c}H<5wSe=yzC|n#!H%&h+oLj@2^s zHafp9kWYgG{_*u4Jiy(6&`C&3*K;WDfZP@VCPgltcg!4d-JX7I4`pFODOSEX?3yhP zRt*-B4R$KHBN9D3-JZ7Qc^39(P8e()S0AJZLEl%Q6?1_?=hh`1lKe z%!+=L_Z%-KDfhpN=6y`rSM*TjH>& zis3BFcx6*7uT5C&?ylo#@0G6N6WlAyQ1x+}yebin{?BbbG$OqVs*W^ov#@(~5A(1@c)<&pO!3q*Ss{o>~^zz!KaB=Oe5M0s_N7 z)QUOu)Cm7(F-5}bPMoHTMAcBRz6utJWILc;UdK`lA9k#aWiyH1{53j0J`D!)$zx#G zWG*q%ViKylX~pEeTk6!%kXBtI!Y*DO<(Jy482|->s;jGK)6Bw+BkKjF{G{hin}057 z&{YWuA@8ATvRz(6X>G+f@tMaMPr@}gc3;FA&lhH8FEL^bwkpDO8fg#3VvSCjQ(UoQ zVWChp?uhlX8Mb?(_bI^qGNvGXgFopYh>@=i2Utx_U0o{oK{0MN6Dn1kxHys0r>>pG zWS3lc38qc`_dDD|lME{|4BMB}qPgZFESixGC*{fH<$9#OPhZ0jkSCSc#F#y7J>ek; z)tAIdizOMbxVV?0RH?<%_i!&LzgezBH@3E@DJURdL@lkYgLPS^(=^s`Sl3pgE{dox z=i)}*e#SxSWEYDr#JhgAfG#R7##`$ozU*Ofhw3m%A(WIEgNVbZRD=^eBP%j^@(#-~ zPxNn>K}hE3t~_Cc)!78awd3h5qqP(wtm2T&Xe(Lj?fHSA5*5RxJc?>^=u4^6u>34I z=BAQ|<~Atm)#vV8bcfm(yDKnl*X#D!zb*~n@D^}UjYK~9!wJ^Ch|t3bvXyD3+T7e+ z8{%1((9Hy#bF$YM#Ccu=%Zd>K~}#zqb*&9tZ{wBL6!<4}4;4 zrI9v1go9eGf4$<(Uq)D4K`SY6d`Bgufr?;f7s4MTMF5DTXRR;C%szGxD zH7KQ0=tUEn+pOKk$I3K!RXIn^)dx-TdDHVUX=%p+wAGdL2FO%6sWpBoA~x3aeXt5o zu&HSn?B+C<6D0qHxv~9O*p+0eZb!XZk_zFmqiWihAEB0OlwaI@L|UN13>$MTbO^Oc z!PazQuZesGOE7U_dra1QV(1tcegPS4zPo@o1!$Iq135U06DSA2MZB=n*M%gCvhk|T zN5Vrw;GT&)P+{a!*b$73jPUzu`1y&&!z~3p-H(=HxNN24?`51XRSBI4U`E$fBo%dri=o}Yi;bsj-!9xJAh5||HcZ1V(Psb;G?XL(p*W8rUv$~0OyW*Up!fXoEzfU9-^@eD%39_(E4l0jyxV|e>KyL!xS7J zL8rh4*(eVr-i*?8lFpwFmWML3EUt=*3R)&) zqQAZ-7uJ8-AXH}4R(%;3Qlf74e!f~bS?y`E0;(nBXy1g{14Xw?8aWfr`b~g`mYSJ{ z0OB-R`Vmv9R0M*Bb#BGfTOFczd^$*nG~e)da(WsNQNr;;#on95Jj5kR?3>;FI# z=k_f>Dhl<}r%&e|LzkxCH2QR~k8kMXBQp%kd->H$Me6Tg49aF%=~Y~m8mx3-`&C-o zMs(i0-dX9?*>;wwl@79$W@L~Kr}KrpmQAE!VHwUg@O4n>30<5_?qzp&y6UImj3jwP zo3u9Wp;3_@)i{JnX~gxsRy!E%`$-YnA=~#$i^(%pxKzFJIQD#Lvhdopyk66bKDk#;?t<>NStQlx*oJr#I``$ZJD;^f0-i(wf}^ggi!G_ z=Lt7Buuml>{Bp@Bu`!oicc}7*)85-oH9OZ4+W>)IM7alOXJCPVzh58 zl<+`SycM!U{?*k5CJyQAyU^5BqUs@5545otkdKcI!HvBRfnVR(##nt8L4p}-g(u>L zedS%}-h03K?Xwzv6?M-GcPb-VN)9T1I{SZC$fp-c=qyzYL_K3;*swt&N2ED-@{R_I zBzJccmq+Z!WTdlur$Yk+Kp}?%LdEXhUXDs}2OFAzfWY~oTGRRa_wS{;m6erqvN*jN z>GH47#}%Cb{*4;P$HymHsONR0NA$=jMKGa#CCCNZ?j~~GJDL@R_6Te8hhy3*2tA*E^Vk`&t)DRjXi#& z)CVcZKQl;BmnfID5=w(e81n04Py1Eekkjdlq}l3PnhY?~+Nx8}G04Y92n6kP_9JFP zTfs_VT!w`#C73me>U&r1dk;g`SBgm6LvbI;Z#WItDk-I6<$rf~i@w6yfeX=MUpF^5 z4>r?^BeqBveV7+OMM4Vv_!05D3O&&K*&J6y&X1PK<>lr3`uYN6V-@+SR=$}zAW}*= zNY~+#<^|!1Wn0^I-kaP|y!C0hL4a`{7b$o|S1P?IciWHg75LzcCREM>-H=BTwYO)1 zbby%LM>iH}&ha>yVBp65L0)M#JXRTPBTI{W05+N3RqDnSP?F91K+i!L$ti9k?W z>FioU&RNN1?O(st-O|(Jl`v?{PzVUYiVa^=L+&DF&)hPC;s?A z^PZ(s!qCY;{dQP(Uf3Tp$ei3ORfe=AIu9O90#51Uq*g$KMM6X4^!yuL`lGzOyl-Ft zE`Oo`CJ!xPd~uQV@bJ(hU0NP6$*nWmOix&UfB$D;(b<{(XLU7z-VtRw_3pO^sni6b zX2Y9yOSNHr80XqV+vkXoe3Z|pZ(F!a$iKxtL|^c`J1YERRR0mEME5%o29C-44ha9N zryB!Gbh!7Va6DrrDsV&?7b+eR@&rwx`699}!r$WjE6D0r%zD85aNkPl=J?D(Cai16 zCRL1#C>64V&_P?}Bf0+!)d$pkTu?NNN=kx(5E2B3=$U(jL@rIQR1U>s^ZuYf>q9)2 zDLR?qJ9!yw{_Y-{mz4qiK#DhWU5`Y!QHJDyj_v8~Lu`vChNNDu8wt7y0;he{_=x_e z=jReq;g_oEhm~R;R&}joQ^7hlgT2l4|W3Jbh6%Go#tJ;mo96(`Wqib3{bP#y}EGM^Vg`Lf7|B z|Le*k5*-;jZO*`^7}=r-N~||%`yEt)R+0^+@E?3{4Q)F>3kTnLGI=bSU*KK4vlpPc zRW4f!AwEX&Dsovuq@eSNgpS@FPyc~QrP6hCrlUgyDNIba&9`wHF|nF&?8(I%Uf_Ur zwf4I&Zk39XG@Qn|)kLKYT^FPnDE#&sr+yB+vOmty$-y9Y!931oK)hgfnchO`@;XDcj z)HyB4Tqx-OqTl(jt1*9s$NlUMd!B^yW@-RiJpFeB(I|mMY)_tTCtAzJF>dSb8?QgO z>AX(AwrQ4VvwVZi1`;WSgvj=$E9x5_b8>R7LD641I2huaU9|FBE8bD|6e|l#{dtR= zvJlTF4uPRGd@I++A8-p{ZNLBd_ypS7JwQgbizoO@F8q12R0FidkW`9sDJd!O88y+m z49~a6z%qtV!V|FS*DzrCD&qKGiRNd!sU_6>Xi3LUN*w!n>a4A%EShFr%KtF2yquMo zn5dFyMxP(wcK%oP97yz11|#t-J`f1O=Cc<-PhVfb#Ml_{0tUROZgo6|$r3f!i6UiH zI^4h4*Ph;`K!q>UnQ^`Sx3Mv{^m%GZJ?|naCZ_hWpRYyk6dDykHv$Lk9MK{YI z$g!OK{PUJ%J3Bj^0s`rWv(+D)nwp&d*|nsDmPQUvWT=$1^f;K7NptqaR-bz1lyaT= z&yNY&aW@N%E*DQD{rx##zkZb(S5;F}PLY!W^2g36JjU&CbmAYwPuC~wu0UCL-Jhv) z9Y|zu)lOWr5x|}6>>nakpfSHWKX>gjW%qj*2pTyc!5HpN6o(JpFh!lL_pa~HRwutP zfiC&q+3h8Mi=$bcHV6o7Z50IMd)_KnSKHcS_EcW5TJo`A$tdbYs-2!@Oy}6x*jfv^ zFf~*heebzz46xgtxTrykCpN7@x@94y`=H6jpM-bv^4;Ix$DO}fWlo5!s9@FB(OEq_ zTpDivLv&Lo@4|RDShnp@&?D{T)%f_RCWf@Owsw4X)J{CqH9U*~vN9yF)#oa;HI-d; znEpe-w!Gw9;rpeg-YI5@W%ZXpg?}e2EAHaL0a7^@5mCt%_4LExUPXHk&`ZyE^78U7 zSiJiC`}>B5fT|z@1_u;rPTS=+QboZFTuvf%&^4~~JTWdMG8{~PQ&e8w)8ch@{*l@> z6F(&-1qhVm%~IhXKX!pHno~ZX%OC#i9N~-29(z0vt*xzZz?`vkckR5irv%jr0RaKX z3SkmdL7?wNMNQp|8!k%jQBaGAh(R){nAyWU(004as3gmxHpzX;M;uM}nI z3h1d^?-XWX5fWNm7TEWCOifR(cLc%ldK{*YEf*9NtO4CP4EQBPC_0{dAuU*%%S z1V8okNG-UG2&&fy$jhUDCgBSP4M+(oDfeP|0%q+{MWGvbh?1^uv}g#_=xC`G7#8g9 z?SX)9>49CZ5Olqn=5W5+F{HdS*CarIkH6b1DIx;FXVMI8K5A?BII42%Wd|!fbID`b zPbw)HvJK*PCsz3Jof-pP29HCgke#tH6{)bl06H@As$9GM;@jJ!fTuJT{gwt=dc+5H#j~#{Fz0!;mhH2`*J8>CmR5y;)@Flyk{%7zIO-p>eCz?9C6PJ z*L9^MDBTPA6P_1Of_|fO_u8$p%ue-)kd4~|fLK;qS}Bum3)L2w8NvZVcu4S4XIN3) zpq-g`I8zm3&6(=%W~!AqH8HU*{|c0{%D!~h?NQ1m%P}fz2Zs@@k>U@9e?dL`o0y1S zZR-2lPtK+Z<4LDrjD}{ck zujgTAWv!<(urVD!`Jk(7tNZ|@V!xFj#2mSdhX8xATwQZo5|}G{Gkn)m&}vQZoxC8#OD_l z7IxO$+}xO7)dJQtyTT9p{O55cjqel{dH9ToZUMH+(rRZ$4S_%7YEw-hG?_H zvQYJ2a#E7CpRaFIyn&-5n_97|`9`DDdJoGqD=%+y$)t7l{PCoQ!GUuopwqg|9`?&^ z8Blomo4sXfqIafrx!S0*G7& zdK1m^8WsAB`L{CpDos9D_IX|aAf)Nerj9ET6B8ei^2V$B?Q^Ul+Klz|O58T`XpN#qB z2~Z%pkHnK$4GIVe30;BwL9?L)N@KoCvHY2$tSkqwk%yb^_NC5`H;v3Xb%VBK$wGcj z%DENg<=ph+z{NEu@!7blAujU6w8L|C80T)jJ8bp|LoOVUaER)(lPy~!kssCdu~t>Z zC4K8!q}9$ygRlXdkYzY9`tC`%_s3N-Qx;P0g2jb+&{V zTsHU@r>E>`4TRx2*x1;vKnHULO?2}Vs-`BR?UfY~9=o}T;!H(>lhF4+D<@1s2mJN5 zwg2p_c7`Fppm9ue0azu2dluBW?QGEy-f{Uf?jhUpm-+Evt;8|H+w5xS=nU*=i6iCM zOqU+wt}Q+#Ixk@`v5(xEicBj0NuY9FTy6zv;pOnHa>}(HwfNuIC2Jt|r#v zXJD`nY|EV+(}&Y|MwoJswl9E*Wd~F=zH!}V_n7JyF!Jg8FYS_iNx8NG0C3)Xc)UB( zsR`Zt99IQ=S?OjZ9OiPgIHM2qfB*i{q5*R9>BYSxIaP&Odm+bBr}05U!{X>~yznU0aPww_%iO7D!l6$6c7|L^gmk z(x#YNSh&}UgdhYxp8TSBcS3tmMaWunUM+mr&k+Tn3_7a2~$!AxzswHtaX#w6&^YBa+`d; zfro`ruh6&SY&o{6XfKVc*oI@_9z>g`$lFk)iH%*O?7!=a%eXjbgYH)7?CtAn{luo%RQJz)M z2{YOGo8Nk8*@|w+5Pb%e(k3Qyme;nxjtFuwXzEC1<>%*LSQ2{hO`+GG(tI!HOy_dS zaXS%XiJFv39KUiId z2dKJK76KGH_X?Bc^$0%WNl#A?8MDcz!mg4^agEOMh?#wp8k-w-EgvJkkB?8@i2YUT zcU>MqEwLKicCOddChYi8-2yiAGYq5L>}DFHi+1DVSDJ@(xjYtH%XouX!cTS6${y?L z8gkH{%QxPz4K$Rp>cl-YH|1Z#by>Ew=6fm=A_qD($Uee$tvh(zON_Ny{I;QS^;%QJt;>qO9ifl>RYQC2c?mbkZ?yoyeqRd`gA0I^dli&?h;%c122x>Zm~85$lg z_6q0X(;k9D>2wV6+yDelL`?h@SPuaS0rpq>7wJlLp>c6>%DEub^a9V7&jmX#C+Ea= z^|LkGxpAQ=Lx=Wi+5fIg+G7szYxh5*I_Uyl&%ViY#zaPqa@WZ1#sxY9p93zyV!BM{ zFJBq2oT@kZKQy(mI+N0=FeFGFStQ8h(`3Lm`7m7^%ujEh3Hn?bUL7u8Gp^UA*t>#M z`Vu(Pj6k{i^6nLlBAz<})mJ1TAt9+OP!k6XwWgT9*;!lv0@iG>8lnLcS_k01S{vFk zh&5#ht}2z)zu^pS>hHFM7*c1ZpwD2N(v7>QM?fK^?Lx!YzkfHor4{axoDDSJGWb1m zo0{gbechHpDKP@JnwJ8eY`{$M8KAA1{r-&75zXqz@_})%^j6MVS_JM-ddbrnUqL)i zx(Q-7SGTwO8YBG~8+s;;`T!|NwS`-(ZfM{I&Sx0#mCOYqlKawO!*=@hOVstf_4RQ( zC*nHWS!2$_-{pGEyyI;bQ#$EyScUG7#Y5h3&OL%yuw`2smL~TzRTjK|c!)`)=Hr{) zogpk>;cWzC*tsGP+~PDQKhlU_wDX%R;^O0{qA8ilxdR!6hfwYawByom3iI<*S_*3q z)LiTazJ2><%yzm7kfn+GVvOE2V&Kv<;TxDx-KQ^SL;#*+URJWdi`i!Kns$2k^g4lz zObtL7?kp9Ze_WiKlX<$R2q27h`|#nzc%I4Pf|JDZ+?=&@HZiJ#`^FzUB0xCLbB#f$ zMD2FseRu$LyG~oEfQF+=^9LqTVHdb;7vZn^LM*|7pQ<@Zj?hpzk&hUpG5|GS?5Hx} zS@`t&19s%Pu&?R9}p|HLQvJIA*03l*aT zGsY4V8(Rnz%{;JvTzfy0axyUdF}=3`0CQ`PH|EjOKmskN5O7=x?5qJ@fIRk;!A+PA zAQnP%r-vE<_+z)}z$9c3ea0cTH#aGg!HFzi8dxfT&ELi&Ll20cfYnz#!s3*_#mB`> zR?`Q7;;r+)cTtB(+sH)VLC!(3;<#fmE+2UNc>q$! z31EARz_|tt(+@Ny%#{I8{?!=geEj?_QVtux0KT%H@Jm+t1j_#$Qyp41Iw7F(=VX%( za$XWzaFG(hh~&P<6@KhfGxpvdJ&7xCSBw}8^de>q{BIDz9)SAyUO>e z2Dq3*CbxEpAYNr=eqQH*W(QbZ&r@EX_(q4hZ0_=GPGzWkBGC8jG)~zA+at`+Q}}4B z>GM57qHp$Xh&6h-KUa(TJn3n4&(O8>)L1KVTvCM&mx_bqMb}5nqtoQ;`Q^v(SfSfK zCJmMHYsor+*A;2mBU!=@93yR3;{|~Fz_6$Mu(#*j+u%ocl-<}AiqlPqoSgAz-L2;!cPxJ0T(Ymas5X&wBgaPT@gKRrR^*ypxd;Q&Yp!ObnCC8~dmL9A#p_17|*xIYg*CpbZ2aY8Dm@ zjdER4u=#^79}6Yy+2boA0T1xv1tkVkvBmr{5JOW%Xo|DvN>o)8wY3u`STth(61x&J68tXfW?xZJAZ*$0W=8G-@2iIPz1`LcU&aU ze2k5aD}8UAqvl67{ehkTS*QCFA0G-Jq$MX28yZ}STsWn8xZ&FGNFelvtNBUsumJt@ za(^}i?4w!*K4Aa>DMCdU5~%3tkO2F-)#-1dY6e@p{Df1$?yF3{%US#S*}XsByA$-k zdwZ$*`E>%0<;v8b&CtNk1;DSks%rdWs{9=4FR~gAo!Q`RbmT*Ihru~^0~4w-^nZut zCcXE~)WR-jl?lG{ZCmOWadmDJ8`3cgMz)N6^?t%!&bQa<=P8GODw^-iJ)*ZV>3a3$ z|J#$+nYR_RD%k-vA~J#h_B$bB{%?y|2;%=Xr2T()&i%iSTEAR>g87yht3sikH3T*U OLf%U%NR*2i2LB(zaTEst literal 0 HcmV?d00001 diff --git a/docs/Getting-Started.md b/docs/Getting-Started.md index 27ff29e..c26f62a 100644 --- a/docs/Getting-Started.md +++ b/docs/Getting-Started.md @@ -4,9 +4,6 @@ title: Getting Started nav_order: 2 --- -![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) - - # Getting started! ## Playground diff --git a/docs/fix/Fix-User-Guide.md b/docs/fix/Fix-User-Guide.md index 503f7a6..109aa12 100644 --- a/docs/fix/Fix-User-Guide.md +++ b/docs/fix/Fix-User-Guide.md @@ -5,8 +5,6 @@ parent: Fix nav_order: 1 --- -![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) - # Fix User Guide This document provides an introduction to the Metafacture Fix language (short: Metafix or Fix). The Fix language for Metafacture is introduced as an alternative to configuring data transformations with Metamorph. Inspired by Catmandu Fix, Metafix processes metadata not as a continuous data stream but as discrete records. diff --git a/docs/flux/Flux-User-Guide.md b/docs/flux/Flux-User-Guide.md index c1f6046..f4b83c7 100644 --- a/docs/flux/Flux-User-Guide.md +++ b/docs/flux/Flux-User-Guide.md @@ -5,8 +5,6 @@ parent: Flux nav_order: 1 --- -![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) - # Flux User Guide This document provides a quick introduction to Metafacture Flux, a domain specific language to build data flows for metadata processing. diff --git a/docs/java-integration/Framework-User-Guide.md b/docs/java-integration/Framework-User-Guide.md index 0a03a75..278e0fc 100644 --- a/docs/java-integration/Framework-User-Guide.md +++ b/docs/java-integration/Framework-User-Guide.md @@ -5,8 +5,6 @@ parent: Java Integration nav_order: 1 --- -![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) - # Framework User Guide > [!NOTE] diff --git a/index.md b/index.md index fd1fa71..9cd651c 100644 --- a/index.md +++ b/index.md @@ -6,8 +6,6 @@ description: "This is the central place for the documentation about Metafacture. permalink: / --- -![logo](https://github.com/culturegraph/metafacture-core/wiki/img/metafacture_small.png) - # Metafacture Documentation Metafacture is a toolkit for processing semi-structured data with a focus on library metadata. It provides a versatile set of tools for reading, writing and transforming data. Metafacture can be used as a stand-alone application via CLI or as a Java library in other applications. There is also a playground where you can test workflows. From 9d9df6dd4a9208a0b5c2dd00071b297c50f2fcf8 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Thu, 28 Mar 2024 12:51:04 +0100 Subject: [PATCH 05/12] Add footer --- _config.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/_config.yml b/_config.yml index bbc0dec..c93571b 100644 --- a/_config.yml +++ b/_config.yml @@ -10,3 +10,16 @@ aux_links: # Set a path/url to a logo that will be displayed instead of the title logo: "/assets/images/metafacture_small.png" favicon_ico: "/assets/images/favicon.ico" + +# Footer content +# appears at the bottom of every page's main content + +# Back to top link +back_to_top: true +back_to_top_text: "Back to top" + +footer_content: "Metafacture Documentation is maintained by the Open infrastructure team of hbz." + +# Footer last edited timestamp +last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter +last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html From 0788e9658b827a7076342ec9d7857c10ac4b3c93 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Thu, 28 Mar 2024 13:32:27 +0100 Subject: [PATCH 06/12] Add custom link color and font sizes --- _config.yml | 3 +++ _sass/color_schemes/metafacture.scss | 1 + _sass/custom/custom.scss | 4 ++++ 3 files changed, 8 insertions(+) create mode 100644 _sass/color_schemes/metafacture.scss create mode 100644 _sass/custom/custom.scss diff --git a/_config.yml b/_config.yml index c93571b..8b964f8 100644 --- a/_config.yml +++ b/_config.yml @@ -23,3 +23,6 @@ footer_content: "Metafacture Documentation is maintained by the Date: Thu, 28 Mar 2024 14:19:41 +0100 Subject: [PATCH 07/12] Fix links and some formatting --- docs/Getting-Started.md | 10 +++++----- docs/MF-in-5-min.md | 2 +- docs/fix/Fix-User-Guide.md | 4 ++-- ...Cookbook.md => Fix-functions-and-Cookbook.md} | 0 docs/fix/fix.md | 2 +- docs/flux/Flux-User-Guide.md | 16 +++++++++------- docs/flux/flux.md | 4 ++-- docs/java-integration/Framework-User-Guide.md | 2 +- docs/java-integration/java-integration.md | 2 +- index.md | 6 +++--- 10 files changed, 25 insertions(+), 23 deletions(-) rename docs/fix/{Fix-function-and-Cookbook.md => Fix-functions-and-Cookbook.md} (100%) diff --git a/docs/Getting-Started.md b/docs/Getting-Started.md index c26f62a..2faa073 100644 --- a/docs/Getting-Started.md +++ b/docs/Getting-Started.md @@ -10,11 +10,11 @@ nav_order: 2 The easiest way to get started with Metafacture is the Playground. Take a look at the [first example](https://metafacture.org/playground/?flux=PG_DATA%0A%7Cas-lines%0A%7Cdecode-formeta%0A%7Cfix%0A%7Cencode-xml%28rootTag%3D%22collection%22%29%0A%7Cprint%0A%3B&fix=move_field%28_id%2C+id%29%0Amove_field%28a%2C+title%29%0Apaste%28author%2C+b.v%2C+b.n%2C+%27~aus%27%2C+c%29%0Aretain%28id%2C+title%2C+author%29&data=1%7Ba%3A+Faust%2C+b+%7Bn%3A+Goethe%2C+v%3A+JW%7D%2C+c%3A+Weimar%7D%0A2%7Ba%3A+R%C3%A4uber%2C+b+%7Bn%3A+Schiller%2C+v%3A+F%7D%2C+c%3A+Weimar%7D&active-editor=fix) and run it by pressing the !["Process"](https://metafacture.org/img/process.png) button. Check out the other examples (first button, !["Load Examples"](https://metafacture.org/img/load-exmples.png)) for different input sources, transformations, and output formats. -For commands available in the Flux, see [the Flux commands documentation](/flux-commands.md). +For commands available in the Flux, see [the Flux commands documentation](/docs/flux/flux-commands.html). -For functions and usage of the Fix, see [the Fix functions and cookbook](/Fix-functions-and-cookbook). +For functions and usage of the Fix, see [the Fix functions and cookbook](/docs/fix/Fix-functions-and-cookbook.html). -For next steps get familar with [FLUX](/Flux-User-Guide.md) and [FIX](/Fix-User-Guide.md). And try out some Metafacture workflows. +For next steps get familar with [FLUX](/docs/flux/Flux-User-Guide.html) and [FIX](/docs/fix/Fix-User-Guide.html). And try out some Metafacture workflows. ## Command line @@ -27,7 +27,7 @@ To get started, you can export a workflow from the Playground (last button, !["E To set up IDE support for editing your Flux and Fix files, see [the IDE extensions page](https://metafacture.org/ide-extensions/index.html). -For next steps get familar with [FLUX](/Flux-User-Guide.md) and [FIX](/Fix-User-Guide.md). And try out some Metafacture workflows. +For next steps get familar with [FLUX](/docs/flux/Flux-User-Guide.html) and [FIX](/docs/fix/Fix-User-Guide.html). And try out some Metafacture workflows. ## Using Metafacture as a Java library @@ -58,4 +58,4 @@ To use Fix you would declare `metafix` instead of `metafacture-io` as in the exa Occasionally, we publish snapshot builds on [Sonatype OSS Repository](https://oss.sonatype.org/index.html#nexus-search;gav~org.metafacture~~~~~kw,versionexpand). The version number is derived from the branch name. Snapshot builds from the master branch always have the version `master-SNAPSHOT`. We also provide sometimes pre releases as github packages. -If you plan to use Metafacture as a Java library or if you wish to add commands to Flux you should get familar with the [Framework](/Framework-User-Guide.md). +If you plan to use Metafacture as a Java library or if you wish to add commands to Flux you should get familar with the [Framework](/docs/java-integration/Framework-User-Guide.html). diff --git a/docs/MF-in-5-min.md b/docs/MF-in-5-min.md index 76e581e..cfe7bfe 100644 --- a/docs/MF-in-5-min.md +++ b/docs/MF-in-5-min.md @@ -93,7 +93,7 @@ $ cat yaml2json.flux ## FIX LANGUAGE -Many data conversions need a mapping from one field to another field plus optional conversions of the data inside these fields. Metafacture provides the transformation module `fix` that uses the Catmandu-inspired Fix language to assist in these mappings. A full list Fix functions is available at https://github.com/metafacture/metafacture-documentation/blob/master/Fix-function-and-Cookbook.md#functions. +Many data conversions need a mapping from one field to another field plus optional conversions of the data inside these fields. Metafacture provides the transformation module `fix` that uses the Catmandu-inspired Fix language to assist in these mappings. See the [full list of Fix functions](/docs/fix/Fix-functions-and-Cookbook.html#functions). Fixes can be provided inline as text argument of the fix module in the Flux script, or as a pointer to a Fix script. A Fix script groups one or more fixes in a file. diff --git a/docs/fix/Fix-User-Guide.md b/docs/fix/Fix-User-Guide.md index 109aa12..fc7814a 100644 --- a/docs/fix/Fix-User-Guide.md +++ b/docs/fix/Fix-User-Guide.md @@ -10,7 +10,7 @@ nav_order: 1 This document provides an introduction to the Metafacture Fix language (short: Metafix or Fix). The Fix language for Metafacture is introduced as an alternative to configuring data transformations with Metamorph. Inspired by Catmandu Fix, Metafix processes metadata not as a continuous data stream but as discrete records. ## Part of a metafacture worflow -Metafacture Fix is a transformation module that can be used in a [Flux Workflow](/Flux-User-Guide.md), for this you have to use this in your pipeline: +Metafacture Fix is a transformation module that can be used in a [Flux Workflow](/docs/flux/Flux-User-Guide.html), for this you have to use this in your pipeline: Flux-Example: ```PERL @@ -90,7 +90,7 @@ do Bind(params,…) end ``` -Find here a [list of all functions, selectors, binds and conditionals](/Fix-function-and-Cookbook.md). +Find here a [list of all functions, selectors, binds and conditionals](//docs/fix/s-and-Cookbook.html). ## Addressing Pieces of Data: FIX-Path and the record structure in FIX diff --git a/docs/fix/Fix-function-and-Cookbook.md b/docs/fix/Fix-functions-and-Cookbook.md similarity index 100% rename from docs/fix/Fix-function-and-Cookbook.md rename to docs/fix/Fix-functions-and-Cookbook.md diff --git a/docs/fix/fix.md b/docs/fix/fix.md index de6fbf5..63e36ce 100644 --- a/docs/fix/fix.md +++ b/docs/fix/fix.md @@ -13,7 +13,7 @@ If you are using **Metafacture as a Java library**, just create a Metafix object The transformation itself is declared in a fix-object which can be a file. For more information on how to declare transformations see [Metafix User Guide](/Fix-User-Guide.md). -See [here a list for all available FIX functions and a cookbook for using fix](/Fix-function-and-Cookbook.md). +See [here a list for all available FIX functions and a cookbook for using fix](//docs/fix/Fix-functions-and-Cookbook.html). > [!NOTE] > PS: There is also the transformation modul MORPH. Have a look at[ the old documentation](https://github.com/metafacture/metafacture-core/wiki/Metamorph-User-Guide) and the german cookbook by [Swissbib](https://swissbib.gitlab.io/metamorph-doku/). \ No newline at end of file diff --git a/docs/flux/Flux-User-Guide.md b/docs/flux/Flux-User-Guide.md index f4b83c7..d5f9387 100644 --- a/docs/flux/Flux-User-Guide.md +++ b/docs/flux/Flux-User-Guide.md @@ -51,6 +51,7 @@ This sets the variable `var1` to the value 'value1' and `var2` to the value 'val ## Writing Flux files The following snippet shows a simple flux file: + ```c //declare variables default file = FLUX_DIR + "10.marc21"; @@ -65,8 +66,9 @@ file | write("stdout") ; ``` + In the first section [variables](#variables) are declared, in the second, we [define the flow](#flow-definitions). -A flow is a combination of different [FLUX commands. Here is a list to all available Flux-Commands.](https://github.com/metafacture/metafacture-documentation/blob/master/flux-commands.md) +A flow is a combination of different [FLUX commands. Here is a list to all available Flux-Commands.](/docs/flux/flux-commands.html) Linebreaks are optional, but help concerning readability. One can add comments with `//`. Semicolons `;` mark the end of a variable assignment or flow definition. @@ -90,7 +92,7 @@ The syntax for defining flows takes its cues from bash pipes. Commands are conca Some commands take a constructor argument. It is provided within brackets: `command("arg")`. Furthermore, some commands have named options. These are set as follows `command(optionname="arg1",annotheroption="arg2")` or with constructor argument: `command("arg",option="arg2")`. -To learn about the available options of a command, execute Flux without arguments - it will list all available commands, including options. Or simply have a look at the [list of available FLUX commands.](https://github.com/metafacture/metafacture-documentation/blob/master/flux-commands.md) +To learn about the available options of a command, execute Flux without arguments - it will list all available commands, including options. Or simply have a look at the [list of available FLUX commands.](/flux-commands.md) To some commands the entire environment can be given as an argument. This is done with the `*` character: `fix("tranformation.fix", *)`. In this case Metafix gains access to all variable assignments made in Flux. @@ -98,7 +100,7 @@ To some commands the entire environment can be given as an argument. This is don Note that unlike shell pipes, the data flowing between Flux commands is _typed_. This means that only commands with matching signatures can be combined. Commands expect a certain input and provide a certain output like: `StreamReceiver, `Object`, `Reader` and others. -To lookup the signatures, again: execute Flux without arguments or see: [[Metafix-User-Guide#parameters-to-metafix-definitions]]). It will list all available commands, including signatures. Or simply have a look at the [list of available FLUX commands.](https://github.com/metafacture/metafacture-documentation/blob/master/flux-commands.md) +To lookup the signatures, again: execute Flux without arguments or see: [[Metafix-User-Guide#parameters-to-metafix-definitions]]). It will list all available commands, including signatures. Or simply have a look at the [list of available FLUX commands.](/docs/flux/flux-commands.html) ### Variables Variables are always Strings and can be concatenated with the `+` operator. Escape sequences follow the Java String conventions: `\n`=line break, `\t`=tab, `\\`=\, `\u0024`=unicode character, etc. @@ -113,16 +115,16 @@ Flux supports single line C/Java-style comments: `//comment`. ## Overview of the commands and some examples -1. Have a look at the [List of available FLUX commands](https://github.com/metafacture/metafacture-documentation/blob/master/flux-commands.md) or execute the flux without arguments to get a short help text along with a list of all registered commands. This is the list of FLUX commands mentioned already above. -2. There are several example flux files along with sample data in the folder `examples/`: https://github.com/metafacture/metafacture-core/tree/master/metafacture-runner/src/main/dist/examples +1. Have a look at the [List of available FLUX commands](/flux-commands.md) or execute the flux without arguments to get a short help text along with a list of all registered commands. This is the list of FLUX commands mentioned already above. +2. There are several example flux files along with sample data in the repo folder `examples/`: [https://github.com/metafacture/metafacture-core/tree/master/metafacture-runner/src/main/dist/examples](https://github.com/metafacture/metafacture-core/tree/master/metafacture-runner/src/main/dist/examples) _________________________ -# For developers: +## For developers: > [!NOTE] > Coding in JAVA. -## Adding new Commands +### Adding new Commands Add your class and a descriptive flux shortcut to `flux-commands.properties`. This file acts as a lookup table for flux commands. Use the proper file, i.e. the one residing in the same module where your newly created class resides. If you have e.g. created a class in the module `metafacture-biblio`, you add the flux-command to https://github.com/metafacture/metafacture-core/blob/master/metafacture-biblio/src/main/resources/flux-commands.properties. Recompile. That's all to add a command. diff --git a/docs/flux/flux.md b/docs/flux/flux.md index 2ae2cf0..9bd6e69 100644 --- a/docs/flux/flux.md +++ b/docs/flux/flux.md @@ -9,6 +9,6 @@ has_children: true Flux is a scripting language to easily build and run processing pipelines. No Java programming is necessary - it's used as a command line. To use Flux you may download the binary distribution of Metafacture. -For more information on how to use Flux, see the [Flux User Guide](/Flux-User-Guide.md). +For more information on how to use Flux, see the [Flux User Guide](/docs/flux/Flux-User-Guide.html). -See [here a list for all available FLUX-Commands](/flux-commands.md). \ No newline at end of file +See [here a list for all available FLUX-Commands](/docs/flux/flux-commands.html). \ No newline at end of file diff --git a/docs/java-integration/Framework-User-Guide.md b/docs/java-integration/Framework-User-Guide.md index 278e0fc..e987add 100644 --- a/docs/java-integration/Framework-User-Guide.md +++ b/docs/java-integration/Framework-User-Guide.md @@ -8,7 +8,7 @@ nav_order: 1 # Framework User Guide > [!NOTE] ->Relevant for Java developers. For using metafacture without Java Code see the [FLUX user guide](/Flux-User-Guide.md). +>Relevant for Java developers. For using metafacture without Java Code see the [FLUX user guide](/docs/flux/Flux-User-Guide.html). This page explains how to create a Metafacture objects and how to assemble them to form a processing pipeline. We use as an example a simple pipeline containing a Metafix instance. diff --git a/docs/java-integration/java-integration.md b/docs/java-integration/java-integration.md index 517432e..772d082 100644 --- a/docs/java-integration/java-integration.md +++ b/docs/java-integration/java-integration.md @@ -12,4 +12,4 @@ has_children: true The framework includes the interfaces and abstract classes which form the foundation of the data processing pipelines. This part of Metafacture is only relevant for you if you plan to use Metafacture as a Java library or if you wish to add pipe elements to Flux. -For more information see the [Framework User Guide](/Framework-User-Guide.md). \ No newline at end of file +For more information see the [Framework User Guide](/docs/java-integration/Framework-User-Guide.html). \ No newline at end of file diff --git a/index.md b/index.md index 9cd651c..2ed31ce 100644 --- a/index.md +++ b/index.md @@ -10,7 +10,7 @@ permalink: / Metafacture is a toolkit for processing semi-structured data with a focus on library metadata. It provides a versatile set of tools for reading, writing and transforming data. Metafacture can be used as a stand-alone application via CLI or as a Java library in other applications. There is also a playground where you can test workflows. -[Have a look here for a quick intro into metafacture.](./MF-in-5-min.md) +[Have a look here for a quick intro into metafacture.](./docs/MF-in-5-min.html) This is the central place for the documentation about Metafacture. @@ -31,5 +31,5 @@ Deciding which parts are relevant to you depends on the way you are using Metafa > [!NOTE] > No Java-Code is necessary!!! -While working with the playground or the command line you only need [Flux](#flux) and the transformation module [Fix](#fix). -Have a look here for [Getting started](/Getting-Started.md). +While working with the playground or the command line you only need [Flux](/docs/flux/flux.html) and the transformation module [Fix](/docs/fix/fix.html). +Have a look here for [Getting started](/docs/Getting-Started.html). From d0fe9a507da83551759dff029818167ecd83a874 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Thu, 28 Mar 2024 14:37:35 +0100 Subject: [PATCH 08/12] Fix link --- docs/MF-in-5-min.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/MF-in-5-min.md b/docs/MF-in-5-min.md index cfe7bfe..b844c70 100644 --- a/docs/MF-in-5-min.md +++ b/docs/MF-in-5-min.md @@ -179,6 +179,6 @@ The 245 field with its subfields of each MARC record is mapped to the title fiel The `retain` Fix function keeps only the title field in the output. (In contrast to Catmandu there are no special marc or pica fixes since the internal handling of records and elements is more generic. Also the internal serialization of MARC is not as complex as in Catmandu.) -Now you should be ready to [get started](./Getting-Started.md). +Now you should be ready to [get started](/docs/Getting-Started.html). (Note: This mini introduction to Metafacture is inspired by the mini introduction to Catmandu here: https://metacpan.org/dist/Catmandu/view/lib/Catmandu/Introduction.pod) From 99971ae68cb4436b918bc01857b2bcb100c695c2 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Thu, 28 Mar 2024 14:58:31 +0100 Subject: [PATCH 09/12] Adjust some search options --- _config.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 8b964f8..dec85c6 100644 --- a/_config.yml +++ b/_config.yml @@ -25,4 +25,8 @@ last_edit_timestamp: true # show or hide edit time - page must have `last_modifi last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html # Custom colors, see _sass/color_schemes/metafacture.scss -color_scheme: metafacture \ No newline at end of file +color_scheme: metafacture + +# see https://just-the-docs.github.io/just-the-docs/docs/search/#search-granularity +search.heading_level: 6 +search.previews: 6 \ No newline at end of file From c3448311d8706082fbc4e109cda398db3ed4ce17 Mon Sep 17 00:00:00 2001 From: TobiasNx <61879957+TobiasNx@users.noreply.github.com> Date: Thu, 28 Mar 2024 15:08:59 +0100 Subject: [PATCH 10/12] Update _config.yml --- _config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index dec85c6..53f50c9 100644 --- a/_config.yml +++ b/_config.yml @@ -28,5 +28,6 @@ last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https:/ color_scheme: metafacture # see https://just-the-docs.github.io/just-the-docs/docs/search/#search-granularity -search.heading_level: 6 -search.previews: 6 \ No newline at end of file +search: + heading_level: 6 + previews: 6 From 123d229f25152c13185ef6f7a2037eb8d0b30581 Mon Sep 17 00:00:00 2001 From: TobiasNx <61879957+TobiasNx@users.noreply.github.com> Date: Thu, 28 Mar 2024 15:14:35 +0100 Subject: [PATCH 11/12] Update index.md Missing part for deciding which part of the documentation is relevant for you. --- index.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/index.md b/index.md index 2ed31ce..b841e7c 100644 --- a/index.md +++ b/index.md @@ -33,3 +33,8 @@ Deciding which parts are relevant to you depends on the way you are using Metafa While working with the playground or the command line you only need [Flux](/docs/flux/flux.html) and the transformation module [Fix](/docs/fix/fix.html). Have a look here for [Getting started](/docs/Getting-Started.html). + + +## Framework for Java integration/development + +If you plan to use Metafacture as a Java library or if you wish to add commands to Flux. You should get familar with the [Framework](#framework). From cfc200d07a810bd2ff0ad9cc03cb910c2ff417e6 Mon Sep 17 00:00:00 2001 From: Phu Tu Date: Tue, 2 Apr 2024 08:33:27 +0200 Subject: [PATCH 12/12] Add transparent logo --- assets/images/metafacture_small.png | Bin 14450 -> 24792 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/images/metafacture_small.png b/assets/images/metafacture_small.png index b409ae82beb3c2c00797c30c23a138fc03f3a754..c0a990d219bbe506e0723e41cc13dee33963e8fc 100644 GIT binary patch literal 24792 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 OLf%U%NR*2i2LB(zaTEst