#+TITLE: smmx
#+smmx-root-position: 379.71;543.7
#+smmx-style-key: system.black-and-white
#+smmx-info-position: 0;-70
#+TODO: IDEA TODO ACTV TEST DONT IGNR NOTE QUES | DONE

! simplemind uses .smmx files for storing mind maps (text+assets)
   ! https://simplemind.eu/


! it's a zip file:
   test.smmx
   document/mindmap.xml  (tests/offline created mindmap/document/mindmap.xml)
   images/7cc794179eebf8ac8e38847d07d363e642cdbdc8.png

! test document: [[tests/offline created mindmap.smmx]]

! <meta> header
   <guid guid="FFC052A279954B0AA1228D4805AE2872"/>
   <title text="list layout subtree"/>
   [<images containsImages="True"/>]
   <style key="system.gray-scale"/>
   <auto-numbering style="disabled"/>
   <scrollstate zoom="100" x="271" y="333"/>
   <selection guid="Bv-OUkzi6EifEC9GfV1f-Q" type="node" id="1"/>
   <main-centraltheme id="0"/>
   </meta>

! document styles:
   <style key="system.soft-palette"/>
   <style key="system.colors-on-black-palette"/>
   <style key="system.gray-scale"/>
   <style key="system.black-and-white"/>

! text uses carriage return (13, 0xd) line endings

! node positioning via x="640" y="480"
   ! absolute coordinates
   ! negative y is up (?)
      ! <text guid="Sq_5En0MKWsRaonGi-s9PQ" x="500.48" y="-302.45">


! nodes have ids and guids
   ! id="0"
   ! guid="Sq_5En0MKWsRaonGi-s9PQ"
      ! 22 chars
      ! lower- and uppercase letters, numbers, '-', '_'
      ! may start with a number
   ! parent="1"
      ! "-1" if no parent


! xml can contain multiple <mindmap> elements

! <main-centraltheme id="0"/>
   ! in <meta> area


! <topics>
   ! <topic id="0" parent="-1" guid="57r6qQ6ZPCXZjU2aT6BFPw" x="511.00" y="489.00" palette="1" colorinfo="1" text="offline created mindmap" textfmt="plain">
   ! <topic id="1" parent="0" guid="5541hNL_YQCLBDOaKrJemw" x="442.00" y="654.00" palette="2" colorinfo="2" text="hello" textfmt="plain"/>


! callout text boxes via <children><text><note textfmt="plain">..text..</note><style>
   <style callout="line"/>

! links to other documents via <topic><link></topic>
   ! <link cloudmapref="./projects/project overview.smmx" />
   ! <link urllink="F:\tmp\bla.txt"/>
   ! <link urllink="http://www.google.de"/>
      ! http://www.google.de


! list layout subtrees
   <topic id="2" parent="1" guid="IKLcGrYLlUqOalSHLm9vrg" x="619.00" y="729.00" layout="list" text="list header node" textfmt="plain"/>
   <topic id="3" parent="2" x="627.50" y="773.56" text="list item 1" textfmt="plain"/>
   <topic id="4" parent="2" x="628.00" y="818.12" text="list item 2" textfmt="plain"/>

! image callouts
   ! <meta><images containsImages="True"/></meta>
   ! image callouts via
      <topic>
      <children>
      <image>
      <link/>
      </image>
      </children>
      <images>
      <image>
      <link/>
      </image>
      </images>
      </topic>

      ! the <image> and <link> elements occur twice with the exact same attributes
         <image guid="0XdeoV8J8EaLgiKLfF8Y0w" name="3d6d5f9bb409d574bce32895d14009ee82f96783" x="40.00" y="-56.39" scale="1.00" angle="0.00">
         <link urllink="cloud://../SimpleMind/Images/001.png"/>


! embedded images (shown within topic box)
   <topic>
   <embedded-image name="7cc794179eebf8ac8e38847d07d363e642cdbdc8" scale="1.875"/>
   </topic>

