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.
- checksums.yaml +4 -4
- data/README.lt3 +324 -0
- data/README.md +3155 -1
- data/assets/.DS_Store +0 -0
- data/assets/README.md +44 -0
- data/assets/back-icon.png +0 -0
- data/assets/icons/facebook.svg +1 -0
- data/assets/icons/github.svg +1 -0
- data/assets/icons/instagram.svg +1 -0
- data/assets/icons/reddit.svg +1 -0
- data/assets/icons/ui/.DS_Store +0 -0
- data/assets/icons/ui/back.png +0 -0
- data/assets/icons/ui/copy.png +0 -0
- data/assets/icons/ui/down.png +0 -0
- data/assets/icons/ui/end.png +0 -0
- data/assets/icons/ui/exit.png +0 -0
- data/assets/icons/ui/foo +10 -0
- data/assets/icons/ui/home.png +0 -0
- data/assets/icons/ui/left.png +0 -0
- data/assets/icons/ui/next.png +0 -0
- data/assets/icons/ui/right.png +0 -0
- data/assets/icons/ui/start.png +0 -0
- data/assets/icons/ui/up.png +0 -0
- data/assets/icons/x.svg +1 -0
- data/assets/icons/youtube.svg +1 -0
- data/assets/samples/placeholder.svg +9 -0
- data/assets/themes/standard/favicon.svg +6 -0
- data/bin/scriptorium +1511 -0
- data/doc/README.txt +6 -0
- data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +95 -0
- data/doc/anti-amnesia/20250727-060000-api-design-tui-planning.md +34 -0
- data/doc/anti-amnesia/20250727-061000-runeblog-tui-analysis.md +50 -0
- data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +31 -0
- data/doc/anti-amnesia/20250727-154000-livetext-plugin-file-stats.md +73 -0
- data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +64 -0
- data/doc/anti-amnesia/20250727-172600-unified-minitest-framework.md +70 -0
- data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +40 -0
- data/doc/anti-amnesia/20250727-173000-widget-testing-achievement.md +110 -0
- data/doc/anti-amnesia/20250727-180000-post-id-num-refactoring.md +73 -0
- data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +46 -0
- data/doc/anti-amnesia/20250728-124421-conversation-summary-concise.md +124 -0
- data/doc/anti-amnesia/20250729-190000-scriptorium-tui-testing-complete.md +46 -0
- data/doc/anti-amnesia/20250729-200000-scriptorium-tui-testing-edit-file-workflow.md +97 -0
- data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +158 -0
- data/doc/anti-amnesia/20250729-211500-dependency-management-system.md +211 -0
- data/doc/anti-amnesia/20250729-213000-python-virtual-environment-setup.md +141 -0
- data/doc/anti-amnesia/20250729-214500-theme-management-commands.md +211 -0
- data/doc/anti-amnesia/20250729-215000-version-update-to-0.6.0.md +134 -0
- data/doc/anti-amnesia/20250729-220000-user-guide-complete.md +41 -0
- data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +45 -0
- data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +30 -0
- data/doc/anti-amnesia/20250804-213700-publishing-test-fix.md +49 -0
- data/doc/anti-amnesia/20250804-214400-additional-test-fixes.md +46 -0
- data/doc/anti-amnesia/20250804-220000-asset-function-logic-clarification.md +41 -0
- data/doc/anti-amnesia/20250806-202032-asset-function-logic-clarification.md +41 -0
- data/doc/anti-amnesia/20250807-213025.md +116 -0
- data/doc/anti-amnesia/20250813-082428-syntax-highlighting-and-navigation-improvements.md +256 -0
- data/doc/banner_svg_config.md +114 -0
- data/doc/contrib.lt3 +8 -0
- data/doc/dependencies.md +281 -0
- data/doc/hacker.lt3 +5 -0
- data/doc/reddit_credentials_template.json +8 -0
- data/doc/reddit_integration.md +207 -0
- data/doc/user.lt3 +38 -0
- data/doc/user_guide_section_1.md +137 -0
- data/doc/user_guide_section_10.md +515 -0
- data/doc/user_guide_section_11.md +708 -0
- data/doc/user_guide_section_2.md +233 -0
- data/doc/user_guide_section_3.md +5 -0
- data/doc/user_guide_section_4.md +221 -0
- data/doc/user_guide_section_5.md +243 -0
- data/doc/user_guide_section_6.md +147 -0
- data/doc/user_guide_section_7.md +311 -0
- data/doc/user_guide_section_8.md +224 -0
- data/doc/user_guide_section_9.md +375 -0
- data/doc/userdoc-toc.txt +88 -0
- data/lib/rouge/lexers/livetext.rb +74 -0
- data/lib/scriptorium/api.rb +640 -0
- data/lib/scriptorium/banner_svg.rb +742 -0
- data/lib/scriptorium/contract.rb +33 -0
- data/lib/scriptorium/exceptions.rb +174 -0
- data/lib/scriptorium/helpers.rb +475 -0
- data/lib/scriptorium/post.rb +195 -0
- data/lib/scriptorium/reddit.rb +83 -0
- data/lib/scriptorium/repo.rb +624 -0
- data/lib/scriptorium/standard_files.rb +515 -0
- data/lib/scriptorium/syntax_highlighter.rb +234 -0
- data/lib/scriptorium/theme.rb +179 -0
- data/lib/scriptorium/version.rb +2 -2
- data/lib/scriptorium/view.rb +976 -0
- data/lib/scriptorium/widgets/featured_posts.rb +149 -0
- data/lib/scriptorium/widgets/links.rb +112 -0
- data/lib/scriptorium/widgets/pages.rb +133 -0
- data/lib/scriptorium/widgets/widget.rb +133 -0
- data/lib/scriptorium.rb +22 -9
- data/lib/skeleton.rb +11 -2
- data/scriptorium.gemspec +15 -4
- data/test/README.md +69 -0
- data/test/all +43 -0
- data/test/api_demo.rb +99 -0
- data/test/assets/imagenotfound.jpg +0 -0
- data/test/assets/images/.DS_Store +0 -0
- data/test/assets/images/README.md +27 -0
- data/test/assets/images/odd_aspect.png +0 -0
- data/test/assets/images/perfect.png +0 -0
- data/test/assets/images/small.png +0 -0
- data/test/assets/images/tall.png +0 -0
- data/test/assets/images/very_tall.png +0 -0
- data/test/assets/images/very_wide.png +0 -0
- data/test/assets/images/wide.png +0 -0
- data/test/assets/testbanner.jpg +0 -0
- data/test/banner_svg/simple_helpers.rb +13 -0
- data/test/banner_svg/unit.rb +768 -0
- data/test/ed_test.rb +204 -0
- data/test/integration/cursor_banner_combinations.rb +193 -0
- data/test/integration/cursor_banner_features.rb +374 -0
- data/test/integration/integration_test.rb +326 -0
- data/test/livetext_plugin_test.rb +229 -0
- data/test/manual/asset_mgmt.rb +67 -0
- data/test/manual/banner-tests/config.txt +3 -0
- data/test/manual/banner-tests/index.html +45 -0
- data/test/manual/banner-tests/test01.html +58 -0
- data/test/manual/banner-tests/test02.html +58 -0
- data/test/manual/banner-tests/test03.html +58 -0
- data/test/manual/banner-tests/test04.html +65 -0
- data/test/manual/banner-tests/test05.html +65 -0
- data/test/manual/banner-tests/test06.html +65 -0
- data/test/manual/banner-tests/test07.html +65 -0
- data/test/manual/banner-tests/test08.html +59 -0
- data/test/manual/banner-tests/test09.html +59 -0
- data/test/manual/banner-tests/test10.html +59 -0
- data/test/manual/banner-tests/test11.html +59 -0
- data/test/manual/banner-tests/test12.html +59 -0
- data/test/manual/banner-tests/test13.html +59 -0
- data/test/manual/banner-tests/test14.html +59 -0
- data/test/manual/banner-tests/test15.html +58 -0
- data/test/manual/banner-tests/test16.html +58 -0
- data/test/manual/banner-tests/test17.html +58 -0
- data/test/manual/banner-tests/test18.html +68 -0
- data/test/manual/banner-tests/test19.html +68 -0
- data/test/manual/banner-tests/test20.html +68 -0
- data/test/manual/banner-tests/test21.html +68 -0
- data/test/manual/banner-tests/test22.html +68 -0
- data/test/manual/banner-tests/test23.html +68 -0
- data/test/manual/banner-tests/test24.html +68 -0
- data/test/manual/banner-tests/test25.html +67 -0
- data/test/manual/banner_environment.rb +192 -0
- data/test/manual/deploy_symlink_demo.rb +142 -0
- data/test/manual/environment.rb +67 -0
- data/test/manual/make_banner.rb +153 -0
- data/test/manual/sample_banner_config.txt +12 -0
- data/test/manual/symlink_demo.rb +117 -0
- data/test/manual/test1.rb +47 -0
- data/test/manual/test2.rb +12 -0
- data/test/manual/test3.rb +38 -0
- data/test/manual/test4.rb +40 -0
- data/test/manual/test5.rb +24 -0
- data/test/manual/test6.rb +73 -0
- data/test/manual/test_banner_combinations.rb +120 -0
- data/test/manual/test_banner_features.rb +306 -0
- data/test/manual/test_banner_from_file.rb +150 -0
- data/test/manual/test_banner_in_header.rb +35 -0
- data/test/manual/test_code_highlighting.rb +68 -0
- data/test/manual/test_complex_header.rb +74 -0
- data/test/manual/test_empty_header.rb +32 -0
- data/test/manual/test_radial_custom.rb +58 -0
- data/test/manual/test_radial_large_radius.rb +52 -0
- data/test/manual/test_svg_debug.rb +47 -0
- data/test/manual/test_syntax_highlighting.rb +147 -0
- data/test/pages-demo/config/currentview.txt +1 -0
- data/test/pages-demo/views/demo/config/bootstrap_css.txt +5 -0
- data/test/pages-demo/views/demo/config/bootstrap_js.txt +4 -0
- data/test/pages-demo/views/demo/config/common.js +57 -0
- data/test/pages-demo/views/demo/config/footer.txt +1 -0
- data/test/pages-demo/views/demo/config/global-head.txt +8 -0
- data/test/pages-demo/views/demo/config/header.txt +1 -0
- data/test/pages-demo/views/demo/config/layout.txt +1 -0
- data/test/pages-demo/views/demo/config/left.txt +1 -0
- data/test/pages-demo/views/demo/config/main.txt +1 -0
- data/test/pages-demo/views/demo/config/right.txt +1 -0
- data/test/pages-demo/views/demo/config.txt +3 -0
- data/test/pages-demo/views/demo/output/panes/footer.html +1 -0
- data/test/pages-demo/views/demo/output/panes/header.html +1 -0
- data/test/pages-demo/views/demo/output/panes/left.html +1 -0
- data/test/pages-demo/views/demo/output/panes/main.html +1 -0
- data/test/pages-demo/views/demo/output/panes/right.html +1 -0
- data/test/rubytext/rubytext_comprehensive_test.rb +307 -0
- data/test/rubytext/rubytext_demo_test.rb +42 -0
- data/test/rubytext/rubytext_testing_guide.md +277 -0
- data/test/run_automated_tests.rb +45 -0
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_css.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_js.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/config/common.js +57 -0
- data/test/scriptorium-TEST-1754622690-146/config/currentview.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/config/global-head.txt +9 -0
- data/test/scriptorium-TEST-1754622690-146/config/last_post_num.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/config/os_helpers.rb +4 -0
- data/test/scriptorium-TEST-1754622690-146/config/widgets.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/posts/0001/meta.txt +8 -0
- data/test/scriptorium-TEST-1754622690-146/posts/0001/source.lt3 +6 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/README.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/config.txt +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/initial/post.lt3 +12 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/footer.txt +2 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/header.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/left.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/main.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/right.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/gen/text.css +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/layout.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index.lt3 +1 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index_entry.lt3 +14 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/post.lt3 +13 -0
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/widget.lt3 +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_css.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_js.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/common.js +57 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/deploy.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/footer.txt +2 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/global-head.txt +9 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/header.txt +4 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/layout.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/left.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/main.txt +5 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/reddit.txt +10 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/right.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/social.txt +7 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/status.txt +7 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/config.txt +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/footer.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/header.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/left.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/main.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/right.html +3 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/footer.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/header.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/left.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/main.html +1 -0
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/right.html +1 -0
- data/test/staging/.DS_Store +0 -0
- data/test/syntax_highlighting_test.lt3 +124 -0
- data/test/test_helpers.rb +230 -0
- data/test/tui_editor_integration_test.rb +296 -0
- data/test/tui_integration_test.rb +637 -0
- data/test/unit/api.rb +1056 -0
- data/test/unit/asset_management.rb +245 -0
- data/test/unit/clipboard_test.rb +60 -0
- data/test/unit/contract_test.rb +91 -0
- data/test/unit/core.rb +857 -0
- data/test/unit/deploy_test.rb +187 -0
- data/test/unit/gem_asset_management.rb +189 -0
- data/test/unit/livetext_basic.rb +69 -0
- data/test/unit/livetext_compatibility.rb +89 -0
- data/test/unit/post.rb +244 -0
- data/test/unit/read_commented_file_test.rb +276 -0
- data/test/unit/reddit_test.rb +235 -0
- data/test/unit/repo.rb +548 -0
- data/test/unit/social_test.rb +369 -0
- data/test/unit/symlink_test.rb +213 -0
- data/test/unit/view.rb +431 -0
- data/test/unit/widgets.rb +669 -0
- data/test/wizard_test.rb +123 -0
- data/ui/README.md +67 -0
- data/ui/common/lib/ui_common.rb +8 -0
- data/ui/rubytext/README.md +191 -0
- data/ui/rubytext/bin/scriptorium-rubytext +402 -0
- data/ui/rubytext/lib/rubytext_ui.rb +300 -0
- data/ui/tui/bin/scriptorium +1420 -0
- data/ui/tui/test/tui_test.rb +23 -0
- data/ui/web/app/app.rb +1378 -0
- data/ui/web/app/error_helpers.rb +150 -0
- data/ui/web/app/views/advanced_config.erb +190 -0
- data/ui/web/app/views/asset_management.erb +589 -0
- data/ui/web/app/views/banner_config.erb +200 -0
- data/ui/web/app/views/configure_view.erb +401 -0
- data/ui/web/app/views/dashboard.erb +162 -0
- data/ui/web/app/views/deploy_config.erb +146 -0
- data/ui/web/app/views/edit_pages.erb +195 -0
- data/ui/web/app/views/edit_post.erb +54 -0
- data/ui/web/app/views/error_page.erb +29 -0
- data/ui/web/app/views/header_config.erb +155 -0
- data/ui/web/app/views/layout_config.erb +147 -0
- data/ui/web/app/views/navbar_config.erb +411 -0
- data/ui/web/app/views/view_dashboard.erb +138 -0
- data/ui/web/bin/scriptorium-web +153 -0
- data/ui/web/test/web_basic_test.rb +38 -0
- data/ui/web/test_navbar.txt +7 -0
- data/ui/web/tmp/web_server.log +5 -0
- data/ui/web/tmp/web_server.pid +1 -0
- metadata +360 -5
data/doc/dependencies.md
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
# Scriptorium Dependencies & Requirements
|
2
|
+
|
3
|
+
This document lists the external dependencies and configuration requirements for different Scriptorium features.
|
4
|
+
|
5
|
+
## Core Dependencies
|
6
|
+
|
7
|
+
### Required for All Features
|
8
|
+
- **Ruby** (2.7+) - Core runtime
|
9
|
+
- **Git** - Version control (for repository management)
|
10
|
+
|
11
|
+
## Feature-Specific Dependencies & Requirements
|
12
|
+
|
13
|
+
### Reddit Integration
|
14
|
+
**Features**: Reddit autoposting, Reddit button generation
|
15
|
+
|
16
|
+
**Software Dependencies**:
|
17
|
+
- **Redd gem** - Ruby Reddit API Wrapper
|
18
|
+
```bash
|
19
|
+
gem install redd
|
20
|
+
```
|
21
|
+
|
22
|
+
**Configuration Requirements**:
|
23
|
+
- **Reddit App** - Create app at https://www.reddit.com/prefs/apps
|
24
|
+
- **API Credentials** - client_id, client_secret, username, password
|
25
|
+
- **Credentials File** - `config/reddit_credentials.json` with proper format
|
26
|
+
- **User Agent** - Descriptive user agent string (required by Reddit)
|
27
|
+
|
28
|
+
**Installation Notes**:
|
29
|
+
- On macOS: `brew install python3` (recommended)
|
30
|
+
- On Ubuntu/Debian: `sudo apt install python3 python3-pip`
|
31
|
+
- On Windows: Download from python.org or use Chocolatey
|
32
|
+
|
33
|
+
### LiveText Integration
|
34
|
+
**Features**: LiveText plugin support, file statistics
|
35
|
+
|
36
|
+
**Dependencies**:
|
37
|
+
- **LiveText** - LiveText gem and runtime
|
38
|
+
```bash
|
39
|
+
gem install livetext
|
40
|
+
```
|
41
|
+
|
42
|
+
### Web Development Features
|
43
|
+
**Features**: Web server, JavaScript serving, browser integration
|
44
|
+
|
45
|
+
**Dependencies**:
|
46
|
+
- **Webrick** - Ruby web server (usually included with Ruby)
|
47
|
+
- **Default browser** - System default web browser
|
48
|
+
|
49
|
+
### File Operations
|
50
|
+
**Features**: File editing, directory operations
|
51
|
+
|
52
|
+
**Dependencies**:
|
53
|
+
- **Text editor** - One of:
|
54
|
+
- `ed` (Unix/Linux/macOS) - Minimal editor for automation
|
55
|
+
- `nano` - Simple text editor
|
56
|
+
- `vim` - Advanced text editor
|
57
|
+
- `emacs` - Advanced text editor
|
58
|
+
- System default editor
|
59
|
+
|
60
|
+
### Image Processing
|
61
|
+
**Features**: Image optimization, thumbnail generation
|
62
|
+
|
63
|
+
**Dependencies**:
|
64
|
+
- **ImageMagick** - Image processing library
|
65
|
+
```bash
|
66
|
+
# macOS
|
67
|
+
brew install imagemagick
|
68
|
+
|
69
|
+
# Ubuntu/Debian
|
70
|
+
sudo apt install imagemagick
|
71
|
+
|
72
|
+
# Windows
|
73
|
+
# Download from imagemagick.org
|
74
|
+
```
|
75
|
+
|
76
|
+
### Markdown Processing
|
77
|
+
**Features**: Markdown rendering, syntax highlighting
|
78
|
+
|
79
|
+
**Dependencies**:
|
80
|
+
- **Pygments** - Syntax highlighting (optional)
|
81
|
+
```bash
|
82
|
+
pip3 install pygments
|
83
|
+
```
|
84
|
+
|
85
|
+
### RSS/Atom Feeds
|
86
|
+
**Features**: RSS feed generation, feed validation
|
87
|
+
|
88
|
+
**Software Dependencies**:
|
89
|
+
- **Feed validator** (optional) - For feed validation
|
90
|
+
```bash
|
91
|
+
pip3 install feedvalidator
|
92
|
+
```
|
93
|
+
|
94
|
+
### Deployment
|
95
|
+
**Features**: Deploy blog to web server
|
96
|
+
|
97
|
+
**Software Dependencies**:
|
98
|
+
- **SSH client** - For server access (usually included with OS)
|
99
|
+
- **rsync** - For file synchronization (usually included with OS)
|
100
|
+
|
101
|
+
**Configuration Requirements**:
|
102
|
+
- **SSH Keys** - Set up SSH key authentication for server access
|
103
|
+
- **Server Access** - Valid server credentials and permissions
|
104
|
+
- **Deployment Config** - Server details in `config/deploy.txt`
|
105
|
+
- **Domain/DNS** - Domain name pointing to server (optional)
|
106
|
+
- **SSL Certificate** - HTTPS certificate for secure access (optional)
|
107
|
+
|
108
|
+
**Setup Steps**:
|
109
|
+
1. Generate SSH key pair: `ssh-keygen -t rsa -b 4096`
|
110
|
+
2. Add public key to server: `ssh-copy-id user@server`
|
111
|
+
3. Test connection: `ssh user@server`
|
112
|
+
4. Configure deployment settings in Scriptorium
|
113
|
+
|
114
|
+
## Platform-Specific Dependencies
|
115
|
+
|
116
|
+
### macOS
|
117
|
+
- **Homebrew** (recommended) - Package manager
|
118
|
+
```bash
|
119
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
120
|
+
```
|
121
|
+
- **Xcode Command Line Tools** - For compilation
|
122
|
+
```bash
|
123
|
+
xcode-select --install
|
124
|
+
```
|
125
|
+
|
126
|
+
### Linux (Ubuntu/Debian)
|
127
|
+
- **Build essentials** - For compilation
|
128
|
+
```bash
|
129
|
+
sudo apt update
|
130
|
+
sudo apt install build-essential
|
131
|
+
```
|
132
|
+
|
133
|
+
### Windows
|
134
|
+
- **RubyInstaller** - Ruby for Windows
|
135
|
+
- **Git for Windows** - Git integration
|
136
|
+
- **WSL** (optional) - Windows Subsystem for Linux
|
137
|
+
|
138
|
+
## Installation Scripts
|
139
|
+
|
140
|
+
### Quick Setup Scripts
|
141
|
+
|
142
|
+
#### macOS (with Homebrew)
|
143
|
+
```bash
|
144
|
+
#!/bin/bash
|
145
|
+
# Install core dependencies
|
146
|
+
brew install ruby git python3
|
147
|
+
|
148
|
+
# Install Python packages
|
149
|
+
pip3 install praw pygments feedvalidator
|
150
|
+
|
151
|
+
# Install Ruby gems
|
152
|
+
gem install livetext
|
153
|
+
|
154
|
+
# Install ImageMagick (if needed)
|
155
|
+
brew install imagemagick
|
156
|
+
```
|
157
|
+
|
158
|
+
#### Ubuntu/Debian
|
159
|
+
```bash
|
160
|
+
#!/bin/bash
|
161
|
+
# Update package list
|
162
|
+
sudo apt update
|
163
|
+
|
164
|
+
# Install core dependencies
|
165
|
+
sudo apt install ruby ruby-dev git python3 python3-pip build-essential
|
166
|
+
|
167
|
+
# Install Python packages
|
168
|
+
pip3 install praw pygments feedvalidator
|
169
|
+
|
170
|
+
# Install Ruby gems
|
171
|
+
gem install livetext
|
172
|
+
|
173
|
+
# Install ImageMagick (if needed)
|
174
|
+
sudo apt install imagemagick
|
175
|
+
```
|
176
|
+
|
177
|
+
## Feature Dependency Matrix
|
178
|
+
|
179
|
+
### Software Dependencies
|
180
|
+
| Feature | Ruby | Git | Python3 | PRAW | LiveText | ImageMagick | Editor |
|
181
|
+
|---------|------|-----|---------|------|----------|-------------|---------|
|
182
|
+
| Core Blogging | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
183
|
+
| Reddit Button | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
184
|
+
| Reddit Autopost | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
185
|
+
| LiveText Plugins | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
186
|
+
| File Statistics | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
187
|
+
| Web Server | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
188
|
+
| Image Processing | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
|
189
|
+
| Markdown + Syntax | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
190
|
+
| RSS Feeds | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
191
|
+
| File Editing | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
|
192
|
+
| Deployment | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
193
|
+
|
194
|
+
### Configuration Requirements
|
195
|
+
| Feature | Reddit Credentials | SSH Keys | Server Access | Domain/DNS | SSL Cert |
|
196
|
+
|---------|-------------------|----------|---------------|------------|----------|
|
197
|
+
| Core Blogging | ❌ | ❌ | ❌ | ❌ | ❌ |
|
198
|
+
| Reddit Button | ❌ | ❌ | ❌ | ❌ | ❌ |
|
199
|
+
| Reddit Autopost | ✅ | ❌ | ❌ | ❌ | ❌ |
|
200
|
+
| LiveText Plugins | ❌ | ❌ | ❌ | ❌ | ❌ |
|
201
|
+
| File Statistics | ❌ | ❌ | ❌ | ❌ | ❌ |
|
202
|
+
| Web Server | ❌ | ❌ | ❌ | ❌ | ❌ |
|
203
|
+
| Image Processing | ❌ | ❌ | ❌ | ❌ | ❌ |
|
204
|
+
| Markdown + Syntax | ❌ | ❌ | ❌ | ❌ | ❌ |
|
205
|
+
| RSS Feeds | ❌ | ❌ | ❌ | ❌ | ❌ |
|
206
|
+
| File Editing | ❌ | ❌ | ❌ | ❌ | ❌ |
|
207
|
+
| Deployment | ❌ | ✅ | ✅ | ⚠️ | ⚠️ |
|
208
|
+
|
209
|
+
## Verification Commands
|
210
|
+
|
211
|
+
### Check Core Dependencies
|
212
|
+
```bash
|
213
|
+
# Check Ruby
|
214
|
+
ruby --version
|
215
|
+
|
216
|
+
# Check Git
|
217
|
+
git --version
|
218
|
+
|
219
|
+
# Check Python 3
|
220
|
+
python3 --version
|
221
|
+
```
|
222
|
+
|
223
|
+
### Check Feature Dependencies
|
224
|
+
```bash
|
225
|
+
# Check PRAW (Reddit integration)
|
226
|
+
python3 -c "import praw; print('PRAW available')"
|
227
|
+
|
228
|
+
# Check LiveText
|
229
|
+
livetext --version
|
230
|
+
|
231
|
+
# Check ImageMagick
|
232
|
+
convert --version
|
233
|
+
|
234
|
+
# Check Pygments
|
235
|
+
python3 -c "import pygments; print('Pygments available')"
|
236
|
+
```
|
237
|
+
|
238
|
+
### Check Configuration Requirements
|
239
|
+
```bash
|
240
|
+
# Check Reddit credentials
|
241
|
+
ls -la config/reddit_credentials.json
|
242
|
+
|
243
|
+
# Check SSH key setup
|
244
|
+
ls -la ~/.ssh/id_rsa.pub
|
245
|
+
|
246
|
+
# Test SSH connection (replace with your server)
|
247
|
+
ssh -T user@your-server.com
|
248
|
+
|
249
|
+
# Check deployment configuration
|
250
|
+
ls -la config/deploy.txt
|
251
|
+
|
252
|
+
# Check domain resolution (replace with your domain)
|
253
|
+
nslookup your-domain.com
|
254
|
+
```
|
255
|
+
|
256
|
+
## Troubleshooting
|
257
|
+
|
258
|
+
### Common Issues
|
259
|
+
|
260
|
+
1. **Python not found**
|
261
|
+
- Ensure Python 3 is installed and in PATH
|
262
|
+
- On macOS, use `brew install python3`
|
263
|
+
|
264
|
+
2. **PRAW installation fails**
|
265
|
+
- Upgrade pip: `pip3 install --upgrade pip`
|
266
|
+
- Install with user flag: `pip3 install --user praw`
|
267
|
+
|
268
|
+
3. **LiveText not found**
|
269
|
+
- Install via gem: `gem install livetext`
|
270
|
+
- Check Ruby version compatibility
|
271
|
+
|
272
|
+
4. **ImageMagick not working**
|
273
|
+
- Verify installation: `convert --version`
|
274
|
+
- Check PATH and permissions
|
275
|
+
|
276
|
+
### Getting Help
|
277
|
+
|
278
|
+
- Check the specific feature documentation
|
279
|
+
- Run the verification commands above
|
280
|
+
- Check system logs for error messages
|
281
|
+
- Ensure all dependencies are properly installed and in PATH
|
data/doc/hacker.lt3
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
{
|
2
|
+
"client_id": "YOUR_CLIENT_ID_HERE",
|
3
|
+
"client_secret": "YOUR_CLIENT_SECRET_HERE",
|
4
|
+
"username": "YOUR_REDDIT_USERNAME",
|
5
|
+
"password": "YOUR_REDDIT_PASSWORD",
|
6
|
+
"user_agent": "scriptorium:autopost:v1.0 (by /u/YOUR_USERNAME)",
|
7
|
+
"default_subreddit": "YOUR_DEFAULT_SUBREDDIT"
|
8
|
+
}
|
@@ -0,0 +1,207 @@
|
|
1
|
+
# Reddit Integration for Scriptorium
|
2
|
+
|
3
|
+
Scriptorium includes a Reddit autoposting feature that allows you to automatically submit blog posts to Reddit when they are published.
|
4
|
+
|
5
|
+
## Overview
|
6
|
+
|
7
|
+
The Reddit integration uses a Ruby-to-Python bridge approach:
|
8
|
+
- **Ruby side**: Handles Scriptorium integration and data preparation
|
9
|
+
- **Python side**: Uses PRAW (Python Reddit API Wrapper) for actual Reddit API calls
|
10
|
+
|
11
|
+
This approach leverages the mature and well-tested PRAW library while keeping the integration clean and maintainable.
|
12
|
+
|
13
|
+
## Setup
|
14
|
+
|
15
|
+
### 1. Install Python Dependencies
|
16
|
+
|
17
|
+
**Recommended: Use a Virtual Environment**
|
18
|
+
```bash
|
19
|
+
# Create a virtual environment for Scriptorium
|
20
|
+
python3 -m venv ~/.scriptorium-python
|
21
|
+
|
22
|
+
# Activate the virtual environment
|
23
|
+
source ~/.scriptorium-python/bin/activate
|
24
|
+
|
25
|
+
# Install PRAW
|
26
|
+
pip install praw
|
27
|
+
```
|
28
|
+
|
29
|
+
**Alternative: Install with --user flag**
|
30
|
+
```bash
|
31
|
+
pip3 install --user praw
|
32
|
+
```
|
33
|
+
|
34
|
+
**Note**: Modern Python installations on macOS may require using a virtual environment or the `--user` flag to avoid "externally-managed-environment" errors.
|
35
|
+
|
36
|
+
### 2. Create Reddit App
|
37
|
+
|
38
|
+
1. Go to [Reddit App Preferences](https://www.reddit.com/prefs/apps)
|
39
|
+
2. Click "create another app"
|
40
|
+
3. Set type to "script"
|
41
|
+
4. Note your credentials:
|
42
|
+
- `client_id` (the string under your app name)
|
43
|
+
- `client_secret` (the "secret" field)
|
44
|
+
- `username` (your Reddit username)
|
45
|
+
- `password` (your Reddit password)
|
46
|
+
|
47
|
+
### 3. Configure Credentials
|
48
|
+
|
49
|
+
Create a `reddit_credentials.json` file in your Scriptorium config directory:
|
50
|
+
|
51
|
+
```json
|
52
|
+
{
|
53
|
+
"client_id": "YOUR_CLIENT_ID_HERE",
|
54
|
+
"client_secret": "YOUR_CLIENT_SECRET_HERE",
|
55
|
+
"username": "YOUR_REDDIT_USERNAME",
|
56
|
+
"password": "YOUR_REDDIT_PASSWORD",
|
57
|
+
"user_agent": "scriptorium:autopost:v1.0 (by /u/YOUR_USERNAME)",
|
58
|
+
"default_subreddit": "YOUR_DEFAULT_SUBREDDIT"
|
59
|
+
}
|
60
|
+
```
|
61
|
+
|
62
|
+
**Security Note**: Keep this file secure and never commit it to version control.
|
63
|
+
|
64
|
+
## Usage
|
65
|
+
|
66
|
+
### Basic Autoposting
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
# In your Scriptorium code
|
70
|
+
post_data = {
|
71
|
+
title: "My Blog Post Title",
|
72
|
+
url: "https://myblog.com/posts/my-post.html",
|
73
|
+
content: "Post content or excerpt",
|
74
|
+
subreddit: "programming" # Optional, uses default if not specified
|
75
|
+
}
|
76
|
+
|
77
|
+
# Autopost to Reddit
|
78
|
+
success = repo.autopost_to_reddit(post_data)
|
79
|
+
```
|
80
|
+
|
81
|
+
### Check Configuration
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
# Check if Reddit integration is configured
|
85
|
+
if repo.reddit_configured?
|
86
|
+
puts "Reddit integration is ready"
|
87
|
+
else
|
88
|
+
puts "Reddit integration not configured"
|
89
|
+
end
|
90
|
+
```
|
91
|
+
|
92
|
+
### Get Reddit Configuration
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
# Access Reddit configuration
|
96
|
+
config = repo.reddit.config
|
97
|
+
puts "Using Reddit account: #{config['username']}"
|
98
|
+
```
|
99
|
+
|
100
|
+
## API Reference
|
101
|
+
|
102
|
+
### Scriptorium::Reddit
|
103
|
+
|
104
|
+
#### `new(repo)`
|
105
|
+
Creates a new Reddit integration instance.
|
106
|
+
|
107
|
+
#### `autopost(post_data, subreddit = nil)`
|
108
|
+
Autoposts content to Reddit.
|
109
|
+
|
110
|
+
**Parameters:**
|
111
|
+
- `post_data` (Hash): Post information
|
112
|
+
- `title` (String): Post title (required)
|
113
|
+
- `url` (String): Post URL (required)
|
114
|
+
- `content` (String): Post content or excerpt
|
115
|
+
- `subreddit` (String): Target subreddit
|
116
|
+
- `subreddit` (String): Override subreddit (optional)
|
117
|
+
|
118
|
+
**Returns:** `true` on success, `false` on failure
|
119
|
+
|
120
|
+
#### `configured?`
|
121
|
+
Checks if Reddit integration is properly configured.
|
122
|
+
|
123
|
+
**Returns:** `true` if credentials and Python script exist
|
124
|
+
|
125
|
+
#### `config`
|
126
|
+
Gets the parsed Reddit configuration.
|
127
|
+
|
128
|
+
**Returns:** Hash with credentials or `nil` if not configured
|
129
|
+
|
130
|
+
### Scriptorium::Repo
|
131
|
+
|
132
|
+
#### `reddit`
|
133
|
+
Gets the Reddit integration instance (lazy-loaded).
|
134
|
+
|
135
|
+
#### `autopost_to_reddit(post_data, subreddit = nil)`
|
136
|
+
Convenience method for autoposting.
|
137
|
+
|
138
|
+
#### `reddit_configured?`
|
139
|
+
Convenience method to check Reddit configuration.
|
140
|
+
|
141
|
+
## Error Handling
|
142
|
+
|
143
|
+
The integration includes comprehensive error handling:
|
144
|
+
|
145
|
+
- **Missing credentials**: Raises `FileNotFound` exception
|
146
|
+
- **Missing Python script**: Raises `FileNotFound` exception
|
147
|
+
- **Invalid JSON**: Returns `nil` for config, logs error
|
148
|
+
- **API failures**: Returns `false`, logs error details
|
149
|
+
- **Temporary file cleanup**: Automatic cleanup in all cases
|
150
|
+
|
151
|
+
## Testing
|
152
|
+
|
153
|
+
Run the Reddit integration tests:
|
154
|
+
|
155
|
+
```bash
|
156
|
+
ruby test/unit/reddit_test.rb
|
157
|
+
```
|
158
|
+
|
159
|
+
The tests cover:
|
160
|
+
- Initialization and configuration
|
161
|
+
- Credentials management
|
162
|
+
- Error handling
|
163
|
+
- Temporary file cleanup
|
164
|
+
- Integration with Repo class
|
165
|
+
|
166
|
+
## Security Considerations
|
167
|
+
|
168
|
+
1. **Credentials Storage**: Store credentials securely and never commit to version control
|
169
|
+
2. **User Agent**: Use a descriptive user agent string as required by Reddit
|
170
|
+
3. **Rate Limiting**: PRAW handles Reddit's rate limiting automatically
|
171
|
+
4. **Permissions**: Only request necessary permissions for your app
|
172
|
+
|
173
|
+
## Troubleshooting
|
174
|
+
|
175
|
+
### Common Issues
|
176
|
+
|
177
|
+
1. **"Reddit credentials file not found"**
|
178
|
+
- Ensure `reddit_credentials.json` exists in your config directory
|
179
|
+
- Check file permissions
|
180
|
+
|
181
|
+
2. **"Reddit autopost Python script not found"**
|
182
|
+
- Ensure `scripts/reddit_autopost.py` exists
|
183
|
+
- Check that Python 3 is installed
|
184
|
+
|
185
|
+
3. **Authentication failures**
|
186
|
+
- Verify your Reddit credentials are correct
|
187
|
+
- Check that your Reddit app is properly configured
|
188
|
+
- Ensure your Reddit account has the necessary permissions
|
189
|
+
|
190
|
+
4. **Subreddit posting failures**
|
191
|
+
- Verify the subreddit exists and is accessible
|
192
|
+
- Check subreddit posting rules and restrictions
|
193
|
+
- Ensure your account meets subreddit posting requirements
|
194
|
+
|
195
|
+
### Debug Mode
|
196
|
+
|
197
|
+
Enable debug logging by setting the log level in your Scriptorium configuration.
|
198
|
+
|
199
|
+
## Future Enhancements
|
200
|
+
|
201
|
+
Potential improvements for the Reddit integration:
|
202
|
+
|
203
|
+
1. **Comment posting**: Support for posting comments on submissions
|
204
|
+
2. **Crossposting**: Support for crossposting to multiple subreddits
|
205
|
+
3. **Scheduling**: Delayed posting capabilities
|
206
|
+
4. **Analytics**: Track post performance and engagement
|
207
|
+
5. **Moderation**: Pre-posting content validation and filtering
|
data/doc/user.lt3
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
Intro and overview
|
2
|
+
- Static files
|
3
|
+
- Stored locally, deployed remotely
|
4
|
+
- One repository, many views
|
5
|
+
- terminology
|
6
|
+
- Livetext support
|
7
|
+
- markdown?
|
8
|
+
|
9
|
+
Getting started (5-minute blog)
|
10
|
+
|
11
|
+
The UI(s)
|
12
|
+
- Views
|
13
|
+
- listing
|
14
|
+
- add a view
|
15
|
+
- edit view settings
|
16
|
+
- create a post
|
17
|
+
- preview
|
18
|
+
- deploy
|
19
|
+
- live browsing
|
20
|
+
- Posts
|
21
|
+
- List drafts/posts
|
22
|
+
- Create/finish draft
|
23
|
+
- Edit
|
24
|
+
- Delete/undelete
|
25
|
+
- Livetext in brief
|
26
|
+
- Themes
|
27
|
+
- the standard theme
|
28
|
+
- clone and edit
|
29
|
+
- Widgets
|
30
|
+
- Links
|
31
|
+
- Pages
|
32
|
+
- Featured posts
|
33
|
+
|
34
|
+
Livetext in more detail
|
35
|
+
|
36
|
+
|
37
|
+
-
|
38
|
+
-
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# 1. Core Concepts
|
2
|
+
|
3
|
+
## What is Scriptorium?
|
4
|
+
|
5
|
+
Scriptorium is a static site generator designed for creating and managing multiple blogs or content sites from a single installation. It combines the simplicity of static file generation with the power of a multi-view architecture, allowing you to maintain several distinct websites with shared infrastructure.
|
6
|
+
|
7
|
+
### Static Files Philosophy
|
8
|
+
|
9
|
+
Scriptorium generates static HTML, CSS, and JavaScript files. This approach offers several key benefits:
|
10
|
+
|
11
|
+
- **Performance**: Static files load quickly and can be served efficiently by any web server
|
12
|
+
- **Reliability**: No server-side processing means fewer points of failure
|
13
|
+
- **Security**: No dynamic code execution reduces attack vectors
|
14
|
+
- **Scalability**: Static files can be served by CDNs and cached effectively
|
15
|
+
- **Simplicity**: No database setup, server configuration, or runtime dependencies
|
16
|
+
|
17
|
+
When you publish content with Scriptorium, it generates a complete set of static files that can be deployed to any web hosting service - from simple file hosting to sophisticated CDN networks.
|
18
|
+
|
19
|
+
### Multi-View Architecture
|
20
|
+
|
21
|
+
Scriptorium's most distinctive feature is its **multi-view architecture**. Instead of managing separate installations for different blogs or websites, you can create multiple "views" within a single Scriptorium repository.
|
22
|
+
|
23
|
+
**What is a view?**
|
24
|
+
A view represents a complete, independent website or blog. Each view has its own:
|
25
|
+
- Configuration settings
|
26
|
+
- Theme and styling
|
27
|
+
- Content (posts, pages, widgets)
|
28
|
+
- Deployment settings
|
29
|
+
- URL structure
|
30
|
+
|
31
|
+
**Why use views?**
|
32
|
+
- **Efficiency**: Manage multiple sites from one installation
|
33
|
+
- **Consistency**: Share themes, templates, and infrastructure
|
34
|
+
- **Flexibility**: Each view can have completely different content and styling
|
35
|
+
- **Maintenance**: Update core functionality across all views at once
|
36
|
+
|
37
|
+
For example, you might have:
|
38
|
+
- A personal blog view
|
39
|
+
- A professional portfolio view
|
40
|
+
- A project documentation view
|
41
|
+
- A photo gallery view
|
42
|
+
|
43
|
+
All managed from the same Scriptorium installation, with shared themes and infrastructure but completely independent content.
|
44
|
+
|
45
|
+
### Repository Structure
|
46
|
+
|
47
|
+
A Scriptorium repository is a directory that contains everything needed to manage your views and generate your websites. The repository structure follows a logical organization:
|
48
|
+
|
49
|
+
```
|
50
|
+
scriptorium/
|
51
|
+
├── config/ # Global configuration files
|
52
|
+
├── views/ # Individual view directories
|
53
|
+
│ ├── personal/ # Personal blog view
|
54
|
+
│ ├── portfolio/ # Professional portfolio view
|
55
|
+
│ └── docs/ # Documentation view
|
56
|
+
├── drafts/ # Draft posts (global)
|
57
|
+
├── posts/ # Generated posts (global)
|
58
|
+
├── assets/ # Shared images and files
|
59
|
+
├── themes/ # Theme templates
|
60
|
+
└── scripts/ # Utility scripts
|
61
|
+
```
|
62
|
+
|
63
|
+
**Key Repository Concepts:**
|
64
|
+
- **Global vs View-specific**: Some content (like posts) is global and can be shared across views, while other content (like view configuration) is specific to each view
|
65
|
+
- **Separation of concerns**: Content, presentation, and configuration are clearly separated
|
66
|
+
- **Version control friendly**: The entire repository can be managed with Git or similar tools
|
67
|
+
|
68
|
+
### Deployment Overview
|
69
|
+
|
70
|
+
Scriptorium generates static files that can be deployed to virtually any web hosting service. The deployment process is straightforward:
|
71
|
+
|
72
|
+
1. **Generate content**: Scriptorium processes your content and generates static HTML files
|
73
|
+
2. **Upload files**: Transfer the generated files to your web server
|
74
|
+
3. **Serve content**: Your web server serves the static files to visitors
|
75
|
+
|
76
|
+
**Deployment options include:**
|
77
|
+
- Traditional web hosting (shared hosting, VPS, dedicated servers)
|
78
|
+
- Static hosting services (Netlify, Vercel, GitHub Pages)
|
79
|
+
- Content delivery networks (CDN) for global performance
|
80
|
+
- Cloud storage with web serving capabilities
|
81
|
+
|
82
|
+
The static nature of Scriptorium's output means you have maximum flexibility in choosing where and how to host your content. [Detailed deployment instructions are covered in Section 9.]
|
83
|
+
|
84
|
+
## What is LiveText?
|
85
|
+
|
86
|
+
LiveText is a templating and content processing system that powers Scriptorium's content generation. It provides a simple, powerful way to create dynamic content while maintaining the benefits of static file generation.
|
87
|
+
|
88
|
+
### Why LiveText?
|
89
|
+
|
90
|
+
Scriptorium could have used any number of templating systems (Markdown, Liquid, ERB, etc.), but LiveText was chosen for several key reasons:
|
91
|
+
|
92
|
+
- **Simplicity**: LiveText syntax is straightforward and easy to learn
|
93
|
+
- **Power**: Despite its simplicity, LiveText is capable of complex content processing
|
94
|
+
- **Integration**: LiveText integrates seamlessly with Ruby, allowing for custom functions and logic
|
95
|
+
- **Flexibility**: LiveText can handle both simple content formatting and complex dynamic generation
|
96
|
+
- **Consistency**: LiveText provides a unified approach to content, templates, and configuration
|
97
|
+
|
98
|
+
LiveText bridges the gap between static content and dynamic generation, allowing you to create sophisticated websites while maintaining the performance and reliability benefits of static files.
|
99
|
+
|
100
|
+
### LiveText Syntax in Brief
|
101
|
+
|
102
|
+
LiveText uses a simple but powerful syntax based on "dot commands" and inline formatting. Here's a quick overview:
|
103
|
+
|
104
|
+
**Inline formatting:**
|
105
|
+
```
|
106
|
+
This is *bold and this is _italic text.
|
107
|
+
This is *[multiple words boldfaced].
|
108
|
+
```
|
109
|
+
|
110
|
+
**Dot commands with parameters:**
|
111
|
+
```
|
112
|
+
.title My Blog Post
|
113
|
+
.date 2025-07-29
|
114
|
+
.tags ruby, programming, blog
|
115
|
+
|
116
|
+
.link https://example.com Visit Example
|
117
|
+
.image /images/photo.jpg My Photo
|
118
|
+
```
|
119
|
+
|
120
|
+
**Dot commands with body content:**
|
121
|
+
```
|
122
|
+
.quote
|
123
|
+
This is an inset quote.
|
124
|
+
Wherever you go,
|
125
|
+
there you are.
|
126
|
+
.end
|
127
|
+
```
|
128
|
+
|
129
|
+
**Variables and functions:**
|
130
|
+
```
|
131
|
+
This file is called $File (predefined var).
|
132
|
+
The current time is: $$time
|
133
|
+
This post has $$word_count words.
|
134
|
+
```
|
135
|
+
|
136
|
+
LiveText's syntax is designed to be readable and writable, making it easy to create content without getting bogged down in complex templating syntax. [Complete LiveText documentation is provided in Section 3.]
|
137
|
+
|