# presser.nvim
A collection of word processing tools to press over your files easier with UIs.

For unstable and latest features, see the [experimental](https://git.closedless.xyz/TheOnePath/presser.nvim/src/branch/experimental) branch.

## Architecture
The diagram below outlines the overall architecture of presser.nvim and how each component interacts with each other.


+++++++++++++++++++++++++++++++++           +++++++++++++++++++++++++++++++++          +++++++++++++++++++++++++++++++++ 
+                               +           +                               +          +                               +
+                               +           +                               +          +                               +
+                               +           +                               +          +                               +
+        Context Manager        +           +           Steamers            +          +            Actions            +
+                               +           +                               +          +                               +
+                               +           +                               +          +                               +
+                               +           +                               +          +                               +
+++++++++++++++++++++++++++++++++           +++++++++++++++++++++++++++++++++          +++++++++++++++++++++++++++++++++
               |                                             |                                         |
           [5] +---------------------------------------------+-----+ [4]                               |
                                                                   v                                   |
+++++++++++++++++++++++++++++++++                  +++++++++++++++++++++++++++++++++                   |
+                               +                  +                               +                   |
+                               +                  +                               +                   |
+                               +        [2]       +                               +         [3]       |
+           Builtins            + <--------------- +           Pressers            + <-----------------+
+                               +                  +                               +                   |
+                               +                  +                               +                   |
+                               +                  +                               +                   |
+++++++++++++++++++++++++++++++++                  +++++++++++++++++++++++++++++++++                   |
                I                                                                                      |
                | [1]                                                                                  | [6]
                |                                                                                      I
+++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                               + +                                                                                    +
+             User              + +                                   Window buffer                                    +
+                               + +                                                                                    +
+++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[1] - The User interacts with Builtins to use a Presser.
[2] - Builtins inherit Pressers and lazy loads them to be accessed by Users.
[3] - Pressers make use of Actions to do the work.
[4] - Pressers inherit Steamers, giving them the ability to generate UIs for the user.
[5] - Pressers make use of the Context Manager to organise and track Steamers.
[6] - Actions will directly modify the contents of the Window buffer.

### List of Components

* User + Window buffer - refers to Neovim, which has the User who does something within the Window buffer.
* Builtins - Lazy loaded interface responsible for acting as a proxy to Pressers.
* Pressers - Tools which allow the User to perform different word processing tasks. Comprised of Steamers, and perform
  Actions to modify the Window buffer.
* Steamers - Class module which is responsible for constructing buffers, creating a UI for the User.
* Context Manager - A data structure which is used to store Steamers for a given context (the Presser). Also known as,
  "GCM" due to being scoped to vim.g.
* Actions - Perform an action defined for a Presser, which will modify the Window buffer in some way.
