From ee08550a8d04f2a0d82aff319eeaa415046ca695 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Mon, 12 Jun 2023 13:23:37 +0700 Subject: [PATCH] Move sources Signed-off-by: Andrey Sobolev --- .../Images => Images}/add_item_copy_style.png | Bin .../docs/Images => Images}/add_new_item.png | Bin .../docs/Images => Images}/attach_image.png | Bin .../docs/Images => Images}/body_all.png | Bin .../docs/Images => Images}/color-table.png | Bin .../docs/Images => Images}/context_menu.png | Bin .../Images => Images}/copy_paste_images.png | Bin .../docs/Images => Images}/corner-radius.png | Bin .../docs/Images => Images}/corner.png | Bin .../diagram_quick_styles.png | Bin .../docs/Images => Images}/display.png | Bin .../docs/Images => Images}/display_prop.png | Bin .../Images => Images}/draw_line_items.png | Bin .../docs/Images => Images}/duplicate_item.png | Bin .../edit_title_body_value.png | Bin .../docs/Images => Images}/elements_menu.png | Bin .../docs/Images => Images}/font_size.png | Bin .../docs/Images => Images}/general_info.png | Bin .../docs/Images => Images}/line_styles.png | Bin .../docs/Images => Images}/links_variants.png | Bin .../docs/Images => Images}/main_screen.png | Bin .../Images => Images}/markdown-support.png | Bin .../docs/Images => Images}/markdown_bold.png | Bin .../docs/Images => Images}/markdown_code.png | Bin .../docs/Images => Images}/markdown_color.png | Bin .../Images => Images}/markdown_color_word.png | Bin .../Images => Images}/markdown_font_size.png | Bin .../Images => Images}/markdown_italic.png | Bin .../Images => Images}/markdown_scratches.png | Bin .../Images => Images}/markdown_topics.png | Bin .../Images => Images}/markdown_underline.png | Bin .../Images => Images}/quad-line-style.png | Bin .../Images => Images}/quickbar_multiitems.png | Bin .../docs/Images => Images}/styling_items.png | Bin .../Images => Images}/text-colors-dark.png | Bin .../docs/Images => Images}/text-colors.png | Bin .../docs/Images => Images}/text-layout.png | Bin .../docs/Images => Images}/textual_styles.png | Bin .../docs/Images => Images}/use-style-menu.png | Bin .../docs/Images => Images}/use-style.png | Bin .../Images => Images}/use_images_props.png | Bin .../docs/Images => Images}/width_height.png | Bin .../project.pbxproj | 13 +- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../IDEFindNavigatorScopes.plist | 0 .../WorkspaceSettings.xcsettings | 0 .../xcdebugger/Expressions.xcexplist | 0 ...E9E73BBE-9D7D-4DA2-9F28-836F75E242A3.plist | 0 ...F82F6A0F-EF8C-4BDD-84BB-291B225DDC12.plist | 0 .../Info.plist | 0 .../xcshareddata/xcschemes/Tenniarb.xcscheme | 0 .../xcschemes/xcschememanagement.plist | 0 .../xcschemes/xcschememanagement.plist | 0 .../xcschemes/xcschememanagement.plist | 0 .../Tenniarb => Tenniarb}/.vscode/launch.json | 0 .../.vscode/settings.json | 0 .../Tenniarb => Tenniarb}/AppDelegate.swift | 0 .../Tenniarb => Tenniarb}/Application.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/Icon.png | Bin .../AppIcon.appiconset/Icon@2x.png | Bin .../Assets.xcassets/Contents.json | 0 .../Icon.iconset/icon_512x512.png | Bin .../element_logo.imageset/Contents.json | 0 .../element_logo.imageset/element_logo.png | Bin .../element_logo_white.imageset/Contents.json | 0 .../element_logo_white.png | Bin .../html_logo.imageset/Contents.json | 0 .../html_logo.imageset/html_logo.png | Bin .../ico-component.imageset/Contents.json | 0 .../ico-component.imageset/ico-component.png | Bin .../ico-group.imageset/Contents.json | 0 .../ico-group.imageset/ico-group.png | Bin .../json_logo.imageset/Contents.json | 0 .../json_logo.imageset/json_logo.png | Bin .../minus.imageset/Contents.json | 0 .../Assets.xcassets/minus.imageset/minus.png | Bin .../pdf_logo.imageset/Contents.json | 0 .../pdf_logo.imageset/pdf_logo.png | Bin .../plus.imageset/Contents.json | 0 .../Assets.xcassets/plus.imageset/plus.png | Bin .../png_logo.imageset/Contents.json | 0 .../png_logo.imageset/png_logo.png | Bin .../small_logo_white.imageset/Contents.json | 0 .../small_logo_white.png | Bin .../Base.lproj/Main.storyboard | 36 +- .../Tenniarb => Tenniarb}/ColorNames.swift | 0 .../ElementPersistence.swift | 0 .../Tenniarb => Tenniarb}/ElementScene.swift | 0 .../Experiments/SceneDraw3D.swift | 0 .../Tenniarb/Tenniarb => Tenniarb}/Info.plist | 0 .../Outline-ViewController-Extension.swift | 0 .../Preview Content/DemoData.swift | 0 .../Tenniarb => Tenniarb}/SceneDrawView.swift | 0 .../Tenniarb => Tenniarb}/SceneMath.swift | 0 .../SroreKitConfiguration.storekit | 0 .../Tenniarb => Tenniarb}/TennIco.icns | Bin .../Tenniarb.entitlements | 0 .../TextPropertiesDelegate.swift | 0 .../Utils/ClipboardUtils.swift | 0 .../Utils/ColorUtils.swift | 0 .../Utils/ImageUtils.swift | 0 .../ViewController.swift | 0 .../WindowController.swift | 0 .../Tenniarb => Tenniarb}/WordsView.swift | 0 .../document/Document.swift | 0 .../document/extensions/SyncExtension.swift | 0 .../document/layout/GridLayout.swift | 0 .../document/layout/LayoutBase.swift | 0 .../document/layout/SpringLayout.swift | 0 .../document/layout/TreeLayout.swift | 0 .../document/markdown/MarkdownParser.swift | 0 .../document/markdown/MarkdownPrinter.swift | 0 .../document/tenn/AttributedPrinter.swift | 0 .../document/tenn/SlowLexer.swift | 0 .../document/tenn/TennLexer.swift | 0 .../document/tenn/TennLexerModel.swift | 0 .../document/tenn/TennModel.swift | 0 .../document/tenn/TennParser.swift | 0 .../document/tenn/TennPrinter.swift | 0 .../Tenniarb => Tenniarb}/mainView.swift | 0 .../model/ElementModel.swift | 0 .../model/ElementOperations.swift | 0 .../model/ElementProperties.swift | 0 .../model/ExecutionModel.swift | 0 .../views/ExportManager.swift | 0 .../views/HelpController.swift | 0 .../views/OperationController.swift | 0 .../views/PreferencesController.swift | 0 .../views/ResourcesViewController.swift | 0 .../views/SearchBoxController.swift | 0 .../views/SourcePopoverViewController.swift | 0 .../views/StyleManager.swift | 0 .../views/SyncViewController.swift | 0 .../Info.plist | 0 .../MarkDownTests.swift | 0 .../PerformanceTests.swift | 0 .../PersistenceTests.swift | 0 .../SampleElementModels.swift | 0 .../TennTests.swift | 0 .../TenniarbTests.swift | 0 .../svh-generate/TestSVGGenerate.swift | 0 .../Info.plist | 0 .../TenniarbUITests.swift | 0 .../macos/Tenniarb/docs => docs}/Changelog.md | 0 .../macos/Tenniarb/docs => docs}/Example.tenn | 0 .../macos/Tenniarb/docs => docs}/examples.md | 0 .../macos/Tenniarb/docs => docs}/readme.html | 0 readme.md | 613 +++++++++++++++++- sources/macos/.DS_Store | Bin 6148 -> 6148 bytes sources/macos/Tenniarb/.DS_Store | Bin 6148 -> 8196 bytes .../UserInterfaceState.xcuserstate | Bin 239545 -> 0 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 408 ------------ sources/macos/Tenniarb/docs/readme.md | 613 ------------------ 156 files changed, 634 insertions(+), 1049 deletions(-) rename {sources/macos/Tenniarb/docs/Images => Images}/add_item_copy_style.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/add_new_item.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/attach_image.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/body_all.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/color-table.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/context_menu.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/copy_paste_images.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/corner-radius.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/corner.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/diagram_quick_styles.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/display.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/display_prop.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/draw_line_items.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/duplicate_item.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/edit_title_body_value.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/elements_menu.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/font_size.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/general_info.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/line_styles.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/links_variants.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/main_screen.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown-support.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_bold.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_code.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_color.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_color_word.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_font_size.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_italic.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_scratches.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_topics.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/markdown_underline.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/quad-line-style.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/quickbar_multiitems.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/styling_items.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/text-colors-dark.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/text-colors.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/text-layout.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/textual_styles.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/use-style-menu.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/use-style.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/use_images_props.png (100%) rename {sources/macos/Tenniarb/docs/Images => Images}/width_height.png (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/project.pbxproj (99%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/IDEFindNavigatorScopes.plist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/WorkspaceSettings.xcsettings (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/xcdebugger/Expressions.xcexplist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/E9E73BBE-9D7D-4DA2-9F28-836F75E242A3.plist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/F82F6A0F-EF8C-4BDD-84BB-291B225DDC12.plist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/Info.plist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/xcshareddata/xcschemes/Tenniarb.xcscheme (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/xcuserdata/andrey.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/xcuserdata/andreysobolev.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename {sources/macos/Tenniarb/Tenniarb.xcodeproj => Tenniarb.xcodeproj}/xcuserdata/haiodo.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/.vscode/launch.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/.vscode/settings.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/AppDelegate.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Application.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/AppIcon.appiconset/Icon.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/AppIcon.appiconset/Icon@2x.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/Icon.iconset/icon_512x512.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/element_logo.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/element_logo.imageset/element_logo.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/element_logo_white.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/element_logo_white.imageset/element_logo_white.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/html_logo.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/html_logo.imageset/html_logo.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/ico-component.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/ico-component.imageset/ico-component.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/ico-group.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/ico-group.imageset/ico-group.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/json_logo.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/json_logo.imageset/json_logo.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/minus.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/minus.imageset/minus.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/pdf_logo.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/pdf_logo.imageset/pdf_logo.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/plus.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/plus.imageset/plus.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/png_logo.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/png_logo.imageset/png_logo.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/small_logo_white.imageset/Contents.json (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Assets.xcassets/small_logo_white.imageset/small_logo_white.png (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Base.lproj/Main.storyboard (99%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/ColorNames.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/ElementPersistence.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/ElementScene.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Experiments/SceneDraw3D.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Info.plist (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Outline-ViewController-Extension.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Preview Content/DemoData.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/SceneDrawView.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/SceneMath.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/SroreKitConfiguration.storekit (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/TennIco.icns (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Tenniarb.entitlements (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/TextPropertiesDelegate.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Utils/ClipboardUtils.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Utils/ColorUtils.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/Utils/ImageUtils.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/ViewController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/WindowController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/WordsView.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/Document.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/extensions/SyncExtension.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/layout/GridLayout.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/layout/LayoutBase.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/layout/SpringLayout.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/layout/TreeLayout.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/markdown/MarkdownParser.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/markdown/MarkdownPrinter.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/tenn/AttributedPrinter.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/tenn/SlowLexer.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/tenn/TennLexer.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/tenn/TennLexerModel.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/tenn/TennModel.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/tenn/TennParser.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/document/tenn/TennPrinter.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/mainView.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/model/ElementModel.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/model/ElementOperations.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/model/ElementProperties.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/model/ExecutionModel.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/ExportManager.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/HelpController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/OperationController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/PreferencesController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/ResourcesViewController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/SearchBoxController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/SourcePopoverViewController.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/StyleManager.swift (100%) rename {sources/macos/Tenniarb/Tenniarb => Tenniarb}/views/SyncViewController.swift (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/Info.plist (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/MarkDownTests.swift (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/PerformanceTests.swift (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/PersistenceTests.swift (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/SampleElementModels.swift (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/TennTests.swift (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/TenniarbTests.swift (100%) rename {sources/macos/Tenniarb/TenniarbTests => TenniarbTests}/svh-generate/TestSVGGenerate.swift (100%) rename {sources/macos/Tenniarb/TenniarbUITests => TenniarbUITests}/Info.plist (100%) rename {sources/macos/Tenniarb/TenniarbUITests => TenniarbUITests}/TenniarbUITests.swift (100%) rename {sources/macos/Tenniarb/docs => docs}/Changelog.md (100%) rename {sources/macos/Tenniarb/docs => docs}/Example.tenn (100%) rename {sources/macos/Tenniarb/docs => docs}/examples.md (100%) rename {sources/macos/Tenniarb/docs => docs}/readme.html (100%) delete mode 100644 sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 sources/macos/Tenniarb/docs/readme.md diff --git a/sources/macos/Tenniarb/docs/Images/add_item_copy_style.png b/Images/add_item_copy_style.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/add_item_copy_style.png rename to Images/add_item_copy_style.png diff --git a/sources/macos/Tenniarb/docs/Images/add_new_item.png b/Images/add_new_item.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/add_new_item.png rename to Images/add_new_item.png diff --git a/sources/macos/Tenniarb/docs/Images/attach_image.png b/Images/attach_image.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/attach_image.png rename to Images/attach_image.png diff --git a/sources/macos/Tenniarb/docs/Images/body_all.png b/Images/body_all.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/body_all.png rename to Images/body_all.png diff --git a/sources/macos/Tenniarb/docs/Images/color-table.png b/Images/color-table.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/color-table.png rename to Images/color-table.png diff --git a/sources/macos/Tenniarb/docs/Images/context_menu.png b/Images/context_menu.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/context_menu.png rename to Images/context_menu.png diff --git a/sources/macos/Tenniarb/docs/Images/copy_paste_images.png b/Images/copy_paste_images.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/copy_paste_images.png rename to Images/copy_paste_images.png diff --git a/sources/macos/Tenniarb/docs/Images/corner-radius.png b/Images/corner-radius.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/corner-radius.png rename to Images/corner-radius.png diff --git a/sources/macos/Tenniarb/docs/Images/corner.png b/Images/corner.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/corner.png rename to Images/corner.png diff --git a/sources/macos/Tenniarb/docs/Images/diagram_quick_styles.png b/Images/diagram_quick_styles.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/diagram_quick_styles.png rename to Images/diagram_quick_styles.png diff --git a/sources/macos/Tenniarb/docs/Images/display.png b/Images/display.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/display.png rename to Images/display.png diff --git a/sources/macos/Tenniarb/docs/Images/display_prop.png b/Images/display_prop.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/display_prop.png rename to Images/display_prop.png diff --git a/sources/macos/Tenniarb/docs/Images/draw_line_items.png b/Images/draw_line_items.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/draw_line_items.png rename to Images/draw_line_items.png diff --git a/sources/macos/Tenniarb/docs/Images/duplicate_item.png b/Images/duplicate_item.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/duplicate_item.png rename to Images/duplicate_item.png diff --git a/sources/macos/Tenniarb/docs/Images/edit_title_body_value.png b/Images/edit_title_body_value.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/edit_title_body_value.png rename to Images/edit_title_body_value.png diff --git a/sources/macos/Tenniarb/docs/Images/elements_menu.png b/Images/elements_menu.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/elements_menu.png rename to Images/elements_menu.png diff --git a/sources/macos/Tenniarb/docs/Images/font_size.png b/Images/font_size.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/font_size.png rename to Images/font_size.png diff --git a/sources/macos/Tenniarb/docs/Images/general_info.png b/Images/general_info.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/general_info.png rename to Images/general_info.png diff --git a/sources/macos/Tenniarb/docs/Images/line_styles.png b/Images/line_styles.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/line_styles.png rename to Images/line_styles.png diff --git a/sources/macos/Tenniarb/docs/Images/links_variants.png b/Images/links_variants.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/links_variants.png rename to Images/links_variants.png diff --git a/sources/macos/Tenniarb/docs/Images/main_screen.png b/Images/main_screen.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/main_screen.png rename to Images/main_screen.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown-support.png b/Images/markdown-support.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown-support.png rename to Images/markdown-support.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_bold.png b/Images/markdown_bold.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_bold.png rename to Images/markdown_bold.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_code.png b/Images/markdown_code.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_code.png rename to Images/markdown_code.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_color.png b/Images/markdown_color.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_color.png rename to Images/markdown_color.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_color_word.png b/Images/markdown_color_word.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_color_word.png rename to Images/markdown_color_word.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_font_size.png b/Images/markdown_font_size.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_font_size.png rename to Images/markdown_font_size.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_italic.png b/Images/markdown_italic.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_italic.png rename to Images/markdown_italic.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_scratches.png b/Images/markdown_scratches.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_scratches.png rename to Images/markdown_scratches.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_topics.png b/Images/markdown_topics.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_topics.png rename to Images/markdown_topics.png diff --git a/sources/macos/Tenniarb/docs/Images/markdown_underline.png b/Images/markdown_underline.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/markdown_underline.png rename to Images/markdown_underline.png diff --git a/sources/macos/Tenniarb/docs/Images/quad-line-style.png b/Images/quad-line-style.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/quad-line-style.png rename to Images/quad-line-style.png diff --git a/sources/macos/Tenniarb/docs/Images/quickbar_multiitems.png b/Images/quickbar_multiitems.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/quickbar_multiitems.png rename to Images/quickbar_multiitems.png diff --git a/sources/macos/Tenniarb/docs/Images/styling_items.png b/Images/styling_items.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/styling_items.png rename to Images/styling_items.png diff --git a/sources/macos/Tenniarb/docs/Images/text-colors-dark.png b/Images/text-colors-dark.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/text-colors-dark.png rename to Images/text-colors-dark.png diff --git a/sources/macos/Tenniarb/docs/Images/text-colors.png b/Images/text-colors.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/text-colors.png rename to Images/text-colors.png diff --git a/sources/macos/Tenniarb/docs/Images/text-layout.png b/Images/text-layout.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/text-layout.png rename to Images/text-layout.png diff --git a/sources/macos/Tenniarb/docs/Images/textual_styles.png b/Images/textual_styles.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/textual_styles.png rename to Images/textual_styles.png diff --git a/sources/macos/Tenniarb/docs/Images/use-style-menu.png b/Images/use-style-menu.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/use-style-menu.png rename to Images/use-style-menu.png diff --git a/sources/macos/Tenniarb/docs/Images/use-style.png b/Images/use-style.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/use-style.png rename to Images/use-style.png diff --git a/sources/macos/Tenniarb/docs/Images/use_images_props.png b/Images/use_images_props.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/use_images_props.png rename to Images/use_images_props.png diff --git a/sources/macos/Tenniarb/docs/Images/width_height.png b/Images/width_height.png similarity index 100% rename from sources/macos/Tenniarb/docs/Images/width_height.png rename to Images/width_height.png diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.pbxproj b/Tenniarb.xcodeproj/project.pbxproj similarity index 99% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/project.pbxproj rename to Tenniarb.xcodeproj/project.pbxproj index 73cc47f..918787d 100644 --- a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.pbxproj +++ b/Tenniarb.xcodeproj/project.pbxproj @@ -169,7 +169,7 @@ 0C439D24200337AB0031AE78 /* ElementProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ElementProperties.swift; path = model/ElementProperties.swift; sourceTree = ""; }; 0C45B12822A397BE00640305 /* examples.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = examples.md; sourceTree = ""; }; 0C45B12A22A397BE00640305 /* main_screen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = main_screen.png; sourceTree = ""; }; - 0C45B12B22A397BE00640305 /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = readme.md; sourceTree = ""; }; + 0C45B12B22A397BE00640305 /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = readme.md; path = ../readme.md; sourceTree = ""; }; 0C4C16071F2E369A000C5410 /* LayoutBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayoutBase.swift; sourceTree = ""; }; 0C4F0EC524C74B340065918D /* TestSVGGenerate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestSVGGenerate.swift; sourceTree = ""; }; 0C4F0EC724C74BB10065918D /* Example.tenn */ = {isa = PBXFileReference; lastKnownFileType = text; name = Example.tenn; path = ../../docs/Example.tenn; sourceTree = ""; }; @@ -470,8 +470,7 @@ 0CD1709922D5BB6400E217D4 /* width_height.png */, 0C45B12A22A397BE00640305 /* main_screen.png */, ); - name = Images; - path = docs/Images; + path = Images; sourceTree = SOURCE_ROOT; }; 0C4C16061F2E3685000C5410 /* layout */ = { @@ -986,7 +985,7 @@ CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 46; + CURRENT_PROJECT_VERSION = 47; DEVELOPMENT_ASSET_PATHS = "Tenniarb/Preview\\ Content"; DEVELOPMENT_TEAM = 594YM2Y457; ENABLE_HARDENED_RUNTIME = YES; @@ -997,7 +996,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 1.3; + MARKETING_VERSION = 1.3.1; PRODUCT_BUNDLE_IDENTIFIER = andrey.sobolev.Tenniarb; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1016,7 +1015,7 @@ CODE_SIGN_IDENTITY = "Mac Developer"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 46; + CURRENT_PROJECT_VERSION = 47; DEVELOPMENT_ASSET_PATHS = "Tenniarb/Preview\\ Content"; DEVELOPMENT_TEAM = 594YM2Y457; ENABLE_HARDENED_RUNTIME = YES; @@ -1027,7 +1026,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.0; - MARKETING_VERSION = 1.3; + MARKETING_VERSION = 1.3.1; PRODUCT_BUNDLE_IDENTIFIER = andrey.sobolev.Tenniarb; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tenniarb.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Tenniarb.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to Tenniarb.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/IDEFindNavigatorScopes.plist b/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/IDEFindNavigatorScopes.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/IDEFindNavigatorScopes.plist rename to Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/IDEFindNavigatorScopes.plist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/WorkspaceSettings.xcsettings b/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/WorkspaceSettings.xcsettings similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/WorkspaceSettings.xcsettings rename to Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/WorkspaceSettings.xcsettings diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/xcdebugger/Expressions.xcexplist b/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/xcdebugger/Expressions.xcexplist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/xcdebugger/Expressions.xcexplist rename to Tenniarb.xcodeproj/project.xcworkspace/xcuserdata/haiodo.xcuserdatad/xcdebugger/Expressions.xcexplist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/E9E73BBE-9D7D-4DA2-9F28-836F75E242A3.plist b/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/E9E73BBE-9D7D-4DA2-9F28-836F75E242A3.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/E9E73BBE-9D7D-4DA2-9F28-836F75E242A3.plist rename to Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/E9E73BBE-9D7D-4DA2-9F28-836F75E242A3.plist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/F82F6A0F-EF8C-4BDD-84BB-291B225DDC12.plist b/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/F82F6A0F-EF8C-4BDD-84BB-291B225DDC12.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/F82F6A0F-EF8C-4BDD-84BB-291B225DDC12.plist rename to Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/F82F6A0F-EF8C-4BDD-84BB-291B225DDC12.plist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/Info.plist b/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/Info.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/Info.plist rename to Tenniarb.xcodeproj/xcshareddata/xcbaselines/0C5C6D191EFF655B00714971.xcbaseline/Info.plist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcschemes/Tenniarb.xcscheme b/Tenniarb.xcodeproj/xcshareddata/xcschemes/Tenniarb.xcscheme similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/xcshareddata/xcschemes/Tenniarb.xcscheme rename to Tenniarb.xcodeproj/xcshareddata/xcschemes/Tenniarb.xcscheme diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/andrey.xcuserdatad/xcschemes/xcschememanagement.plist b/Tenniarb.xcodeproj/xcuserdata/andrey.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/andrey.xcuserdatad/xcschemes/xcschememanagement.plist rename to Tenniarb.xcodeproj/xcuserdata/andrey.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/andreysobolev.xcuserdatad/xcschemes/xcschememanagement.plist b/Tenniarb.xcodeproj/xcuserdata/andreysobolev.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/andreysobolev.xcuserdatad/xcschemes/xcschememanagement.plist rename to Tenniarb.xcodeproj/xcuserdata/andreysobolev.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcschemes/xcschememanagement.plist b/Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcschemes/xcschememanagement.plist rename to Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/sources/macos/Tenniarb/Tenniarb/.vscode/launch.json b/Tenniarb/.vscode/launch.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/.vscode/launch.json rename to Tenniarb/.vscode/launch.json diff --git a/sources/macos/Tenniarb/Tenniarb/.vscode/settings.json b/Tenniarb/.vscode/settings.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/.vscode/settings.json rename to Tenniarb/.vscode/settings.json diff --git a/sources/macos/Tenniarb/Tenniarb/AppDelegate.swift b/Tenniarb/AppDelegate.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/AppDelegate.swift rename to Tenniarb/AppDelegate.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Application.swift b/Tenniarb/Application.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Application.swift rename to Tenniarb/Application.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/AppIcon.appiconset/Contents.json b/Tenniarb/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Tenniarb/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon.png b/Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon.png rename to Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon@2x.png b/Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon@2x.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon@2x.png rename to Tenniarb/Assets.xcassets/AppIcon.appiconset/Icon@2x.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/Contents.json b/Tenniarb/Assets.xcassets/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/Contents.json rename to Tenniarb/Assets.xcassets/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/Icon.iconset/icon_512x512.png b/Tenniarb/Assets.xcassets/Icon.iconset/icon_512x512.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/Icon.iconset/icon_512x512.png rename to Tenniarb/Assets.xcassets/Icon.iconset/icon_512x512.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo.imageset/Contents.json b/Tenniarb/Assets.xcassets/element_logo.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo.imageset/Contents.json rename to Tenniarb/Assets.xcassets/element_logo.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo.imageset/element_logo.png b/Tenniarb/Assets.xcassets/element_logo.imageset/element_logo.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo.imageset/element_logo.png rename to Tenniarb/Assets.xcassets/element_logo.imageset/element_logo.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo_white.imageset/Contents.json b/Tenniarb/Assets.xcassets/element_logo_white.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo_white.imageset/Contents.json rename to Tenniarb/Assets.xcassets/element_logo_white.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo_white.imageset/element_logo_white.png b/Tenniarb/Assets.xcassets/element_logo_white.imageset/element_logo_white.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/element_logo_white.imageset/element_logo_white.png rename to Tenniarb/Assets.xcassets/element_logo_white.imageset/element_logo_white.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/html_logo.imageset/Contents.json b/Tenniarb/Assets.xcassets/html_logo.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/html_logo.imageset/Contents.json rename to Tenniarb/Assets.xcassets/html_logo.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/html_logo.imageset/html_logo.png b/Tenniarb/Assets.xcassets/html_logo.imageset/html_logo.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/html_logo.imageset/html_logo.png rename to Tenniarb/Assets.xcassets/html_logo.imageset/html_logo.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-component.imageset/Contents.json b/Tenniarb/Assets.xcassets/ico-component.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-component.imageset/Contents.json rename to Tenniarb/Assets.xcassets/ico-component.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-component.imageset/ico-component.png b/Tenniarb/Assets.xcassets/ico-component.imageset/ico-component.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-component.imageset/ico-component.png rename to Tenniarb/Assets.xcassets/ico-component.imageset/ico-component.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-group.imageset/Contents.json b/Tenniarb/Assets.xcassets/ico-group.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-group.imageset/Contents.json rename to Tenniarb/Assets.xcassets/ico-group.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-group.imageset/ico-group.png b/Tenniarb/Assets.xcassets/ico-group.imageset/ico-group.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/ico-group.imageset/ico-group.png rename to Tenniarb/Assets.xcassets/ico-group.imageset/ico-group.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/json_logo.imageset/Contents.json b/Tenniarb/Assets.xcassets/json_logo.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/json_logo.imageset/Contents.json rename to Tenniarb/Assets.xcassets/json_logo.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/json_logo.imageset/json_logo.png b/Tenniarb/Assets.xcassets/json_logo.imageset/json_logo.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/json_logo.imageset/json_logo.png rename to Tenniarb/Assets.xcassets/json_logo.imageset/json_logo.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/minus.imageset/Contents.json b/Tenniarb/Assets.xcassets/minus.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/minus.imageset/Contents.json rename to Tenniarb/Assets.xcassets/minus.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/minus.imageset/minus.png b/Tenniarb/Assets.xcassets/minus.imageset/minus.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/minus.imageset/minus.png rename to Tenniarb/Assets.xcassets/minus.imageset/minus.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/pdf_logo.imageset/Contents.json b/Tenniarb/Assets.xcassets/pdf_logo.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/pdf_logo.imageset/Contents.json rename to Tenniarb/Assets.xcassets/pdf_logo.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/pdf_logo.imageset/pdf_logo.png b/Tenniarb/Assets.xcassets/pdf_logo.imageset/pdf_logo.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/pdf_logo.imageset/pdf_logo.png rename to Tenniarb/Assets.xcassets/pdf_logo.imageset/pdf_logo.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/plus.imageset/Contents.json b/Tenniarb/Assets.xcassets/plus.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/plus.imageset/Contents.json rename to Tenniarb/Assets.xcassets/plus.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/plus.imageset/plus.png b/Tenniarb/Assets.xcassets/plus.imageset/plus.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/plus.imageset/plus.png rename to Tenniarb/Assets.xcassets/plus.imageset/plus.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/png_logo.imageset/Contents.json b/Tenniarb/Assets.xcassets/png_logo.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/png_logo.imageset/Contents.json rename to Tenniarb/Assets.xcassets/png_logo.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/png_logo.imageset/png_logo.png b/Tenniarb/Assets.xcassets/png_logo.imageset/png_logo.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/png_logo.imageset/png_logo.png rename to Tenniarb/Assets.xcassets/png_logo.imageset/png_logo.png diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/small_logo_white.imageset/Contents.json b/Tenniarb/Assets.xcassets/small_logo_white.imageset/Contents.json similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/small_logo_white.imageset/Contents.json rename to Tenniarb/Assets.xcassets/small_logo_white.imageset/Contents.json diff --git a/sources/macos/Tenniarb/Tenniarb/Assets.xcassets/small_logo_white.imageset/small_logo_white.png b/Tenniarb/Assets.xcassets/small_logo_white.imageset/small_logo_white.png similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Assets.xcassets/small_logo_white.imageset/small_logo_white.png rename to Tenniarb/Assets.xcassets/small_logo_white.imageset/small_logo_white.png diff --git a/sources/macos/Tenniarb/Tenniarb/Base.lproj/Main.storyboard b/Tenniarb/Base.lproj/Main.storyboard similarity index 99% rename from sources/macos/Tenniarb/Tenniarb/Base.lproj/Main.storyboard rename to Tenniarb/Base.lproj/Main.storyboard index 6cf7a34..7f02d0e 100644 --- a/sources/macos/Tenniarb/Tenniarb/Base.lproj/Main.storyboard +++ b/Tenniarb/Base.lproj/Main.storyboard @@ -404,7 +404,7 @@ DQ - + @@ -523,15 +523,15 @@ DQ - + - - + + - + @@ -598,7 +598,7 @@ DQ - + @@ -614,18 +614,18 @@ DQ - + - + - + - + @@ -637,7 +637,7 @@ DQ @@ -1030,13 +1030,13 @@ DQ - + - + - + @@ -1068,13 +1068,13 @@ DQ - + - + - + @@ -1170,7 +1170,7 @@ DQ - + diff --git a/sources/macos/Tenniarb/Tenniarb/ColorNames.swift b/Tenniarb/ColorNames.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/ColorNames.swift rename to Tenniarb/ColorNames.swift diff --git a/sources/macos/Tenniarb/Tenniarb/ElementPersistence.swift b/Tenniarb/ElementPersistence.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/ElementPersistence.swift rename to Tenniarb/ElementPersistence.swift diff --git a/sources/macos/Tenniarb/Tenniarb/ElementScene.swift b/Tenniarb/ElementScene.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/ElementScene.swift rename to Tenniarb/ElementScene.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Experiments/SceneDraw3D.swift b/Tenniarb/Experiments/SceneDraw3D.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Experiments/SceneDraw3D.swift rename to Tenniarb/Experiments/SceneDraw3D.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Info.plist b/Tenniarb/Info.plist similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Info.plist rename to Tenniarb/Info.plist diff --git a/sources/macos/Tenniarb/Tenniarb/Outline-ViewController-Extension.swift b/Tenniarb/Outline-ViewController-Extension.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Outline-ViewController-Extension.swift rename to Tenniarb/Outline-ViewController-Extension.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Preview Content/DemoData.swift b/Tenniarb/Preview Content/DemoData.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Preview Content/DemoData.swift rename to Tenniarb/Preview Content/DemoData.swift diff --git a/sources/macos/Tenniarb/Tenniarb/SceneDrawView.swift b/Tenniarb/SceneDrawView.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/SceneDrawView.swift rename to Tenniarb/SceneDrawView.swift diff --git a/sources/macos/Tenniarb/Tenniarb/SceneMath.swift b/Tenniarb/SceneMath.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/SceneMath.swift rename to Tenniarb/SceneMath.swift diff --git a/sources/macos/Tenniarb/Tenniarb/SroreKitConfiguration.storekit b/Tenniarb/SroreKitConfiguration.storekit similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/SroreKitConfiguration.storekit rename to Tenniarb/SroreKitConfiguration.storekit diff --git a/sources/macos/Tenniarb/Tenniarb/TennIco.icns b/Tenniarb/TennIco.icns similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/TennIco.icns rename to Tenniarb/TennIco.icns diff --git a/sources/macos/Tenniarb/Tenniarb/Tenniarb.entitlements b/Tenniarb/Tenniarb.entitlements similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Tenniarb.entitlements rename to Tenniarb/Tenniarb.entitlements diff --git a/sources/macos/Tenniarb/Tenniarb/TextPropertiesDelegate.swift b/Tenniarb/TextPropertiesDelegate.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/TextPropertiesDelegate.swift rename to Tenniarb/TextPropertiesDelegate.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Utils/ClipboardUtils.swift b/Tenniarb/Utils/ClipboardUtils.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Utils/ClipboardUtils.swift rename to Tenniarb/Utils/ClipboardUtils.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Utils/ColorUtils.swift b/Tenniarb/Utils/ColorUtils.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Utils/ColorUtils.swift rename to Tenniarb/Utils/ColorUtils.swift diff --git a/sources/macos/Tenniarb/Tenniarb/Utils/ImageUtils.swift b/Tenniarb/Utils/ImageUtils.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/Utils/ImageUtils.swift rename to Tenniarb/Utils/ImageUtils.swift diff --git a/sources/macos/Tenniarb/Tenniarb/ViewController.swift b/Tenniarb/ViewController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/ViewController.swift rename to Tenniarb/ViewController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/WindowController.swift b/Tenniarb/WindowController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/WindowController.swift rename to Tenniarb/WindowController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/WordsView.swift b/Tenniarb/WordsView.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/WordsView.swift rename to Tenniarb/WordsView.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/Document.swift b/Tenniarb/document/Document.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/Document.swift rename to Tenniarb/document/Document.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/extensions/SyncExtension.swift b/Tenniarb/document/extensions/SyncExtension.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/extensions/SyncExtension.swift rename to Tenniarb/document/extensions/SyncExtension.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/layout/GridLayout.swift b/Tenniarb/document/layout/GridLayout.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/layout/GridLayout.swift rename to Tenniarb/document/layout/GridLayout.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/layout/LayoutBase.swift b/Tenniarb/document/layout/LayoutBase.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/layout/LayoutBase.swift rename to Tenniarb/document/layout/LayoutBase.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/layout/SpringLayout.swift b/Tenniarb/document/layout/SpringLayout.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/layout/SpringLayout.swift rename to Tenniarb/document/layout/SpringLayout.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/layout/TreeLayout.swift b/Tenniarb/document/layout/TreeLayout.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/layout/TreeLayout.swift rename to Tenniarb/document/layout/TreeLayout.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/markdown/MarkdownParser.swift b/Tenniarb/document/markdown/MarkdownParser.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/markdown/MarkdownParser.swift rename to Tenniarb/document/markdown/MarkdownParser.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/markdown/MarkdownPrinter.swift b/Tenniarb/document/markdown/MarkdownPrinter.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/markdown/MarkdownPrinter.swift rename to Tenniarb/document/markdown/MarkdownPrinter.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/tenn/AttributedPrinter.swift b/Tenniarb/document/tenn/AttributedPrinter.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/tenn/AttributedPrinter.swift rename to Tenniarb/document/tenn/AttributedPrinter.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/tenn/SlowLexer.swift b/Tenniarb/document/tenn/SlowLexer.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/tenn/SlowLexer.swift rename to Tenniarb/document/tenn/SlowLexer.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/tenn/TennLexer.swift b/Tenniarb/document/tenn/TennLexer.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/tenn/TennLexer.swift rename to Tenniarb/document/tenn/TennLexer.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/tenn/TennLexerModel.swift b/Tenniarb/document/tenn/TennLexerModel.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/tenn/TennLexerModel.swift rename to Tenniarb/document/tenn/TennLexerModel.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/tenn/TennModel.swift b/Tenniarb/document/tenn/TennModel.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/tenn/TennModel.swift rename to Tenniarb/document/tenn/TennModel.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/tenn/TennParser.swift b/Tenniarb/document/tenn/TennParser.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/tenn/TennParser.swift rename to Tenniarb/document/tenn/TennParser.swift diff --git a/sources/macos/Tenniarb/Tenniarb/document/tenn/TennPrinter.swift b/Tenniarb/document/tenn/TennPrinter.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/document/tenn/TennPrinter.swift rename to Tenniarb/document/tenn/TennPrinter.swift diff --git a/sources/macos/Tenniarb/Tenniarb/mainView.swift b/Tenniarb/mainView.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/mainView.swift rename to Tenniarb/mainView.swift diff --git a/sources/macos/Tenniarb/Tenniarb/model/ElementModel.swift b/Tenniarb/model/ElementModel.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/model/ElementModel.swift rename to Tenniarb/model/ElementModel.swift diff --git a/sources/macos/Tenniarb/Tenniarb/model/ElementOperations.swift b/Tenniarb/model/ElementOperations.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/model/ElementOperations.swift rename to Tenniarb/model/ElementOperations.swift diff --git a/sources/macos/Tenniarb/Tenniarb/model/ElementProperties.swift b/Tenniarb/model/ElementProperties.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/model/ElementProperties.swift rename to Tenniarb/model/ElementProperties.swift diff --git a/sources/macos/Tenniarb/Tenniarb/model/ExecutionModel.swift b/Tenniarb/model/ExecutionModel.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/model/ExecutionModel.swift rename to Tenniarb/model/ExecutionModel.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/ExportManager.swift b/Tenniarb/views/ExportManager.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/ExportManager.swift rename to Tenniarb/views/ExportManager.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/HelpController.swift b/Tenniarb/views/HelpController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/HelpController.swift rename to Tenniarb/views/HelpController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/OperationController.swift b/Tenniarb/views/OperationController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/OperationController.swift rename to Tenniarb/views/OperationController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/PreferencesController.swift b/Tenniarb/views/PreferencesController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/PreferencesController.swift rename to Tenniarb/views/PreferencesController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/ResourcesViewController.swift b/Tenniarb/views/ResourcesViewController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/ResourcesViewController.swift rename to Tenniarb/views/ResourcesViewController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/SearchBoxController.swift b/Tenniarb/views/SearchBoxController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/SearchBoxController.swift rename to Tenniarb/views/SearchBoxController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/SourcePopoverViewController.swift b/Tenniarb/views/SourcePopoverViewController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/SourcePopoverViewController.swift rename to Tenniarb/views/SourcePopoverViewController.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/StyleManager.swift b/Tenniarb/views/StyleManager.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/StyleManager.swift rename to Tenniarb/views/StyleManager.swift diff --git a/sources/macos/Tenniarb/Tenniarb/views/SyncViewController.swift b/Tenniarb/views/SyncViewController.swift similarity index 100% rename from sources/macos/Tenniarb/Tenniarb/views/SyncViewController.swift rename to Tenniarb/views/SyncViewController.swift diff --git a/sources/macos/Tenniarb/TenniarbTests/Info.plist b/TenniarbTests/Info.plist similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/Info.plist rename to TenniarbTests/Info.plist diff --git a/sources/macos/Tenniarb/TenniarbTests/MarkDownTests.swift b/TenniarbTests/MarkDownTests.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/MarkDownTests.swift rename to TenniarbTests/MarkDownTests.swift diff --git a/sources/macos/Tenniarb/TenniarbTests/PerformanceTests.swift b/TenniarbTests/PerformanceTests.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/PerformanceTests.swift rename to TenniarbTests/PerformanceTests.swift diff --git a/sources/macos/Tenniarb/TenniarbTests/PersistenceTests.swift b/TenniarbTests/PersistenceTests.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/PersistenceTests.swift rename to TenniarbTests/PersistenceTests.swift diff --git a/sources/macos/Tenniarb/TenniarbTests/SampleElementModels.swift b/TenniarbTests/SampleElementModels.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/SampleElementModels.swift rename to TenniarbTests/SampleElementModels.swift diff --git a/sources/macos/Tenniarb/TenniarbTests/TennTests.swift b/TenniarbTests/TennTests.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/TennTests.swift rename to TenniarbTests/TennTests.swift diff --git a/sources/macos/Tenniarb/TenniarbTests/TenniarbTests.swift b/TenniarbTests/TenniarbTests.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/TenniarbTests.swift rename to TenniarbTests/TenniarbTests.swift diff --git a/sources/macos/Tenniarb/TenniarbTests/svh-generate/TestSVGGenerate.swift b/TenniarbTests/svh-generate/TestSVGGenerate.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbTests/svh-generate/TestSVGGenerate.swift rename to TenniarbTests/svh-generate/TestSVGGenerate.swift diff --git a/sources/macos/Tenniarb/TenniarbUITests/Info.plist b/TenniarbUITests/Info.plist similarity index 100% rename from sources/macos/Tenniarb/TenniarbUITests/Info.plist rename to TenniarbUITests/Info.plist diff --git a/sources/macos/Tenniarb/TenniarbUITests/TenniarbUITests.swift b/TenniarbUITests/TenniarbUITests.swift similarity index 100% rename from sources/macos/Tenniarb/TenniarbUITests/TenniarbUITests.swift rename to TenniarbUITests/TenniarbUITests.swift diff --git a/sources/macos/Tenniarb/docs/Changelog.md b/docs/Changelog.md similarity index 100% rename from sources/macos/Tenniarb/docs/Changelog.md rename to docs/Changelog.md diff --git a/sources/macos/Tenniarb/docs/Example.tenn b/docs/Example.tenn similarity index 100% rename from sources/macos/Tenniarb/docs/Example.tenn rename to docs/Example.tenn diff --git a/sources/macos/Tenniarb/docs/examples.md b/docs/examples.md similarity index 100% rename from sources/macos/Tenniarb/docs/examples.md rename to docs/examples.md diff --git a/sources/macos/Tenniarb/docs/readme.html b/docs/readme.html similarity index 100% rename from sources/macos/Tenniarb/docs/readme.html rename to docs/readme.html diff --git a/readme.md b/readme.md index e27a2d9..ccad9f1 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,613 @@ -# Overview +# Tenniarb - General information -Tenniarb - Net Brain Mapper. +Tenniarb is a diagram/modelling tool, capable of doing simple and complex diagraming, easy organize them into categories. Easy create and style them, and as benetit it has a powerfull JavaScript calculation engine embedded, so styling and diagraming become a real powerfull solution for any kind of fast modelling and prototyping. -Allow to model complex brain maps easy/fast/scalable and with pleasure. +Every item on diagram is an object with set of properties, some properties have influence on how item is displayed on diagram. Some properties are user defined data, properties could depend on calculations and other items and properties. +In general every item on diagram could be treated as a cell in electronic table, but it allow not just one formula to be used but to define any set of formal and properties to be used. + + +## First steps + +Tenniarb is multi window application, every window manage it own file on file system. Every file has plain text structure. + +Simple diagram content will look like: + +``` +element "Simple" { + item "Central" { + font-size 30 + marker "🎁" + } +} +``` + +Where `element` is describing a logic structure of diagram layers embedded one into another and `item` show individual items on diagram. Syntax is pretty easy to read and write by hands, it will be described in details in Syntax Section of this document. Language used to manage content of all element, items inside file are named Tenn. It was based on well known and old Tool Command Language(TCL) and have a clean and easy to use syntax. + +### Main screen + +Main window: + +![](./Images/general_info.png) + +Main window has following structural components: + +* Document logical structure: + + It allows to organise diagrams, and perform logical structure with basic operations of drag & drop, duplication and naming. + +* Diagram with items. + Support ordering items with links, styles for visual representation of ideas, structures and any kind of information required. + +* Properties pane. + + A textual representation of selected diagram, item with properties managed by Tenn language. + +### Creating and managing elements. + +There is few ways to create elements. + + + +* Using (+), (-) buttons on top of logical structure, will add child item to selected top level item or delete child item. All this operations are support undo & redo. + +* Drag & Drop - could be used to put items in right position and order. + +* Duplicate - could be used for duplicate selected layer of diageam for perform some changes and see differences. + + +### Creating and managing items on diagram layer. + +Item is a key point element of any diagram, it represent structure point of interest, it could contain any set of properties, properties could be groupped and represent a tree structured document. Main property of every item its his `name`. But name is not uniq representation so it could be multiple items with same name. + +Item positioned on diagram using `pos x y` property. +On every selected layer items could be managed using items main panel. +After layer is selected we could use selection, modification and addition of new items. + +Adding new items to diagram layer: + + + + + + + + + + + + + + + + + + + + + + +
Pressing 'Tab' key on keyboard will add new item and link it with selected item.
Pressing 'Option + Tab' key on keyboard will add new item, link it with selected item and copy styles from selected item. +
Pressing 'Command + D' key on keyboard will duplicate selected item and it incoming links, it could be used to easy create more linked items for brain maps.
Clicking '(+)' button on top of items layer, will add item item and link it with selected item.
+Using context menu: +
    +
  1. New item - Add new top level item.
  2. +
  3. New linked item - Add new linked item to selected one.
  4. +
  5. Linked styled item - Add new linked item with copy of styles to selected one.
  6. +
  7. Style - use or define new style.
  8. +
  9. Duplicate - dupliate selected item with incoming links.
  10. +
  11. Delete - delete current selected items.
  12. +
+
+ + +## Styling + +Items on diagram could be styled via properties and via defined layer styles. +Tenniarb support following item styles to define different look: + + + + + + + + + + + + + + + + + + + + + +
Styling items
Popup toolbar could be used for fast apply for basic display, color,font size, line width and marker fields. +
+Quick edit bar (press 'Space' on item) could be used for fast editing of multiple properties. Use ';' as separator. Use of '-command' syntax will remove property from lit of item properties. This feature works for all selected items.
All styles could be editing using textual representation in Tell language format. More details will be in Styling secrtion of this document. +
Corner radious could be changed for items with + corner-radius 5 15 5 15 + +
+ + +### Colors + +#### Item Background and color in general +Colors could be defined with following style property: +``` +color red // named color +color #ffeeff // Full RGB color in hex. +text-color red // Define only text color. +``` + +Also it is included easy set of usefull colors based on this table + +![](./Images/color-table.png) + +By passing `color name-variant` it is possible to easy define different color values. Ex: 'color red-500', 'color green-200'. + +#### Text color + +By default text color are selected to be in contrast with background for best viewing experience. So this would work well with Dark theme as well. + +Text color could be configured using property `text-color` + +``` +text-color blue +``` + + + + + + + + + +
Default mode: Dark mode:
+ + +Background and text color by default will be automaticcaly ajusted to fit into selected user theme. + +#### Title/Body/value properties. + +Every item on layer could be labeled by title and could have additional body/value fields, if body is defined it will be shown udner title, and title will be on left of item. + +By default `title` field uses name of item on layer. So it could be used without specificatio for most of situations. But could be changed, also `title` in compare to name support variable substituions and scripting. + +`Value` property could be used inside body and title using `${value}` syntax, and could be easy edited using keyboard shortcuts or menu. + + + + + + + + + + + + + + + + + + + + + + + +
Variant 1Define via + body str property Or body %{}
for multi line variant.
Variant 2Define via body block with text property inside. +

+body {
+    text "body text"
+    text-color red
+}
+    
+ Styling properties line color, text-color,font-size,
etc are supported for individual title and body. +
Variant 3Use title "My title ${parent.items.length}"
to show number of all items on layer with JS code.
Variant 4 + Use multi line body +

+body {
+    text %{
+        body text
+        body line 2
+    }
+    text-color red
+}
+    
+
Title and body could be edited by using context menu or keyboard shortcuts. + +
+ +#### Font size and body font size. + +Item/Body font size could be configured via `font-size` property. + + + + + + + + + + + + + + + + + + + + + + + +
+ +
Variant 1: +
font-size 18
+
Default title font are 18 and body font size is font-size - 2 points.
Variant 2: +

+font-size 10
+body {
+    text "Body text - 30"
+    font-size 30
+}
+
+
Both title and body fonts are changed.
Variant 3: +
font-size 10
+
Title font are changed.
Variant 4: +
font-size 30
+
Title font are changed.
Line spacing +
line-spacing 11
+
+ +
+ + +In all situations boundaries of item are calculated to fit both title and body. + +#### Width/Height properties. + +Bundaries of items could be changed by defining `width` and `height` properties. + + + + + + + + + + + + + + + +
+ +
Variant 1:width 50
+ If text is not fit into width it will be clipped on bounds of item. +
Variant 2:width 150
Variant 3: +

+name "AAA"
+width ${utils.textWidth(name)*2}
+height ${width}
+    
+ This variant uses utils object to calculate text size and multiple it two times, and set both width and height to same values.
+ Be aware of using non static calculations on width/height since properties calculation could be cycled, only limited number of cyclec will be executed to have stable final results. +
+ +#### Display property. + +Items on layer could have a different look. + + + + + + + + + + + + + + + + + + + + + + + +
+ +
Variant 1
+Default or display=rect +
This variant is suitable for most of brain maps and other situations.
Variant 2
+display no-fill +
a variable without background filling.
Variant 3
+display circle +
a display of Eclipse/Circle. based on width and height of rect.
It would be required to specify width and height properties to have a proper fit of text inside.
Variant 4
+display stack +
a rect with stack line display.
Variant 5
+display text +
+a usefull for writing some text descriptions and formatted text areas. A full markdown syntax is planed for one of upcoming versions of product and could be specified via
body %{markdown} or title %{markdown} +
+ +### Layout property. + + + + + +
+Layout could be used to define how text is diplayed: + +Supported following valyes of layout property: + +* left - display text on left +* center - diplay on center +* right - display on right +* middle - use middle layout +* top - on top +* bottom - on bottom +* fill - use all vertical space + +Property could be specified on top level and for body. + + +
+ +### Reusable styles +Every layer support it's own defined styles, this styles could be used to define look of items. + +They are defined on layer item `styles` +``` +styles { + annotation { + color gray-400 + font-size 12 + shadow 5 -5 5 + } +} +``` + +Every named group under styles are treaded as different style and could be applied to items. +Using `use-style` property. + + + +Also it is accessible via context menu: + + +This context menu also allow to define more styles. +On clicking to `Define new style` selection will switch to layer itself and add new item with counted name. + +## Connections/Links + +Every two items on diagram layer could be linked together by line reference. Source and target parts of line are always items, so links are drawn from source to target. + +* How to add links: + * By creation, using linked item. + * By holding `ctrl` key and dragging from one item to another. + +Links could also have some styles: + + + + + + + + + + + + + + + + + + + + + + + + + +
1. regular linksdrawn by default. + +
2. display arrowdraws arrow on target side.
3. display arrowsdraws arrows on both sides.
4 line-style dasheddraw line dashed.
5 line-style dotteddraw lines with dots.
6 line-width 2 control width of line.
7 layout quad Quad bezie line style
+ +Every line could be split and corrected by dragging line, it will add a `pos x y` property to controll offset from line central point, so this point will be moved every time line source/target will be moven. + +## Line styles. + +Line styles also could be applied to items. + + + + +* `line-style dashed` draw line dashed. +* `line-style dotted` draw lines with dots. +* `line-width 2` control width of line. + + +## Markdown support. + +Since 1.1 Tenniab support basic markdown syntax in name/title/body fields. + +To display bold, italic and colored values. Also now it support embedded images. + +Supported Markdown styles: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+Bold style
+name "Text is *bold*"
+
+
+
+Italic
+name "Text is _italic_"
+
+
+
+Under line
+name "Text is "
+
+
+
+Code block
+name "Text is `code`"
+
+
+
+Scratches
+name "Text is ~scratchs~"
+
+
+
+Color selection
+name "Color !(red)RED and !() black"
+
+
+
+Color word selection
+name "Color !(red|RED) and !(blue|blue)"
+
+
+
+Font word selection
+name "Font is &(30)!(red|RED)code &()size"
+
+
+ +
+Topics
+title %{
+    # 1. Topic
+    and value. Some text is here.
+    # 2. Topic
+    and value2. Some more text is here.
+}
+
+
+
+ +# Image attachments support + +Since 1.1 Tenniarb support inline image attachments. + +1. Attach image using context menu. + + +2. Copy and paste image from browser. + + +3. Use images. + + +Images could be inserted using syntax +``` +@(image_name|[width][x][height]) +``` +With optional size constrains: +* 300 - width with aspect ration preserved +* x300 - just height with aspect ratio preserved +* 200x300 - both width and height specified. + +Images at this version could be used only from same item as attached. + + +# Advanced details. + +## Tenn language reference. + +Language is based on well known and easy to use TCL (Tool command language) it has concept of command and arguments. Every command could have unlimited number of arguments, arguments could be identifiers, numbers, strings and block of commands. Argument in '{' '}' are treated as block of commands. + +Simple example of tenn language file: +``` +item "my item" { + cmd1 1 + cmd2 1.1 +} +``` + +So `item` is command with 2 arguments, String argument "my item" and block of commands arguments. + +Every document in Tenniarb are tree of `element`'s represent outline structure of diagram layers. Every element could have child elements and `items` and `link` to represent items on diagram layer. So every touchable element of layer is `item`. `link`'s represent connections between different items. + +Types of arguments: + +* Identifier - a word without spaces containing characters/digits and set of special characters `-_.`. Command names are identifiers. +* String - a word between string start/end symbopls " or ' could be used. String support `${...}` JavaScript embeddings. String could be joined with `"abc" + "bce"` and be on different lines. Any `${expr}` inside string are interpreter via java script expressions. +String support `\c` escaping. +* Number - a decimal values `123` not containing . and other characters and symbols. +* Float - a decimal `.` decimal value. +* Comment - a sequence starting with // and ending of end of line. +* CComment - `/* ... */` - c style comments. +* Expressions - `${...}` `$(...)` - inner text of this expressions are interpreterd with JavaScript language. +* Markdown block - `%{...}` is interpreted as text block with multi line structure, could be highlighted and interpreterd as markdown markup. +* Command separator - `;` could be used as command separator within single line. + +(!) All comments are fully removed at this versions of application during save and load. diff --git a/sources/macos/.DS_Store b/sources/macos/.DS_Store index ee8b2cc8b57c97b9d0255fcaad9205c039ef119c..56c548169faca76782f933a3d5f82b2bffcefeb7 100644 GIT binary patch delta 71 zcmZoMXfc=|#>B`mu~2NHo+2a5#DLw5ERzkGL?$aRwQp`^ZerOyf%zWeW_AvK4xqBl Zjm+PfC-aL~axee^BLf4|<^Yi`%mA&45s&}? delta 285 zcmZoMXfc=|#>B)qu~2NHo+2a1#DLw44=^%L)MJ}$%E&)ifw8?_fT4sTl_3uZGZ_*Y ziWrg@^cad6%7MHzpiC)4W=^_caB_Zb0RtH1ZU#~W_2lNexFqG|Cjr%Rq*a<%BrH4P zh+SVOs%5$PDMV^S)mM;#?8t`A8yS08HnVf^a{xULL<|g@14Onk F0|4dfLR0_% diff --git a/sources/macos/Tenniarb/.DS_Store b/sources/macos/Tenniarb/.DS_Store index 952be3d5a1adf36fae67eaff9cf292d9dd7f9d28..8e529067a22fccee941c371802ed1c10ad4f2bce 100644 GIT binary patch literal 8196 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 Y|1Vbf|NYk@G5_zs{{R0!ye0Mj0V{>OjQ{`u diff --git a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 37cb891..0000000 --- a/sources/macos/Tenniarb/Tenniarb.xcodeproj/xcuserdata/haiodo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,408 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sources/macos/Tenniarb/docs/readme.md b/sources/macos/Tenniarb/docs/readme.md deleted file mode 100644 index ccad9f1..0000000 --- a/sources/macos/Tenniarb/docs/readme.md +++ /dev/null @@ -1,613 +0,0 @@ -# Tenniarb - General information - -Tenniarb is a diagram/modelling tool, capable of doing simple and complex diagraming, easy organize them into categories. Easy create and style them, and as benetit it has a powerfull JavaScript calculation engine embedded, so styling and diagraming become a real powerfull solution for any kind of fast modelling and prototyping. - -Every item on diagram is an object with set of properties, some properties have influence on how item is displayed on diagram. Some properties are user defined data, properties could depend on calculations and other items and properties. - -In general every item on diagram could be treated as a cell in electronic table, but it allow not just one formula to be used but to define any set of formal and properties to be used. - - -## First steps - -Tenniarb is multi window application, every window manage it own file on file system. Every file has plain text structure. - -Simple diagram content will look like: - -``` -element "Simple" { - item "Central" { - font-size 30 - marker "🎁" - } -} -``` - -Where `element` is describing a logic structure of diagram layers embedded one into another and `item` show individual items on diagram. Syntax is pretty easy to read and write by hands, it will be described in details in Syntax Section of this document. Language used to manage content of all element, items inside file are named Tenn. It was based on well known and old Tool Command Language(TCL) and have a clean and easy to use syntax. - -### Main screen - -Main window: - -![](./Images/general_info.png) - -Main window has following structural components: - -* Document logical structure: - - It allows to organise diagrams, and perform logical structure with basic operations of drag & drop, duplication and naming. - -* Diagram with items. - Support ordering items with links, styles for visual representation of ideas, structures and any kind of information required. - -* Properties pane. - - A textual representation of selected diagram, item with properties managed by Tenn language. - -### Creating and managing elements. - -There is few ways to create elements. - - - -* Using (+), (-) buttons on top of logical structure, will add child item to selected top level item or delete child item. All this operations are support undo & redo. - -* Drag & Drop - could be used to put items in right position and order. - -* Duplicate - could be used for duplicate selected layer of diageam for perform some changes and see differences. - - -### Creating and managing items on diagram layer. - -Item is a key point element of any diagram, it represent structure point of interest, it could contain any set of properties, properties could be groupped and represent a tree structured document. Main property of every item its his `name`. But name is not uniq representation so it could be multiple items with same name. - -Item positioned on diagram using `pos x y` property. -On every selected layer items could be managed using items main panel. -After layer is selected we could use selection, modification and addition of new items. - -Adding new items to diagram layer: - - - - - - - - - - - - - - - - - - - - - - -
Pressing 'Tab' key on keyboard will add new item and link it with selected item.
Pressing 'Option + Tab' key on keyboard will add new item, link it with selected item and copy styles from selected item. -
Pressing 'Command + D' key on keyboard will duplicate selected item and it incoming links, it could be used to easy create more linked items for brain maps.
Clicking '(+)' button on top of items layer, will add item item and link it with selected item.
-Using context menu: -
    -
  1. New item - Add new top level item.
  2. -
  3. New linked item - Add new linked item to selected one.
  4. -
  5. Linked styled item - Add new linked item with copy of styles to selected one.
  6. -
  7. Style - use or define new style.
  8. -
  9. Duplicate - dupliate selected item with incoming links.
  10. -
  11. Delete - delete current selected items.
  12. -
-
- - -## Styling - -Items on diagram could be styled via properties and via defined layer styles. -Tenniarb support following item styles to define different look: - - - - - - - - - - - - - - - - - - - - - -
Styling items
Popup toolbar could be used for fast apply for basic display, color,font size, line width and marker fields. -
-Quick edit bar (press 'Space' on item) could be used for fast editing of multiple properties. Use ';' as separator. Use of '-command' syntax will remove property from lit of item properties. This feature works for all selected items.
All styles could be editing using textual representation in Tell language format. More details will be in Styling secrtion of this document. -
Corner radious could be changed for items with - corner-radius 5 15 5 15 - -
- - -### Colors - -#### Item Background and color in general -Colors could be defined with following style property: -``` -color red // named color -color #ffeeff // Full RGB color in hex. -text-color red // Define only text color. -``` - -Also it is included easy set of usefull colors based on this table - -![](./Images/color-table.png) - -By passing `color name-variant` it is possible to easy define different color values. Ex: 'color red-500', 'color green-200'. - -#### Text color - -By default text color are selected to be in contrast with background for best viewing experience. So this would work well with Dark theme as well. - -Text color could be configured using property `text-color` - -``` -text-color blue -``` - - - - - - - - - -
Default mode: Dark mode:
- - -Background and text color by default will be automaticcaly ajusted to fit into selected user theme. - -#### Title/Body/value properties. - -Every item on layer could be labeled by title and could have additional body/value fields, if body is defined it will be shown udner title, and title will be on left of item. - -By default `title` field uses name of item on layer. So it could be used without specificatio for most of situations. But could be changed, also `title` in compare to name support variable substituions and scripting. - -`Value` property could be used inside body and title using `${value}` syntax, and could be easy edited using keyboard shortcuts or menu. - - - - - - - - - - - - - - - - - - - - - - - -
Variant 1Define via - body str property Or body %{}
for multi line variant.
Variant 2Define via body block with text property inside. -

-body {
-    text "body text"
-    text-color red
-}
-    
- Styling properties line color, text-color,font-size,
etc are supported for individual title and body. -
Variant 3Use title "My title ${parent.items.length}"
to show number of all items on layer with JS code.
Variant 4 - Use multi line body -

-body {
-    text %{
-        body text
-        body line 2
-    }
-    text-color red
-}
-    
-
Title and body could be edited by using context menu or keyboard shortcuts. - -
- -#### Font size and body font size. - -Item/Body font size could be configured via `font-size` property. - - - - - - - - - - - - - - - - - - - - - - - -
- -
Variant 1: -
font-size 18
-
Default title font are 18 and body font size is font-size - 2 points.
Variant 2: -

-font-size 10
-body {
-    text "Body text - 30"
-    font-size 30
-}
-
-
Both title and body fonts are changed.
Variant 3: -
font-size 10
-
Title font are changed.
Variant 4: -
font-size 30
-
Title font are changed.
Line spacing -
line-spacing 11
-
- -
- - -In all situations boundaries of item are calculated to fit both title and body. - -#### Width/Height properties. - -Bundaries of items could be changed by defining `width` and `height` properties. - - - - - - - - - - - - - - - -
- -
Variant 1:width 50
- If text is not fit into width it will be clipped on bounds of item. -
Variant 2:width 150
Variant 3: -

-name "AAA"
-width ${utils.textWidth(name)*2}
-height ${width}
-    
- This variant uses utils object to calculate text size and multiple it two times, and set both width and height to same values.
- Be aware of using non static calculations on width/height since properties calculation could be cycled, only limited number of cyclec will be executed to have stable final results. -
- -#### Display property. - -Items on layer could have a different look. - - - - - - - - - - - - - - - - - - - - - - - -
- -
Variant 1
-Default or display=rect -
This variant is suitable for most of brain maps and other situations.
Variant 2
-display no-fill -
a variable without background filling.
Variant 3
-display circle -
a display of Eclipse/Circle. based on width and height of rect.
It would be required to specify width and height properties to have a proper fit of text inside.
Variant 4
-display stack -
a rect with stack line display.
Variant 5
-display text -
-a usefull for writing some text descriptions and formatted text areas. A full markdown syntax is planed for one of upcoming versions of product and could be specified via
body %{markdown} or title %{markdown} -
- -### Layout property. - - - - - -
-Layout could be used to define how text is diplayed: - -Supported following valyes of layout property: - -* left - display text on left -* center - diplay on center -* right - display on right -* middle - use middle layout -* top - on top -* bottom - on bottom -* fill - use all vertical space - -Property could be specified on top level and for body. - - -
- -### Reusable styles -Every layer support it's own defined styles, this styles could be used to define look of items. - -They are defined on layer item `styles` -``` -styles { - annotation { - color gray-400 - font-size 12 - shadow 5 -5 5 - } -} -``` - -Every named group under styles are treaded as different style and could be applied to items. -Using `use-style` property. - - - -Also it is accessible via context menu: - - -This context menu also allow to define more styles. -On clicking to `Define new style` selection will switch to layer itself and add new item with counted name. - -## Connections/Links - -Every two items on diagram layer could be linked together by line reference. Source and target parts of line are always items, so links are drawn from source to target. - -* How to add links: - * By creation, using linked item. - * By holding `ctrl` key and dragging from one item to another. - -Links could also have some styles: - - - - - - - - - - - - - - - - - - - - - - - - - -
1. regular linksdrawn by default. - -
2. display arrowdraws arrow on target side.
3. display arrowsdraws arrows on both sides.
4 line-style dasheddraw line dashed.
5 line-style dotteddraw lines with dots.
6 line-width 2 control width of line.
7 layout quad Quad bezie line style
- -Every line could be split and corrected by dragging line, it will add a `pos x y` property to controll offset from line central point, so this point will be moved every time line source/target will be moven. - -## Line styles. - -Line styles also could be applied to items. - - - - -* `line-style dashed` draw line dashed. -* `line-style dotted` draw lines with dots. -* `line-width 2` control width of line. - - -## Markdown support. - -Since 1.1 Tenniab support basic markdown syntax in name/title/body fields. - -To display bold, italic and colored values. Also now it support embedded images. - -Supported Markdown styles: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Bold style
-name "Text is *bold*"
-
-
-
-Italic
-name "Text is _italic_"
-
-
-
-Under line
-name "Text is "
-
-
-
-Code block
-name "Text is `code`"
-
-
-
-Scratches
-name "Text is ~scratchs~"
-
-
-
-Color selection
-name "Color !(red)RED and !() black"
-
-
-
-Color word selection
-name "Color !(red|RED) and !(blue|blue)"
-
-
-
-Font word selection
-name "Font is &(30)!(red|RED)code &()size"
-
-
- -
-Topics
-title %{
-    # 1. Topic
-    and value. Some text is here.
-    # 2. Topic
-    and value2. Some more text is here.
-}
-
-
-
- -# Image attachments support - -Since 1.1 Tenniarb support inline image attachments. - -1. Attach image using context menu. - - -2. Copy and paste image from browser. - - -3. Use images. - - -Images could be inserted using syntax -``` -@(image_name|[width][x][height]) -``` -With optional size constrains: -* 300 - width with aspect ration preserved -* x300 - just height with aspect ratio preserved -* 200x300 - both width and height specified. - -Images at this version could be used only from same item as attached. - - -# Advanced details. - -## Tenn language reference. - -Language is based on well known and easy to use TCL (Tool command language) it has concept of command and arguments. Every command could have unlimited number of arguments, arguments could be identifiers, numbers, strings and block of commands. Argument in '{' '}' are treated as block of commands. - -Simple example of tenn language file: -``` -item "my item" { - cmd1 1 - cmd2 1.1 -} -``` - -So `item` is command with 2 arguments, String argument "my item" and block of commands arguments. - -Every document in Tenniarb are tree of `element`'s represent outline structure of diagram layers. Every element could have child elements and `items` and `link` to represent items on diagram layer. So every touchable element of layer is `item`. `link`'s represent connections between different items. - -Types of arguments: - -* Identifier - a word without spaces containing characters/digits and set of special characters `-_.`. Command names are identifiers. -* String - a word between string start/end symbopls " or ' could be used. String support `${...}` JavaScript embeddings. String could be joined with `"abc" + "bce"` and be on different lines. Any `${expr}` inside string are interpreter via java script expressions. -String support `\c` escaping. -* Number - a decimal values `123` not containing . and other characters and symbols. -* Float - a decimal `.` decimal value. -* Comment - a sequence starting with // and ending of end of line. -* CComment - `/* ... */` - c style comments. -* Expressions - `${...}` `$(...)` - inner text of this expressions are interpreterd with JavaScript language. -* Markdown block - `%{...}` is interpreted as text block with multi line structure, could be highlighted and interpreterd as markdown markup. -* Command separator - `;` could be used as command separator within single line. - -(!) All comments are fully removed at this versions of application during save and load.