gloo 0.3.0 → 0.5.3
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/.DS_Store +0 -0
- data/.rubocop.yml +73 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +86 -83
- data/Rakefile +7 -6
- data/bin/console +4 -4
- data/gloo.gemspec +22 -18
- data/lib/gloo.rb +6 -6
- data/lib/gloo/app/args.rb +30 -31
- data/lib/gloo/app/engine.rb +80 -30
- data/lib/gloo/app/help.rb +17 -11
- data/lib/gloo/app/info.rb +3 -3
- data/lib/gloo/app/log.rb +17 -17
- data/lib/gloo/app/mode.rb +4 -4
- data/lib/gloo/app/settings.rb +51 -41
- data/lib/gloo/convert/string_to_datetime.rb +21 -0
- data/lib/gloo/convert/string_to_decimal.rb +20 -0
- data/lib/gloo/convert/string_to_integer.rb +20 -0
- data/lib/gloo/core/baseo.rb +7 -7
- data/lib/gloo/core/dictionary.rb +30 -27
- data/lib/gloo/core/error.rb +50 -0
- data/lib/gloo/core/event_manager.rb +17 -23
- data/lib/gloo/core/factory.rb +149 -39
- data/lib/gloo/core/gloo_system.rb +121 -54
- data/lib/gloo/core/heap.rb +15 -13
- data/lib/gloo/core/it.rb +5 -5
- data/lib/gloo/core/literal.rb +7 -7
- data/lib/gloo/core/obj.rb +138 -79
- data/lib/gloo/core/obj_finder.rb +9 -14
- data/lib/gloo/core/op.rb +8 -8
- data/lib/gloo/core/parser.rb +27 -26
- data/lib/gloo/core/pn.rb +68 -52
- data/lib/gloo/core/script.rb +7 -7
- data/lib/gloo/core/tokens.rb +39 -41
- data/lib/gloo/core/verb.rb +30 -19
- data/lib/gloo/exec/dispatch.rb +30 -0
- data/lib/gloo/exec/runner.rb +43 -0
- data/lib/gloo/expr/expression.rb +36 -43
- data/lib/gloo/expr/l_boolean.rb +7 -6
- data/lib/gloo/expr/l_decimal.rb +34 -0
- data/lib/gloo/expr/l_integer.rb +5 -4
- data/lib/gloo/expr/l_string.rb +13 -15
- data/lib/gloo/expr/op_div.rb +5 -5
- data/lib/gloo/expr/op_minus.rb +5 -5
- data/lib/gloo/expr/op_mult.rb +5 -5
- data/lib/gloo/expr/op_plus.rb +7 -7
- data/lib/gloo/objs/basic/alias.rb +111 -0
- data/lib/gloo/objs/basic/boolean.rb +63 -38
- data/lib/gloo/objs/basic/container.rb +71 -12
- data/lib/gloo/objs/basic/decimal.rb +96 -0
- data/lib/gloo/objs/basic/integer.rb +45 -16
- data/lib/gloo/objs/basic/script.rb +62 -38
- data/lib/gloo/objs/basic/string.rb +47 -15
- data/lib/gloo/objs/basic/text.rb +69 -21
- data/lib/gloo/objs/basic/untyped.rb +35 -10
- data/lib/gloo/objs/cli/banner.rb +137 -0
- data/lib/gloo/objs/cli/bar.rb +141 -0
- data/lib/gloo/objs/cli/colorize.rb +54 -24
- data/lib/gloo/objs/cli/confirm.rb +63 -29
- data/lib/gloo/objs/cli/menu.rb +236 -0
- data/lib/gloo/objs/cli/menu_item.rb +128 -0
- data/lib/gloo/objs/cli/pastel.rb +120 -0
- data/lib/gloo/objs/cli/prompt.rb +73 -31
- data/lib/gloo/objs/cli/select.rb +153 -0
- data/lib/gloo/objs/ctrl/each.rb +128 -61
- data/lib/gloo/objs/ctrl/repeat.rb +129 -0
- data/lib/gloo/objs/data/markdown.rb +109 -0
- data/lib/gloo/objs/data/table.rb +168 -0
- data/lib/gloo/objs/dev/git.rb +98 -64
- data/lib/gloo/objs/dt/date.rb +72 -0
- data/lib/gloo/objs/dt/datetime.rb +84 -0
- data/lib/gloo/objs/dt/time.rb +72 -0
- data/lib/gloo/objs/ror/erb.rb +82 -41
- data/lib/gloo/objs/ror/eval.rb +73 -31
- data/lib/gloo/objs/snd/play.rb +71 -0
- data/lib/gloo/objs/snd/say.rb +120 -0
- data/lib/gloo/objs/system/file_handle.rb +129 -48
- data/lib/gloo/objs/system/system.rb +84 -38
- data/lib/gloo/objs/web/http_get.rb +103 -46
- data/lib/gloo/objs/web/http_post.rb +70 -44
- data/lib/gloo/objs/web/json.rb +155 -0
- data/lib/gloo/objs/web/slack.rb +89 -58
- data/lib/gloo/objs/web/teams.rb +88 -53
- data/lib/gloo/objs/web/uri.rb +160 -0
- data/lib/gloo/persist/file_loader.rb +95 -85
- data/lib/gloo/persist/file_saver.rb +12 -12
- data/lib/gloo/persist/file_storage.rb +15 -15
- data/lib/gloo/persist/line_splitter.rb +79 -0
- data/lib/gloo/persist/persist_man.rb +63 -39
- data/lib/gloo/utils/words.rb +2 -2
- data/lib/gloo/verbs/alert.rb +67 -16
- data/lib/gloo/verbs/beep.rb +70 -0
- data/lib/gloo/verbs/cls.rb +67 -0
- data/lib/gloo/verbs/context.rb +61 -21
- data/lib/gloo/verbs/create.rb +52 -21
- data/lib/gloo/verbs/help.rb +186 -27
- data/lib/gloo/verbs/if.rb +55 -21
- data/lib/gloo/verbs/list.rb +55 -24
- data/lib/gloo/verbs/load.rb +47 -12
- data/lib/gloo/verbs/move.rb +128 -0
- data/lib/gloo/verbs/put.rb +90 -34
- data/lib/gloo/verbs/quit.rb +43 -12
- data/lib/gloo/verbs/run.rb +63 -18
- data/lib/gloo/verbs/save.rb +45 -10
- data/lib/gloo/verbs/show.rb +56 -22
- data/lib/gloo/verbs/tell.rb +45 -13
- data/lib/gloo/verbs/unless.rb +56 -21
- data/lib/gloo/verbs/version.rb +42 -12
- data/lib/gloo/verbs/wait.rb +73 -0
- data/lib/run.rb +5 -5
- metadata +90 -12
|
@@ -7,43 +7,47 @@
|
|
|
7
7
|
module Gloo
|
|
8
8
|
module Objs
|
|
9
9
|
class Integer < Gloo::Core::Obj
|
|
10
|
-
|
|
11
|
-
KEYWORD = 'integer'
|
|
12
|
-
KEYWORD_SHORT = 'int'
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
KEYWORD = 'integer'.freeze
|
|
12
|
+
KEYWORD_SHORT = 'int'.freeze
|
|
13
|
+
|
|
14
|
+
#
|
|
15
15
|
# The name of the object type.
|
|
16
|
-
#
|
|
16
|
+
#
|
|
17
17
|
def self.typename
|
|
18
18
|
return KEYWORD
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
#
|
|
21
|
+
#
|
|
22
22
|
# The short name of the object type.
|
|
23
|
-
#
|
|
23
|
+
#
|
|
24
24
|
def self.short_typename
|
|
25
25
|
return KEYWORD_SHORT
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
#
|
|
28
|
+
#
|
|
29
29
|
# Set the value with any necessary type conversions.
|
|
30
|
-
#
|
|
31
|
-
def set_value new_value
|
|
30
|
+
#
|
|
31
|
+
def set_value( new_value )
|
|
32
|
+
unless new_value.is_a? Numeric
|
|
33
|
+
self.value = $engine.convert( new_value, 'Integer', 0 )
|
|
34
|
+
return
|
|
35
|
+
end
|
|
36
|
+
|
|
32
37
|
self.value = new_value.to_i
|
|
33
38
|
end
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
|
|
36
40
|
# ---------------------------------------------------------------------
|
|
37
41
|
# Messages
|
|
38
42
|
# ---------------------------------------------------------------------
|
|
39
43
|
|
|
40
|
-
#
|
|
44
|
+
#
|
|
41
45
|
# Get a list of message names that this object receives.
|
|
42
|
-
#
|
|
46
|
+
#
|
|
43
47
|
def self.messages
|
|
44
|
-
return super + [
|
|
48
|
+
return super + %w[inc dec]
|
|
45
49
|
end
|
|
46
|
-
|
|
50
|
+
|
|
47
51
|
# Increment the integer
|
|
48
52
|
def msg_inc
|
|
49
53
|
i = value + 1
|
|
@@ -60,6 +64,31 @@ module Gloo
|
|
|
60
64
|
return i
|
|
61
65
|
end
|
|
62
66
|
|
|
67
|
+
# ---------------------------------------------------------------------
|
|
68
|
+
# Help
|
|
69
|
+
# ---------------------------------------------------------------------
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Get help for this object type.
|
|
73
|
+
#
|
|
74
|
+
def self.help
|
|
75
|
+
return <<~TEXT
|
|
76
|
+
INTEGER OBJECT TYPE
|
|
77
|
+
NAME: integer
|
|
78
|
+
SHORTCUT: int
|
|
79
|
+
|
|
80
|
+
DESCRIPTION
|
|
81
|
+
An integer (numeric) value.
|
|
82
|
+
|
|
83
|
+
CHILDREN
|
|
84
|
+
None
|
|
85
|
+
|
|
86
|
+
MESSAGES
|
|
87
|
+
inc - Increment the integer value by 1.
|
|
88
|
+
dec - Decrement the integer value by 1.
|
|
89
|
+
TEXT
|
|
90
|
+
end
|
|
91
|
+
|
|
63
92
|
end
|
|
64
93
|
end
|
|
65
94
|
end
|
|
@@ -8,43 +8,43 @@
|
|
|
8
8
|
module Gloo
|
|
9
9
|
module Objs
|
|
10
10
|
class Script < Gloo::Core::Obj
|
|
11
|
-
|
|
12
|
-
KEYWORD = 'script'
|
|
13
|
-
KEYWORD_SHORT = 'cmd'
|
|
14
11
|
|
|
15
|
-
|
|
12
|
+
KEYWORD = 'script'.freeze
|
|
13
|
+
KEYWORD_SHORT = 'cmd'.freeze
|
|
14
|
+
|
|
15
|
+
#
|
|
16
16
|
# The name of the object type.
|
|
17
|
-
#
|
|
17
|
+
#
|
|
18
18
|
def self.typename
|
|
19
19
|
return KEYWORD
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
#
|
|
22
|
+
#
|
|
23
23
|
# The short name of the object type.
|
|
24
|
-
#
|
|
24
|
+
#
|
|
25
25
|
def self.short_typename
|
|
26
26
|
return KEYWORD_SHORT
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
#
|
|
29
|
+
#
|
|
30
30
|
# Set the value with any necessary type conversions.
|
|
31
|
-
#
|
|
32
|
-
def set_value new_value
|
|
31
|
+
#
|
|
32
|
+
def set_value( new_value )
|
|
33
33
|
self.value = new_value.to_s
|
|
34
34
|
end
|
|
35
|
-
|
|
36
|
-
#
|
|
35
|
+
|
|
36
|
+
#
|
|
37
37
|
# Set the value as an array.
|
|
38
|
-
#
|
|
39
|
-
def set_array_value arr
|
|
38
|
+
#
|
|
39
|
+
def set_array_value( arr )
|
|
40
40
|
self.value = arr
|
|
41
41
|
end
|
|
42
|
-
|
|
43
|
-
#
|
|
42
|
+
|
|
43
|
+
#
|
|
44
44
|
# Add a line (cmd) to the script.
|
|
45
|
-
#
|
|
46
|
-
def add_line line
|
|
47
|
-
if self.
|
|
45
|
+
#
|
|
46
|
+
def add_line( line )
|
|
47
|
+
if self.value_string?
|
|
48
48
|
first = self.value
|
|
49
49
|
self.set_array_value []
|
|
50
50
|
self.value << first unless first.empty?
|
|
@@ -54,48 +54,72 @@ module Gloo
|
|
|
54
54
|
self.value << line.strip
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
#
|
|
57
|
+
#
|
|
58
58
|
# Does this object support multi-line values?
|
|
59
59
|
# Initially only true for scripts.
|
|
60
|
-
#
|
|
61
|
-
def
|
|
60
|
+
#
|
|
61
|
+
def multiline_value?
|
|
62
62
|
return true
|
|
63
63
|
end
|
|
64
|
-
|
|
65
|
-
#
|
|
64
|
+
|
|
65
|
+
#
|
|
66
66
|
# Get the number of lines in this script.
|
|
67
|
-
#
|
|
67
|
+
#
|
|
68
68
|
def line_count
|
|
69
|
-
if self.value_is_array?
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return
|
|
73
|
-
return 1
|
|
74
|
-
else
|
|
75
|
-
return 0
|
|
69
|
+
return self.value.count if self.value_is_array?
|
|
70
|
+
|
|
71
|
+
if self.value_string?
|
|
72
|
+
return self.value.strip.empty? ? 0 : 1
|
|
76
73
|
end
|
|
74
|
+
|
|
75
|
+
return 0
|
|
77
76
|
end
|
|
78
77
|
|
|
79
|
-
|
|
80
78
|
# ---------------------------------------------------------------------
|
|
81
79
|
# Messages
|
|
82
80
|
# ---------------------------------------------------------------------
|
|
83
81
|
|
|
84
|
-
#
|
|
82
|
+
#
|
|
85
83
|
# Get a list of message names that this object receives.
|
|
86
|
-
#
|
|
84
|
+
#
|
|
87
85
|
def self.messages
|
|
88
|
-
return super + [
|
|
86
|
+
return super + [ 'run' ]
|
|
89
87
|
end
|
|
90
88
|
|
|
91
|
-
#
|
|
89
|
+
#
|
|
92
90
|
# Send the object the unload message.
|
|
93
|
-
#
|
|
91
|
+
#
|
|
94
92
|
def msg_run
|
|
95
93
|
s = Gloo::Core::Script.new self
|
|
96
94
|
s.run
|
|
97
95
|
end
|
|
98
96
|
|
|
97
|
+
# ---------------------------------------------------------------------
|
|
98
|
+
# Help
|
|
99
|
+
# ---------------------------------------------------------------------
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# Get help for this object type.
|
|
103
|
+
#
|
|
104
|
+
def self.help
|
|
105
|
+
return <<~TEXT
|
|
106
|
+
SCRIPT OBJECT TYPE
|
|
107
|
+
NAME: script
|
|
108
|
+
SHORTCUT: cmd
|
|
109
|
+
|
|
110
|
+
DESCRIPTION
|
|
111
|
+
An exectutable script.
|
|
112
|
+
|
|
113
|
+
CHILDREN
|
|
114
|
+
None
|
|
115
|
+
|
|
116
|
+
MESSAGES
|
|
117
|
+
run - Run the script.
|
|
118
|
+
The script can be run by telling the object or run.
|
|
119
|
+
It can all be executed with the run verb.
|
|
120
|
+
TEXT
|
|
121
|
+
end
|
|
122
|
+
|
|
99
123
|
end
|
|
100
124
|
end
|
|
101
125
|
end
|
|
@@ -7,43 +7,49 @@
|
|
|
7
7
|
module Gloo
|
|
8
8
|
module Objs
|
|
9
9
|
class String < Gloo::Core::Obj
|
|
10
|
-
|
|
11
|
-
KEYWORD = 'string'
|
|
12
|
-
KEYWORD_SHORT = 'str'
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
KEYWORD = 'string'.freeze
|
|
12
|
+
KEYWORD_SHORT = 'str'.freeze
|
|
13
|
+
|
|
14
|
+
#
|
|
15
15
|
# The name of the object type.
|
|
16
|
-
#
|
|
16
|
+
#
|
|
17
17
|
def self.typename
|
|
18
18
|
return KEYWORD
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
#
|
|
21
|
+
#
|
|
22
22
|
# The short name of the object type.
|
|
23
|
-
#
|
|
23
|
+
#
|
|
24
24
|
def self.short_typename
|
|
25
25
|
return KEYWORD_SHORT
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
#
|
|
28
|
+
#
|
|
29
29
|
# Set the value with any necessary type conversions.
|
|
30
|
-
#
|
|
31
|
-
def set_value new_value
|
|
30
|
+
#
|
|
31
|
+
def set_value( new_value )
|
|
32
32
|
self.value = new_value.to_s
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
|
|
36
35
|
# ---------------------------------------------------------------------
|
|
37
36
|
# Messages
|
|
38
37
|
# ---------------------------------------------------------------------
|
|
39
38
|
|
|
40
|
-
#
|
|
39
|
+
#
|
|
41
40
|
# Get a list of message names that this object receives.
|
|
42
|
-
#
|
|
41
|
+
#
|
|
43
42
|
def self.messages
|
|
44
|
-
return super + [
|
|
43
|
+
return super + %w[up down size]
|
|
45
44
|
end
|
|
46
|
-
|
|
45
|
+
|
|
46
|
+
# Get the size of the string.
|
|
47
|
+
def msg_size
|
|
48
|
+
s = value.size
|
|
49
|
+
$engine.heap.it.set_to s
|
|
50
|
+
return s
|
|
51
|
+
end
|
|
52
|
+
|
|
47
53
|
# Convert string to upper case
|
|
48
54
|
def msg_up
|
|
49
55
|
s = value.upcase
|
|
@@ -60,6 +66,32 @@ module Gloo
|
|
|
60
66
|
return s
|
|
61
67
|
end
|
|
62
68
|
|
|
69
|
+
# ---------------------------------------------------------------------
|
|
70
|
+
# Help
|
|
71
|
+
# ---------------------------------------------------------------------
|
|
72
|
+
|
|
73
|
+
#
|
|
74
|
+
# Get help for this object type.
|
|
75
|
+
#
|
|
76
|
+
def self.help
|
|
77
|
+
return <<~TEXT
|
|
78
|
+
STRING OBJECT TYPE
|
|
79
|
+
NAME: string
|
|
80
|
+
SHORTCUT: str
|
|
81
|
+
|
|
82
|
+
DESCRIPTION
|
|
83
|
+
A string value.
|
|
84
|
+
|
|
85
|
+
CHILDREN
|
|
86
|
+
None
|
|
87
|
+
|
|
88
|
+
MESSAGES
|
|
89
|
+
up - Convert the string to uppercase.
|
|
90
|
+
down - Convert the string to lowercase.
|
|
91
|
+
size - Get the size of the string.
|
|
92
|
+
TEXT
|
|
93
|
+
end
|
|
94
|
+
|
|
63
95
|
end
|
|
64
96
|
end
|
|
65
97
|
end
|
data/lib/gloo/objs/basic/text.rb
CHANGED
|
@@ -3,60 +3,108 @@
|
|
|
3
3
|
#
|
|
4
4
|
# A [multiline] block of text.
|
|
5
5
|
#
|
|
6
|
+
require 'tty-editor'
|
|
7
|
+
require 'tty-pager'
|
|
6
8
|
|
|
7
9
|
module Gloo
|
|
8
10
|
module Objs
|
|
9
11
|
class Text < Gloo::Core::Obj
|
|
10
|
-
|
|
11
|
-
KEYWORD = 'text'
|
|
12
|
-
KEYWORD_SHORT = 'txt'
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
KEYWORD = 'text'.freeze
|
|
14
|
+
KEYWORD_SHORT = 'txt'.freeze
|
|
15
|
+
DEFAULT_TMP_FILE = 'tmp.txt'.freeze
|
|
16
|
+
|
|
17
|
+
#
|
|
15
18
|
# The name of the object type.
|
|
16
|
-
#
|
|
19
|
+
#
|
|
17
20
|
def self.typename
|
|
18
21
|
return KEYWORD
|
|
19
22
|
end
|
|
20
23
|
|
|
21
|
-
#
|
|
24
|
+
#
|
|
22
25
|
# The short name of the object type.
|
|
23
|
-
#
|
|
26
|
+
#
|
|
24
27
|
def self.short_typename
|
|
25
28
|
return KEYWORD_SHORT
|
|
26
29
|
end
|
|
27
30
|
|
|
28
|
-
#
|
|
31
|
+
#
|
|
29
32
|
# Set the value with any necessary type conversions.
|
|
30
|
-
#
|
|
31
|
-
def set_value new_value
|
|
33
|
+
#
|
|
34
|
+
def set_value( new_value )
|
|
32
35
|
self.value = new_value.to_s
|
|
33
36
|
end
|
|
34
37
|
|
|
35
|
-
#
|
|
38
|
+
#
|
|
36
39
|
# Does this object support multi-line values?
|
|
37
40
|
# Initially only true for scripts.
|
|
38
|
-
#
|
|
39
|
-
def
|
|
41
|
+
#
|
|
42
|
+
def multiline_value?
|
|
40
43
|
return false
|
|
41
44
|
end
|
|
42
|
-
|
|
43
|
-
#
|
|
45
|
+
|
|
46
|
+
#
|
|
44
47
|
# Get the number of lines of text.
|
|
45
|
-
#
|
|
48
|
+
#
|
|
46
49
|
def line_count
|
|
47
50
|
return value.split( "\n" ).count
|
|
48
51
|
end
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
|
|
51
53
|
# ---------------------------------------------------------------------
|
|
52
54
|
# Messages
|
|
53
55
|
# ---------------------------------------------------------------------
|
|
54
56
|
|
|
55
|
-
#
|
|
57
|
+
#
|
|
56
58
|
# Get a list of message names that this object receives.
|
|
57
|
-
#
|
|
59
|
+
#
|
|
58
60
|
def self.messages
|
|
59
|
-
return super
|
|
61
|
+
return super + %w[edit page]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#
|
|
65
|
+
# Show the contents of the file, paginated.
|
|
66
|
+
#
|
|
67
|
+
def msg_page
|
|
68
|
+
return unless value
|
|
69
|
+
|
|
70
|
+
# pager = TTY::Pager::SystemPager.new command: 'less -R'
|
|
71
|
+
pager = TTY::Pager.new
|
|
72
|
+
pager.page( value )
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# Edit the text in the default editor.
|
|
77
|
+
#
|
|
78
|
+
def msg_edit
|
|
79
|
+
tmp = File.join( $settings.tmp_path, DEFAULT_TMP_FILE )
|
|
80
|
+
File.open( tmp, 'w' ) { |file| file.write( self.value ) }
|
|
81
|
+
TTY::Editor.open( tmp )
|
|
82
|
+
set_value File.read( tmp )
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# ---------------------------------------------------------------------
|
|
86
|
+
# Help
|
|
87
|
+
# ---------------------------------------------------------------------
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# Get help for this object type.
|
|
91
|
+
#
|
|
92
|
+
def self.help
|
|
93
|
+
return <<~TEXT
|
|
94
|
+
TEXT OBJECT TYPE
|
|
95
|
+
NAME: text
|
|
96
|
+
SHORTCUT: txt
|
|
97
|
+
|
|
98
|
+
DESCRIPTION
|
|
99
|
+
A longer, multi-line text string.
|
|
100
|
+
|
|
101
|
+
CHILDREN
|
|
102
|
+
None
|
|
103
|
+
|
|
104
|
+
MESSAGES
|
|
105
|
+
edit - Edit the text field in the default editor.
|
|
106
|
+
page - Show the text, paginated.
|
|
107
|
+
TEXT
|
|
60
108
|
end
|
|
61
109
|
|
|
62
110
|
end
|