! icons
   ic8_48_roadworks       construction
   ic8_48_hammer          hammer
   ic8_48_information     info
   ic8_48_question        question
   ic8_48_ok              done
   ic8_48_delete          X
   ic8_48_finish_flag     goal
   ic8_48_red_flag        checkpoint red
   ic8_48_yellow_flag     checkpoint yellow
   ic8_48_green_flag      checkpoint green
   ic8_48_light_on        idea
   ic8_48_construction    deadend
   ic8_48_ladybird        bug
   ic8_48_attach          attachment
   ic8_48_tools           hammer and screwdriver
   ic8_48_favorite        star
   ic8_48_emoticon_heart  heart
   ic8_48_emoticon_happy  smiley
   ic8_48_emoticon_wink   wink
   ic8_48_emoticon_lol    laugh
   ic8_48_neutral         umpf
   ic8_48_emoticon_sad    frown
   ic8_48_emoticon_crying cry
   ic8_48_pencil          edit
   ic8_48_shopping_cart   shopping cart
   ic8_48_book_open       book
   ic8_48_phone           phone
   ic8_48_music           music
   ic8_48_youtube         video
   ic8_48_email           URL

    ! <topic id="15" parent="1" guid="GlRMzKvA3kKqqmQoa5lGwA" x="738.57" y="1231.43" icon="ic8_48_attach" text="attachment" textfmt="plain">
    ! icons are pixel images (not svgs)                                  :note:


! relations
   ! occurs after <topics> tree
   ! <relations>
      <relation guid="4jiVSrHpIEKGTK578BNFTw" source="2" target="3">
      <path>
      <custom-point x="-1.88" y="36.25"/>   <--  relative coordinate (does not change when both nodes are moved)
      </path>
      </relation>
      </relations>


! checkboxes
! progress bars
    ! manual
    ! rollup


! calendar dates
   <topic id="3" parent="0" guid="QAe4hiO8dEa37JFdEh9E0Q" x="922.22" y="901.11" date="24-12-2020" text="xmas" textfmt="plain"/>


=============================================================================== index
* index
   :PROPERTIES:
   :was-main: t
   :smmx-position: 258.93;431.02
   :smmx-icon: arrow_left
   :END:
   ! [[../index.org]]



