scriptorium 0.0.2 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. checksums.yaml +4 -4
  2. data/README.lt3 +324 -0
  3. data/README.md +3155 -1
  4. data/assets/.DS_Store +0 -0
  5. data/assets/README.md +44 -0
  6. data/assets/back-icon.png +0 -0
  7. data/assets/icons/facebook.svg +1 -0
  8. data/assets/icons/github.svg +1 -0
  9. data/assets/icons/instagram.svg +1 -0
  10. data/assets/icons/reddit.svg +1 -0
  11. data/assets/icons/ui/.DS_Store +0 -0
  12. data/assets/icons/ui/back.png +0 -0
  13. data/assets/icons/ui/copy.png +0 -0
  14. data/assets/icons/ui/down.png +0 -0
  15. data/assets/icons/ui/end.png +0 -0
  16. data/assets/icons/ui/exit.png +0 -0
  17. data/assets/icons/ui/foo +10 -0
  18. data/assets/icons/ui/home.png +0 -0
  19. data/assets/icons/ui/left.png +0 -0
  20. data/assets/icons/ui/next.png +0 -0
  21. data/assets/icons/ui/right.png +0 -0
  22. data/assets/icons/ui/start.png +0 -0
  23. data/assets/icons/ui/up.png +0 -0
  24. data/assets/icons/x.svg +1 -0
  25. data/assets/icons/youtube.svg +1 -0
  26. data/assets/samples/placeholder.svg +9 -0
  27. data/assets/themes/standard/favicon.svg +6 -0
  28. data/bin/scriptorium +1511 -0
  29. data/doc/README.txt +6 -0
  30. data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +95 -0
  31. data/doc/anti-amnesia/20250727-060000-api-design-tui-planning.md +34 -0
  32. data/doc/anti-amnesia/20250727-061000-runeblog-tui-analysis.md +50 -0
  33. data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +31 -0
  34. data/doc/anti-amnesia/20250727-154000-livetext-plugin-file-stats.md +73 -0
  35. data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +64 -0
  36. data/doc/anti-amnesia/20250727-172600-unified-minitest-framework.md +70 -0
  37. data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +40 -0
  38. data/doc/anti-amnesia/20250727-173000-widget-testing-achievement.md +110 -0
  39. data/doc/anti-amnesia/20250727-180000-post-id-num-refactoring.md +73 -0
  40. data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +46 -0
  41. data/doc/anti-amnesia/20250728-124421-conversation-summary-concise.md +124 -0
  42. data/doc/anti-amnesia/20250729-190000-scriptorium-tui-testing-complete.md +46 -0
  43. data/doc/anti-amnesia/20250729-200000-scriptorium-tui-testing-edit-file-workflow.md +97 -0
  44. data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +158 -0
  45. data/doc/anti-amnesia/20250729-211500-dependency-management-system.md +211 -0
  46. data/doc/anti-amnesia/20250729-213000-python-virtual-environment-setup.md +141 -0
  47. data/doc/anti-amnesia/20250729-214500-theme-management-commands.md +211 -0
  48. data/doc/anti-amnesia/20250729-215000-version-update-to-0.6.0.md +134 -0
  49. data/doc/anti-amnesia/20250729-220000-user-guide-complete.md +41 -0
  50. data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +45 -0
  51. data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +30 -0
  52. data/doc/anti-amnesia/20250804-213700-publishing-test-fix.md +49 -0
  53. data/doc/anti-amnesia/20250804-214400-additional-test-fixes.md +46 -0
  54. data/doc/anti-amnesia/20250804-220000-asset-function-logic-clarification.md +41 -0
  55. data/doc/anti-amnesia/20250806-202032-asset-function-logic-clarification.md +41 -0
  56. data/doc/anti-amnesia/20250807-213025.md +116 -0
  57. data/doc/anti-amnesia/20250813-082428-syntax-highlighting-and-navigation-improvements.md +256 -0
  58. data/doc/banner_svg_config.md +114 -0
  59. data/doc/contrib.lt3 +8 -0
  60. data/doc/dependencies.md +281 -0
  61. data/doc/hacker.lt3 +5 -0
  62. data/doc/reddit_credentials_template.json +8 -0
  63. data/doc/reddit_integration.md +207 -0
  64. data/doc/user.lt3 +38 -0
  65. data/doc/user_guide_section_1.md +137 -0
  66. data/doc/user_guide_section_10.md +515 -0
  67. data/doc/user_guide_section_11.md +708 -0
  68. data/doc/user_guide_section_2.md +233 -0
  69. data/doc/user_guide_section_3.md +5 -0
  70. data/doc/user_guide_section_4.md +221 -0
  71. data/doc/user_guide_section_5.md +243 -0
  72. data/doc/user_guide_section_6.md +147 -0
  73. data/doc/user_guide_section_7.md +311 -0
  74. data/doc/user_guide_section_8.md +224 -0
  75. data/doc/user_guide_section_9.md +375 -0
  76. data/doc/userdoc-toc.txt +88 -0
  77. data/lib/rouge/lexers/livetext.rb +74 -0
  78. data/lib/scriptorium/api.rb +640 -0
  79. data/lib/scriptorium/banner_svg.rb +742 -0
  80. data/lib/scriptorium/contract.rb +33 -0
  81. data/lib/scriptorium/exceptions.rb +174 -0
  82. data/lib/scriptorium/helpers.rb +475 -0
  83. data/lib/scriptorium/post.rb +195 -0
  84. data/lib/scriptorium/reddit.rb +83 -0
  85. data/lib/scriptorium/repo.rb +624 -0
  86. data/lib/scriptorium/standard_files.rb +515 -0
  87. data/lib/scriptorium/syntax_highlighter.rb +234 -0
  88. data/lib/scriptorium/theme.rb +179 -0
  89. data/lib/scriptorium/version.rb +2 -2
  90. data/lib/scriptorium/view.rb +976 -0
  91. data/lib/scriptorium/widgets/featured_posts.rb +149 -0
  92. data/lib/scriptorium/widgets/links.rb +112 -0
  93. data/lib/scriptorium/widgets/pages.rb +133 -0
  94. data/lib/scriptorium/widgets/widget.rb +133 -0
  95. data/lib/scriptorium.rb +22 -9
  96. data/lib/skeleton.rb +11 -2
  97. data/scriptorium.gemspec +15 -4
  98. data/test/README.md +69 -0
  99. data/test/all +43 -0
  100. data/test/api_demo.rb +99 -0
  101. data/test/assets/imagenotfound.jpg +0 -0
  102. data/test/assets/images/.DS_Store +0 -0
  103. data/test/assets/images/README.md +27 -0
  104. data/test/assets/images/odd_aspect.png +0 -0
  105. data/test/assets/images/perfect.png +0 -0
  106. data/test/assets/images/small.png +0 -0
  107. data/test/assets/images/tall.png +0 -0
  108. data/test/assets/images/very_tall.png +0 -0
  109. data/test/assets/images/very_wide.png +0 -0
  110. data/test/assets/images/wide.png +0 -0
  111. data/test/assets/testbanner.jpg +0 -0
  112. data/test/banner_svg/simple_helpers.rb +13 -0
  113. data/test/banner_svg/unit.rb +768 -0
  114. data/test/ed_test.rb +204 -0
  115. data/test/integration/cursor_banner_combinations.rb +193 -0
  116. data/test/integration/cursor_banner_features.rb +374 -0
  117. data/test/integration/integration_test.rb +326 -0
  118. data/test/livetext_plugin_test.rb +229 -0
  119. data/test/manual/asset_mgmt.rb +67 -0
  120. data/test/manual/banner-tests/config.txt +3 -0
  121. data/test/manual/banner-tests/index.html +45 -0
  122. data/test/manual/banner-tests/test01.html +58 -0
  123. data/test/manual/banner-tests/test02.html +58 -0
  124. data/test/manual/banner-tests/test03.html +58 -0
  125. data/test/manual/banner-tests/test04.html +65 -0
  126. data/test/manual/banner-tests/test05.html +65 -0
  127. data/test/manual/banner-tests/test06.html +65 -0
  128. data/test/manual/banner-tests/test07.html +65 -0
  129. data/test/manual/banner-tests/test08.html +59 -0
  130. data/test/manual/banner-tests/test09.html +59 -0
  131. data/test/manual/banner-tests/test10.html +59 -0
  132. data/test/manual/banner-tests/test11.html +59 -0
  133. data/test/manual/banner-tests/test12.html +59 -0
  134. data/test/manual/banner-tests/test13.html +59 -0
  135. data/test/manual/banner-tests/test14.html +59 -0
  136. data/test/manual/banner-tests/test15.html +58 -0
  137. data/test/manual/banner-tests/test16.html +58 -0
  138. data/test/manual/banner-tests/test17.html +58 -0
  139. data/test/manual/banner-tests/test18.html +68 -0
  140. data/test/manual/banner-tests/test19.html +68 -0
  141. data/test/manual/banner-tests/test20.html +68 -0
  142. data/test/manual/banner-tests/test21.html +68 -0
  143. data/test/manual/banner-tests/test22.html +68 -0
  144. data/test/manual/banner-tests/test23.html +68 -0
  145. data/test/manual/banner-tests/test24.html +68 -0
  146. data/test/manual/banner-tests/test25.html +67 -0
  147. data/test/manual/banner_environment.rb +192 -0
  148. data/test/manual/deploy_symlink_demo.rb +142 -0
  149. data/test/manual/environment.rb +67 -0
  150. data/test/manual/make_banner.rb +153 -0
  151. data/test/manual/sample_banner_config.txt +12 -0
  152. data/test/manual/symlink_demo.rb +117 -0
  153. data/test/manual/test1.rb +47 -0
  154. data/test/manual/test2.rb +12 -0
  155. data/test/manual/test3.rb +38 -0
  156. data/test/manual/test4.rb +40 -0
  157. data/test/manual/test5.rb +24 -0
  158. data/test/manual/test6.rb +73 -0
  159. data/test/manual/test_banner_combinations.rb +120 -0
  160. data/test/manual/test_banner_features.rb +306 -0
  161. data/test/manual/test_banner_from_file.rb +150 -0
  162. data/test/manual/test_banner_in_header.rb +35 -0
  163. data/test/manual/test_code_highlighting.rb +68 -0
  164. data/test/manual/test_complex_header.rb +74 -0
  165. data/test/manual/test_empty_header.rb +32 -0
  166. data/test/manual/test_radial_custom.rb +58 -0
  167. data/test/manual/test_radial_large_radius.rb +52 -0
  168. data/test/manual/test_svg_debug.rb +47 -0
  169. data/test/manual/test_syntax_highlighting.rb +147 -0
  170. data/test/pages-demo/config/currentview.txt +1 -0
  171. data/test/pages-demo/views/demo/config/bootstrap_css.txt +5 -0
  172. data/test/pages-demo/views/demo/config/bootstrap_js.txt +4 -0
  173. data/test/pages-demo/views/demo/config/common.js +57 -0
  174. data/test/pages-demo/views/demo/config/footer.txt +1 -0
  175. data/test/pages-demo/views/demo/config/global-head.txt +8 -0
  176. data/test/pages-demo/views/demo/config/header.txt +1 -0
  177. data/test/pages-demo/views/demo/config/layout.txt +1 -0
  178. data/test/pages-demo/views/demo/config/left.txt +1 -0
  179. data/test/pages-demo/views/demo/config/main.txt +1 -0
  180. data/test/pages-demo/views/demo/config/right.txt +1 -0
  181. data/test/pages-demo/views/demo/config.txt +3 -0
  182. data/test/pages-demo/views/demo/output/panes/footer.html +1 -0
  183. data/test/pages-demo/views/demo/output/panes/header.html +1 -0
  184. data/test/pages-demo/views/demo/output/panes/left.html +1 -0
  185. data/test/pages-demo/views/demo/output/panes/main.html +1 -0
  186. data/test/pages-demo/views/demo/output/panes/right.html +1 -0
  187. data/test/rubytext/rubytext_comprehensive_test.rb +307 -0
  188. data/test/rubytext/rubytext_demo_test.rb +42 -0
  189. data/test/rubytext/rubytext_testing_guide.md +277 -0
  190. data/test/run_automated_tests.rb +45 -0
  191. data/test/scriptorium-TEST-1754622690-146/config/bootstrap_css.txt +5 -0
  192. data/test/scriptorium-TEST-1754622690-146/config/bootstrap_js.txt +4 -0
  193. data/test/scriptorium-TEST-1754622690-146/config/common.js +57 -0
  194. data/test/scriptorium-TEST-1754622690-146/config/currentview.txt +1 -0
  195. data/test/scriptorium-TEST-1754622690-146/config/global-head.txt +9 -0
  196. data/test/scriptorium-TEST-1754622690-146/config/last_post_num.txt +1 -0
  197. data/test/scriptorium-TEST-1754622690-146/config/os_helpers.rb +4 -0
  198. data/test/scriptorium-TEST-1754622690-146/config/widgets.txt +3 -0
  199. data/test/scriptorium-TEST-1754622690-146/posts/0001/meta.txt +8 -0
  200. data/test/scriptorium-TEST-1754622690-146/posts/0001/source.lt3 +6 -0
  201. data/test/scriptorium-TEST-1754622690-146/themes/standard/README.txt +1 -0
  202. data/test/scriptorium-TEST-1754622690-146/themes/standard/config.txt +1 -0
  203. data/test/scriptorium-TEST-1754622690-146/themes/standard/initial/post.lt3 +12 -0
  204. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/footer.txt +2 -0
  205. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/header.txt +4 -0
  206. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/left.txt +3 -0
  207. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/main.txt +5 -0
  208. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/right.txt +3 -0
  209. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/gen/text.css +1 -0
  210. data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/layout.txt +5 -0
  211. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index.lt3 +1 -0
  212. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index_entry.lt3 +14 -0
  213. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/post.lt3 +13 -0
  214. data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/widget.lt3 +1 -0
  215. data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_css.txt +5 -0
  216. data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_js.txt +4 -0
  217. data/test/scriptorium-TEST-1754622690-146/views/sample/config/common.js +57 -0
  218. data/test/scriptorium-TEST-1754622690-146/views/sample/config/deploy.txt +5 -0
  219. data/test/scriptorium-TEST-1754622690-146/views/sample/config/footer.txt +2 -0
  220. data/test/scriptorium-TEST-1754622690-146/views/sample/config/global-head.txt +9 -0
  221. data/test/scriptorium-TEST-1754622690-146/views/sample/config/header.txt +4 -0
  222. data/test/scriptorium-TEST-1754622690-146/views/sample/config/layout.txt +5 -0
  223. data/test/scriptorium-TEST-1754622690-146/views/sample/config/left.txt +3 -0
  224. data/test/scriptorium-TEST-1754622690-146/views/sample/config/main.txt +5 -0
  225. data/test/scriptorium-TEST-1754622690-146/views/sample/config/reddit.txt +10 -0
  226. data/test/scriptorium-TEST-1754622690-146/views/sample/config/right.txt +3 -0
  227. data/test/scriptorium-TEST-1754622690-146/views/sample/config/social.txt +7 -0
  228. data/test/scriptorium-TEST-1754622690-146/views/sample/config/status.txt +7 -0
  229. data/test/scriptorium-TEST-1754622690-146/views/sample/config.txt +3 -0
  230. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/footer.html +3 -0
  231. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/header.html +3 -0
  232. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/left.html +3 -0
  233. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/main.html +3 -0
  234. data/test/scriptorium-TEST-1754622690-146/views/sample/layout/right.html +3 -0
  235. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/footer.html +1 -0
  236. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/header.html +1 -0
  237. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/left.html +1 -0
  238. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/main.html +1 -0
  239. data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/right.html +1 -0
  240. data/test/staging/.DS_Store +0 -0
  241. data/test/syntax_highlighting_test.lt3 +124 -0
  242. data/test/test_helpers.rb +230 -0
  243. data/test/tui_editor_integration_test.rb +296 -0
  244. data/test/tui_integration_test.rb +637 -0
  245. data/test/unit/api.rb +1056 -0
  246. data/test/unit/asset_management.rb +245 -0
  247. data/test/unit/clipboard_test.rb +60 -0
  248. data/test/unit/contract_test.rb +91 -0
  249. data/test/unit/core.rb +857 -0
  250. data/test/unit/deploy_test.rb +187 -0
  251. data/test/unit/gem_asset_management.rb +189 -0
  252. data/test/unit/livetext_basic.rb +69 -0
  253. data/test/unit/livetext_compatibility.rb +89 -0
  254. data/test/unit/post.rb +244 -0
  255. data/test/unit/read_commented_file_test.rb +276 -0
  256. data/test/unit/reddit_test.rb +235 -0
  257. data/test/unit/repo.rb +548 -0
  258. data/test/unit/social_test.rb +369 -0
  259. data/test/unit/symlink_test.rb +213 -0
  260. data/test/unit/view.rb +431 -0
  261. data/test/unit/widgets.rb +669 -0
  262. data/test/wizard_test.rb +123 -0
  263. data/ui/README.md +67 -0
  264. data/ui/common/lib/ui_common.rb +8 -0
  265. data/ui/rubytext/README.md +191 -0
  266. data/ui/rubytext/bin/scriptorium-rubytext +402 -0
  267. data/ui/rubytext/lib/rubytext_ui.rb +300 -0
  268. data/ui/tui/bin/scriptorium +1420 -0
  269. data/ui/tui/test/tui_test.rb +23 -0
  270. data/ui/web/app/app.rb +1378 -0
  271. data/ui/web/app/error_helpers.rb +150 -0
  272. data/ui/web/app/views/advanced_config.erb +190 -0
  273. data/ui/web/app/views/asset_management.erb +589 -0
  274. data/ui/web/app/views/banner_config.erb +200 -0
  275. data/ui/web/app/views/configure_view.erb +401 -0
  276. data/ui/web/app/views/dashboard.erb +162 -0
  277. data/ui/web/app/views/deploy_config.erb +146 -0
  278. data/ui/web/app/views/edit_pages.erb +195 -0
  279. data/ui/web/app/views/edit_post.erb +54 -0
  280. data/ui/web/app/views/error_page.erb +29 -0
  281. data/ui/web/app/views/header_config.erb +155 -0
  282. data/ui/web/app/views/layout_config.erb +147 -0
  283. data/ui/web/app/views/navbar_config.erb +411 -0
  284. data/ui/web/app/views/view_dashboard.erb +138 -0
  285. data/ui/web/bin/scriptorium-web +153 -0
  286. data/ui/web/test/web_basic_test.rb +38 -0
  287. data/ui/web/test_navbar.txt +7 -0
  288. data/ui/web/tmp/web_server.log +5 -0
  289. data/ui/web/tmp/web_server.pid +1 -0
  290. metadata +360 -5
