img_to_script 1.0.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 +7 -0
- data/.rubocop.yml +25 -0
- data/.vscode/launch.json +21 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +271 -0
- data/Rakefile +16 -0
- data/img_to_script.gemspec +41 -0
- data/lib/img_to_script/abs_token_type.rb +33 -0
- data/lib/img_to_script/abstract_token/abs_func.rb +19 -0
- data/lib/img_to_script/abstract_token/abstract_token.rb +23 -0
- data/lib/img_to_script/abstract_token/assign_value.rb +20 -0
- data/lib/img_to_script/abstract_token/clear_screen.rb +16 -0
- data/lib/img_to_script/abstract_token/data_read.rb +19 -0
- data/lib/img_to_script/abstract_token/data_store.rb +19 -0
- data/lib/img_to_script/abstract_token/draw_chunk_by_hex_value.rb +19 -0
- data/lib/img_to_script/abstract_token/draw_line_by_abs_coords.rb +22 -0
- data/lib/img_to_script/abstract_token/draw_pixel_by_abs_coords.rb +20 -0
- data/lib/img_to_script/abstract_token/go_to.rb +19 -0
- data/lib/img_to_script/abstract_token/if_condition.rb +20 -0
- data/lib/img_to_script/abstract_token/loop_begin.rb +21 -0
- data/lib/img_to_script/abstract_token/loop_end.rb +19 -0
- data/lib/img_to_script/abstract_token/math_add.rb +20 -0
- data/lib/img_to_script/abstract_token/math_greater_than.rb +20 -0
- data/lib/img_to_script/abstract_token/math_mult.rb +20 -0
- data/lib/img_to_script/abstract_token/math_sub.rb +20 -0
- data/lib/img_to_script/abstract_token/move_point_to_abs_coords.rb +20 -0
- data/lib/img_to_script/abstract_token/parentheses.rb +19 -0
- data/lib/img_to_script/abstract_token/program_begin.rb +16 -0
- data/lib/img_to_script/abstract_token/program_end.rb +16 -0
- data/lib/img_to_script/abstract_token/remark.rb +19 -0
- data/lib/img_to_script/abstract_token/sign_func.rb +19 -0
- data/lib/img_to_script/abstract_token/wait.rb +19 -0
- data/lib/img_to_script/abstract_token.rb +8 -0
- data/lib/img_to_script/container.rb +26 -0
- data/lib/img_to_script/current_line_placeholder.rb +40 -0
- data/lib/img_to_script/formatter.rb +34 -0
- data/lib/img_to_script/generators/generator.rb +134 -0
- data/lib/img_to_script/generators/hex_mask/default.rb +24 -0
- data/lib/img_to_script/generators/hex_mask/enhanced.rb +220 -0
- data/lib/img_to_script/generators/hex_mask/hex_mask.rb +100 -0
- data/lib/img_to_script/generators/hex_mask.rb +13 -0
- data/lib/img_to_script/generators/run_length_encoding/horizontal.rb +78 -0
- data/lib/img_to_script/generators/run_length_encoding/run_length_encoding.rb +304 -0
- data/lib/img_to_script/generators/run_length_encoding/vertical.rb +79 -0
- data/lib/img_to_script/generators/run_length_encoding.rb +10 -0
- data/lib/img_to_script/generators/segmental/data_read_draw/data_read_draw.rb +70 -0
- data/lib/img_to_script/generators/segmental/data_read_draw/horizontal.rb +54 -0
- data/lib/img_to_script/generators/segmental/data_read_draw/vertical.rb +54 -0
- data/lib/img_to_script/generators/segmental/data_read_draw.rb +18 -0
- data/lib/img_to_script/generators/segmental/direct_draw/direct_draw.rb +62 -0
- data/lib/img_to_script/generators/segmental/direct_draw/horizontal.rb +16 -0
- data/lib/img_to_script/generators/segmental/direct_draw/vertical.rb +16 -0
- data/lib/img_to_script/generators/segmental/direct_draw.rb +12 -0
- data/lib/img_to_script/generators/segmental/horizontal_mixin.rb +32 -0
- data/lib/img_to_script/generators/segmental/segmental.rb +101 -0
- data/lib/img_to_script/generators/segmental/vertical_mixin.rb +38 -0
- data/lib/img_to_script/generators/segmental.rb +10 -0
- data/lib/img_to_script/generators.rb +27 -0
- data/lib/img_to_script/import.rb +5 -0
- data/lib/img_to_script/language_token.rb +8 -0
- data/lib/img_to_script/languages/mk90_basic/formatters/formatter.rb +49 -0
- data/lib/img_to_script/languages/mk90_basic/formatters/minificator.rb +316 -0
- data/lib/img_to_script/languages/mk90_basic/formatters/sliceable_tokens_mixin.rb +15 -0
- data/lib/img_to_script/languages/mk90_basic/formatters.rb +13 -0
- data/lib/img_to_script/languages/mk90_basic/mk90_basic_token.rb +59 -0
- data/lib/img_to_script/languages/mk90_basic/translators/mixin.rb +205 -0
- data/lib/img_to_script/languages/mk90_basic/translators/mk90_basic_10.rb +27 -0
- data/lib/img_to_script/languages/mk90_basic/translators/mk90_basic_20.rb +27 -0
- data/lib/img_to_script/languages/mk90_basic/translators/translator.rb +205 -0
- data/lib/img_to_script/languages/mk90_basic/translators.rb +13 -0
- data/lib/img_to_script/languages/mk90_basic.rb +17 -0
- data/lib/img_to_script/languages.rb +10 -0
- data/lib/img_to_script/task.rb +26 -0
- data/lib/img_to_script/translator.rb +31 -0
- data/lib/img_to_script/version.rb +5 -0
- data/lib/img_to_script.rb +19 -0
- data/sig/img_to_script.rbs +4 -0
- metadata +204 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Begin a loop.
|
7
|
+
#
|
8
|
+
class LoopBegin < AbstractToken
|
9
|
+
attr_reader :var_name, :start_value, :end_value
|
10
|
+
|
11
|
+
def initialize(var_name:, start_value:, end_value:, **)
|
12
|
+
@type = AbsTokenType::LOOP_BEGIN
|
13
|
+
@var_name = var_name
|
14
|
+
@start_value = start_value
|
15
|
+
@end_value = end_value
|
16
|
+
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Marks loop end.
|
7
|
+
#
|
8
|
+
class LoopEnd < AbstractToken
|
9
|
+
attr_reader :var_name
|
10
|
+
|
11
|
+
def initialize(var_name:, **)
|
12
|
+
@var_name = var_name
|
13
|
+
@type = AbsTokenType::LOOP_END
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Addition arithmetical operation.
|
7
|
+
#
|
8
|
+
class MathAdd < AbstractToken
|
9
|
+
attr_reader :left, :right
|
10
|
+
|
11
|
+
def initialize(left:, right:, **)
|
12
|
+
@type = AbsTokenType::MATH_ADD
|
13
|
+
@left = left
|
14
|
+
@right = right
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# left > right.
|
7
|
+
#
|
8
|
+
class MathGreaterThan < AbstractToken
|
9
|
+
attr_reader :left, :right
|
10
|
+
|
11
|
+
def initialize(left:, right:, **)
|
12
|
+
@type = AbsTokenType::MATH_GREATER_THAN
|
13
|
+
@left = left
|
14
|
+
@right = right
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Multiplication arithmetical operation.
|
7
|
+
#
|
8
|
+
class MathMult < AbstractToken
|
9
|
+
attr_reader :left, :right
|
10
|
+
|
11
|
+
def initialize(left:, right:, **)
|
12
|
+
@type = AbsTokenType::MATH_MULT
|
13
|
+
@left = left
|
14
|
+
@right = right
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Subtraction arithmetical operation.
|
7
|
+
#
|
8
|
+
class MathSub < AbstractToken
|
9
|
+
attr_reader :left, :right
|
10
|
+
|
11
|
+
def initialize(left:, right:, **)
|
12
|
+
@type = AbsTokenType::MATH_SUB
|
13
|
+
@left = left
|
14
|
+
@right = right
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Move point to the (x, y) position (in the absolute coordinates).
|
7
|
+
#
|
8
|
+
class MovePointToAbsCoords < AbstractToken
|
9
|
+
attr_reader :x, :y
|
10
|
+
|
11
|
+
def initialize(x:, y:, **)
|
12
|
+
@x = x
|
13
|
+
@y = y
|
14
|
+
@type = AbsTokenType::MOVE_POINT_TO_ABS_COORDS
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Wrap an expression into parentheses.
|
7
|
+
#
|
8
|
+
class Parentheses < AbstractToken
|
9
|
+
attr_reader :expression
|
10
|
+
|
11
|
+
def initialize(expression:, **)
|
12
|
+
@type = AbsTokenType::PARENTHESES
|
13
|
+
@expression = expression
|
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
|
+
# Marks begin of the program.
|
7
|
+
#
|
8
|
+
class ProgramBegin < AbstractToken
|
9
|
+
def initialize(**)
|
10
|
+
@type = AbsTokenType::PROGRAM_BEGIN
|
11
|
+
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Marks end of the program.
|
7
|
+
#
|
8
|
+
class ProgramEnd < AbstractToken
|
9
|
+
def initialize(**)
|
10
|
+
@type = AbsTokenType::PROGRAM_END_LBL
|
11
|
+
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Remark - a comment.
|
7
|
+
#
|
8
|
+
class Remark < AbstractToken
|
9
|
+
attr_reader :text
|
10
|
+
|
11
|
+
def initialize(text:, **)
|
12
|
+
@type = AbsTokenType::REMARK
|
13
|
+
@text = text
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Sign function.
|
7
|
+
#
|
8
|
+
class SignFunc < AbstractToken
|
9
|
+
attr_reader :expression
|
10
|
+
|
11
|
+
def initialize(expression:, **)
|
12
|
+
@type = AbsTokenType::SIGN_FUNC
|
13
|
+
@expression = expression
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module AbstractToken
|
5
|
+
#
|
6
|
+
# Pause a program run.
|
7
|
+
#
|
8
|
+
class Wait < AbstractToken
|
9
|
+
attr_reader :time
|
10
|
+
|
11
|
+
def initialize(time:, **)
|
12
|
+
@type = AbsTokenType::WAIT
|
13
|
+
@time = time
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
#
|
5
|
+
# See https://dry-rb.org/gems/dry-system/main/container/
|
6
|
+
#
|
7
|
+
class Container < Dry::System::Container
|
8
|
+
configure do |config|
|
9
|
+
use :zeitwerk
|
10
|
+
|
11
|
+
config.root = Pathname(__dir__).join("../../")
|
12
|
+
|
13
|
+
config.component_dirs.add "lib" do |dir|
|
14
|
+
dir.namespaces.add "img_to_script", key: nil
|
15
|
+
end
|
16
|
+
|
17
|
+
config.inflector = Dry::Inflector.new do |inflections|
|
18
|
+
inflections.acronym("MK90")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
register("utils.logger", Logger.new($stdout, level: Logger::ERROR))
|
23
|
+
|
24
|
+
add_to_load_path! "lib"
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
#
|
5
|
+
# BASIC known by its widely usage of the GOTO construction.
|
6
|
+
# It is a common practice to use statements like N GOTO N + m
|
7
|
+
# (i.e. jump m lines away from the current line N).
|
8
|
+
#
|
9
|
+
# When a generator generates an abstract token, it doesn't know
|
10
|
+
# anything about the current line or its number yet. It is only
|
11
|
+
# when a formatter starts to format the code, this values can be
|
12
|
+
# calculated.
|
13
|
+
#
|
14
|
+
# Thus, at the generation step a placeholder is being used to mark
|
15
|
+
# the current line number.
|
16
|
+
#
|
17
|
+
# Placeholder's job is to tell a formatter that the argument should
|
18
|
+
# be replaced with the actual line number value.
|
19
|
+
#
|
20
|
+
# The optional attribute 'shift' allows to make a relative jump
|
21
|
+
# from the current line to a line that is above (a negative value)
|
22
|
+
# or to a line that's behind (a positive value) of the current line.
|
23
|
+
#
|
24
|
+
# Shift value is in line steps, i.e. works as a coefficient, so the
|
25
|
+
# full form of the expression is: N GOTO N + m * line_step.
|
26
|
+
#
|
27
|
+
class CurrentLinePlaceholder
|
28
|
+
attr_reader :shift
|
29
|
+
|
30
|
+
#
|
31
|
+
# Initialize a placeholder.
|
32
|
+
#
|
33
|
+
# @param [Integer] shift
|
34
|
+
# A relative shift of the current line number.
|
35
|
+
#
|
36
|
+
def initialize(shift = 0)
|
37
|
+
@shift = shift
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
#
|
5
|
+
# Base class.
|
6
|
+
#
|
7
|
+
# Formatters format array of target language tokens to an
|
8
|
+
# executable script.
|
9
|
+
#
|
10
|
+
# A formatter's responsibility is to label BASIC lines, put
|
11
|
+
# separators between the statements' and their arguments, etc.
|
12
|
+
#
|
13
|
+
class Formatter
|
14
|
+
attr_reader :script
|
15
|
+
|
16
|
+
include Dry::Configurable
|
17
|
+
|
18
|
+
#
|
19
|
+
# Format an array of the language tokens to an executable script.
|
20
|
+
#
|
21
|
+
# @param [Array<Object>] tokens
|
22
|
+
# Translator's output.
|
23
|
+
#
|
24
|
+
# @param [Hash{ Symbol => Object }] **kwargs
|
25
|
+
# Options.
|
26
|
+
#
|
27
|
+
# @return [Array<String>]
|
28
|
+
# Formatted script.
|
29
|
+
#
|
30
|
+
def format(tokens, **kwargs)
|
31
|
+
_format(tokens, **kwargs)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module Generators
|
5
|
+
#
|
6
|
+
# Base class.
|
7
|
+
#
|
8
|
+
class Generator
|
9
|
+
include Dry::Configurable
|
10
|
+
|
11
|
+
setting :x_offset, default: X_OFFSET
|
12
|
+
setting :y_offset, default: Y_OFFSET
|
13
|
+
setting :clear_screen, default: CLEAR_SCREEN
|
14
|
+
setting :pause_program, default: PAUSE_PROGRAM
|
15
|
+
setting :program_begin_lbl, default: PRORGAM_BEGIN_LBL
|
16
|
+
setting :program_end_lbl, default: PROGRAM_END_LBL
|
17
|
+
|
18
|
+
#
|
19
|
+
# Generate abstract tokens that represent the image.
|
20
|
+
#
|
21
|
+
# @param [Magick::BinMagick::Image] image
|
22
|
+
# Binary image.
|
23
|
+
#
|
24
|
+
# @param [Integer] scr_width
|
25
|
+
# Target device horizontal screen resolution.
|
26
|
+
#
|
27
|
+
# @param [Integer] scr_height
|
28
|
+
# Target device vertical screen resolution.
|
29
|
+
#
|
30
|
+
# @return [Array<AbstractToken>] @tokens
|
31
|
+
#
|
32
|
+
def generate(image:, scr_width:, scr_height:)
|
33
|
+
@image = image
|
34
|
+
@scr_width = scr_width
|
35
|
+
@scr_height = scr_height
|
36
|
+
@x_offset = config.x_offset
|
37
|
+
@y_offset = config.y_offset
|
38
|
+
|
39
|
+
_generate_tokens
|
40
|
+
|
41
|
+
@tokens
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def _generate_tokens
|
47
|
+
@tokens = [] # append new tokens here
|
48
|
+
|
49
|
+
_program_begin if config.program_begin_lbl
|
50
|
+
_clear_screen if config.clear_screen
|
51
|
+
_generate
|
52
|
+
_program_pause if config.pause_program
|
53
|
+
_program_end if config.program_end_lbl
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Transpose image for vertical scanning.
|
58
|
+
#
|
59
|
+
def _transpose
|
60
|
+
@image.rotate!(90)
|
61
|
+
@image.flop!
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Append a token to clear screen.
|
66
|
+
#
|
67
|
+
def _clear_screen
|
68
|
+
@tokens.append(
|
69
|
+
AbstractToken::ClearScreen.new(
|
70
|
+
require_nl: true
|
71
|
+
)
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# Append a token to mark end of the program.
|
77
|
+
#
|
78
|
+
def _program_end
|
79
|
+
@tokens.append(
|
80
|
+
AbstractToken::ProgramEnd.new(
|
81
|
+
require_nl: true
|
82
|
+
)
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Append a token to mark begin of the program.
|
88
|
+
#
|
89
|
+
def _program_begin
|
90
|
+
@tokens.append(
|
91
|
+
AbstractToken::ProgramBegin.new(
|
92
|
+
require_nl: true
|
93
|
+
)
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# Append a sub-routine to pause the program.
|
99
|
+
#
|
100
|
+
def _program_pause
|
101
|
+
_loop_begin
|
102
|
+
_wait
|
103
|
+
_loop_end
|
104
|
+
end
|
105
|
+
|
106
|
+
def _loop_begin
|
107
|
+
@tokens.append(
|
108
|
+
AbstractToken::LoopBegin.new(
|
109
|
+
start_value: 1,
|
110
|
+
end_value: WAIT_LOOP_COUNT,
|
111
|
+
var_name: LOOP_VAR,
|
112
|
+
require_nl: true
|
113
|
+
)
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
117
|
+
def _wait
|
118
|
+
@tokens.append(
|
119
|
+
AbstractToken::Wait.new(
|
120
|
+
time: WAIT_TIME
|
121
|
+
)
|
122
|
+
)
|
123
|
+
end
|
124
|
+
|
125
|
+
def _loop_end
|
126
|
+
@tokens.append(
|
127
|
+
AbstractToken::LoopEnd.new(
|
128
|
+
var_name: LOOP_VAR
|
129
|
+
)
|
130
|
+
)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ImgToScript
|
4
|
+
module Generators
|
5
|
+
module HexMask
|
6
|
+
#
|
7
|
+
# Generates image rendering script with the DRAM/M statements only
|
8
|
+
# (without 'enhacements').
|
9
|
+
#
|
10
|
+
class Default < HexMask
|
11
|
+
private
|
12
|
+
|
13
|
+
def _generate
|
14
|
+
@tokens.append(
|
15
|
+
AbstractToken::DrawChunkByHexValue.new(
|
16
|
+
hex_values: _encode_img,
|
17
|
+
require_nl: true
|
18
|
+
)
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|