img_to_script 1.1.0 → 1.2.0
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/CHANGELOG.md +8 -0
- data/README.md +4 -0
- data/lib/img_to_script/abs_token_type.rb +2 -0
- data/lib/img_to_script/abstract_token/load_and_run.rb +19 -0
- data/lib/img_to_script/abstract_token/read_key_value.rb +16 -0
- data/lib/img_to_script/generators/generator.rb +38 -15
- data/lib/img_to_script/languages/mk90_basic/formatters/formatter.rb +1 -1
- data/lib/img_to_script/languages/mk90_basic/formatters/minificator.rb +5 -3
- data/lib/img_to_script/languages/mk90_basic/translators/mixin.rb +4 -0
- data/lib/img_to_script/languages/mk90_basic/translators/mk90_basic_10.rb +11 -0
- data/lib/img_to_script/languages/mk90_basic/translators/mk90_basic_20.rb +11 -0
- data/lib/img_to_script/languages/mk90_basic/translators/translator.rb +4 -0
- data/lib/img_to_script/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 711c09a2ddc4d5ac5df11d748d266acab0cc6ea9bf1ea4032e0074920629c373
|
4
|
+
data.tar.gz: be7bdc44d5393fa8ce073b4e18352f27d9182aa21dc2a1cef9d358ca8e7e8e35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6648a5244cea7d45c22220b6b6e7e329eee5752335340bda94366a418677bd167bd9d14e3ee4b26836e3adf8cb943c101afd6cdcfe1df155e47a98fe80d7ee1d
|
7
|
+
data.tar.gz: a35c8376f8d67812710a890443fd77cec590dfeaaa353e021d41bc179504d8b203fb63d277a50668cbd08ca9d721b88cb06cf146281df75be1071b7cd91d3cf3
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [1.2.0] - 2024-01-27
|
2
|
+
|
3
|
+
- New experimental feature: load and run another file at the end of the script.
|
4
|
+
|
5
|
+
- Different pause subroutine.
|
6
|
+
|
7
|
+
- Bug fix in the MK90 minificator.
|
8
|
+
|
1
9
|
## [1.1.0] - 2024-01-26
|
2
10
|
|
3
11
|
- New generator: `HexMask::ForcedPointMove`.
|
data/README.md
CHANGED
@@ -170,6 +170,10 @@ script = task.run(
|
|
170
170
|
|
171
171
|
Add a statement that marks the end of the program.
|
172
172
|
|
173
|
+
- run_another_file, default: ""
|
174
|
+
|
175
|
+
Load and run another script file at the end of the script. String argument represents a file ID (e.g., a filename). If the string is empty, no file should be loaded.
|
176
|
+
|
173
177
|
- **ImgToScript::Generators::HexMask::Default**
|
174
178
|
|
175
179
|
Specific for the Elektronika MK90 BASIC v.1.0 **only**.
|
@@ -15,6 +15,7 @@ module ImgToScript
|
|
15
15
|
DRAW_PIXEL_BY_ABS_COORDS = :draw_pixel_by_abs_coords
|
16
16
|
GO_TO = :go_to
|
17
17
|
IF_CONDITION = :if_condition
|
18
|
+
LOAD_AND_RUN = :load_and_run
|
18
19
|
LOOP_BEGIN = :loop_begin
|
19
20
|
LOOP_END = :loop_end
|
20
21
|
MATH_ADD = :math_add
|
@@ -25,6 +26,7 @@ module ImgToScript
|
|
25
26
|
PARENTHESES = :parentheses
|
26
27
|
PROGRAM_BEGIN = :program_begin_lbl
|
27
28
|
PROGRAM_END_LBL = :program_end_lbl
|
29
|
+
READ_KEY_VALUE = :read_key_value
|
28
30
|
REMARK = :remark
|
29
31
|
SIGN_FUNC = :sign_func
|
30
32
|
SIGN_GREATER_THAN = :sign_greater_than
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Load and run another script file.
|
7
|
+
#
|
8
|
+
class LoadAndRun < AbstractToken
|
9
|
+
attr_reader :filename
|
10
|
+
|
11
|
+
def initialize(filename:, **)
|
12
|
+
@type = AbsTokenType::LOAD_AND_RUN
|
13
|
+
@filename = filename
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Read a key value from the keyboard.
|
7
|
+
#
|
8
|
+
class ReadKeyValue < AbstractToken
|
9
|
+
def initialize(**)
|
10
|
+
@type = AbsTokenType::READ_KEY_VALUE
|
11
|
+
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -14,6 +14,7 @@ module ImgToScript
|
|
14
14
|
setting :pause_program, default: PAUSE_PROGRAM
|
15
15
|
setting :program_begin_lbl, default: PRORGAM_BEGIN_LBL
|
16
16
|
setting :program_end_lbl, default: PROGRAM_END_LBL
|
17
|
+
setting :run_another_file, default: ""
|
17
18
|
|
18
19
|
#
|
19
20
|
# Generate abstract tokens that represent the image.
|
@@ -44,12 +45,13 @@ module ImgToScript
|
|
44
45
|
private
|
45
46
|
|
46
47
|
def _generate_tokens
|
47
|
-
@tokens = [] # append new tokens
|
48
|
+
@tokens = [] # append new tokens to this arr.
|
48
49
|
|
49
50
|
_program_begin if config.program_begin_lbl
|
50
51
|
_clear_screen if config.clear_screen
|
51
52
|
_generate
|
52
53
|
_program_pause if config.pause_program
|
54
|
+
_run_another_file unless config.run_another_file.empty?
|
53
55
|
_program_end if config.program_end_lbl
|
54
56
|
end
|
55
57
|
|
@@ -98,34 +100,55 @@ module ImgToScript
|
|
98
100
|
# Append a sub-routine to pause the program.
|
99
101
|
#
|
100
102
|
def _program_pause
|
101
|
-
|
102
|
-
|
103
|
-
|
103
|
+
_read_key_value
|
104
|
+
_check_key_value
|
105
|
+
_loop
|
104
106
|
end
|
105
107
|
|
106
|
-
def
|
108
|
+
def _read_key_value
|
107
109
|
@tokens.append(
|
108
|
-
AbstractToken::
|
109
|
-
|
110
|
-
|
111
|
-
var_name: LOOP_VAR,
|
110
|
+
AbstractToken::AssignValue.new(
|
111
|
+
left: "K",
|
112
|
+
right: AbstractToken::ReadKeyValue.new,
|
112
113
|
require_nl: true
|
113
114
|
)
|
114
115
|
)
|
115
116
|
end
|
116
117
|
|
117
|
-
def
|
118
|
+
def _check_key_value
|
119
|
+
expression = AbstractToken::MathGreaterThan.new(
|
120
|
+
left: "K",
|
121
|
+
right: "0"
|
122
|
+
)
|
123
|
+
|
124
|
+
consequent = AbstractToken::GoTo.new(
|
125
|
+
line: CurrentLinePlaceholder.new(2),
|
126
|
+
require_nl: false
|
127
|
+
)
|
128
|
+
|
118
129
|
@tokens.append(
|
119
|
-
AbstractToken::
|
120
|
-
|
130
|
+
AbstractToken::IfCondition.new(
|
131
|
+
expression: expression,
|
132
|
+
consequent: consequent,
|
133
|
+
require_nl: false
|
121
134
|
)
|
122
135
|
)
|
123
136
|
end
|
124
137
|
|
125
|
-
def
|
138
|
+
def _loop
|
126
139
|
@tokens.append(
|
127
|
-
AbstractToken::
|
128
|
-
|
140
|
+
AbstractToken::GoTo.new(
|
141
|
+
line: CurrentLinePlaceholder.new(-1),
|
142
|
+
require_nl: true
|
143
|
+
)
|
144
|
+
)
|
145
|
+
end
|
146
|
+
|
147
|
+
def _run_another_file
|
148
|
+
@tokens.append(
|
149
|
+
AbstractToken::LoadAndRun.new(
|
150
|
+
filename: config.run_another_file,
|
151
|
+
require_nl: true
|
129
152
|
)
|
130
153
|
)
|
131
154
|
end
|
@@ -174,7 +174,7 @@ module ImgToScript
|
|
174
174
|
end
|
175
175
|
|
176
176
|
def _update_line_num
|
177
|
-
@
|
177
|
+
@i_line += @line_step
|
178
178
|
|
179
179
|
# Since line number has been changed, it is required to
|
180
180
|
# re-evaluate placeholders with the updated value.
|
@@ -210,7 +210,7 @@ module ImgToScript
|
|
210
210
|
# @return [String]
|
211
211
|
#
|
212
212
|
def _select_line_label
|
213
|
-
@number_lines ? @
|
213
|
+
@number_lines ? @i_line.to_s : ""
|
214
214
|
end
|
215
215
|
|
216
216
|
#
|
@@ -242,7 +242,7 @@ module ImgToScript
|
|
242
242
|
def _evaluate_placeholders
|
243
243
|
@placeholders_idx.each do |i|
|
244
244
|
e = @token.args[i]
|
245
|
-
@args[i] = @
|
245
|
+
@args[i] = @i_line + e.shift * @line_step
|
246
246
|
end
|
247
247
|
end
|
248
248
|
|
@@ -296,6 +296,8 @@ module ImgToScript
|
|
296
296
|
def _minificator
|
297
297
|
Minificator.new.configure do |config|
|
298
298
|
config.number_lines = false
|
299
|
+
config.line_offset = @i_line + @line_step
|
300
|
+
config.line_step = @line_step
|
299
301
|
end
|
300
302
|
end
|
301
303
|
|
@@ -21,6 +21,17 @@ module ImgToScript
|
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
24
|
+
# MK90 BASIC v1.0 - load and run another BASIC file.
|
25
|
+
def _load_and_run(token)
|
26
|
+
MK90BasicToken.new(
|
27
|
+
keyword: "LOAD",
|
28
|
+
args: ["\"", token.filename, "\"", ",", "R"],
|
29
|
+
separator: "",
|
30
|
+
require_nl: token.require_nl,
|
31
|
+
sliceable: false
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
24
35
|
# MK90 BASIC v.1.0 does support the DRAW O statement.
|
25
36
|
def _move_point_to_abs_coords(token)
|
26
37
|
MK90BasicToken.new(
|
@@ -21,6 +21,17 @@ module ImgToScript
|
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
24
|
+
# MK90 BASIC v2.0 - load and run another BASIC file.
|
25
|
+
def _load_and_run(token)
|
26
|
+
MK90BasicToken.new(
|
27
|
+
keyword: "LOAD",
|
28
|
+
args: ["\"", token.filename, "\"", ",", "A", ",", "R"],
|
29
|
+
separator: "",
|
30
|
+
require_nl: token.require_nl,
|
31
|
+
sliceable: false
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
24
35
|
# MK90 BASIC v.2.0 does NOT support the DRAW O statement due to a bug,
|
25
36
|
# the LOCATE statement should be used instead.
|
26
37
|
def _move_point_to_abs_coords(token)
|
@@ -46,6 +46,8 @@ module ImgToScript
|
|
46
46
|
_draw_chunk_by_hex_value(token)
|
47
47
|
when AbsTokenType::MOVE_POINT_TO_ABS_COORDS
|
48
48
|
_move_point_to_abs_coords(token)
|
49
|
+
when AbsTokenType::LOAD_AND_RUN
|
50
|
+
_load_and_run(token)
|
49
51
|
when AbsTokenType::MATH_ADD
|
50
52
|
_math_add(token)
|
51
53
|
when AbsTokenType::MATH_SUB
|
@@ -64,6 +66,8 @@ module ImgToScript
|
|
64
66
|
_loop_begin(token)
|
65
67
|
when AbsTokenType::PROGRAM_END_LBL
|
66
68
|
_program_end(token)
|
69
|
+
when AbsTokenType::READ_KEY_VALUE
|
70
|
+
_read_key_value(token)
|
67
71
|
when AbsTokenType::LOOP_END
|
68
72
|
_loop_end(token)
|
69
73
|
when AbsTokenType::IF_CONDITION
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: img_to_script
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 8bit-mate
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-system
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- lib/img_to_script/abstract_token/draw_pixel_by_abs_coords.rb
|
119
119
|
- lib/img_to_script/abstract_token/go_to.rb
|
120
120
|
- lib/img_to_script/abstract_token/if_condition.rb
|
121
|
+
- lib/img_to_script/abstract_token/load_and_run.rb
|
121
122
|
- lib/img_to_script/abstract_token/loop_begin.rb
|
122
123
|
- lib/img_to_script/abstract_token/loop_end.rb
|
123
124
|
- lib/img_to_script/abstract_token/math_add.rb
|
@@ -128,6 +129,7 @@ files:
|
|
128
129
|
- lib/img_to_script/abstract_token/parentheses.rb
|
129
130
|
- lib/img_to_script/abstract_token/program_begin.rb
|
130
131
|
- lib/img_to_script/abstract_token/program_end.rb
|
132
|
+
- lib/img_to_script/abstract_token/read_key_value.rb
|
131
133
|
- lib/img_to_script/abstract_token/remark.rb
|
132
134
|
- lib/img_to_script/abstract_token/sign_func.rb
|
133
135
|
- lib/img_to_script/abstract_token/wait.rb
|