@@ -0,0 +1,708 @@
1
+ # 11. Reference
2
+
3
+ This section provides comprehensive reference information for Scriptorium, including command syntax, configuration options, and technical details.
4
+
5
+ ## Command Reference
6
+
7
+ ### Core commands
8
+
9
+ #### `scriptorium init [path]`
10
+ Initialize a new Scriptorium repository.
11
+
12
+ **Options:**
13
+ - `path`: Directory to initialize (default: current directory)
14
+
15
+ **Examples:**
16
+ ```bash
17
+ scriptorium init # Initialize in current directory
18
+ scriptorium init my-blog # Initialize in my-blog directory
19
+ ```
20
+
21
+ #### `scriptorium new post "title"`
22
+ Create a new blog post.
23
+
24
+ **Options:**
25
+ - `title`: Post title (required)
26
+
27
+ **Examples:**
28
+ ```bash
29
+ scriptorium new post "My First Post"
30
+ scriptorium new post "Getting Started with Scriptorium"
31
+ ```
32
+
33
+ #### `scriptorium edit [file]`
34
+ Edit a file using the configured editor.
35
+
36
+ **Options:**
37
+ - `file`: File path to edit
38
+
39
+ **Examples:**
40
+ ```bash
41
+ scriptorium edit posts/001.lt3
42
+ scriptorium edit config.txt
43
+ scriptorium edit widgets/links/list.txt
44
+ ```
45
+
46
+ #### `scriptorium generate [target]`
47
+ Generate the site or specific components.
48
+
49
+ **Options:**
50
+ - `target`: Specific component to generate (optional)
51
+ - `post <id>`: Generate specific post
52
+ - `widget <name>`: Generate specific widget
53
+ - `view <name>`: Generate specific view
54
+
55
+ **Examples:**
56
+ ```bash
57
+ scriptorium generate # Generate entire site
58
+ scriptorium generate post 001 # Generate specific post
59
+ scriptorium generate widget links # Generate links widget
60
+ ```
61
+
62
+ #### `scriptorium publish <id>`
63
+ Publish a draft post.
64
+
65
+ **Options:**
66
+ - `id`: Post ID to publish
67
+
68
+ **Examples:**
69
+ ```bash
70
+ scriptorium publish 001
71
+ scriptorium publish 002
72
+ ```
73
+
74
+ #### `scriptorium list [type]`
75
+ List posts, views, or other content.
76
+
77
+ **Options:**
78
+ - `type`: Type of content to list
79
+ - `posts`: List all posts
80
+ - `views`: List all views
81
+ - `drafts`: List draft posts
82
+
83
+ **Examples:**
84
+ ```bash
85
+ scriptorium list posts
86
+ scriptorium list views
87
+ scriptorium list drafts
88
+ ```
89
+
90
+ ### View management commands
91
+
92
+ #### `scriptorium view <name>`
93
+ Switch to a different view.
94
+
95
+ **Options:**
96
+ - `name`: View name to switch to
97
+
98
+ **Examples:**
99
+ ```bash
100
+ scriptorium view sample
101
+ scriptorium view blog
102
+ ```
103
+
104
+ #### `scriptorium create view <name> <title> [subtitle]`
105
+ Create a new view.
106
+
107
+ **Options:**
108
+ - `name`: View name
109
+ - `title`: View title
110
+ - `subtitle`: View subtitle (optional)
111
+
112
+ **Examples:**
113
+ ```bash
114
+ scriptorium create view blog "My Blog" "Personal thoughts and ideas"
115
+ scriptorium create view docs "Documentation"
116
+ ```
117
+
118
+ ### Post management commands
119
+
120
+ #### `scriptorium link <id> [view]`
121
+ Link a post to a view.
122
+
123
+ **Options:**
124
+ - `id`: Post ID
125
+ - `view`: View name (default: current view)
126
+
127
+ **Examples:**
128
+ ```bash
129
+ scriptorium link 001
130
+ scriptorium link 002 blog
131
+ ```
132
+
133
+ #### `scriptorium unlink <id> [view]`
134
+ Unlink a post from a view.
135
+
136
+ **Options:**
137
+ - `id`: Post ID
138
+ - `view`: View name (default: current view)
139
+
140
+ **Examples:**
141
+ ```bash
142
+ scriptorium unlink 001
143
+ scriptorium unlink 002 blog
144
+ ```
145
+
146
+ #### `scriptorium delete <id>`
147
+ Delete a post.
148
+
149
+ **Options:**
150
+ - `id`: Post ID to delete
151
+
152
+ **Examples:**
153
+ ```bash
154
+ scriptorium delete 001
155
+ ```
156
+
157
+ ### Widget commands
158
+
159
+ #### `scriptorium generate widget <name>`
160
+ Generate a specific widget.
161
+
162
+ **Options:**
163
+ - `name`: Widget name (links, pages, featuredposts)
164
+
165
+ **Examples:**
166
+ ```bash
167
+ scriptorium generate widget links
168
+ scriptorium generate widget pages
169
+ ```
170
+
171
+ ### Theme commands
172
+
173
+ #### `scriptorium theme <name>`
174
+ Apply a theme to the current view.
175
+
176
+ **Options:**
177
+ - `name`: Theme name
178
+
179
+ **Examples:**
180
+ ```bash
181
+ scriptorium theme standard
182
+ scriptorium theme custom
183
+ ```
184
+
185
+ ### Utility commands
186
+
187
+ #### `scriptorium status`
188
+ Show repository status.
189
+
190
+ **Examples:**
191
+ ```bash
192
+ scriptorium status
193
+ ```
194
+
195
+ #### `scriptorium help [command]`
196
+ Show help information.
197
+
198
+ **Options:**
199
+ - `command`: Specific command to get help for
200
+
201
+ **Examples:**
202
+ ```bash
203
+ scriptorium help
204
+ scriptorium help generate
205
+ ```
206
+
207
+ ## Configuration Files
208
+
209
+ ### Repository configuration
210
+
211
+ #### `config/repo.txt`
212
+ Main repository configuration file.
213
+
214
+ **Example:**
215
+ ```
216
+ title: My Scriptorium Site
217
+ description: A personal blog and website
218
+ author: Your Name
219
+ email: your.email@example.com
220
+ url: https://example.com
221
+ ```
222
+
223
+ ### View configuration
224
+
225
+ #### `config.txt`
226
+ View-specific configuration.
227
+
228
+ **Example:**
229
+ ```
230
+ title: My Blog
231
+ subtitle: Personal thoughts and ideas
232
+ theme: standard
233
+ layout: default
234
+ ```
235
+
236
+ #### `config/layout.txt`
237
+ Layout configuration defining page structure.
238
+
239
+ **Example:**
240
+ ```
241
+ header
242
+ left 20%
243
+ main
244
+ right 20%
245
+ footer
246
+ ```
247
+
248
+ #### `config/header.txt`
249
+ Header configuration including navigation.
250
+
251
+ **Example:**
252
+ ```
253
+ # Site title
254
+ .title My Blog
255
+
256
+ # Navigation links
257
+ .nav-link "Home" "/"
258
+ .nav-link "About" "pages/about.html"
259
+ .nav-link "Contact" "pages/contact.html"
260
+ ```
261
+
262
+ ### Widget configuration
263
+
264
+ #### `widgets/links/list.txt`
265
+ Links widget configuration.
266
+
267
+ **Format:**
268
+ ```
269
+ url, title
270
+ url, title
271
+ ```
272
+
273
+ **Example:**
274
+ ```
275
+ https://example.com, Example Site
276
+ https://github.com, GitHub Profile
277
+ ```
278
+
279
+ #### `widgets/pages/list.txt`
280
+ Pages widget configuration.
281
+
282
+ **Format:**
283
+ ```
284
+ page-name
285
+ page-name
286
+ ```
287
+
288
+ **Example:**
289
+ ```
290
+ about
291
+ contact
292
+ documentation
293
+ ```
294
+
295
+ #### `widgets/featuredposts/list.txt`
296
+ Featured posts widget configuration.
297
+
298
+ **Format:**
299
+ ```
300
+ id title
301
+ id
302
+ ```
303
+
304
+ **Example:**
305
+ ```
306
+ 001 My Important Post
307
+ 002 Another Featured Post
308
+ 003
309
+ ```
310
+
311
+ ### Theme configuration
312
+
313
+ #### `themes/standard/config.txt`
314
+ Theme configuration file.
315
+
316
+ **Example:**
317
+ ```
318
+ name: Standard Theme
319
+ version: 1.0
320
+ description: Default Scriptorium theme
321
+ author: Scriptorium Team
322
+ ```
323
+
324
+ ## LiveText Reference
325
+
326
+ ### Basic syntax
327
+
328
+ #### Inline formatting
329
+ ```
330
+ **bold text**
331
+ *italic text*
332
+ `code text`
333
+ [link text](url)
334
+ ![alt text](image.jpg)
335
+ ```
336
+
337
+ #### Dot commands
338
+ ```
339
+ .command
340
+ .command parameter
341
+ .command "parameter with spaces"
342
+ ```
343
+
344
+ #### Dot commands with body
345
+ ```
346
+ .command
347
+ content here
348
+ .end
349
+ ```
350
+
351
+ ### Post metadata
352
+
353
+ #### Required metadata
354
+ ```
355
+ .title Post Title
356
+ ```
357
+
358
+ #### Optional metadata
359
+ ```
360
+ .subtitle Post Subtitle
361
+ .tags tag1, tag2, tag3
362
+ .blurb Post excerpt for summaries
363
+ .views view1, view2
364
+ .pubdate 2024-01-15
365
+ ```
366
+
367
+ #### Social media metadata
368
+ ```
369
+ .og_title Title for social media
370
+ .og_description Description for social media
371
+ .og_image /path/to/image.jpg
372
+ .twitter_card summary_large_image
373
+ .twitter_title Twitter title
374
+ .twitter_description Twitter description
375
+ ```
376
+
377
+ #### Reddit integration metadata
378
+ ```
379
+ .reddit_subreddit programming
380
+ .reddit_title Custom Reddit title
381
+ .reddit_flair "Discussion"
382
+ .reddit_nsfw false
383
+ .reddit_spoiler false
384
+ ```
385
+
386
+ ### Template variables
387
+
388
+ #### Post variables
389
+ ```
390
+ %{post.title} # Post title
391
+ %{post.body} # Post content
392
+ %{post.pubdate} # Publication date
393
+ %{post.tags} # Post tags
394
+ %{post.blurb} # Post excerpt
395
+ %{post.url} # Post URL
396
+ %{post.slug} # Post slug
397
+ ```
398
+
399
+ #### Site variables
400
+ ```
401
+ %{site.title} # Site title
402
+ %{site.description} # Site description
403
+ %{site.url} # Site URL
404
+ %{site.author} # Site author
405
+ ```
406
+
407
+ #### View variables
408
+ ```
409
+ %{view.name} # View name
410
+ %{view.title} # View title
411
+ %{view.subtitle} # View subtitle
412
+ ```
413
+
414
+ ### Control structures
415
+
416
+ #### Conditionals
417
+ ```
418
+ .if condition
419
+ content
420
+ .end
421
+
422
+ .if post.tags.include?("featured")
423
+ This is a featured post!
424
+ .end
425
+ ```
426
+
427
+ #### Loops
428
+ ```
429
+ .each item in collection
430
+ content
431
+ .end
432
+
433
+ .each post in posts
434
+ %{post.title}
435
+ .end
436
+ ```
437
+
438
+ #### Includes
439
+ ```
440
+ .include "file.lt3"
441
+ .include "templates/header.lt3"
442
+ ```
443
+
444
+ ## API Reference
445
+
446
+ ### Core classes
447
+
448
+ #### Scriptorium::Repo
449
+ Main repository class for managing Scriptorium sites.
450
+
451
+ **Methods:**
452
+ ```ruby
453
+ # Initialize repository
454
+ repo = Scriptorium::Repo.open(path)
455
+
456
+ # Create new repository
457
+ repo = Scriptorium::Repo.create(path, title, description)
458
+
459
+ # Get current view
460
+ view = repo.current_view
461
+
462
+ # List all views
463
+ views = repo.views
464
+
465
+ # Create post
466
+ post = repo.create_post(title: "Title", body: "Content")
467
+
468
+ # Get post by ID
469
+ post = repo.post(id)
470
+
471
+ # List all posts
472
+ posts = repo.all_posts
473
+ ```
474
+
475
+ #### Scriptorium::View
476
+ Represents a view within a repository.
477
+
478
+ **Methods:**
479
+ ```ruby
480
+ # Get view name
481
+ name = view.name
482
+
483
+ # Get view title
484
+ title = view.title
485
+
486
+ # Get view directory
487
+ dir = view.dir
488
+
489
+ # Generate view
490
+ view.generate
491
+
492
+ # Apply theme
493
+ view.apply_theme(theme_name)
494
+ ```
495
+
496
+ #### Scriptorium::Post
497
+ Represents a blog post.
498
+
499
+ **Methods:**
500
+ ```ruby
501
+ # Get post title
502
+ title = post.title
503
+
504
+ # Get post body
505
+ body = post.body
506
+
507
+ # Get post tags
508
+ tags = post.tags
509
+
510
+ # Get post views
511
+ views = post.views
512
+
513
+ # Update post
514
+ post.update(fields)
515
+
516
+ # Delete post
517
+ post.delete
518
+ ```
519
+
520
+ ### Widget classes
521
+
522
+ #### Scriptorium::Widget::Links
523
+ Links widget for displaying external links.
524
+
525
+ **Methods:**
526
+ ```ruby
527
+ # Get list of links
528
+ links = widget.get_list
529
+
530
+ # Generate widget
531
+ widget.generate
532
+
533
+ # Get widget card content
534
+ card = widget.card
535
+ ```
536
+
537
+ #### Scriptorium::Widget::Pages
538
+ Pages widget for displaying internal pages.
539
+
540
+ **Methods:**
541
+ ```ruby
542
+ # Generate widget
543
+ widget.generate
544
+
545
+ # Get widget card content
546
+ card = widget.card
547
+ ```
548
+
549
+ #### Scriptorium::Widget::FeaturedPosts
550
+ Featured posts widget for highlighting specific posts.
551
+
552
+ **Methods:**
553
+ ```ruby
554
+ # Parse featured line
555
+ post_id, title = widget.parse_featured_line(line)
556
+
557
+ # Get post title
558
+ title = widget.get_post_title(post_id)
559
+
560
+ # Generate widget
561
+ widget.generate
562
+ ```
563
+
564
+ ### Helper methods
565
+
566
+ #### File operations
567
+ ```ruby
568
+ # Read file
569
+ content = read_file(path)
570
+
571
+ # Write file
572
+ write_file(path, content)
573
+
574
+ # Check if file exists
575
+ exists = file_exist?(path)
576
+
577
+ # Make directory
578
+ make_dir(path)
579
+ ```
580
+
581
+ #### HTML generation
582
+ ```ruby
583
+ # Generate HTML card
584
+ html = html_card(title, tag, content)
585
+
586
+ # Generate HTML container
587
+ html = html_container(content)
588
+
589
+ # Generate HTML body
590
+ html = html_body(css) { content }
591
+ ```
592
+
593
+ ## View Tree Structure
594
+
595
+ ### Repository structure
596
+ ```
597
+ repository/
598
+ ├── config/
599
+ │ ├── repo.txt # Repository configuration
600
+ │ ├── deploy.txt # Deployment configuration
601
+ │ └── widgets.txt # Available widgets
602
+ ├── views/
603
+ │ ├── sample/ # Sample view
604
+ │ │ ├── config.txt # View configuration
605
+ │ │ ├── config/ # View-specific config
606
+ │ │ ├── posts/ # Post files
607
+ │ │ ├── pages/ # Page files
608
+ │ │ ├── widgets/ # Widget configurations
609
+ │ │ ├── themes/ # View-specific themes
610
+ │ │ ├── layout/ # Layout files
611
+ │ │ ├── output/ # Generated output
612
+ │ │ └── staging/ # Staging area
613
+ │ └── other-view/ # Additional views
614
+ ├── themes/
615
+ │ └── standard/ # Standard theme
616
+ │ ├── config.txt # Theme configuration
617
+ │ ├── assets/ # Theme assets
618
+ │ ├── templates/ # Theme templates
619
+ │ └── layout/ # Theme layout
620
+ ├── posts/ # Global posts
621
+ ├── drafts/ # Draft posts
622
+ └── .scriptorium # Repository metadata
623
+ ```
624
+
625
+ ### View structure
626
+ ```
627
+ view/
628
+ ├── config.txt # View configuration
629
+ ├── config/ # Configuration files
630
+ │ ├── layout.txt # Layout configuration
631
+ │ ├── header.txt # Header configuration
632
+ │ ├── left.txt # Left sidebar configuration
633
+ │ ├── right.txt # Right sidebar configuration
634
+ │ ├── main.txt # Main content configuration
635
+ │ └── footer.txt # Footer configuration
636
+ ├── posts/ # Post files
637
+ │ ├── 001.lt3 # Post 001
638
+ │ ├── 002.lt3 # Post 002
639
+ │ └── ... # Additional posts
640
+ ├── pages/ # Page files
641
+ │ ├── about.html # About page
642
+ │ ├── contact.html # Contact page
643
+ │ └── ... # Additional pages
644
+ ├── widgets/ # Widget configurations
645
+ │ ├── links/ # Links widget
646
+ │ │ └── list.txt # Links list
647
+ │ ├── pages/ # Pages widget
648
+ │ │ └── list.txt # Pages list
649
+ │ └── featuredposts/ # Featured posts widget
650
+ │ └── list.txt # Featured posts list
651
+ ├── themes/ # View-specific themes
652
+ ├── layout/ # Layout files
653
+ │ ├── header.html # Header template
654
+ │ ├── footer.html # Footer template
655
+ │ └── ... # Additional layout files
656
+ ├── output/ # Generated output
657
+ │ ├── index.html # Front page
658
+ │ ├── posts/ # Generated post pages
659
+ │ ├── pages/ # Generated page files
660
+ │ ├── assets/ # Assets (CSS, JS, images)
661
+ │ └── widgets/ # Generated widget files
662
+ └── staging/ # Staging area
663
+ ```
664
+
665
+ ### Theme structure
666
+ ```
667
+ theme/
668
+ ├── config.txt # Theme configuration
669
+ ├── assets/ # Theme assets
670
+ │ ├── images/ # Theme images
671
+ │ ├── fonts/ # Theme fonts
672
+ │ └── ... # Additional assets
673
+ ├── templates/ # Theme templates
674
+ │ ├── index.lt3 # Front page template
675
+ │ ├── post.lt3 # Post template
676
+ │ └── widget.lt3 # Widget template
677
+ ├── layout/ # Theme layout
678
+ │ ├── config/ # Layout configuration
679
+ │ ├── gen/ # Generated files
680
+ │ └── layout.txt # Layout structure
681
+ ├── header/ # Header templates
682
+ ├── initial/ # Initial content
683
+ └── ... # Additional theme files
684
+ ```
685
+
686
+ ### File naming conventions
687
+
688
+ #### Posts
689
+ - Format: `NNN-title.lt3` (e.g., `001-my-first-post.lt3`)
690
+ - ID must be three-digit number
691
+ - Title should be lowercase with hyphens
692
+
693
+ #### Pages
694
+ - Format: `name.html` (e.g., `about.html`, `contact.html`)
695
+ - Use descriptive, lowercase names
696
+ - Avoid spaces and special characters
697
+
698
+ #### Widgets
699
+ - Directory names: lowercase with hyphens
700
+ - Configuration files: `list.txt` or `config.txt`
701
+ - Generated files: `widget-name-card.html`
702
+
703
+ #### Themes
704
+ - Directory names: lowercase with hyphens
705
+ - Configuration: `config.txt`
706
+ - Templates: `.lt3` extension
707
+
708
+ This reference section provides the technical details needed for advanced Scriptorium usage and development. For more specific information about certain areas, consult the relevant sections of this user guide or the Scriptorium source code.