=============================================================================== org state info
* org sub-item types
   :PROPERTIES:
   :was-main: t
   :smmx-position: 974.34;-326.47
   :smmx-list: t
   :END:
   - -  (todo)
            - [#B] or TODO (prio B)
            - [#C] or TODO (prio C)
   o o (active)
            o [#A] or ACTV (prio A)
   - + (done)
            + or + (done) when "finish" date is available
   x x (dont)
   ! ! (info)
            ! or ! (info)
   ? ? (to-be-discussed / question)
   t t (test)
   w w (wait)
   ! > callout
      :PROPERTIES:
      :smmx-text-callout-position: 87.85;-60.4
      :END:
      > highlighted short note
      > (for UI tools like SimpleMind)

* org states
   :PROPERTIES:
   :was-main: t
   :smmx-position: 608.69;-174.13
   :smmx-list: t
   :END:
   ! IDEA
   - TODO
            - [#B] or TODO (prio B)
            - [#C] or TODO (prio C)
   o ACTV
      > aka NEXT
            o [#A] or ACTV (prio A)
   t TEST
   x DONT
   x IGNR
   - DONE
            + or + (done) when "finish" date is available
   w WAIT






=============================================================================== SMMX parser

* ACTV smmx parser [3/4] 
** DONE analyze file format
    > zip file with XML
    > and PNG data

** DONE tkzip plugin

** ACTV parse topics [9/10] 
    + id
    + guid
       > can be omitted
    + caption / title
    + style [9/9] 
       :PROPERTIES:
       :hide: 
       :END:
       + palette
       + colorinfo
       + fill color
       + border style
       + border width
       + stroke style
       + stroke color
       + text style
       ? text color
       + font scale
          :PROPERTIES:
          :smmx-text-callout-position: 34.55;-49.64
          :END:
          > point size / 10.0
    + [#A] convert smmx formatting to neutral format [5/5] 
       :PROPERTIES:
       :hide: 
       :END:
       > topic title, notes, text callout
       ! notes
          + textfmt="rtf1"
          + text="some *bold* text"                    :bold:
          + text="some /italic/ text"
          + text="some /underlined/ text"
             ! apparently a bug in the windows version of simplemind, should be _underlined_ text
          + text="some +strike-through+ text"
          + text="some subscript text"
             ! not converted to org (uses ^{some text} syntax, not displayed in emacs anyway)
          + text="some superscript text"
             ! not converted to org (uses _{some text} syntax, not displayed in emacs anyway)
          + "note" (callout or topic note) uses slightly different syntax, e.g. \* instead of *
       + bold
       + italic
       + underline
       + strikethrough
       x superscript
       x subscript
       + special handling for notes
    + note [1/1] 
       :PROPERTIES:
       :hide: 
       :END:
       + org-style properties
    o text note callouts [6/7] 
       + note
       + position
       + font scale
       + style
          > tapered, line, ..
       + fill color
       + text color
       o [#A] multiple callouts
    + image callout [5/5] 
       :PROPERTIES:
       :hide: 
       :END:
       + name
       + position
       + angle
       + extract image files
       + thumbnail
    + embedded image [2/2] 
       :PROPERTIES:
       :hide: 
       :END:
       > in topic box
       + name
       + scale
    + calendar date


** DONE parse relations [5/5] 
    :PROPERTIES:
    :hide: 
    :END:
    + any
    + parent
    + text callout [2/2] 
       + position
       + style [3/3] 
          > tapered, line, ..
          + textcolor
          + fillcolor
          + font scale
    + custom curve point
    + style [5/5] 
       :PROPERTIES:
       :hide: 
       :END:
       + shape
       + arrows
       + line style
       + line width
       + color



=============================================================================== SMMX to MarkDown

* DONE smmx to md [7/7] 
** DONE outline headers
** DONE list subtrees
** DONE topic note

** DONE text notes [1/1] 
    :PROPERTIES:
    :hide: 
    :END:
    + single note
    x multiple notes


** DONE image [2/2] 
    + callout
    + embedded


** DONE links [1/1] 
    :PROPERTIES:
    :hide: 
    :END:
    ! notes
       + link (none or local ref or URL "://" (cloud://, http://, ftp://, ..)
          ! editor supports only one link per node
    + replace .smmx by .html or .md


** DONE xrefs [3/3] 
    :PROPERTIES:
    :hide: 
    :END:
    + relations
    + parent-relation
    + relation callouts



=============================================================================== org parser

* DONE org parser [7/7] 
** DONE global properties
    configurable task names

** DONE document title
    :PROPERTIES:
    :smmx-text-callout-position: 47.78;-45.84
    :END:
    > #+TITLE: My Document


** DONE item header + meta data [4/4] 
    :PROPERTIES:
    :hide: 
    :END:
    + state
    + tags [2/2] 
       :PROPERTIES:
       :hide: 
       :END:
       + before title
          > my preference
       + after title
          > org-mode col 73
    + priority
    + rollup progress [3/3] 
       :PROPERTIES:
       :hide: 
       :END:
       * myitem [2/3]
       * myitem [50%]
       + percent
       + item count
       + recursive option
          > cookie_data property


** DONE nested headers **
** DONE general info nodes
    > above todo items
    > for arbitrary quick notes

** DONE todo.txt style task trees
    > !.-toxw+?>


** DONE node line data [6/6] 
    + text / note
    + callout lines
       > > callout
    + links
    x anchors <<>>
    + properties
       :PROPERTIES:
       :effort: 01:00
       :ordered: t
       :blocker: previous-sibling    or task_id
       :priority: 1000
       :allocate: dev
       :resource_id: doc
       :limits: { dailymax 6.4h }
       :smmx-text-callout-position: 36.6;-73.21
       :END:
       > time tracking
       > effort estimation
       > project planning
       > (taskjuggler)
       or
       CLOSED: <2020-12-24>
       clock time
       http://www.personal.psu.edu/bam49/notebook/org-mode-for-research/
       taskjuggler
       https://orgmode.org/worg/org-tutorials/org-taskjuggler.html
       http://taskjuggler.org/tj3/manual/Installation.html
       * mytask
       *** Peter Murphy
    + plan [4/4] 
       :PROPERTIES:
       :hide: 
       :END:
       + SCHEDULED
       + DEADLINE
       + build task dependencies
       + build resource list [1/1] 
          :PROPERTIES:
          :hide: 
          :END:
          x groups
             > use tags instead,
             > e.g. devs, hw, sw, pm, ..
          + resource availability [1/1] 
             > may be bound by
             > other projects
             + avail property
                > or limits extension
    + timestamps [3/3] 
       :PROPERTIES:
       :hide: 
       :END:
       + creation date
          > ! 06Jan2020
       + mod. dates
          > ! C:07Jan2020
       + finish date
          > ! F:06Jan2020



=============================================================================== org to org

* TODO org to org [0/1] 
   :PROPERTIES:
   :smmx-text-callout-position: 30.83;54.92
   :END:
   > echo

** ACTV cmdline options [1/3] 
    + filter
    o [#A] remove smmx properties
    o [#A] stop recursion at norecurse property



=============================================================================== org to smmx

* ACTV org to smmx [8/13] 

** DONE layout [5/5] 
    :PROPERTIES:
    :smmx-relation: target="org-sub-item-types" position=-54.29;-334.04 text="see" text-position=10.86;1.55 text-color=#ffffff text-fill-color=#d20000
    :smmx-relation: target="org-states" position=-85.22;-290.49 text="see" text-position=-6.21;-4.66 text-color=#ffffff text-fill-color=#d20000
    :END:
    ! notes
       + layout (none or "list")
    + use topdown layout
    + create pages when number of toplevel nodes exceeds 20
       > page nodes
    + global #+smmx-layout+ property
    + allow freeform layout when all nodes have positions
    + switch to list layout for child_nodes
       > todo.txt style trees


** DONE info nodes [3/3] 
    :PROPERTIES:
    :hide: 
    :smmx-text-callout-position: 54.41;-47.7
    :END:
    > before first task node
    ! virtual, not present in .org view
    + move info nodes to info main node
    + as "info" topic org note
    + or as "info" topic subtree (list)


** DONE root node [2/2] 
    ! virtual, not present in .org view
    + store global properties in note
    + store position in global property [1/1] 
       + #+smmx-root-position


** DONE main nodes
    > other freeform nodes


** IGNR item organization?
    :PROPERTIES:
    :hide: 
    :END:
    ! sort by tag, then by sequence index
    - by tag ? [0/1] 
       - [#B] need tag hierarchy [0/1] 
          - [#C] use tag order
    - by date ?


** DONE topic names [1/1] 
    :PROPERTIES:
    :hide: 
    :END:
    X adaptive font size
       > long title = small font
       + already done by ui
    x abbreviate
       :PROPERTIES:
       :smmx-text-callout-position: 65;-45.28
       :END:
       > remaining text becomes note
       ! can’t do that, needed for conversion back to .org
    + keep as-is


** ACTV progress [2/3] 
    + count
    o [#A] percent
    + cookie-data recursive


** DONE text lines [2/2] 
    > note
    + store textlines in note
    + [#A] convert org formatting to smmx [4/4] 
       :PROPERTIES:
       :hide: 
       :END:
       + bold
       + italic
       + underline
       + strikethrough


** DONE meta info [12/12] 
    :PROPERTIES:
    :hide: 
    :smmx-text-callout-position: 78.79;-49.79
    :END:
    > *store in note as org properties*
    + org-prio
       :PROPERTIES:
       :smmx-text-callout-position: 45;-44.95
       :END:
       > priority (A, B, C)
    + org-tags
       :PROPERTIES:
       :smmx-text-callout-position: 25;-49.11
       :END:
       > :tag:list:
    x original sequence index
    + org-scheduled
       :PROPERTIES:
       :smmx-text-callout-position: 4.17;-52.45
       :END:
       > SCHEDULED:
    + org-deadline
       > DEADLINE:
    x org-num-spaces
    x org-num-asterisks
    + org-layout list
       :PROPERTIES:
       :smmx-text-callout-position: 62.22;-49.95
       :END:
       > todo list style child nodes
    + org-empty-line-after-node
    + ! date
    + ! Cdate
       :PROPERTIES:
       :smmx-text-callout-position: 63.28;-49.79
       :END:
       > multiple occurences
    + ! Fdate
    + generic properties
       ! task_id, resource_id, allocate, vacation, ..
          :PROPERTIES:
          :smmx-text-callout-position: 40;-51.45
          :smmx-text-callout-fill-color: #ffffff
          :END:
          > e.g. taskjuggler attribs
    + smmx-calendar-date-type
       :PROPERTIES:
       :smmx-text-callout-position: 12.22;-46.61
       :END:
       > scheduled, deadline, create, finish
    + restore smmx attribs from properties [16/16] 
       :PROPERTIES:
       :hide: 
       :END:
       + global properties [3/3] 
          + #+smmx-info-position
             :PROPERTIES:
             :smmx-text-callout-position: -15.56;-47.72
             :END:
             > x;y
          + #+smmx-root-position
          + #+smmx-style-key
       + smmx-position
       + smmx-palette
       + smmx-colorinfo
       + smmx-icon
       + smmx-text-style
       + smmx-font-scale
       + smmx-list
       + smmx-list-md
       + smmx-hull-visible
       + smmx-collapsed [1/1] 
          + hide
             :PROPERTIES:
             :smmx-text-callout-position: 10;-47.72
             :END:
             > preferred name
       + smmx-fill-color
       + smmx-border-style
       + smmx-border-width
       + smmx-stroke-style
       + smmx-stroke-color
       x smmx-calendar-date


** DONE icon [3/3] 
    + state to icon [2/2] 
       + child nodes
       + sub tree nodes
    + restore from smmx-icon
    + resource_id [2/2] 
       :PROPERTIES:
       :hide: 
       :END:
       + resource_type [5/5] 
          :PROPERTIES:
          :hide: 
          :smmx-text-callout-position: 28.18;-51.46
          :END:
          > taskjuggler extension
          + male
          + female
          + group
          + manager
          + dev
       + generic resource icon
          :PROPERTIES:
          :smmx-text-callout-position: 48.32;-48.82
          :END:
          > unspecified :resource_type:


** ACTV links [2/3] 
    + first link becomes topic link
       > leaf nodes only
    + preserve link lists
       > multiple link info
       > child nodes
    o [#A] replace .org link suffix by .smmx


** ACTV callouts [1/2] 
    :PROPERTIES:
    :hide: 
    :END:
    + text note [6/6] 
       + text
       + smmx-text-callout-position
       + dont save default pos
          > 0;-50
       + smmx-text-callout-style
          > tapered, line, ..
       + smmx-text-callout-text-color
       + smmx-text-callout-fill-color
    - image


** TODO norecurse property [0/2] 
    :PROPERTIES:
    :hide: 
    :END:
    - skip subtree entirely [0/1] 
       > e.g. for PM
       - sum sub/child efforts and add to subtree header
    - OR export subtree as org-mode note
       > temporarly hide / collapse technical details


** ACTV cmdline options [1/3] 
    :PROPERTIES:
    :hide: 
    :END:
    - fold all subitem branches
    + use rollup checkboxes when item has subitems
    o filter [1/4] 
       + filter by tags [2/2] 
          + any
          + all
       - filter by state
       - filter by date
       - keep parent nodes during export
          > for merge later on


** DONT merge mode
    :PROPERTIES:
    :hide: 
    :END:
    > keep smmx layout of
    > unchanged nodes
    ! or to md, merge, back to smmx



=============================================================================== SMMX to Org

* ACTV smmx to org [5/9] 

** DONE global properties [3/3] 
    :PROPERTIES:
    :hide: 
    :END:
    + smmx-info-position
    + smmx-root-position
    + smmx-style-key
    ? smmx-layout


** DONE info node note to child hierarchy [1/1] 
    + parse properties


** DONE topic properties [14/14] 
    :PROPERTIES:
    :hide: 
    :END:
    + smmx-position [1/1] 
       + not when parent node uses list or top-down layout
    + smmx-palette
    + smmx-colorinfo
    + smmx-text-style
    + smmx-text-scale
    + smmx-list
    + smmx-list-md
    + smmx-hull-visible
       :PROPERTIES:
       :smmx-text-callout-position: 10;-49.95
       :END:
       > show branch borders
    + smmx-collapsed
    + smmx-fill-color
    + smmx-border-style
       "sbsNone"
       "sbsHalfRound"
       "sbsDropRoundRect"
       "sbsRoundRect"
    + smmx-border-width
    + smmx-stroke-style
       "solid",
       "dash-s",
       "dash-m",
       "dash-l"
    + smmx-stroke-color
    x text wrap pos
       > via
       > => remove


** DONE icon to state [3/3] 
    :PROPERTIES:
    :hide: 
    :END:
    + task state
    + priority [3/3] 
       + next (a)
       + later (b)
       + nice to have (c)
    + resource type
       > when resource-id is present


** ACTV checkbox to item state [1/2] 
    + override when checked / DONE
    o rollup progress [1/2] 
       + count
       o [#A] percent


** ACTV text note [7/8] 
    + text
    + callout text to "> description" line
    + smmx-text-callout-position
       > relative coordinate
    + smmx-text-callout-style
       "line",
       "tapered"
    + smmx-text-callout-text-color
    + smmx-text-callout-font-scale
    + smmx-text-callout-fill-color
    - [#A] multiple notes [0/1] 
       - merge


** DONE icon
    :PROPERTIES:
    :smmx-text-callout-position: 86.98;-57.39
    :END:
    > converted to org state (if available)
    > preserve custom icon otherwise


** ACTV links [1/2] 
    + link to info node
    o [#A] replace .smmx suffix by .org


** ACTV preserve smmx properties [2/3] 
    > convert to org-mode properties
    + embedded-image [2/2] 
       :PROPERTIES:
       :hide: 
       :END:
       + name
       + scale
    + image [6/6] 
       :PROPERTIES:
       :hide: 
       :END:
       + name
       + thumbnail
          > preview
       + external links
       + scale
       + angle
       + extract to local fs
    o xref relations [9/10] 
       > out of tree nodes
       x create links and <<anchors>>
       + target
       + parent
       + store id properties when needed [1/1] 
          :PROPERTIES:
          :hide: 
          :END:
          + generate anchors from title
       - position
          > path custom point
       + line-style
       + target-arrow
       + source arrow
       + line-width
       + color
       + text callout



=============================================================================== org merge

* TODO org merge [0/2] 
   :PROPERTIES:
   :hide: 
   :END:
** NOTE merge items from one org file into another
    > e.g. after editing a
    > filtered view

** TODO find insert points
** TODO find moved nodes



=============================================================================== conversion manager

* IDEA conversion manager
   :PROPERTIES:
   :hide: 
   :END:
** NOTE set project directory
    :PROPERTIES:
    :smmx-text-callout-position: 91.88;-53.33
    :END:
    > contains .org, .smmx, .md, .html files


** NOTE check file modification dates
    - check dir modification date (reflects last file modification on windows)


** QUES create backup-<date>.zip before auto-conversion
    ? or copy target file to cyclic backup dir ?
    ? org push to git


** NOTE auto-convert newer to older files
    - smmx => org
    - org => smmx
    - md => html


** NOTE manually convert
    + smmx => md
    + html => docx



=============================================================================== org scheduler

* IDEA org scheduler
   :PROPERTIES:
   :hide: 
   :END:
** NOTE find dependencies
** NOTE place tasks on timeline



------------------------------------------------------------------------------- org plan to HTML

* IDEA org plan to html
   :PROPERTIES:
   :hide: 
   :END:

** TODO project plan [0/2] 
    - Gantt graphs [0/2] 
       - via tables
       - later JS editable graphs [0/1] 
          > nsc?
          - copy new org file to clipboard
    - stats [0/3] 
       - total effort
       - total effort by tag
       - total effort by resource


** TODO task list / outline [0/1] 
    > can be imported to word
    > e.g. for technical proposals
    - enumerate


** TODO milestones [0/1] 
    - releases



............................................................................... org to xlsx

* IDEA org to xlsx
   :PROPERTIES:
   :hide: 
   :END:
** TODO tkxlsx plugin
    > via libxlsxwriter
    ! [[https://libxlsxwriter.github.io/tutorial01.html]]

** TODO WBS export
** DONE Gantt graph project plan export
    ! Gantt graphs in Excel
       :PROPERTIES:
       :was-main: t
       :END:
       ! [[https://support.office.com/en-us/article/present-your-data-in-a-gantt-chart-in-excel-f8910ab4-ceda-4521-8207-f0fb34d9e2b6]]



............................................................................... org to csv

* IDEA org to csv


............................................................................... org to source

* IDEA org to source
   :PROPERTIES:
   :hide: 
   :END:
** TODO .h or .tks output suffix

** TODO classes [0/5] 
    - exceptions
    - defines
    - enums
    - members [0/1] 
       - type [0/2] 
          - static
          - non-static
    o methods [1/2] 
       - type [0/2] 
          - static
          - non-static
       + add <method_*.png> decorator depending on method name
          ! method_*.png


** TODO modules [0/2] 
    - multi module
    - extract dirname from output path


** TODO project templates [0/3] 
    - YAC plugin
    - console app
    - UI app

