summaryrefslogtreecommitdiffhomepage
path: root/docs/parse_log.txt
diff options
context:
space:
mode:
authorAmir Rajan <[email protected]>2020-11-13 01:29:16 -0600
committerAmir Rajan <[email protected]>2020-11-13 01:29:16 -0600
commit128fa1d90cea6289605a49daf56a0cbb72e2dd28 (patch)
tree5cfdb499d275e2b43075e4d6a076365fc58ff0f7 /docs/parse_log.txt
parent05cbef7fb8224332795e5685be499d81d20e7d93 (diff)
downloaddragonruby-game-toolkit-contrib-128fa1d90cea6289605a49daf56a0cbb72e2dd28.tar.gz
dragonruby-game-toolkit-contrib-128fa1d90cea6289605a49daf56a0cbb72e2dd28.zip
synced from DRGTK 1.27
Diffstat (limited to 'docs/parse_log.txt')
-rw-r--r--docs/parse_log.txt11031
1 files changed, 10740 insertions, 291 deletions
diff --git a/docs/parse_log.txt b/docs/parse_log.txt
index 3c9561c..ec5c73d 100644
--- a/docs/parse_log.txt
+++ b/docs/parse_log.txt
@@ -3667,6 +3667,17 @@ This function takes in two parameters. The first paramter is the file path and a
- End of paragraph detected.
*** True Line Result
+** Processing line: ~* DOCS: ~GTK::Runtime#reset~~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* DOCS: ~GTK::Runtime#reset~
+** Processing line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+This function will reset Kernel.tick_count to 0 and will remove all data from args.state.
** Processing line: ~* DOCS: ~GTK::Runtime#calcstringbox~~
- Header detected.
*** True Line Result
@@ -3708,17 +3719,6 @@ This function returns the width and height of a string.
- End of paragraph detected.
*** True Line Result
-** Processing line: ~* DOCS: ~GTK::Runtime#reset~~
-- Header detected.
-*** True Line Result
-
-*** True Line Result
-* DOCS: ~GTK::Runtime#reset~
-** Processing line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~
-** Processing line: ~~
-- End of paragraph detected.
-*** True Line Result
-This function will reset Kernel.tick_count to 0 and will remove all data from args.state.
** Processing line: ~* DOCS: ~Array~~
- Header detected.
*** True Line Result
@@ -5134,6 +5134,86 @@ You have to use ~args.outputs.borders~:
- End of paragraph detected.
*** True Line Result
+** Processing line: ~* DOCS: ~GTK::Outputs#screenshots~~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* DOCS: ~GTK::Outputs#screenshots~
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
+** Processing line: ~Add a hash to this collection to take a screenshot and save as png file.~
+** Processing line: ~The keys of the hash can be provided in any order.~
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+Add a hash to this collection to take a screenshot and save as png file. The keys of the hash can be provided in any order.
+** Processing line: ~#+begin_src~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src
+** Processing line: ~ def tick args~
+- Inside source: true
+*** True Line Result
+ def tick args
+** Processing line: ~ args.outputs.screenshots << {~
+- Inside source: true
+*** True Line Result
+ args.outputs.screenshots << {
+** Processing line: ~ x: 0, y: 0, w: 100, h: 100, # Which portion of the screen should be captured~
+- Inside source: true
+*** True Line Result
+ x: 0, y: 0, w: 100, h: 100, # Which portion of the screen should be captured
+** Processing line: ~ path: 'screenshot.png', # Output path of PNG file (inside game directory)~
+- Inside source: true
+*** True Line Result
+ path: 'screenshot.png', # Output path of PNG file (inside game directory)
+** Processing line: ~ r: 255, g: 255, b: 255, a: 0 # Optional chroma key~
+- Inside source: true
+*** True Line Result
+ r: 255, g: 255, b: 255, a: 0 # Optional chroma key
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
+** Processing line: ~** Chroma key (Making a color transparent)~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+** Chroma key (Making a color transparent)
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
+** Processing line: ~By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file.~
+** Processing line: ~This can be useful if you want to create files with transparent background like spritesheets.~
+** Processing line: ~The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~.~
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file. This can be useful if you want to create files with transparent background like spritesheets. The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~.
+** Processing line: ~The example above sets the color white (255, 255, 255) as transparent.~
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+The example above sets the color white (255, 255, 255) as transparent.
** Processing line: ~* DOCS: ~GTK::Mouse~~
- Header detected.
*** True Line Result
@@ -10647,34 +10727,6 @@ Follows is a source code listing for all files that have been open sourced. This
- End of paragraph detected.
*** True Line Result
-** Processing line: ~* Learn Ruby Optional - Intermediate Ruby Primer - repl.rb~
-- Header detected.
-*** True Line Result
-
-*** True Line Result
-* Learn Ruby Optional - Intermediate Ruby Primer - repl.rb
-** Processing line: ~#+begin_src ruby~
-- Line was identified as the beginning of a code block.
-*** True Line Result
-
-*** True Line Result
-#+begin_src ruby
-** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/repl.rb~
-- Inside source: true
-*** True Line Result
- # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/repl.rb
-** Processing line: ~~
-- Inside source: true
-*** True Line Result
-
-** Processing line: ~#+end_src~
-- Line was identified as the end of a code block.
-*** True Line Result
-#+end_src
-** Processing line: ~~
-- End of paragraph detected.
-*** True Line Result
-
** Processing line: ~* Rendering Basics - Labels - main.rb~
- Header detected.
*** True Line Result
@@ -13015,6 +13067,18 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
def spawn_new_sound args, num
+** Processing line: ~ input = nil~
+- Inside source: true
+*** True Line Result
+ input = nil
+** Processing line: ~ input = "sounds/#{num}.#{(num == 6) ? 'ogg' : 'wav'}"~
+- Inside source: true
+*** True Line Result
+ input = "sounds/#{num}.#{(num == 6) ? 'ogg' : 'wav'}"
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ # Spawn randomly in an area that won't be covered by UI.~
- Inside source: true
*** True Line Result
@@ -13051,10 +13115,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
args.audio[args.state.next_sound_index] = {
-** Processing line: ~ filename: "sounds/#{num}.#{(num == 6) ? 'ogg' : 'wav'}",~
+** Processing line: ~ input: input,~
- Inside source: true
*** True Line Result
- filename: "sounds/#{num}.#{(num == 6) ? 'ogg' : 'wav'}",
+ input: input,
** Processing line: ~ screenx: screenx,~
- Inside source: true
*** True Line Result
@@ -13267,6 +13331,1454 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
+** Processing line: ~* Rendering Basics - Sound Synthesis - main.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* Rendering Basics - Sound Synthesis - main.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./samples/01_rendering_basics/07_sound_synthesis/app/main.rb~
+- Inside source: true
+*** True Line Result
+ # ./samples/01_rendering_basics/07_sound_synthesis/app/main.rb
+** Processing line: ~ def tick args~
+- Inside source: true
+*** True Line Result
+ def tick args
+** Processing line: ~ defaults args~
+- Inside source: true
+*** True Line Result
+ defaults args
+** Processing line: ~ render args~
+- Inside source: true
+*** True Line Result
+ render args
+** Processing line: ~ input args~
+- Inside source: true
+*** True Line Result
+ input args
+** Processing line: ~ process_audio_queue args~
+- Inside source: true
+*** True Line Result
+ process_audio_queue args
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def defaults args~
+- Inside source: true
+*** True Line Result
+ def defaults args
+** Processing line: ~ args.state.sine_waves ||= {}~
+- Inside source: true
+*** True Line Result
+ args.state.sine_waves ||= {}
+** Processing line: ~ args.state.audio_queue ||= []~
+- Inside source: true
+*** True Line Result
+ args.state.audio_queue ||= []
+** Processing line: ~ args.state.buttons ||= [~
+- Inside source: true
+*** True Line Result
+ args.state.buttons ||= [
+** Processing line: ~ (frequency_buttons args),~
+- Inside source: true
+*** True Line Result
+ (frequency_buttons args),
+** Processing line: ~ (note_buttons args),~
+- Inside source: true
+*** True Line Result
+ (note_buttons args),
+** Processing line: ~ (bell_buttons args)~
+- Inside source: true
+*** True Line Result
+ (bell_buttons args)
+** Processing line: ~ ].flatten~
+- Inside source: true
+*** True Line Result
+ ].flatten
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def frequency_buttons args~
+- Inside source: true
+*** True Line Result
+ def frequency_buttons args
+** Processing line: ~ [~
+- Inside source: true
+*** True Line Result
+ [
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 4.0, col: 0, text: "300hz",~
+- Inside source: true
+*** True Line Result
+ row: 4.0, col: 0, text: "300hz",
+** Processing line: ~ frequency: 300,~
+- Inside source: true
+*** True Line Result
+ frequency: 300,
+** Processing line: ~ method_to_call: :play_sine_wave),~
+- Inside source: true
+*** True Line Result
+ method_to_call: :play_sine_wave),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 5.0, col: 0, text: "400hz",~
+- Inside source: true
+*** True Line Result
+ row: 5.0, col: 0, text: "400hz",
+** Processing line: ~ frequency: 400,~
+- Inside source: true
+*** True Line Result
+ frequency: 400,
+** Processing line: ~ method_to_call: :play_sine_wave),~
+- Inside source: true
+*** True Line Result
+ method_to_call: :play_sine_wave),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 6.0, col: 0, text: "500hz",~
+- Inside source: true
+*** True Line Result
+ row: 6.0, col: 0, text: "500hz",
+** Processing line: ~ frequency: 500,~
+- Inside source: true
+*** True Line Result
+ frequency: 500,
+** Processing line: ~ method_to_call: :play_sine_wave),~
+- Inside source: true
+*** True Line Result
+ method_to_call: :play_sine_wave),
+** Processing line: ~ ]~
+- Inside source: true
+*** True Line Result
+ ]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def play_sine_wave args, sender~
+- Inside source: true
+*** True Line Result
+ def play_sine_wave args, sender
+** Processing line: ~ queue_sine_wave args,~
+- Inside source: true
+*** True Line Result
+ queue_sine_wave args,
+** Processing line: ~ frequency: sender[:frequency],~
+- Inside source: true
+*** True Line Result
+ frequency: sender[:frequency],
+** Processing line: ~ duration: 1.seconds,~
+- Inside source: true
+*** True Line Result
+ duration: 1.seconds,
+** Processing line: ~ fade_out: true~
+- Inside source: true
+*** True Line Result
+ fade_out: true
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def note_buttons args~
+- Inside source: true
+*** True Line Result
+ def note_buttons args
+** Processing line: ~ [~
+- Inside source: true
+*** True Line Result
+ [
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 1.5, col: 3, text: "C4",~
+- Inside source: true
+*** True Line Result
+ row: 1.5, col: 3, text: "C4",
+** Processing line: ~ note: :c, octave: 4, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :c, octave: 4, method_to_call: :play_note),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 2.5, col: 3, text: "D4",~
+- Inside source: true
+*** True Line Result
+ row: 2.5, col: 3, text: "D4",
+** Processing line: ~ note: :d, octave: 4, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :d, octave: 4, method_to_call: :play_note),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 3.5, col: 3, text: "E4",~
+- Inside source: true
+*** True Line Result
+ row: 3.5, col: 3, text: "E4",
+** Processing line: ~ note: :e, octave: 4, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :e, octave: 4, method_to_call: :play_note),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 4.5, col: 3, text: "F4",~
+- Inside source: true
+*** True Line Result
+ row: 4.5, col: 3, text: "F4",
+** Processing line: ~ note: :f, octave: 4, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :f, octave: 4, method_to_call: :play_note),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 5.5, col: 3, text: "G4",~
+- Inside source: true
+*** True Line Result
+ row: 5.5, col: 3, text: "G4",
+** Processing line: ~ note: :g, octave: 4, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :g, octave: 4, method_to_call: :play_note),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 6.5, col: 3, text: "A5",~
+- Inside source: true
+*** True Line Result
+ row: 6.5, col: 3, text: "A5",
+** Processing line: ~ note: :a, octave: 5, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :a, octave: 5, method_to_call: :play_note),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 7.5, col: 3, text: "B5",~
+- Inside source: true
+*** True Line Result
+ row: 7.5, col: 3, text: "B5",
+** Processing line: ~ note: :b, octave: 5, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :b, octave: 5, method_to_call: :play_note),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 8.5, col: 3, text: "C5",~
+- Inside source: true
+*** True Line Result
+ row: 8.5, col: 3, text: "C5",
+** Processing line: ~ note: :c, octave: 5, method_to_call: :play_note),~
+- Inside source: true
+*** True Line Result
+ note: :c, octave: 5, method_to_call: :play_note),
+** Processing line: ~ ]~
+- Inside source: true
+*** True Line Result
+ ]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def play_note args, sender~
+- Inside source: true
+*** True Line Result
+ def play_note args, sender
+** Processing line: ~ queue_sine_wave args,~
+- Inside source: true
+*** True Line Result
+ queue_sine_wave args,
+** Processing line: ~ frequency: (frequency_for note: sender[:note],~
+- Inside source: true
+*** True Line Result
+ frequency: (frequency_for note: sender[:note],
+** Processing line: ~ octave: sender[:octave]),~
+- Inside source: true
+*** True Line Result
+ octave: sender[:octave]),
+** Processing line: ~ duration: 1.seconds,~
+- Inside source: true
+*** True Line Result
+ duration: 1.seconds,
+** Processing line: ~ fade_out: true~
+- Inside source: true
+*** True Line Result
+ fade_out: true
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def bell_buttons args~
+- Inside source: true
+*** True Line Result
+ def bell_buttons args
+** Processing line: ~ [~
+- Inside source: true
+*** True Line Result
+ [
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 1.5, col: 6, text: "Bell C4",~
+- Inside source: true
+*** True Line Result
+ row: 1.5, col: 6, text: "Bell C4",
+** Processing line: ~ note: :c, octave: 4, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :c, octave: 4, method_to_call: :play_bell),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 2.5, col: 6, text: "Bell D4",~
+- Inside source: true
+*** True Line Result
+ row: 2.5, col: 6, text: "Bell D4",
+** Processing line: ~ note: :d, octave: 4, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :d, octave: 4, method_to_call: :play_bell),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 3.5, col: 6, text: "Bell E4",~
+- Inside source: true
+*** True Line Result
+ row: 3.5, col: 6, text: "Bell E4",
+** Processing line: ~ note: :e, octave: 4, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :e, octave: 4, method_to_call: :play_bell),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 4.5, col: 6, text: "Bell F4",~
+- Inside source: true
+*** True Line Result
+ row: 4.5, col: 6, text: "Bell F4",
+** Processing line: ~ note: :f, octave: 4, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :f, octave: 4, method_to_call: :play_bell),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 5.5, col: 6, text: "Bell G4",~
+- Inside source: true
+*** True Line Result
+ row: 5.5, col: 6, text: "Bell G4",
+** Processing line: ~ note: :g, octave: 4, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :g, octave: 4, method_to_call: :play_bell),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 6.5, col: 6, text: "Bell A5",~
+- Inside source: true
+*** True Line Result
+ row: 6.5, col: 6, text: "Bell A5",
+** Processing line: ~ note: :a, octave: 5, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :a, octave: 5, method_to_call: :play_bell),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 7.5, col: 6, text: "Bell B5",~
+- Inside source: true
+*** True Line Result
+ row: 7.5, col: 6, text: "Bell B5",
+** Processing line: ~ note: :b, octave: 5, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :b, octave: 5, method_to_call: :play_bell),
+** Processing line: ~ (button args,~
+- Inside source: true
+*** True Line Result
+ (button args,
+** Processing line: ~ row: 8.5, col: 6, text: "Bell C5",~
+- Inside source: true
+*** True Line Result
+ row: 8.5, col: 6, text: "Bell C5",
+** Processing line: ~ note: :c, octave: 5, method_to_call: :play_bell),~
+- Inside source: true
+*** True Line Result
+ note: :c, octave: 5, method_to_call: :play_bell),
+** Processing line: ~ ]~
+- Inside source: true
+*** True Line Result
+ ]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def play_bell args, sender~
+- Inside source: true
+*** True Line Result
+ def play_bell args, sender
+** Processing line: ~ queue_bell args,~
+- Inside source: true
+*** True Line Result
+ queue_bell args,
+** Processing line: ~ frequency: (frequency_for note: sender[:note],~
+- Inside source: true
+*** True Line Result
+ frequency: (frequency_for note: sender[:note],
+** Processing line: ~ octave: sender[:octave]),~
+- Inside source: true
+*** True Line Result
+ octave: sender[:octave]),
+** Processing line: ~ duration: 2.seconds,~
+- Inside source: true
+*** True Line Result
+ duration: 2.seconds,
+** Processing line: ~ fade_out: true~
+- Inside source: true
+*** True Line Result
+ fade_out: true
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def render args~
+- Inside source: true
+*** True Line Result
+ def render args
+** Processing line: ~ args.outputs.borders << args.state.buttons.map { |b| b[:border] }~
+- Inside source: true
+*** True Line Result
+ args.outputs.borders << args.state.buttons.map { |b| b[:border] }
+** Processing line: ~ args.outputs.labels << args.state.buttons.map { |b| b[:label] }~
+- Inside source: true
+*** True Line Result
+ args.outputs.labels << args.state.buttons.map { |b| b[:label] }
+** Processing line: ~ args.outputs.labels << args.layout~
+- Inside source: true
+*** True Line Result
+ args.outputs.labels << args.layout
+** Processing line: ~ .rect(row: 0,~
+- Inside source: true
+*** True Line Result
+ .rect(row: 0,
+** Processing line: ~ col: 11.5)~
+- Inside source: true
+*** True Line Result
+ col: 11.5)
+** Processing line: ~ .yield_self { |r| r.merge y: r.y + r.h }~
+- Inside source: true
+*** True Line Result
+ .yield_self { |r| r.merge y: r.y + r.h }
+** Processing line: ~ .merge(text: "This is a Pro only feature. Click here to watch the YouTube video if you are on the Standard License.",~
+- Inside source: true
+*** True Line Result
+ .merge(text: "This is a Pro only feature. Click here to watch the YouTube video if you are on the Standard License.",
+** Processing line: ~ alignment_enum: 1)~
+- Inside source: true
+*** True Line Result
+ alignment_enum: 1)
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def input args~
+- Inside source: true
+*** True Line Result
+ def input args
+** Processing line: ~ args.state.buttons.each do |b|~
+- Inside source: true
+*** True Line Result
+ args.state.buttons.each do |b|
+** Processing line: ~ if args.inputs.mouse.click.inside_rect? b[:rect]~
+- Inside source: true
+*** True Line Result
+ if args.inputs.mouse.click.inside_rect? b[:rect]
+** Processing line: ~ parameter_string = (b.slice :frequency, :note, :octave).map { |k, v| "#{k}: #{v}" }.join ", "~
+- Inside source: true
+*** True Line Result
+ parameter_string = (b.slice :frequency, :note, :octave).map { |k, v| "#{k}: #{v}" }.join ", "
+** Processing line: ~ args.gtk.notify! "#{b[:method_to_call]} #{parameter_string}"~
+- Inside source: true
+*** True Line Result
+ args.gtk.notify! "#{b[:method_to_call]} #{parameter_string}"
+** Processing line: ~ send b[:method_to_call], args, b~
+- Inside source: true
+*** True Line Result
+ send b[:method_to_call], args, b
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if args.inputs.mouse.click.inside_rect? (args.layout.rect(row: 0).yield_self { |r| r.merge y: r.y + r.h.half, h: r.h.half })~
+- Inside source: true
+*** True Line Result
+ if args.inputs.mouse.click.inside_rect? (args.layout.rect(row: 0).yield_self { |r| r.merge y: r.y + r.h.half, h: r.h.half })
+** Processing line: ~ args.gtk.openurl 'https://www.youtube.com/watch?v=zEzovM5jT-k&ab_channel=AmirRajan'~
+- Inside source: true
+*** True Line Result
+ args.gtk.openurl 'https://www.youtube.com/watch?v=zEzovM5jT-k&ab_channel=AmirRajan'
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def process_audio_queue args~
+- Inside source: true
+*** True Line Result
+ def process_audio_queue args
+** Processing line: ~ to_queue = args.state.audio_queue.find_all { |v| v[:queue_at] <= args.tick_count }~
+- Inside source: true
+*** True Line Result
+ to_queue = args.state.audio_queue.find_all { |v| v[:queue_at] <= args.tick_count }
+** Processing line: ~ args.state.audio_queue -= to_queue~
+- Inside source: true
+*** True Line Result
+ args.state.audio_queue -= to_queue
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ to_queue.each do |a|~
+- Inside source: true
+*** True Line Result
+ to_queue.each do |a|
+** Processing line: ~ args.audio[a[:id]] = a~
+- Inside source: true
+*** True Line Result
+ args.audio[a[:id]] = a
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.audio.each do |k, v|~
+- Inside source: true
+*** True Line Result
+ args.audio.each do |k, v|
+** Processing line: ~ if v[:decay_rate]~
+- Inside source: true
+*** True Line Result
+ if v[:decay_rate]
+** Processing line: ~ v[:gain] -= v[:decay_rate]~
+- Inside source: true
+*** True Line Result
+ v[:gain] -= v[:decay_rate]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sounds_to_stop = args.audio.find_all do |k, v|~
+- Inside source: true
+*** True Line Result
+ sounds_to_stop = args.audio.find_all do |k, v|
+** Processing line: ~ v[:stop_at] && args.state.tick_count >= v[:stop_at]~
+- Inside source: true
+*** True Line Result
+ v[:stop_at] && args.state.tick_count >= v[:stop_at]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sounds_to_stop.each do |(k, v)|~
+- Inside source: true
+*** True Line Result
+ sounds_to_stop.each do |(k, v)|
+** Processing line: ~ args.audio.delete k~
+- Inside source: true
+*** True Line Result
+ args.audio.delete k
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def graph_sine_wave args, sine_wave, frequency~
+- Inside source: true
+*** True Line Result
+ def graph_sine_wave args, sine_wave, frequency
+** Processing line: ~ if args.state.tick_count != args.state.graphed_at~
+- Inside source: true
+*** True Line Result
+ if args.state.tick_count != args.state.graphed_at
+** Processing line: ~ args.outputs.static_lines.clear~
+- Inside source: true
+*** True Line Result
+ args.outputs.static_lines.clear
+** Processing line: ~ args.outputs.static_sprites.clear~
+- Inside source: true
+*** True Line Result
+ args.outputs.static_sprites.clear
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ r, g, b = frequency.to_i % 80, frequency.to_i % 128, frequency.to_i % 255~
+- Inside source: true
+*** True Line Result
+ r, g, b = frequency.to_i % 80, frequency.to_i % 128, frequency.to_i % 255
+** Processing line: ~ center_row = args.layout.rect(row: 5, col: 9)~
+- Inside source: true
+*** True Line Result
+ center_row = args.layout.rect(row: 5, col: 9)
+** Processing line: ~ x_scale = 20~
+- Inside source: true
+*** True Line Result
+ x_scale = 20
+** Processing line: ~ y_scale = 100~
+- Inside source: true
+*** True Line Result
+ y_scale = 100
+** Processing line: ~ max_points = 20~
+- Inside source: true
+*** True Line Result
+ max_points = 20
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ points = sine_wave~
+- Inside source: true
+*** True Line Result
+ points = sine_wave
+** Processing line: ~ if sine_wave.length > max_points~
+- Inside source: true
+*** True Line Result
+ if sine_wave.length > max_points
+** Processing line: ~ resolution = sine_wave.length.idiv max_points~
+- Inside source: true
+*** True Line Result
+ resolution = sine_wave.length.idiv max_points
+** Processing line: ~ points = sine_wave.find_all~
+- Inside source: true
+*** True Line Result
+ points = sine_wave.find_all
+** Processing line: ~ .with_index { |y, i| i % resolution == 0 }~
+- Inside source: true
+*** True Line Result
+ .with_index { |y, i| i % resolution == 0 }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.outputs.static_lines << points.map_with_index do |y, x|~
+- Inside source: true
+*** True Line Result
+ args.outputs.static_lines << points.map_with_index do |y, x|
+** Processing line: ~ next_y = points[x + 1]~
+- Inside source: true
+*** True Line Result
+ next_y = points[x + 1]
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if next_y~
+- Inside source: true
+*** True Line Result
+ if next_y
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ x: center_row.x + (x * x_scale),~
+- Inside source: true
+*** True Line Result
+ x: center_row.x + (x * x_scale),
+** Processing line: ~ y: center_row.y + center_row.h.half + y_scale * y,~
+- Inside source: true
+*** True Line Result
+ y: center_row.y + center_row.h.half + y_scale * y,
+** Processing line: ~ x2: center_row.x + ((x + 1) * x_scale),~
+- Inside source: true
+*** True Line Result
+ x2: center_row.x + ((x + 1) * x_scale),
+** Processing line: ~ y2: center_row.y + center_row.h.half + y_scale * next_y,~
+- Inside source: true
+*** True Line Result
+ y2: center_row.y + center_row.h.half + y_scale * next_y,
+** Processing line: ~ r: r,~
+- Inside source: true
+*** True Line Result
+ r: r,
+** Processing line: ~ g: g,~
+- Inside source: true
+*** True Line Result
+ g: g,
+** Processing line: ~ b: b~
+- Inside source: true
+*** True Line Result
+ b: b
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.outputs.static_sprites << points.map_with_index do |y, x|~
+- Inside source: true
+*** True Line Result
+ args.outputs.static_sprites << points.map_with_index do |y, x|
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ x: (center_row.x + (x * x_scale)) - 1,~
+- Inside source: true
+*** True Line Result
+ x: (center_row.x + (x * x_scale)) - 1,
+** Processing line: ~ y: (center_row.y + center_row.h.half + y_scale * y) - 1,~
+- Inside source: true
+*** True Line Result
+ y: (center_row.y + center_row.h.half + y_scale * y) - 1,
+** Processing line: ~ w: 2,~
+- Inside source: true
+*** True Line Result
+ w: 2,
+** Processing line: ~ h: 2,~
+- Inside source: true
+*** True Line Result
+ h: 2,
+** Processing line: ~ path: 'sprites/square-black.png'~
+- Inside source: true
+*** True Line Result
+ path: 'sprites/square-black.png'
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.state.graphed_at = args.state.tick_count~
+- Inside source: true
+*** True Line Result
+ args.state.graphed_at = args.state.tick_count
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def defaults_period_sine_wave_for~
+- Inside source: true
+*** True Line Result
+ def defaults_period_sine_wave_for
+** Processing line: ~ { frequency: 440, sample_rate: 48000 }~
+- Inside source: true
+*** True Line Result
+ { frequency: 440, sample_rate: 48000 }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def sine_wave_for opts = { }~
+- Inside source: true
+*** True Line Result
+ def sine_wave_for opts = { }
+** Processing line: ~ opts = defaults_period_sine_wave_for.merge opts~
+- Inside source: true
+*** True Line Result
+ opts = defaults_period_sine_wave_for.merge opts
+** Processing line: ~ frequency = opts[:frequency]~
+- Inside source: true
+*** True Line Result
+ frequency = opts[:frequency]
+** Processing line: ~ sample_rate = opts[:sample_rate]~
+- Inside source: true
+*** True Line Result
+ sample_rate = opts[:sample_rate]
+** Processing line: ~ period_size = (sample_rate.fdiv frequency).ceil~
+- Inside source: true
+*** True Line Result
+ period_size = (sample_rate.fdiv frequency).ceil
+** Processing line: ~ period_size.map_with_index do |i|~
+- Inside source: true
+*** True Line Result
+ period_size.map_with_index do |i|
+** Processing line: ~ Math::sin((2.0 * Math::PI) / (sample_rate.to_f / frequency.to_f) * i)~
+- Inside source: true
+*** True Line Result
+ Math::sin((2.0 * Math::PI) / (sample_rate.to_f / frequency.to_f) * i)
+** Processing line: ~ end.to_a~
+- Inside source: true
+*** True Line Result
+ end.to_a
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def generate_audio_data sine_wave, sample_rate~
+- Inside source: true
+*** True Line Result
+ def generate_audio_data sine_wave, sample_rate
+** Processing line: ~ sample_size = (sample_rate.fdiv (1000.fdiv 60)).ceil~
+- Inside source: true
+*** True Line Result
+ sample_size = (sample_rate.fdiv (1000.fdiv 60)).ceil
+** Processing line: ~ copy_count = (sample_size.fdiv sine_wave.length).ceil~
+- Inside source: true
+*** True Line Result
+ copy_count = (sample_size.fdiv sine_wave.length).ceil
+** Processing line: ~ sine_wave * copy_count~
+- Inside source: true
+*** True Line Result
+ sine_wave * copy_count
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def defaults_queue_sine_wave~
+- Inside source: true
+*** True Line Result
+ def defaults_queue_sine_wave
+** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~
+- Inside source: true
+*** True Line Result
+ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def queue_sine_wave args, opts = { }~
+- Inside source: true
+*** True Line Result
+ def queue_sine_wave args, opts = { }
+** Processing line: ~ opts = defaults_queue_sine_wave.merge opts~
+- Inside source: true
+*** True Line Result
+ opts = defaults_queue_sine_wave.merge opts
+** Processing line: ~ decay_rate = 0~
+- Inside source: true
+*** True Line Result
+ decay_rate = 0
+** Processing line: ~ decay_rate = 1.fdiv(opts[:duration]) * opts[:gain] if opts[:fade_out]~
+- Inside source: true
+*** True Line Result
+ decay_rate = 1.fdiv(opts[:duration]) * opts[:gain] if opts[:fade_out]
+** Processing line: ~ frequency = opts[:frequency]~
+- Inside source: true
+*** True Line Result
+ frequency = opts[:frequency]
+** Processing line: ~ sample_rate = 48000~
+- Inside source: true
+*** True Line Result
+ sample_rate = 48000
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ audio_state = {~
+- Inside source: true
+*** True Line Result
+ audio_state = {
+** Processing line: ~ id: (new_id! args),~
+- Inside source: true
+*** True Line Result
+ id: (new_id! args),
+** Processing line: ~ frequency: frequency,~
+- Inside source: true
+*** True Line Result
+ frequency: frequency,
+** Processing line: ~ sample_rate: 48000,~
+- Inside source: true
+*** True Line Result
+ sample_rate: 48000,
+** Processing line: ~ stop_at: args.tick_count + opts[:queue_in] + opts[:duration],~
+- Inside source: true
+*** True Line Result
+ stop_at: args.tick_count + opts[:queue_in] + opts[:duration],
+** Processing line: ~ gain: opts[:gain].to_f,~
+- Inside source: true
+*** True Line Result
+ gain: opts[:gain].to_f,
+** Processing line: ~ queue_at: args.state.tick_count + opts[:queue_in],~
+- Inside source: true
+*** True Line Result
+ queue_at: args.state.tick_count + opts[:queue_in],
+** Processing line: ~ decay_rate: decay_rate,~
+- Inside source: true
+*** True Line Result
+ decay_rate: decay_rate,
+** Processing line: ~ pitch: 1.0,~
+- Inside source: true
+*** True Line Result
+ pitch: 1.0,
+** Processing line: ~ looping: true,~
+- Inside source: true
+*** True Line Result
+ looping: true,
+** Processing line: ~ paused: false~
+- Inside source: true
+*** True Line Result
+ paused: false
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sine_wave = sine_wave_for frequency: frequency, sample_rate: sample_rate~
+- Inside source: true
+*** True Line Result
+ sine_wave = sine_wave_for frequency: frequency, sample_rate: sample_rate
+** Processing line: ~ args.state.sine_waves[frequency] ||= sine_wave_for frequency: frequency, sample_rate: sample_rate~
+- Inside source: true
+*** True Line Result
+ args.state.sine_waves[frequency] ||= sine_wave_for frequency: frequency, sample_rate: sample_rate
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ proc = lambda do~
+- Inside source: true
+*** True Line Result
+ proc = lambda do
+** Processing line: ~ generate_audio_data args.state.sine_waves[frequency], sample_rate~
+- Inside source: true
+*** True Line Result
+ generate_audio_data args.state.sine_waves[frequency], sample_rate
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~
+- Inside source: true
+*** True Line Result
+ audio_state[:input] = [1, sample_rate, proc]
+** Processing line: ~ graph_sine_wave args, sine_wave, frequency~
+- Inside source: true
+*** True Line Result
+ graph_sine_wave args, sine_wave, frequency
+** Processing line: ~ args.state.audio_queue << audio_state~
+- Inside source: true
+*** True Line Result
+ args.state.audio_queue << audio_state
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def defaults_queue_bell~
+- Inside source: true
+*** True Line Result
+ def defaults_queue_bell
+** Processing line: ~ { frequency: 440, duration: 1.seconds, queue_in: 0 }~
+- Inside source: true
+*** True Line Result
+ { frequency: 440, duration: 1.seconds, queue_in: 0 }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def queue_bell args, opts = {}~
+- Inside source: true
+*** True Line Result
+ def queue_bell args, opts = {}
+** Processing line: ~ (bell_to_sine_waves (defaults_queue_bell.merge opts)).each { |b| queue_sine_wave args, b }~
+- Inside source: true
+*** True Line Result
+ (bell_to_sine_waves (defaults_queue_bell.merge opts)).each { |b| queue_sine_wave args, b }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def bell_harmonics~
+- Inside source: true
+*** True Line Result
+ def bell_harmonics
+** Processing line: ~ [~
+- Inside source: true
+*** True Line Result
+ [
+** Processing line: ~ { frequency_ratio: 0.5, duration_ratio: 1.00 },~
+- Inside source: true
+*** True Line Result
+ { frequency_ratio: 0.5, duration_ratio: 1.00 },
+** Processing line: ~ { frequency_ratio: 1.0, duration_ratio: 0.80 },~
+- Inside source: true
+*** True Line Result
+ { frequency_ratio: 1.0, duration_ratio: 0.80 },
+** Processing line: ~ { frequency_ratio: 2.0, duration_ratio: 0.60 },~
+- Inside source: true
+*** True Line Result
+ { frequency_ratio: 2.0, duration_ratio: 0.60 },
+** Processing line: ~ { frequency_ratio: 3.0, duration_ratio: 0.40 },~
+- Inside source: true
+*** True Line Result
+ { frequency_ratio: 3.0, duration_ratio: 0.40 },
+** Processing line: ~ { frequency_ratio: 4.2, duration_ratio: 0.25 },~
+- Inside source: true
+*** True Line Result
+ { frequency_ratio: 4.2, duration_ratio: 0.25 },
+** Processing line: ~ { frequency_ratio: 5.4, duration_ratio: 0.20 },~
+- Inside source: true
+*** True Line Result
+ { frequency_ratio: 5.4, duration_ratio: 0.20 },
+** Processing line: ~ { frequency_ratio: 6.8, duration_ratio: 0.15 }~
+- Inside source: true
+*** True Line Result
+ { frequency_ratio: 6.8, duration_ratio: 0.15 }
+** Processing line: ~ ]~
+- Inside source: true
+*** True Line Result
+ ]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def bell_to_sine_waves opts~
+- Inside source: true
+*** True Line Result
+ def bell_to_sine_waves opts
+** Processing line: ~ bell_harmonics.map do |b|~
+- Inside source: true
+*** True Line Result
+ bell_harmonics.map do |b|
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ frequency: opts[:frequency] * b[:frequency_ratio],~
+- Inside source: true
+*** True Line Result
+ frequency: opts[:frequency] * b[:frequency_ratio],
+** Processing line: ~ duration: opts[:duration] * b[:duration_ratio],~
+- Inside source: true
+*** True Line Result
+ duration: opts[:duration] * b[:duration_ratio],
+** Processing line: ~ queue_in: opts[:queue_in],~
+- Inside source: true
+*** True Line Result
+ queue_in: opts[:queue_in],
+** Processing line: ~ gain: (1.fdiv bell_harmonics.length),~
+- Inside source: true
+*** True Line Result
+ gain: (1.fdiv bell_harmonics.length),
+** Processing line: ~ fade_out: true~
+- Inside source: true
+*** True Line Result
+ fade_out: true
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def defaults_frequency_for~
+- Inside source: true
+*** True Line Result
+ def defaults_frequency_for
+** Processing line: ~ { note: :a, octave: 5, sharp: false, flat: false }~
+- Inside source: true
+*** True Line Result
+ { note: :a, octave: 5, sharp: false, flat: false }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def frequency_for opts = {}~
+- Inside source: true
+*** True Line Result
+ def frequency_for opts = {}
+** Processing line: ~ opts = defaults_frequency_for.merge opts~
+- Inside source: true
+*** True Line Result
+ opts = defaults_frequency_for.merge opts
+** Processing line: ~ octave_offset_multiplier = opts[:octave] - 5~
+- Inside source: true
+*** True Line Result
+ octave_offset_multiplier = opts[:octave] - 5
+** Processing line: ~ note = note_frequencies_octave_5[opts[:note]]~
+- Inside source: true
+*** True Line Result
+ note = note_frequencies_octave_5[opts[:note]]
+** Processing line: ~ if octave_offset_multiplier < 0~
+- Inside source: true
+*** True Line Result
+ if octave_offset_multiplier < 0
+** Processing line: ~ note = note * 1 / (octave_offset_multiplier.abs + 1)~
+- Inside source: true
+*** True Line Result
+ note = note * 1 / (octave_offset_multiplier.abs + 1)
+** Processing line: ~ elsif octave_offset_multiplier > 0~
+- Inside source: true
+*** True Line Result
+ elsif octave_offset_multiplier > 0
+** Processing line: ~ note = note * (octave_offset_multiplier.abs + 1) / 1~
+- Inside source: true
+*** True Line Result
+ note = note * (octave_offset_multiplier.abs + 1) / 1
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ note~
+- Inside source: true
+*** True Line Result
+ note
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def note_frequencies_octave_5~
+- Inside source: true
+*** True Line Result
+ def note_frequencies_octave_5
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ a: 440.0,~
+- Inside source: true
+*** True Line Result
+ a: 440.0,
+** Processing line: ~ a_sharp: 466.16, b_flat: 466.16,~
+- Inside source: true
+*** True Line Result
+ a_sharp: 466.16, b_flat: 466.16,
+** Processing line: ~ b: 493.88,~
+- Inside source: true
+*** True Line Result
+ b: 493.88,
+** Processing line: ~ c: 523.25,~
+- Inside source: true
+*** True Line Result
+ c: 523.25,
+** Processing line: ~ c_sharp: 554.37, d_flat: 587.33,~
+- Inside source: true
+*** True Line Result
+ c_sharp: 554.37, d_flat: 587.33,
+** Processing line: ~ d: 587.33,~
+- Inside source: true
+*** True Line Result
+ d: 587.33,
+** Processing line: ~ d_sharp: 622.25, e_flat: 659.25,~
+- Inside source: true
+*** True Line Result
+ d_sharp: 622.25, e_flat: 659.25,
+** Processing line: ~ e: 659.25,~
+- Inside source: true
+*** True Line Result
+ e: 659.25,
+** Processing line: ~ f: 698.25,~
+- Inside source: true
+*** True Line Result
+ f: 698.25,
+** Processing line: ~ f_sharp: 739.99, g_flat: 739.99,~
+- Inside source: true
+*** True Line Result
+ f_sharp: 739.99, g_flat: 739.99,
+** Processing line: ~ g: 783.99,~
+- Inside source: true
+*** True Line Result
+ g: 783.99,
+** Processing line: ~ g_sharp: 830.61, a_flat: 830.61~
+- Inside source: true
+*** True Line Result
+ g_sharp: 830.61, a_flat: 830.61
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def new_id! args~
+- Inside source: true
+*** True Line Result
+ def new_id! args
+** Processing line: ~ args.state.audio_id ||= 0~
+- Inside source: true
+*** True Line Result
+ args.state.audio_id ||= 0
+** Processing line: ~ args.state.audio_id += 1~
+- Inside source: true
+*** True Line Result
+ args.state.audio_id += 1
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def button args, opts~
+- Inside source: true
+*** True Line Result
+ def button args, opts
+** Processing line: ~ button_def = opts.merge rect: (args.layout.rect (opts.merge w: 2, h: 1))~
+- Inside source: true
+*** True Line Result
+ button_def = opts.merge rect: (args.layout.rect (opts.merge w: 2, h: 1))
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ button_def[:border] = button_def[:rect].merge r: 0, g: 0, b: 0~
+- Inside source: true
+*** True Line Result
+ button_def[:border] = button_def[:rect].merge r: 0, g: 0, b: 0
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ font_size_enum = args.layout.font_relative_size_enum 0~
+- Inside source: true
+*** True Line Result
+ font_size_enum = args.layout.font_relative_size_enum 0
+** Processing line: ~ label_offset_x = 4~
+- Inside source: true
+*** True Line Result
+ label_offset_x = 4
+** Processing line: ~ label_offset_y = button_def[:rect].h.half + button_def[:rect].h.idiv(4)~
+- Inside source: true
+*** True Line Result
+ label_offset_y = button_def[:rect].h.half + button_def[:rect].h.idiv(4)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ button_def[:label] = button_def[:rect].merge text: opts[:text],~
+- Inside source: true
+*** True Line Result
+ button_def[:label] = button_def[:rect].merge text: opts[:text],
+** Processing line: ~ size_enum: font_size_enum,~
+- Inside source: true
+*** True Line Result
+ size_enum: font_size_enum,
+** Processing line: ~ x: button_def[:rect].x + label_offset_x,~
+- Inside source: true
+*** True Line Result
+ x: button_def[:rect].x + label_offset_x,
+** Processing line: ~ y: button_def[:rect].y + label_offset_y~
+- Inside source: true
+*** True Line Result
+ y: button_def[:rect].y + label_offset_y
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ button_def~
+- Inside source: true
+*** True Line Result
+ button_def
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ $gtk.reset~
+- Inside source: true
+*** True Line Result
+ $gtk.reset
** Processing line: ~~
- Inside source: true
*** True Line Result
@@ -15699,6 +17211,202 @@ Follows is a source code listing for all files that have been open sourced. This
- End of paragraph detected.
*** True Line Result
+** Processing line: ~* Input Basics - Touch - main.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* Input Basics - Touch - main.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./samples/02_input_basics/06_touch/app/main.rb~
+- Inside source: true
+*** True Line Result
+ # ./samples/02_input_basics/06_touch/app/main.rb
+** Processing line: ~ def tick args~
+- Inside source: true
+*** True Line Result
+ def tick args
+** Processing line: ~ args.outputs.background_color = [ 0, 0, 0 ]~
+- Inside source: true
+*** True Line Result
+ args.outputs.background_color = [ 0, 0, 0 ]
+** Processing line: ~ args.outputs.primitives << [640, 700, "Touch your screen.", 5, 1, 255, 255, 255].label~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << [640, 700, "Touch your screen.", 5, 1, 255, 255, 255].label
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # If you don't want to get fancy, you can just look for finger_one~
+- Inside source: true
+*** True Line Result
+ # If you don't want to get fancy, you can just look for finger_one
+** Processing line: ~ # (and _two, if you like), which are assigned in the order new touches hit~
+- Inside source: true
+*** True Line Result
+ # (and _two, if you like), which are assigned in the order new touches hit
+** Processing line: ~ # the screen. If not nil, they are touching right now, and are just~
+- Inside source: true
+*** True Line Result
+ # the screen. If not nil, they are touching right now, and are just
+** Processing line: ~ # references to specific items in the args.input.touch hash.~
+- Inside source: true
+*** True Line Result
+ # references to specific items in the args.input.touch hash.
+** Processing line: ~ # If finger_one lifts off, it will become nil, but finger_two, if it was~
+- Inside source: true
+*** True Line Result
+ # If finger_one lifts off, it will become nil, but finger_two, if it was
+** Processing line: ~ # touching, remains until it also lifts off. When all fingers lift off, the~
+- Inside source: true
+*** True Line Result
+ # touching, remains until it also lifts off. When all fingers lift off, the
+** Processing line: ~ # the next new touch will be finger_one again, but until then, new touches~
+- Inside source: true
+*** True Line Result
+ # the next new touch will be finger_one again, but until then, new touches
+** Processing line: ~ # don't fill in earlier slots.~
+- Inside source: true
+*** True Line Result
+ # don't fill in earlier slots.
+** Processing line: ~ if !args.inputs.finger_one.nil?~
+- Inside source: true
+*** True Line Result
+ if !args.inputs.finger_one.nil?
+** Processing line: ~ args.outputs.primitives << [640, 650, "Finger #1 is touching at (#{args.inputs.finger_one.x}, #{args.inputs.finger_one.y}).", 5, 1, 255, 255, 255].label~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << [640, 650, "Finger #1 is touching at (#{args.inputs.finger_one.x}, #{args.inputs.finger_one.y}).", 5, 1, 255, 255, 255].label
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ if !args.inputs.finger_two.nil?~
+- Inside source: true
+*** True Line Result
+ if !args.inputs.finger_two.nil?
+** Processing line: ~ args.outputs.primitives << [640, 600, "Finger #2 is touching at (#{args.inputs.finger_two.x}, #{args.inputs.finger_two.y}).", 5, 1, 255, 255, 255].label~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << [640, 600, "Finger #2 is touching at (#{args.inputs.finger_two.x}, #{args.inputs.finger_two.y}).", 5, 1, 255, 255, 255].label
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # Here's the more flexible interface: this will report as many simultaneous~
+- Inside source: true
+*** True Line Result
+ # Here's the more flexible interface: this will report as many simultaneous
+** Processing line: ~ # touches as the system can handle, but it's a little more effort to track~
+- Inside source: true
+*** True Line Result
+ # touches as the system can handle, but it's a little more effort to track
+** Processing line: ~ # them. Each item in the args.input.touch hash has a unique key (an~
+- Inside source: true
+*** True Line Result
+ # them. Each item in the args.input.touch hash has a unique key (an
+** Processing line: ~ # incrementing integer) that exists until the finger lifts off. You can~
+- Inside source: true
+*** True Line Result
+ # incrementing integer) that exists until the finger lifts off. You can
+** Processing line: ~ # tell which order the touches happened globally by the key value, or~
+- Inside source: true
+*** True Line Result
+ # tell which order the touches happened globally by the key value, or
+** Processing line: ~ # by the touch[id].touch_order field, which resets to zero each time all~
+- Inside source: true
+*** True Line Result
+ # by the touch[id].touch_order field, which resets to zero each time all
+** Processing line: ~ # touches have lifted.~
+- Inside source: true
+*** True Line Result
+ # touches have lifted.
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.state.colors ||= [~
+- Inside source: true
+*** True Line Result
+ args.state.colors ||= [
+** Processing line: ~ 0xFF0000, 0x00FF00, 0x1010FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF~
+- Inside source: true
+*** True Line Result
+ 0xFF0000, 0x00FF00, 0x1010FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF
+** Processing line: ~ ]~
+- Inside source: true
+*** True Line Result
+ ]
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ size = 100~
+- Inside source: true
+*** True Line Result
+ size = 100
+** Processing line: ~ args.inputs.touch.each { |k,v|~
+- Inside source: true
+*** True Line Result
+ args.inputs.touch.each { |k,v|
+** Processing line: ~ color = args.state.colors[v.touch_order % 7]~
+- Inside source: true
+*** True Line Result
+ color = args.state.colors[v.touch_order % 7]
+** Processing line: ~ r = (color & 0xFF0000) >> 16~
+- Inside source: true
+*** True Line Result
+ r = (color & 0xFF0000) >> 16
+** Processing line: ~ g = (color & 0x00FF00) >> 8~
+- Inside source: true
+*** True Line Result
+ g = (color & 0x00FF00) >> 8
+** Processing line: ~ b = (color & 0x0000FF)~
+- Inside source: true
+*** True Line Result
+ b = (color & 0x0000FF)
+** Processing line: ~ args.outputs.primitives << [v.x - (size / 2), v.y + (size / 2), size, size, r, g, b, 255].solid~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << [v.x - (size / 2), v.y + (size / 2), size, size, r, g, b, 255].solid
+** Processing line: ~ args.outputs.primitives << [v.x, v.y + size, k.to_s, 0, 1, 0, 0, 0].label~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << [v.x, v.y + size, k.to_s, 0, 1, 0, 0, 0].label
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
** Processing line: ~* Rendering Sprites - Animation Using Separate Pngs - main.rb~
- Header detected.
*** True Line Result
@@ -33967,6 +35675,198 @@ Follows is a source code listing for all files that have been open sourced. This
- End of paragraph detected.
*** True Line Result
+** Processing line: ~* Advanced Rendering - Pixel Arrays - main.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* Advanced Rendering - Pixel Arrays - main.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./samples/07_advanced_rendering/06_pixel_arrays/app/main.rb~
+- Inside source: true
+*** True Line Result
+ # ./samples/07_advanced_rendering/06_pixel_arrays/app/main.rb
+** Processing line: ~ $gtk.reset~
+- Inside source: true
+*** True Line Result
+ $gtk.reset
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def tick args~
+- Inside source: true
+*** True Line Result
+ def tick args
+** Processing line: ~ args.state.posinc ||= 1~
+- Inside source: true
+*** True Line Result
+ args.state.posinc ||= 1
+** Processing line: ~ args.state.pos ||= 0~
+- Inside source: true
+*** True Line Result
+ args.state.pos ||= 0
+** Processing line: ~ args.state.rotation ||= 0~
+- Inside source: true
+*** True Line Result
+ args.state.rotation ||= 0
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ dimension = 10 # keep it small and let the GPU scale it when rendering the sprite.~
+- Inside source: true
+*** True Line Result
+ dimension = 10 # keep it small and let the GPU scale it when rendering the sprite.
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # Set up our "scanner" pixel array and fill it with black pixels.~
+- Inside source: true
+*** True Line Result
+ # Set up our "scanner" pixel array and fill it with black pixels.
+** Processing line: ~ args.pixel_array(:scanner).width = dimension~
+- Inside source: true
+*** True Line Result
+ args.pixel_array(:scanner).width = dimension
+** Processing line: ~ args.pixel_array(:scanner).height = dimension~
+- Inside source: true
+*** True Line Result
+ args.pixel_array(:scanner).height = dimension
+** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF000000, 0, dimension * dimension) # black, full alpha~
+- Inside source: true
+*** True Line Result
+ args.pixel_array(:scanner).pixels.fill(0xFF000000, 0, dimension * dimension) # black, full alpha
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # Draw a green line that bounces up and down the sprite.~
+- Inside source: true
+*** True Line Result
+ # Draw a green line that bounces up and down the sprite.
+** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF00FF00, dimension * args.state.pos, dimension) # green, full alpha~
+- Inside source: true
+*** True Line Result
+ args.pixel_array(:scanner).pixels.fill(0xFF00FF00, dimension * args.state.pos, dimension) # green, full alpha
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # Adjust position for next frame.~
+- Inside source: true
+*** True Line Result
+ # Adjust position for next frame.
+** Processing line: ~ args.state.pos += args.state.posinc~
+- Inside source: true
+*** True Line Result
+ args.state.pos += args.state.posinc
+** Processing line: ~ if args.state.posinc > 0 && args.state.pos >= dimension~
+- Inside source: true
+*** True Line Result
+ if args.state.posinc > 0 && args.state.pos >= dimension
+** Processing line: ~ args.state.posinc = -1~
+- Inside source: true
+*** True Line Result
+ args.state.posinc = -1
+** Processing line: ~ args.state.pos = dimension - 1~
+- Inside source: true
+*** True Line Result
+ args.state.pos = dimension - 1
+** Processing line: ~ elsif args.state.posinc < 0 && args.state.pos < 0~
+- Inside source: true
+*** True Line Result
+ elsif args.state.posinc < 0 && args.state.pos < 0
+** Processing line: ~ args.state.posinc = 1~
+- Inside source: true
+*** True Line Result
+ args.state.posinc = 1
+** Processing line: ~ args.state.pos = 1~
+- Inside source: true
+*** True Line Result
+ args.state.pos = 1
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~
+- Inside source: true
+*** True Line Result
+ # New/changed pixel arrays get uploaded to the GPU before we render
+** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~
+- Inside source: true
+*** True Line Result
+ # anything. At that point, they can be scaled, rotated, and otherwise
+** Processing line: ~ # used like any other sprite.~
+- Inside source: true
+*** True Line Result
+ # used like any other sprite.
+** Processing line: ~ w = 100~
+- Inside source: true
+*** True Line Result
+ w = 100
+** Processing line: ~ h = 100~
+- Inside source: true
+*** True Line Result
+ h = 100
+** Processing line: ~ x = (1280 - w) / 2~
+- Inside source: true
+*** True Line Result
+ x = (1280 - w) / 2
+** Processing line: ~ y = (720 - h) / 2~
+- Inside source: true
+*** True Line Result
+ y = (720 - h) / 2
+** Processing line: ~ args.outputs.background_color = [64, 0, 128]~
+- Inside source: true
+*** True Line Result
+ args.outputs.background_color = [64, 0, 128]
+** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite
+** Processing line: ~ args.state.rotation += 1~
+- Inside source: true
+*** True Line Result
+ args.state.rotation += 1
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << args.gtk.current_framerate_primitives
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
** Processing line: ~* Tweening Lerping Easing Functions - Easing Functions - main.rb~
- Header detected.
*** True Line Result
@@ -40391,6 +42291,122 @@ Follows is a source code listing for all files that have been open sourced. This
- End of paragraph detected.
*** True Line Result
+** Processing line: ~* 12 C Extensions - Native Pixel Arrays - main.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* 12 C Extensions - Native Pixel Arrays - main.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./samples/12_c_extensions/03_native_pixel_arrays/app/main.rb~
+- Inside source: true
+*** True Line Result
+ # ./samples/12_c_extensions/03_native_pixel_arrays/app/main.rb
+** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~
+- Inside source: true
+*** True Line Result
+ $gtk.ffi_misc.gtk_dlopen("ext")
+** Processing line: ~ include FFI::CExt~
+- Inside source: true
+*** True Line Result
+ include FFI::CExt
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def tick args~
+- Inside source: true
+*** True Line Result
+ def tick args
+** Processing line: ~ args.state.rotation ||= 0~
+- Inside source: true
+*** True Line Result
+ args.state.rotation ||= 0
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ update_scanner_texture # this calls into a C extension!~
+- Inside source: true
+*** True Line Result
+ update_scanner_texture # this calls into a C extension!
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~
+- Inside source: true
+*** True Line Result
+ # New/changed pixel arrays get uploaded to the GPU before we render
+** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~
+- Inside source: true
+*** True Line Result
+ # anything. At that point, they can be scaled, rotated, and otherwise
+** Processing line: ~ # used like any other sprite.~
+- Inside source: true
+*** True Line Result
+ # used like any other sprite.
+** Processing line: ~ w = 100~
+- Inside source: true
+*** True Line Result
+ w = 100
+** Processing line: ~ h = 100~
+- Inside source: true
+*** True Line Result
+ h = 100
+** Processing line: ~ x = (1280 - w) / 2~
+- Inside source: true
+*** True Line Result
+ x = (1280 - w) / 2
+** Processing line: ~ y = (720 - h) / 2~
+- Inside source: true
+*** True Line Result
+ y = (720 - h) / 2
+** Processing line: ~ args.outputs.background_color = [64, 0, 128]~
+- Inside source: true
+*** True Line Result
+ args.outputs.background_color = [64, 0, 128]
+** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite
+** Processing line: ~ args.state.rotation += 1~
+- Inside source: true
+*** True Line Result
+ args.state.rotation += 1
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~
+- Inside source: true
+*** True Line Result
+ args.outputs.primitives << args.gtk.current_framerate_primitives
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
** Processing line: ~* 3d - 3d Cube - main.rb~
- Header detected.
*** True Line Result
@@ -63175,102 +65191,6 @@ Follows is a source code listing for all files that have been open sourced. This
- End of paragraph detected.
*** True Line Result
-** Processing line: ~* Platformer - Gorillas Basic - repl.rb~
-- Header detected.
-*** True Line Result
-
-*** True Line Result
-* Platformer - Gorillas Basic - repl.rb
-** Processing line: ~#+begin_src ruby~
-- Line was identified as the beginning of a code block.
-*** True Line Result
-
-*** True Line Result
-#+begin_src ruby
-** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/repl.rb~
-- Inside source: true
-*** True Line Result
- # ./samples/99_genre_platformer/gorillas_basic/app/repl.rb
-** Processing line: ~ begin~
-- Inside source: true
-*** True Line Result
- begin
-** Processing line: ~ if $gtk.args.state.current_turn == :player_1_angle~
-- Inside source: true
-*** True Line Result
- if $gtk.args.state.current_turn == :player_1_angle
-** Processing line: ~ $gtk.args.state.player_1_angle = "#{60 + 10.randomize(:ratio).to_i}"~
-- Inside source: true
-*** True Line Result
- $gtk.args.state.player_1_angle = "#{60 + 10.randomize(:ratio).to_i}"
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-- Inside source: true
-*** True Line Result
- $you_so_basic_gorillas.input_execute_turn
-** Processing line: ~ $gtk.args.state.player_1_velocity = "#{30 + 20.randomize(:ratio).to_i}"~
-- Inside source: true
-*** True Line Result
- $gtk.args.state.player_1_velocity = "#{30 + 20.randomize(:ratio).to_i}"
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-- Inside source: true
-*** True Line Result
- $you_so_basic_gorillas.input_execute_turn
-** Processing line: ~ elsif $gtk.args.state.current_turn == :player_2_angle~
-- Inside source: true
-*** True Line Result
- elsif $gtk.args.state.current_turn == :player_2_angle
-** Processing line: ~ $gtk.args.state.player_2_angle = "#{60 + 10.randomize(:ratio).to_i}"~
-- Inside source: true
-*** True Line Result
- $gtk.args.state.player_2_angle = "#{60 + 10.randomize(:ratio).to_i}"
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-- Inside source: true
-*** True Line Result
- $you_so_basic_gorillas.input_execute_turn
-** Processing line: ~ $gtk.args.state.player_2_velocity = "#{30 + 20.randomize(:ratio).to_i}"~
-- Inside source: true
-*** True Line Result
- $gtk.args.state.player_2_velocity = "#{30 + 20.randomize(:ratio).to_i}"
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-- Inside source: true
-*** True Line Result
- $you_so_basic_gorillas.input_execute_turn
-** Processing line: ~ else~
-- Inside source: true
-*** True Line Result
- else
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-- Inside source: true
-*** True Line Result
- $you_so_basic_gorillas.input_execute_turn
-** Processing line: ~ end~
-- Inside source: true
-*** True Line Result
- end
-** Processing line: ~ rescue Exception => e~
-- Inside source: true
-*** True Line Result
- rescue Exception => e
-** Processing line: ~ puts e~
-- Inside source: true
-*** True Line Result
- puts e
-** Processing line: ~ end~
-- Inside source: true
-*** True Line Result
- end
-** Processing line: ~~
-- Inside source: true
-*** True Line Result
-
-** Processing line: ~#+end_src~
-- Line was identified as the end of a code block.
-*** True Line Result
-#+end_src
-** Processing line: ~~
-- End of paragraph detected.
-*** True Line Result
-
** Processing line: ~* Platformer - Gorillas Basic - tests.rb~
- Header detected.
*** True Line Result
@@ -76935,38 +78855,6 @@ Follows is a source code listing for all files that have been open sourced. This
- End of paragraph detected.
*** True Line Result
-** Processing line: ~* Rpg Narrative - Return Of Serenity - repl.rb~
-- Header detected.
-*** True Line Result
-
-*** True Line Result
-* Rpg Narrative - Return Of Serenity - repl.rb
-** Processing line: ~#+begin_src ruby~
-- Line was identified as the beginning of a code block.
-*** True Line Result
-
-*** True Line Result
-#+begin_src ruby
-** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/repl.rb~
-- Inside source: true
-*** True Line Result
- # ./samples/99_genre_rpg_narrative/return_of_serenity/app/repl.rb
-** Processing line: ~ puts $gtk.args.state.current_scene~
-- Inside source: true
-*** True Line Result
- puts $gtk.args.state.current_scene
-** Processing line: ~~
-- Inside source: true
-*** True Line Result
-
-** Processing line: ~#+end_src~
-- Line was identified as the end of a code block.
-*** True Line Result
-#+end_src
-** Processing line: ~~
-- End of paragraph detected.
-*** True Line Result
-
** Processing line: ~* Rpg Narrative - Return Of Serenity - require.rb~
- Header detected.
*** True Line Result
@@ -88375,6 +90263,14 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ attr_accessor :layout~
+- Inside source: true
+*** True Line Result
+ attr_accessor :layout
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ def initialize runtime, recording~
- Inside source: true
*** True Line Result
@@ -88419,6 +90315,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
@render_targets = {}
+** Processing line: ~ @pixel_arrays = {}~
+- Inside source: true
+*** True Line Result
+ @pixel_arrays = {}
** Processing line: ~ @all_tests = []~
- Inside source: true
*** True Line Result
@@ -88431,6 +90331,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
@wizards = Wizards.new
+** Processing line: ~ @layout = GTK::Layout.new @grid.w, @grid.h~
+- Inside source: true
+*** True Line Result
+ @layout = GTK::Layout.new @grid.w, @grid.h
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -88543,6 +90447,86 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ def clear_pixel_arrays~
+- Inside source: true
+*** True Line Result
+ def clear_pixel_arrays
+** Processing line: ~ pixel_arrays_clear~
+- Inside source: true
+*** True Line Result
+ pixel_arrays_clear
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def pixel_arrays_clear~
+- Inside source: true
+*** True Line Result
+ def pixel_arrays_clear
+** Processing line: ~ @pixel_arrays = {}~
+- Inside source: true
+*** True Line Result
+ @pixel_arrays = {}
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def pixel_arrays~
+- Inside source: true
+*** True Line Result
+ def pixel_arrays
+** Processing line: ~ @pixel_arrays~
+- Inside source: true
+*** True Line Result
+ @pixel_arrays
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def pixel_array name~
+- Inside source: true
+*** True Line Result
+ def pixel_array name
+** Processing line: ~ name = name.to_s~
+- Inside source: true
+*** True Line Result
+ name = name.to_s
+** Processing line: ~ if !@pixel_arrays[name]~
+- Inside source: true
+*** True Line Result
+ if !@pixel_arrays[name]
+** Processing line: ~ @pixel_arrays[name] = PixelArray.new~
+- Inside source: true
+*** True Line Result
+ @pixel_arrays[name] = PixelArray.new
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ @pixel_arrays[name]~
+- Inside source: true
+*** True Line Result
+ @pixel_arrays[name]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ def clear_render_targets~
- Inside source: true
*** True Line Result
@@ -89667,6 +91651,22 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ def pixel_arrays~
+- Inside source: true
+*** True Line Result
+ def pixel_arrays
+** Processing line: ~ args.pixel_arrays~
+- Inside source: true
+*** True Line Result
+ args.pixel_arrays
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ def geometry~
- Inside source: true
*** True Line Result
@@ -89999,6 +91999,14 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
class Console
+** Processing line: ~ include ConsoleDeprecated~
+- Inside source: true
+*** True Line Result
+ include ConsoleDeprecated
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ attr_accessor :show_reason, :log, :logo, :background_color,~
- Inside source: true
*** True Line Result
@@ -90279,10 +92287,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
-** Processing line: ~ def addsprite obj~
+** Processing line: ~ def add_sprite obj~
- Inside source: true
*** True Line Result
- def addsprite obj
+ def add_sprite obj
** Processing line: ~ @log_invocation_count += 1~
- Inside source: true
*** True Line Result
@@ -90359,18 +92367,18 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
if obj.is_a? Hash
-** Processing line: ~ addsprite obj~
+** Processing line: ~ add_sprite obj~
- Inside source: true
*** True Line Result
- addsprite obj
+ add_sprite obj
** Processing line: ~ else~
- Inside source: true
*** True Line Result
else
-** Processing line: ~ addtext obj~
+** Processing line: ~ add_text obj~
- Inside source: true
*** True Line Result
- addtext obj
+ add_text obj
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -90387,10 +92395,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
-** Processing line: ~ def addtext obj~
+** Processing line: ~ def add_text obj~
- Inside source: true
*** True Line Result
- def addtext obj
+ def add_text obj
** Processing line: ~ @last_log_lines_count ||= 1~
- Inside source: true
*** True Line Result
@@ -90883,10 +92891,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
dwim_duration = 5.seconds
-** Processing line: ~ addtext "* toast :#{id}"~
+** Processing line: ~ add_text "* toast :#{id}"~
- Inside source: true
*** True Line Result
- addtext "* toast :#{id}"
+ add_text "* toast :#{id}"
** Processing line: ~ puts "* TOAST: :#{id}"~
- Inside source: true
*** True Line Result
@@ -90903,10 +92911,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
dwim_duration += lines.length.seconds
-** Processing line: ~ addtext "** #{message}"~
+** Processing line: ~ add_text "** #{message}"~
- Inside source: true
*** True Line Result
- addtext "** #{message}"
+ add_text "** #{message}"
** Processing line: ~ puts "** #{message}"~
- Inside source: true
*** True Line Result
@@ -91775,6 +93783,22 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
end
+** Processing line: ~ elsif args.inputs.keyboard.key_down.left~
+- Inside source: true
+*** True Line Result
+ elsif args.inputs.keyboard.key_down.left
+** Processing line: ~ prompt.move_cursor_left~
+- Inside source: true
+*** True Line Result
+ prompt.move_cursor_left
+** Processing line: ~ elsif args.inputs.keyboard.key_down.right~
+- Inside source: true
+*** True Line Result
+ elsif args.inputs.keyboard.key_down.right
+** Processing line: ~ prompt.move_cursor_right~
+- Inside source: true
+*** True Line Result
+ prompt.move_cursor_right
** Processing line: ~ elsif inputs_scroll_up_full? args~
- Inside source: true
*** True Line Result
@@ -94059,6 +96083,18 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ @cursor_position = 0~
+- Inside source: true
+*** True Line Result
+ @cursor_position = 0
+** Processing line: ~ update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ update_cursor_position_px
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ @last_autocomplete_prefix = nil~
- Inside source: true
*** True Line Result
@@ -94075,14 +96111,58 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ def update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ def update_cursor_position_px
+** Processing line: ~ @cursor_position_px = ($gtk.calcstringbox (@prompt + @current_input_str[0...@cursor_position]), @font_style.size_enum, @font_style.font).x~
+- Inside source: true
+*** True Line Result
+ @cursor_position_px = ($gtk.calcstringbox (@prompt + @current_input_str[0...@cursor_position]), @font_style.size_enum, @font_style.font).x
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def current_input_str=(str)~
+- Inside source: true
+*** True Line Result
+ def current_input_str=(str)
+** Processing line: ~ @current_input_str = str~
+- Inside source: true
+*** True Line Result
+ @current_input_str = str
+** Processing line: ~ @cursor_position = str.length~
+- Inside source: true
+*** True Line Result
+ @cursor_position = str.length
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ def <<(str)~
- Inside source: true
*** True Line Result
def <<(str)
-** Processing line: ~ @current_input_str << str~
+** Processing line: ~ @current_input_str = @current_input_str[0...@cursor_position] + str + @current_input_str[@cursor_position..-1]~
+- Inside source: true
+*** True Line Result
+ @current_input_str = @current_input_str[0...@cursor_position] + str + @current_input_str[@cursor_position..-1]
+** Processing line: ~ @cursor_position += str.length~
- Inside source: true
*** True Line Result
- @current_input_str << str
+ @cursor_position += str.length
+** Processing line: ~ update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ update_cursor_position_px
** Processing line: ~ @current_input_changed_at = Kernel.global_tick_count~
- Inside source: true
*** True Line Result
@@ -94103,10 +96183,26 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
def backspace
-** Processing line: ~ @current_input_str.chop!~
+** Processing line: ~ return if current_input_str.length.zero? || @cursor_position.zero?~
- Inside source: true
*** True Line Result
- @current_input_str.chop!
+ return if current_input_str.length.zero? || @cursor_position.zero?
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @current_input_str = @current_input_str[0...(@cursor_position - 1)] + @current_input_str[@cursor_position..-1]~
+- Inside source: true
+*** True Line Result
+ @current_input_str = @current_input_str[0...(@cursor_position - 1)] + @current_input_str[@cursor_position..-1]
+** Processing line: ~ @cursor_position -= 1~
+- Inside source: true
+*** True Line Result
+ @cursor_position -= 1
+** Processing line: ~ update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ update_cursor_position_px
** Processing line: ~ reset_autocomplete~
- Inside source: true
*** True Line Result
@@ -94119,6 +96215,46 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ def move_cursor_left~
+- Inside source: true
+*** True Line Result
+ def move_cursor_left
+** Processing line: ~ @cursor_position -= 1 if @cursor_position > 0~
+- Inside source: true
+*** True Line Result
+ @cursor_position -= 1 if @cursor_position > 0
+** Processing line: ~ update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ update_cursor_position_px
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def move_cursor_right~
+- Inside source: true
+*** True Line Result
+ def move_cursor_right
+** Processing line: ~ @cursor_position += 1 if @cursor_position < current_input_str.length~
+- Inside source: true
+*** True Line Result
+ @cursor_position += 1 if @cursor_position < current_input_str.length
+** Processing line: ~ update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ update_cursor_position_px
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ def clear~
- Inside source: true
*** True Line Result
@@ -94127,6 +96263,14 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
@current_input_str = ''
+** Processing line: ~ @cursor_position = 0~
+- Inside source: true
+*** True Line Result
+ @cursor_position = 0
+** Processing line: ~ update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ update_cursor_position_px
** Processing line: ~ reset_autocomplete~
- Inside source: true
*** True Line Result
@@ -94199,10 +96343,22 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
self.current_input_str = display_autocomplete_candidate(candidate)
+** Processing line: ~ update_cursor_position_px~
+- Inside source: true
+*** True Line Result
+ update_cursor_position_px
** Processing line: ~ end~
- Inside source: true
*** True Line Result
end
+** Processing line: ~ rescue Exception => e~
+- Inside source: true
+*** True Line Result
+ rescue Exception => e
+** Processing line: ~ puts "* BUG: Tab autocompletion failed. Let us know about this.\n#{e}"~
+- Inside source: true
+*** True Line Result
+ puts "* BUG: Tab autocompletion failed. Let us know about this.\n#{e}"
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -94435,10 +96591,66 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
args.outputs.reserved << font_style.label(x: x, y: y, text: "#{@prompt}#{current_input_str}", color: @text_color)
-** Processing line: ~ args.outputs.reserved << font_style.label(x: x - 2, y: y + 3, text: (" " * (@prompt.length + current_input_str.length)) + "|", color: @cursor_color)~
+** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 0.5,~
+- Inside source: true
+*** True Line Result
+ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 0.5,
+** Processing line: ~ y: y + 5,~
+- Inside source: true
+*** True Line Result
+ y: y + 5,
+** Processing line: ~ x2: x + @cursor_position_px + 0.5,~
+- Inside source: true
+*** True Line Result
+ x2: x + @cursor_position_px + 0.5,
+** Processing line: ~ y2: y + @font_style.letter_size.y + 5)~
+- Inside source: true
+*** True Line Result
+ y2: y + @font_style.letter_size.y + 5)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 1,~
+- Inside source: true
+*** True Line Result
+ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 1,
+** Processing line: ~ y: y + 5,~
- Inside source: true
*** True Line Result
- args.outputs.reserved << font_style.label(x: x - 2, y: y + 3, text: (" " * (@prompt.length + current_input_str.length)) + "|", color: @cursor_color)
+ y: y + 5,
+** Processing line: ~ x2: x + @cursor_position_px + 1,~
+- Inside source: true
+*** True Line Result
+ x2: x + @cursor_position_px + 1,
+** Processing line: ~ y2: y + @font_style.letter_size.y + 5)~
+- Inside source: true
+*** True Line Result
+ y2: y + @font_style.letter_size.y + 5)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # debugging rectangle for string~
+- Inside source: true
+*** True Line Result
+ # debugging rectangle for string
+** Processing line: ~ # args.outputs.reserved << (@cursor_color.to_h.merge x: x,~
+- Inside source: true
+*** True Line Result
+ # args.outputs.reserved << (@cursor_color.to_h.merge x: x,
+** Processing line: ~ # y: y + 5,~
+- Inside source: true
+*** True Line Result
+ # y: y + 5,
+** Processing line: ~ # w: @cursor_position_px,~
+- Inside source: true
+*** True Line Result
+ # w: @cursor_position_px,
+** Processing line: ~ # h: @font_style.letter_size.y).border~
+- Inside source: true
+*** True Line Result
+ # h: @font_style.letter_size.y).border
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -102319,6 +104531,218 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # Provides access to multitouch input~
+- Inside source: true
+*** True Line Result
+ # Provides access to multitouch input
+** Processing line: ~ #~
+- Inside source: true
+*** True Line Result
+ #
+** Processing line: ~ # @gtk~
+- Inside source: true
+*** True Line Result
+ # @gtk
+** Processing line: ~ class FingerTouch~
+- Inside source: true
+*** True Line Result
+ class FingerTouch
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # @gtk~
+- Inside source: true
+*** True Line Result
+ # @gtk
+** Processing line: ~ attr_accessor :moved,~
+- Inside source: true
+*** True Line Result
+ attr_accessor :moved,
+** Processing line: ~ :moved_at,~
+- Inside source: true
+*** True Line Result
+ :moved_at,
+** Processing line: ~ :global_moved_at,~
+- Inside source: true
+*** True Line Result
+ :global_moved_at,
+** Processing line: ~ :touch_order,~
+- Inside source: true
+*** True Line Result
+ :touch_order,
+** Processing line: ~ :x, :y~
+- Inside source: true
+*** True Line Result
+ :x, :y
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @moved = false~
+- Inside source: true
+*** True Line Result
+ @moved = false
+** Processing line: ~ @moved_at = 0~
+- Inside source: true
+*** True Line Result
+ @moved_at = 0
+** Processing line: ~ @global_moved_at = 0~
+- Inside source: true
+*** True Line Result
+ @global_moved_at = 0
+** Processing line: ~ @touch_order = 0~
+- Inside source: true
+*** True Line Result
+ @touch_order = 0
+** Processing line: ~ @x = 0~
+- Inside source: true
+*** True Line Result
+ @x = 0
+** Processing line: ~ @y = 0~
+- Inside source: true
+*** True Line Result
+ @y = 0
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def point~
+- Inside source: true
+*** True Line Result
+ def point
+** Processing line: ~ [@x, @y].point~
+- Inside source: true
+*** True Line Result
+ [@x, @y].point
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inside_rect? rect~
+- Inside source: true
+*** True Line Result
+ def inside_rect? rect
+** Processing line: ~ point.inside_rect? rect~
+- Inside source: true
+*** True Line Result
+ point.inside_rect? rect
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inside_circle? center, radius~
+- Inside source: true
+*** True Line Result
+ def inside_circle? center, radius
+** Processing line: ~ point.point_inside_circle? center, radius~
+- Inside source: true
+*** True Line Result
+ point.point_inside_circle? center, radius
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ alias_method :position, :point~
+- Inside source: true
+*** True Line Result
+ alias_method :position, :point
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ result = {}~
+- Inside source: true
+*** True Line Result
+ result = {}
+** Processing line: ~ result[:x] = @x~
+- Inside source: true
+*** True Line Result
+ result[:x] = @x
+** Processing line: ~ result[:y] = @y~
+- Inside source: true
+*** True Line Result
+ result[:y] = @y
+** Processing line: ~ result[:touch_order] = @touch_order~
+- Inside source: true
+*** True Line Result
+ result[:touch_order] = @touch_order
+** Processing line: ~ result[:moved] = @moved~
+- Inside source: true
+*** True Line Result
+ result[:moved] = @moved
+** Processing line: ~ result[:moved_at] = @moved_at~
+- Inside source: true
+*** True Line Result
+ result[:moved_at] = @moved_at
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ result~
+- Inside source: true
+*** True Line Result
+ result
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ alias_method :inspect, :to_s~
+- Inside source: true
+*** True Line Result
+ alias_method :inspect, :to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -102399,6 +104823,26 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ # @return {FingerTouch}~
+- Inside source: true
+*** True Line Result
+ # @return {FingerTouch}
+** Processing line: ~ # @gtk~
+- Inside source: true
+*** True Line Result
+ # @gtk
+** Processing line: ~ attr_reader :touch~
+- Inside source: true
+*** True Line Result
+ attr_reader :touch
+** Processing line: ~ attr_accessor :finger_one, :finger_two~
+- Inside source: true
+*** True Line Result
+ attr_accessor :finger_one, :finger_two
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ # @gtk~
- Inside source: true
*** True Line Result
@@ -102427,6 +104871,18 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
@mouse = Mouse.new
+** Processing line: ~ @touch = {}~
+- Inside source: true
+*** True Line Result
+ @touch = {}
+** Processing line: ~ @finger_one = nil~
+- Inside source: true
+*** True Line Result
+ @finger_one = nil
+** Processing line: ~ @finger_two = nil~
+- Inside source: true
+*** True Line Result
+ @finger_two = nil
** Processing line: ~ @text = []~
- Inside source: true
*** True Line Result
@@ -102727,6 +105183,18 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
@controllers.each(&:clear)
+** Processing line: ~ @touch.clear~
+- Inside source: true
+*** True Line Result
+ @touch.clear
+** Processing line: ~ @finger_one = nil~
+- Inside source: true
+*** True Line Result
+ @finger_one = nil
+** Processing line: ~ @finger_two = nil~
+- Inside source: true
+*** True Line Result
+ @finger_two = nil
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -102795,6 +105263,5546 @@ Follows is a source code listing for all files that have been open sourced. This
- End of paragraph detected.
*** True Line Result
+** Processing line: ~* ios_wizard.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* ios_wizard.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./dragon/ios_wizard.rb~
+- Inside source: true
+*** True Line Result
+ # ./dragon/ios_wizard.rb
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+- Inside source: true
+*** True Line Result
+ # Copyright 2019 DragonRuby LLC
+** Processing line: ~ # MIT License~
+- Inside source: true
+*** True Line Result
+ # MIT License
+** Processing line: ~ # ios_wizard.rb has been released under MIT (*only this file*).~
+- Inside source: true
+*** True Line Result
+ # ios_wizard.rb has been released under MIT (*only this file*).
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class WizardException < Exception~
+- Inside source: true
+*** True Line Result
+ class WizardException < Exception
+** Processing line: ~ attr_accessor :console_primitives~
+- Inside source: true
+*** True Line Result
+ attr_accessor :console_primitives
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize *console_primitives~
+- Inside source: true
+*** True Line Result
+ def initialize *console_primitives
+** Processing line: ~ @console_primitives = console_primitives~
+- Inside source: true
+*** True Line Result
+ @console_primitives = console_primitives
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class IOSWizard~
+- Inside source: true
+*** True Line Result
+ class IOSWizard
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @doctor_executed_at = 0~
+- Inside source: true
+*** True Line Result
+ @doctor_executed_at = 0
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def relative_path~
+- Inside source: true
+*** True Line Result
+ def relative_path
+** Processing line: ~ (File.dirname $gtk.binary_path)~
+- Inside source: true
+*** True Line Result
+ (File.dirname $gtk.binary_path)
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def steps~
+- Inside source: true
+*** True Line Result
+ def steps
+** Processing line: ~ [~
+- Inside source: true
+*** True Line Result
+ [
+** Processing line: ~ :check_for_xcode,~
+- Inside source: true
+*** True Line Result
+ :check_for_xcode,
+** Processing line: ~ :check_for_brew,~
+- Inside source: true
+*** True Line Result
+ :check_for_brew,
+** Processing line: ~ :check_for_certs,~
+- Inside source: true
+*** True Line Result
+ :check_for_certs,
+** Processing line: ~ :check_for_device,~
+- Inside source: true
+*** True Line Result
+ :check_for_device,
+** Processing line: ~ :check_for_dev_profile,~
+- Inside source: true
+*** True Line Result
+ :check_for_dev_profile,
+** Processing line: ~ :determine_app_name,~
+- Inside source: true
+*** True Line Result
+ :determine_app_name,
+** Processing line: ~ :determine_app_id,~
+- Inside source: true
+*** True Line Result
+ :determine_app_id,
+** Processing line: ~ :blow_away_temp,~
+- Inside source: true
+*** True Line Result
+ :blow_away_temp,
+** Processing line: ~ :stage_app,~
+- Inside source: true
+*** True Line Result
+ :stage_app,
+** Processing line: ~ :write_info_plist,~
+- Inside source: true
+*** True Line Result
+ :write_info_plist,
+** Processing line: ~ :write_entitlements_plist,~
+- Inside source: true
+*** True Line Result
+ :write_entitlements_plist,
+** Processing line: ~ :code_sign,~
+- Inside source: true
+*** True Line Result
+ :code_sign,
+** Processing line: ~ :create_ipa,~
+- Inside source: true
+*** True Line Result
+ :create_ipa,
+** Processing line: ~ :deploy,~
+- Inside source: true
+*** True Line Result
+ :deploy,
+** Processing line: ~ ]~
+- Inside source: true
+*** True Line Result
+ ]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def get_reserved_sprite png~
+- Inside source: true
+*** True Line Result
+ def get_reserved_sprite png
+** Processing line: ~ sprite_path = ".dragonruby/sprites/wizards/ios/#{png}"~
+- Inside source: true
+*** True Line Result
+ sprite_path = ".dragonruby/sprites/wizards/ios/#{png}"
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if !$gtk.ivar :rcb_release_mode~
+- Inside source: true
+*** True Line Result
+ if !$gtk.ivar :rcb_release_mode
+** Processing line: ~ sprite_path = "deploy_template/#{sprite_path}"~
+- Inside source: true
+*** True Line Result
+ sprite_path = "deploy_template/#{sprite_path}"
+** Processing line: ~ $gtk.reset_sprite sprite_path~
+- Inside source: true
+*** True Line Result
+ $gtk.reset_sprite sprite_path
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if !$gtk.read_file sprite_path~
+- Inside source: true
+*** True Line Result
+ if !$gtk.read_file sprite_path
+** Processing line: ~ log_error "png #{png} not found."~
+- Inside source: true
+*** True Line Result
+ log_error "png #{png} not found."
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sprite_path~
+- Inside source: true
+*** True Line Result
+ sprite_path
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def start~
+- Inside source: true
+*** True Line Result
+ def start
+** Processing line: ~ @certificate_name = nil~
+- Inside source: true
+*** True Line Result
+ @certificate_name = nil
+** Processing line: ~ init_wizard_status~
+- Inside source: true
+*** True Line Result
+ init_wizard_status
+** Processing line: ~ log_info "Starting iOS Wizard so we can deploy to your device."~
+- Inside source: true
+*** True Line Result
+ log_info "Starting iOS Wizard so we can deploy to your device."
+** Processing line: ~ @start_at = Kernel.global_tick_count~
+- Inside source: true
+*** True Line Result
+ @start_at = Kernel.global_tick_count
+** Processing line: ~ steps.each do |m|~
+- Inside source: true
+*** True Line Result
+ steps.each do |m|
+** Processing line: ~ begin~
+- Inside source: true
+*** True Line Result
+ begin
+** Processing line: ~ result = (send m) || :success if @wizard_status[m][:result] != :success~
+- Inside source: true
+*** True Line Result
+ result = (send m) || :success if @wizard_status[m][:result] != :success
+** Processing line: ~ @wizard_status[m][:result] = result~
+- Inside source: true
+*** True Line Result
+ @wizard_status[m][:result] = result
+** Processing line: ~ rescue Exception => e~
+- Inside source: true
+*** True Line Result
+ rescue Exception => e
+** Processing line: ~ if e.is_a? WizardException~
+- Inside source: true
+*** True Line Result
+ if e.is_a? WizardException
+** Processing line: ~ $console.log.clear~
+- Inside source: true
+*** True Line Result
+ $console.log.clear
+** Processing line: ~ $console.archived_log.clear~
+- Inside source: true
+*** True Line Result
+ $console.archived_log.clear
+** Processing line: ~ log "=" * $console.console_text_width~
+- Inside source: true
+*** True Line Result
+ log "=" * $console.console_text_width
+** Processing line: ~ e.console_primitives.each do |p|~
+- Inside source: true
+*** True Line Result
+ e.console_primitives.each do |p|
+** Processing line: ~ $console.add_primitive p~
+- Inside source: true
+*** True Line Result
+ $console.add_primitive p
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ log "=" * $console.console_text_width~
+- Inside source: true
+*** True Line Result
+ log "=" * $console.console_text_width
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ log_error "Step #{m} failed."~
+- Inside source: true
+*** True Line Result
+ log_error "Step #{m} failed."
+** Processing line: ~ log_error e.to_s~
+- Inside source: true
+*** True Line Result
+ log_error e.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ $console.set_command "$wizards.ios.start"~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.ios.start"
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ break~
+- Inside source: true
+*** True Line Result
+ break
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ return nil~
+- Inside source: true
+*** True Line Result
+ return nil
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def always_fail~
+- Inside source: true
+*** True Line Result
+ def always_fail
+** Processing line: ~ return false if $gtk.ivar :rcb_release_mode~
+- Inside source: true
+*** True Line Result
+ return false if $gtk.ivar :rcb_release_mode
+** Processing line: ~ return true~
+- Inside source: true
+*** True Line Result
+ return true
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def check_for_xcode~
+- Inside source: true
+*** True Line Result
+ def check_for_xcode
+** Processing line: ~ if !cli_app_exist?(xcodebuild_cli_app)~
+- Inside source: true
+*** True Line Result
+ if !cli_app_exist?(xcodebuild_cli_app)
+** Processing line: ~ raise WizardException.new(~
+- Inside source: true
+*** True Line Result
+ raise WizardException.new(
+** Processing line: ~ "* You need Xcode to use $wizards.ios.start.",~
+- Inside source: true
+*** True Line Result
+ "* You need Xcode to use $wizards.ios.start.",
+** Processing line: ~ { w: 75, h: 75, path: get_reserved_sprite("xcode.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 75, h: 75, path: get_reserved_sprite("xcode.png") },
+** Processing line: ~ "** 1. Go to http://developer.apple.com and register.",~
+- Inside source: true
+*** True Line Result
+ "** 1. Go to http://developer.apple.com and register.",
+** Processing line: ~ "** 2. Download Xcode 11.3+ from http://developer.apple.com/downloads.",~
+- Inside source: true
+*** True Line Result
+ "** 2. Download Xcode 11.3+ from http://developer.apple.com/downloads.",
+** Processing line: ~ " NOTE: DO NOT install Xcode from the App Store. Use the link above.",~
+- Inside source: true
+*** True Line Result
+ " NOTE: DO NOT install Xcode from the App Store. Use the link above.",
+** Processing line: ~ { w: 700, h: 359, path: get_reserved_sprite("xcode-downloads.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 359, path: get_reserved_sprite("xcode-downloads.png") },
+** Processing line: ~ "** 3. After installing. Open up Xcode to accept the EULA."~
+- Inside source: true
+*** True Line Result
+ "** 3. After installing. Open up Xcode to accept the EULA."
+** Processing line: ~ )~
+- Inside source: true
+*** True Line Result
+ )
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def check_for_brew~
+- Inside source: true
+*** True Line Result
+ def check_for_brew
+** Processing line: ~ if !cli_app_exist?('brew')~
+- Inside source: true
+*** True Line Result
+ if !cli_app_exist?('brew')
+** Processing line: ~ raise WizardException.new(~
+- Inside source: true
+*** True Line Result
+ raise WizardException.new(
+** Processing line: ~ "* You need to install Brew.",~
+- Inside source: true
+*** True Line Result
+ "* You need to install Brew.",
+** Processing line: ~ { w: 700, h: 388, path: get_reserved_sprite("brew.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 388, path: get_reserved_sprite("brew.png") },
+** Processing line: ~ "** 1. Go to http://brew.sh.",~
+- Inside source: true
+*** True Line Result
+ "** 1. Go to http://brew.sh.",
+** Processing line: ~ "** 2. Copy the command that starts with `/bin/bash -c` on the site.",~
+- Inside source: true
+*** True Line Result
+ "** 2. Copy the command that starts with `/bin/bash -c` on the site.",
+** Processing line: ~ "** 3. Open Terminal and run the command you copied from the website.",~
+- Inside source: true
+*** True Line Result
+ "** 3. Open Terminal and run the command you copied from the website.",
+** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },
+** Processing line: ~ )~
+- Inside source: true
+*** True Line Result
+ )
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def init_wizard_status~
+- Inside source: true
+*** True Line Result
+ def init_wizard_status
+** Processing line: ~ @wizard_status = {}~
+- Inside source: true
+*** True Line Result
+ @wizard_status = {}
+** Processing line: ~ steps.each do |m|~
+- Inside source: true
+*** True Line Result
+ steps.each do |m|
+** Processing line: ~ @wizard_status[m] = { result: :not_started }~
+- Inside source: true
+*** True Line Result
+ @wizard_status[m] = { result: :not_started }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ previous_step = nil~
+- Inside source: true
+*** True Line Result
+ previous_step = nil
+** Processing line: ~ next_step = nil~
+- Inside source: true
+*** True Line Result
+ next_step = nil
+** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~
+- Inside source: true
+*** True Line Result
+ steps.each_cons(2) do |current_step, next_step|
+** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~
+- Inside source: true
+*** True Line Result
+ @wizard_status[current_step][:next_step] = next_step
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~
+- Inside source: true
+*** True Line Result
+ steps.reverse.each_cons(2) do |current_step, previous_step|
+** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~
+- Inside source: true
+*** True Line Result
+ @wizard_status[current_step][:previous_step] = previous_step
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def restart~
+- Inside source: true
+*** True Line Result
+ def restart
+** Processing line: ~ init_wizard_status~
+- Inside source: true
+*** True Line Result
+ init_wizard_status
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def check_for_dev_profile~
+- Inside source: true
+*** True Line Result
+ def check_for_dev_profile
+** Processing line: ~ if !($gtk.read_file 'profiles/development.mobileprovision')~
+- Inside source: true
+*** True Line Result
+ if !($gtk.read_file 'profiles/development.mobileprovision')
+** Processing line: ~ $gtk.system "mkdir -p #{relative_path}/profiles"~
+- Inside source: true
+*** True Line Result
+ $gtk.system "mkdir -p #{relative_path}/profiles"
+** Processing line: ~ $gtk.system "open #{relative_path}/profiles"~
+- Inside source: true
+*** True Line Result
+ $gtk.system "open #{relative_path}/profiles"
+** Processing line: ~ $gtk.system "echo Download the mobile provisioning profile and place it here with the name development.mobileprovision > #{relative_path}/profiles/README.txt"~
+- Inside source: true
+*** True Line Result
+ $gtk.system "echo Download the mobile provisioning profile and place it here with the name development.mobileprovision > #{relative_path}/profiles/README.txt"
+** Processing line: ~ raise WizardException.new(~
+- Inside source: true
+*** True Line Result
+ raise WizardException.new(
+** Processing line: ~ "* I didn't find a mobile provision.",~
+- Inside source: true
+*** True Line Result
+ "* I didn't find a mobile provision.",
+** Processing line: ~ "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".",~
+- Inside source: true
+*** True Line Result
+ "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".",
+** Processing line: ~ "** 2. Add an App Identifier.",~
+- Inside source: true
+*** True Line Result
+ "** 2. Add an App Identifier.",
+** Processing line: ~ "** 3. Select the App IDs option from the list.",~
+- Inside source: true
+*** True Line Result
+ "** 3. Select the App IDs option from the list.",
+** Processing line: ~ { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") },
+** Processing line: ~ "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.",~
+- Inside source: true
+*** True Line Result
+ "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.",
+** Processing line: ~ { w: 365, h: 69, path: get_reserved_sprite("device-link.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 365, h: 69, path: get_reserved_sprite("device-link.png") },
+** Processing line: ~ "** 5. Create a Profile. Associate your certs, id, and device.",~
+- Inside source: true
+*** True Line Result
+ "** 5. Create a Profile. Associate your certs, id, and device.",
+** Processing line: ~ { w: 300, h: 122, path: get_reserved_sprite("profiles.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 300, h: 122, path: get_reserved_sprite("profiles.png") },
+** Processing line: ~ "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.",~
+- Inside source: true
+*** True Line Result
+ "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.",
+** Processing line: ~ { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") },
+** Processing line: ~ )~
+- Inside source: true
+*** True Line Result
+ )
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def determine_app_name~
+- Inside source: true
+*** True Line Result
+ def determine_app_name
+** Processing line: ~ @app_name = dev_profile_xml[:children].first[:children].first[:children][1][:children].first[:data]~
+- Inside source: true
+*** True Line Result
+ @app_name = dev_profile_xml[:children].first[:children].first[:children][1][:children].first[:data]
+** Processing line: ~ log_info "App name is: #{@app_name}."~
+- Inside source: true
+*** True Line Result
+ log_info "App name is: #{@app_name}."
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def dev_profile_xml~
+- Inside source: true
+*** True Line Result
+ def dev_profile_xml
+** Processing line: ~ xml = $gtk.read_file 'profiles/development.mobileprovision'~
+- Inside source: true
+*** True Line Result
+ xml = $gtk.read_file 'profiles/development.mobileprovision'
+** Processing line: ~ scrubbed = xml.each_line.map do |l|~
+- Inside source: true
+*** True Line Result
+ scrubbed = xml.each_line.map do |l|
+** Processing line: ~ if l.strip.start_with? "<"~
+- Inside source: true
+*** True Line Result
+ if l.strip.start_with? "<"
+** Processing line: ~ if l.start_with? '</plist>'~
+- Inside source: true
+*** True Line Result
+ if l.start_with? '</plist>'
+** Processing line: ~ '</plist>'~
+- Inside source: true
+*** True Line Result
+ '</plist>'
+** Processing line: ~ elsif l.include? "Apple Inc."~
+- Inside source: true
+*** True Line Result
+ elsif l.include? "Apple Inc."
+** Processing line: ~ nil~
+- Inside source: true
+*** True Line Result
+ nil
+** Processing line: ~ elsif l.include? '<data>'~
+- Inside source: true
+*** True Line Result
+ elsif l.include? '<data>'
+** Processing line: ~ nil~
+- Inside source: true
+*** True Line Result
+ nil
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ l~
+- Inside source: true
+*** True Line Result
+ l
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ nil~
+- Inside source: true
+*** True Line Result
+ nil
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end.reject { |l| !l }.join~
+- Inside source: true
+*** True Line Result
+ end.reject { |l| !l }.join
+** Processing line: ~ $gtk.parse_xml scrubbed~
+- Inside source: true
+*** True Line Result
+ $gtk.parse_xml scrubbed
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def determine_app_id~
+- Inside source: true
+*** True Line Result
+ def determine_app_id
+** Processing line: ~ # lol~
+- Inside source: true
+*** True Line Result
+ # lol
+** Processing line: ~ @app_id = dev_profile_xml[:children].first[:children].first[:children][13][:children][1][:children].first[:data]~
+- Inside source: true
+*** True Line Result
+ @app_id = dev_profile_xml[:children].first[:children].first[:children][13][:children][1][:children].first[:data]
+** Processing line: ~ log_info "App Identifier is set to : #{@app_id}"~
+- Inside source: true
+*** True Line Result
+ log_info "App Identifier is set to : #{@app_id}"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_app_name name~
+- Inside source: true
+*** True Line Result
+ def set_app_name name
+** Processing line: ~ @app_name = name~
+- Inside source: true
+*** True Line Result
+ @app_name = name
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_dev_profile path~
+- Inside source: true
+*** True Line Result
+ def set_dev_profile path
+** Processing line: ~ if !$gtk.read_file path~
+- Inside source: true
+*** True Line Result
+ if !$gtk.read_file path
+** Processing line: ~ log_error "I couldn't find a development profile at #{path}."~
+- Inside source: true
+*** True Line Result
+ log_error "I couldn't find a development profile at #{path}."
+** Processing line: ~ ask_for_dev_profile~
+- Inside source: true
+*** True Line Result
+ ask_for_dev_profile
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ @dev_profile_path = path~
+- Inside source: true
+*** True Line Result
+ @dev_profile_path = path
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def blow_away_temp~
+- Inside source: true
+*** True Line Result
+ def blow_away_temp
+** Processing line: ~ sh "rm -rf #{tmp_directory}"~
+- Inside source: true
+*** True Line Result
+ sh "rm -rf #{tmp_directory}"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def stage_app~
+- Inside source: true
+*** True Line Result
+ def stage_app
+** Processing line: ~ log_info "Staging."~
+- Inside source: true
+*** True Line Result
+ log_info "Staging."
+** Processing line: ~ sh "mkdir -p #{tmp_directory}"~
+- Inside source: true
+*** True Line Result
+ sh "mkdir -p #{tmp_directory}"
+** Processing line: ~ sh "cp -R #{relative_path}/dragonruby-ios.app \"#{tmp_directory}/#{@app_name}.app\""~
+- Inside source: true
+*** True Line Result
+ sh "cp -R #{relative_path}/dragonruby-ios.app \"#{tmp_directory}/#{@app_name}.app\""
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_app_id id~
+- Inside source: true
+*** True Line Result
+ def set_app_id id
+** Processing line: ~ log_info = "App Id set to: #{id}"~
+- Inside source: true
+*** True Line Result
+ log_info = "App Id set to: #{id}"
+** Processing line: ~ @app_id = id~
+- Inside source: true
+*** True Line Result
+ @app_id = id
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def check_for_device~
+- Inside source: true
+*** True Line Result
+ def check_for_device
+** Processing line: ~ log_info "Looking for device."~
+- Inside source: true
+*** True Line Result
+ log_info "Looking for device."
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if !cli_app_exist?(idevice_id_cli_app)~
+- Inside source: true
+*** True Line Result
+ if !cli_app_exist?(idevice_id_cli_app)
+** Processing line: ~ raise WizardException.new(~
+- Inside source: true
+*** True Line Result
+ raise WizardException.new(
+** Processing line: ~ "* It doesn't look like you have the libimobiledevice iOS protocol library installed.",~
+- Inside source: true
+*** True Line Result
+ "* It doesn't look like you have the libimobiledevice iOS protocol library installed.",
+** Processing line: ~ "** 1. Open Terminal.",~
+- Inside source: true
+*** True Line Result
+ "** 1. Open Terminal.",
+** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },
+** Processing line: ~ "** 2. Run: `brew install libimobiledevice`.",~
+- Inside source: true
+*** True Line Result
+ "** 2. Run: `brew install libimobiledevice`.",
+** Processing line: ~ { w: 500, h: 93, path: get_reserved_sprite("brew-install-libimobiledevice.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 500, h: 93, path: get_reserved_sprite("brew-install-libimobiledevice.png") },
+** Processing line: ~ )~
+- Inside source: true
+*** True Line Result
+ )
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if connected_devices.length == 0~
+- Inside source: true
+*** True Line Result
+ if connected_devices.length == 0
+** Processing line: ~ raise WizardException.new("* I couldn't find any connected devices. Connect your iOS device to your Mac and try again.")~
+- Inside source: true
+*** True Line Result
+ raise WizardException.new("* I couldn't find any connected devices. Connect your iOS device to your Mac and try again.")
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @device_id = connected_devices.first~
+- Inside source: true
+*** True Line Result
+ @device_id = connected_devices.first
+** Processing line: ~ log_info "I will be using device with UUID #{@device_id}"~
+- Inside source: true
+*** True Line Result
+ log_info "I will be using device with UUID #{@device_id}"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def check_for_certs~
+- Inside source: true
+*** True Line Result
+ def check_for_certs
+** Processing line: ~ log_info "Attempting to find certificates on your computer."~
+- Inside source: true
+*** True Line Result
+ log_info "Attempting to find certificates on your computer."
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if !cli_app_exist?(security_cli_app)~
+- Inside source: true
+*** True Line Result
+ if !cli_app_exist?(security_cli_app)
+** Processing line: ~ raise WizardException.new(~
+- Inside source: true
+*** True Line Result
+ raise WizardException.new(
+** Processing line: ~ "* It doesn't look like you have #{security_cli_app}.",~
+- Inside source: true
+*** True Line Result
+ "* It doesn't look like you have #{security_cli_app}.",
+** Processing line: ~ "** 1. Open Disk Utility and run First Aid.",~
+- Inside source: true
+*** True Line Result
+ "** 1. Open Disk Utility and run First Aid.",
+** Processing line: ~ { w: 700, h: 148, path: get_reserved_sprite("disk-utility.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 148, path: get_reserved_sprite("disk-utility.png") },
+** Processing line: ~ )~
+- Inside source: true
+*** True Line Result
+ )
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if valid_certs.length == 0~
+- Inside source: true
+*** True Line Result
+ if valid_certs.length == 0
+** Processing line: ~ raise WizardException.new(~
+- Inside source: true
+*** True Line Result
+ raise WizardException.new(
+** Processing line: ~ "* It doesn't look like you have any valid certs installed.",~
+- Inside source: true
+*** True Line Result
+ "* It doesn't look like you have any valid certs installed.",
+** Processing line: ~ "** 1. Open Xcode.",~
+- Inside source: true
+*** True Line Result
+ "** 1. Open Xcode.",
+** Processing line: ~ "** 2. Log into your developer account. Xcode -> Preferences -> Accounts.",~
+- Inside source: true
+*** True Line Result
+ "** 2. Log into your developer account. Xcode -> Preferences -> Accounts.",
+** Processing line: ~ { w: 700, h: 98, path: get_reserved_sprite("login-xcode.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 98, path: get_reserved_sprite("login-xcode.png") },
+** Processing line: ~ "** 3. After loggin in, select Manage Certificates...",~
+- Inside source: true
+*** True Line Result
+ "** 3. After loggin in, select Manage Certificates...",
+** Processing line: ~ { w: 700, h: 115, path: get_reserved_sprite("manage-certificates.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 115, path: get_reserved_sprite("manage-certificates.png") },
+** Processing line: ~ "** 4. Add a certificate for Apple Development.",~
+- Inside source: true
+*** True Line Result
+ "** 4. Add a certificate for Apple Development.",
+** Processing line: ~ { w: 700, h: 217, path: get_reserved_sprite("add-cert.png") },~
+- Inside source: true
+*** True Line Result
+ { w: 700, h: 217, path: get_reserved_sprite("add-cert.png") },
+** Processing line: ~ )~
+- Inside source: true
+*** True Line Result
+ )
+** Processing line: ~ raise "You do not have any Apple development certs on this computer."~
+- Inside source: true
+*** True Line Result
+ raise "You do not have any Apple development certs on this computer."
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @certificate_name = valid_certs.first[:name]~
+- Inside source: true
+*** True Line Result
+ @certificate_name = valid_certs.first[:name]
+** Processing line: ~ log_info "I will be using '#{@certificate_name}' to deploy to your device."~
+- Inside source: true
+*** True Line Result
+ log_info "I will be using '#{@certificate_name}' to deploy to your device."
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def idevice_id_cli_app~
+- Inside source: true
+*** True Line Result
+ def idevice_id_cli_app
+** Processing line: ~ "idevice_id"~
+- Inside source: true
+*** True Line Result
+ "idevice_id"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def security_cli_app~
+- Inside source: true
+*** True Line Result
+ def security_cli_app
+** Processing line: ~ "/usr/bin/security"~
+- Inside source: true
+*** True Line Result
+ "/usr/bin/security"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def xcodebuild_cli_app~
+- Inside source: true
+*** True Line Result
+ def xcodebuild_cli_app
+** Processing line: ~ "xcodebuild"~
+- Inside source: true
+*** True Line Result
+ "xcodebuild"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def valid_certs~
+- Inside source: true
+*** True Line Result
+ def valid_certs
+** Processing line: ~ certs = sh("#{security_cli_app} -q find-identity -p codesigning -v").each_line.map do |l|~
+- Inside source: true
+*** True Line Result
+ certs = sh("#{security_cli_app} -q find-identity -p codesigning -v").each_line.map do |l|
+** Processing line: ~ if l.include?(")") && !l.include?("Developer ID") && l.include?("Development")~
+- Inside source: true
+*** True Line Result
+ if l.include?(")") && !l.include?("Developer ID") && l.include?("Development")
+** Processing line: ~ l.strip~
+- Inside source: true
+*** True Line Result
+ l.strip
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ nil~
+- Inside source: true
+*** True Line Result
+ nil
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end.reject_nil.map do |l|~
+- Inside source: true
+*** True Line Result
+ end.reject_nil.map do |l|
+** Processing line: ~ number, id, name = l.split(' ', 3)~
+- Inside source: true
+*** True Line Result
+ number, id, name = l.split(' ', 3)
+** Processing line: ~ name = name.gsub("\"", "") if name~
+- Inside source: true
+*** True Line Result
+ name = name.gsub("\"", "") if name
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ number: 1,~
+- Inside source: true
+*** True Line Result
+ number: 1,
+** Processing line: ~ id: id,~
+- Inside source: true
+*** True Line Result
+ id: id,
+** Processing line: ~ name: name~
+- Inside source: true
+*** True Line Result
+ name: name
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def connected_devices~
+- Inside source: true
+*** True Line Result
+ def connected_devices
+** Processing line: ~ sh("idevice_id -l").strip.each_line.map do |l|~
+- Inside source: true
+*** True Line Result
+ sh("idevice_id -l").strip.each_line.map do |l|
+** Processing line: ~ l.strip~
+- Inside source: true
+*** True Line Result
+ l.strip
+** Processing line: ~ end.reject { |l| l.length == 0 }~
+- Inside source: true
+*** True Line Result
+ end.reject { |l| l.length == 0 }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def cli_app_exist? app~
+- Inside source: true
+*** True Line Result
+ def cli_app_exist? app
+** Processing line: ~ `which #{app}`.strip.length != 0~
+- Inside source: true
+*** True Line Result
+ `which #{app}`.strip.length != 0
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def write_entitlements_plist~
+- Inside source: true
+*** True Line Result
+ def write_entitlements_plist
+** Processing line: ~ entitlement_plist_string = <<-XML~
+- Inside source: true
+*** True Line Result
+ entitlement_plist_string = <<-XML
+** Processing line: ~ <?xml version="1.0" encoding="UTF-8"?>~
+- Inside source: true
+*** True Line Result
+ <?xml version="1.0" encoding="UTF-8"?>
+** Processing line: ~ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
+- Inside source: true
+*** True Line Result
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+** Processing line: ~ <plist version="1.0">~
+- Inside source: true
+*** True Line Result
+ <plist version="1.0">
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>application-identifier</key>~
+- Inside source: true
+*** True Line Result
+ <key>application-identifier</key>
+** Processing line: ~ <string>:app_id</string>~
+- Inside source: true
+*** True Line Result
+ <string>:app_id</string>
+** Processing line: ~ <key>get-task-allow</key>~
+- Inside source: true
+*** True Line Result
+ <key>get-task-allow</key>
+** Processing line: ~ <true/>~
+- Inside source: true
+*** True Line Result
+ <true/>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ </plist>~
+- Inside source: true
+*** True Line Result
+ </plist>
+** Processing line: ~ XML~
+- Inside source: true
+*** True Line Result
+ XML
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ log_info "Creating Entitlements.plist"~
+- Inside source: true
+*** True Line Result
+ log_info "Creating Entitlements.plist"
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ $gtk.write_file_root "tmp/ios/Entitlements.plist", entitlement_plist_string.gsub(":app_id", @app_id).strip~
+- Inside source: true
+*** True Line Result
+ $gtk.write_file_root "tmp/ios/Entitlements.plist", entitlement_plist_string.gsub(":app_id", @app_id).strip
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sh "/usr/bin/plutil -convert binary1 \"#{tmp_directory}/Entitlements.plist\""~
+- Inside source: true
+*** True Line Result
+ sh "/usr/bin/plutil -convert binary1 \"#{tmp_directory}/Entitlements.plist\""
+** Processing line: ~ sh "/usr/bin/plutil -convert xml1 \"#{tmp_directory}/Entitlements.plist\""~
+- Inside source: true
+*** True Line Result
+ sh "/usr/bin/plutil -convert xml1 \"#{tmp_directory}/Entitlements.plist\""
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @entitlement_plist_written = true~
+- Inside source: true
+*** True Line Result
+ @entitlement_plist_written = true
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def code_sign~
+- Inside source: true
+*** True Line Result
+ def code_sign
+** Processing line: ~ sh "cp #{@dev_profile_path} \"#{app_path}/embedded.mobileprovision\""~
+- Inside source: true
+*** True Line Result
+ sh "cp #{@dev_profile_path} \"#{app_path}/embedded.mobileprovision\""
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ log_info "Signing app with #{@certificate_name}."~
+- Inside source: true
+*** True Line Result
+ log_info "Signing app with #{@certificate_name}."
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sh "/usr/bin/plutil -convert binary1 \"#{app_path}/Info.plist\""~
+- Inside source: true
+*** True Line Result
+ sh "/usr/bin/plutil -convert binary1 \"#{app_path}/Info.plist\""
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/#{@app_name}.app\""~
+- Inside source: true
+*** True Line Result
+ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/#{@app_name}.app\""
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @code_sign_completed = true~
+- Inside source: true
+*** True Line Result
+ @code_sign_completed = true
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def write_info_plist~
+- Inside source: true
+*** True Line Result
+ def write_info_plist
+** Processing line: ~ log_info "Adding Info.plist."~
+- Inside source: true
+*** True Line Result
+ log_info "Adding Info.plist."
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ info_plist_string = <<-XML~
+- Inside source: true
+*** True Line Result
+ info_plist_string = <<-XML
+** Processing line: ~ <?xml version="1.0" encoding="UTF-8"?>~
+- Inside source: true
+*** True Line Result
+ <?xml version="1.0" encoding="UTF-8"?>
+** Processing line: ~ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
+- Inside source: true
+*** True Line Result
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+** Processing line: ~ <plist version="1.0">~
+- Inside source: true
+*** True Line Result
+ <plist version="1.0">
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>NSAppTransportSecurity</key>~
+- Inside source: true
+*** True Line Result
+ <key>NSAppTransportSecurity</key>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>NSAllowsArbitraryLoads</key>~
+- Inside source: true
+*** True Line Result
+ <key>NSAllowsArbitraryLoads</key>
+** Processing line: ~ <true/>~
+- Inside source: true
+*** True Line Result
+ <true/>
+** Processing line: ~ <key>NSExceptionDomains</key>~
+- Inside source: true
+*** True Line Result
+ <key>NSExceptionDomains</key>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>google.com</key>~
+- Inside source: true
+*** True Line Result
+ <key>google.com</key>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>NSExceptionAllowsInsecureHTTPLoads</key>~
+- Inside source: true
+*** True Line Result
+ <key>NSExceptionAllowsInsecureHTTPLoads</key>
+** Processing line: ~ <true/>~
+- Inside source: true
+*** True Line Result
+ <true/>
+** Processing line: ~ <key>NSIncludesSubdomains</key>~
+- Inside source: true
+*** True Line Result
+ <key>NSIncludesSubdomains</key>
+** Processing line: ~ <true/>~
+- Inside source: true
+*** True Line Result
+ <true/>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <key>BuildMachineOSBuild</key>~
+- Inside source: true
+*** True Line Result
+ <key>BuildMachineOSBuild</key>
+** Processing line: ~ <string>19C57</string>~
+- Inside source: true
+*** True Line Result
+ <string>19C57</string>
+** Processing line: ~ <key>CFBundleDevelopmentRegion</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleDevelopmentRegion</key>
+** Processing line: ~ <string>en</string>~
+- Inside source: true
+*** True Line Result
+ <string>en</string>
+** Processing line: ~ <key>CFBundleDisplayName</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleDisplayName</key>
+** Processing line: ~ <string>:app_name</string>~
+- Inside source: true
+*** True Line Result
+ <string>:app_name</string>
+** Processing line: ~ <key>CFBundleExecutable</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleExecutable</key>
+** Processing line: ~ <string>Runtime</string>~
+- Inside source: true
+*** True Line Result
+ <string>Runtime</string>
+** Processing line: ~ <key>CFBundleIconFiles</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIconFiles</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <string>AppIcon60x60</string>~
+- Inside source: true
+*** True Line Result
+ <string>AppIcon60x60</string>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ <key>CFBundleIcons</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIcons</key>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>CFBundlePrimaryIcon</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundlePrimaryIcon</key>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>CFBundleIconFiles</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIconFiles</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <string>AppIcon60x60</string>~
+- Inside source: true
+*** True Line Result
+ <string>AppIcon60x60</string>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ <key>CFBundleIconName</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIconName</key>
+** Processing line: ~ <string>AppIcon</string>~
+- Inside source: true
+*** True Line Result
+ <string>AppIcon</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <key>CFBundleIcons~ipad</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIcons~ipad</key>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>CFBundlePrimaryIcon</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundlePrimaryIcon</key>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>CFBundleIconFiles</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIconFiles</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <string>AppIcon60x60</string>~
+- Inside source: true
+*** True Line Result
+ <string>AppIcon60x60</string>
+** Processing line: ~ <string>AppIcon76x76</string>~
+- Inside source: true
+*** True Line Result
+ <string>AppIcon76x76</string>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ <key>CFBundleIconName</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIconName</key>
+** Processing line: ~ <string>AppIcon</string>~
+- Inside source: true
+*** True Line Result
+ <string>AppIcon</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <key>CFBundleIdentifier</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleIdentifier</key>
+** Processing line: ~ <string>com.carlile.swisscheese</string>~
+- Inside source: true
+*** True Line Result
+ <string>com.carlile.swisscheese</string>
+** Processing line: ~ <key>CFBundleInfoDictionaryVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleInfoDictionaryVersion</key>
+** Processing line: ~ <string>6.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>6.0</string>
+** Processing line: ~ <key>CFBundleName</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleName</key>
+** Processing line: ~ <string>:app_name</string>~
+- Inside source: true
+*** True Line Result
+ <string>:app_name</string>
+** Processing line: ~ <key>CFBundlePackageType</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundlePackageType</key>
+** Processing line: ~ <string>APPL</string>~
+- Inside source: true
+*** True Line Result
+ <string>APPL</string>
+** Processing line: ~ <key>CFBundleShortVersionString</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleShortVersionString</key>
+** Processing line: ~ <string>1.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>1.0</string>
+** Processing line: ~ <key>CFBundleSignature</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleSignature</key>
+** Processing line: ~ <string>????</string>~
+- Inside source: true
+*** True Line Result
+ <string>????</string>
+** Processing line: ~ <key>CFBundleSupportedPlatforms</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleSupportedPlatforms</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <string>iPhoneOS</string>~
+- Inside source: true
+*** True Line Result
+ <string>iPhoneOS</string>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ <key>CFBundleVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>CFBundleVersion</key>
+** Processing line: ~ <string>1.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>1.0</string>
+** Processing line: ~ <key>DTCompiler</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTCompiler</key>
+** Processing line: ~ <string>com.apple.compilers.llvm.clang.1_0</string>~
+- Inside source: true
+*** True Line Result
+ <string>com.apple.compilers.llvm.clang.1_0</string>
+** Processing line: ~ <key>DTPlatformBuild</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTPlatformBuild</key>
+** Processing line: ~ <string>17B102</string>~
+- Inside source: true
+*** True Line Result
+ <string>17B102</string>
+** Processing line: ~ <key>DTPlatformName</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTPlatformName</key>
+** Processing line: ~ <string>iphoneos</string>~
+- Inside source: true
+*** True Line Result
+ <string>iphoneos</string>
+** Processing line: ~ <key>DTPlatformVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTPlatformVersion</key>
+** Processing line: ~ <string>13.2</string>~
+- Inside source: true
+*** True Line Result
+ <string>13.2</string>
+** Processing line: ~ <key>DTSDKBuild</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTSDKBuild</key>
+** Processing line: ~ <string>17B102</string>~
+- Inside source: true
+*** True Line Result
+ <string>17B102</string>
+** Processing line: ~ <key>DTSDKName</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTSDKName</key>
+** Processing line: ~ <string>iphoneos13.2</string>~
+- Inside source: true
+*** True Line Result
+ <string>iphoneos13.2</string>
+** Processing line: ~ <key>DTXcode</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTXcode</key>
+** Processing line: ~ <string>01131</string>~
+- Inside source: true
+*** True Line Result
+ <string>01131</string>
+** Processing line: ~ <key>DTXcodeBuild</key>~
+- Inside source: true
+*** True Line Result
+ <key>DTXcodeBuild</key>
+** Processing line: ~ <string>11C505</string>~
+- Inside source: true
+*** True Line Result
+ <string>11C505</string>
+** Processing line: ~ <key>ITSAppUsesNonExemptEncryption</key>~
+- Inside source: true
+*** True Line Result
+ <key>ITSAppUsesNonExemptEncryption</key>
+** Processing line: ~ <false/>~
+- Inside source: true
+*** True Line Result
+ <false/>
+** Processing line: ~ <key>MinimumOSVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>MinimumOSVersion</key>
+** Processing line: ~ <string>11.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>11.0</string>
+** Processing line: ~ <key>UIAppFonts</key>~
+- Inside source: true
+*** True Line Result
+ <key>UIAppFonts</key>
+** Processing line: ~ <array/>~
+- Inside source: true
+*** True Line Result
+ <array/>
+** Processing line: ~ <key>UIBackgroundModes</key>~
+- Inside source: true
+*** True Line Result
+ <key>UIBackgroundModes</key>
+** Processing line: ~ <array/>~
+- Inside source: true
+*** True Line Result
+ <array/>
+** Processing line: ~ <key>UIDeviceFamily</key>~
+- Inside source: true
+*** True Line Result
+ <key>UIDeviceFamily</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <integer>1</integer>~
+- Inside source: true
+*** True Line Result
+ <integer>1</integer>
+** Processing line: ~ <integer>2</integer>~
+- Inside source: true
+*** True Line Result
+ <integer>2</integer>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ <key>UILaunchImages</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImages</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageMinimumOSVersion</key>
+** Processing line: ~ <string>11.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>11.0</string>
+** Processing line: ~ <key>UILaunchImageName</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageName</key>
+** Processing line: ~ <string>LaunchImage-1100-Portrait-2436h</string>~
+- Inside source: true
+*** True Line Result
+ <string>LaunchImage-1100-Portrait-2436h</string>
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageOrientation</key>
+** Processing line: ~ <string>Portrait</string>~
+- Inside source: true
+*** True Line Result
+ <string>Portrait</string>
+** Processing line: ~ <key>UILaunchImageSize</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageSize</key>
+** Processing line: ~ <string>{375, 812}</string>~
+- Inside source: true
+*** True Line Result
+ <string>{375, 812}</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageMinimumOSVersion</key>
+** Processing line: ~ <string>8.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>8.0</string>
+** Processing line: ~ <key>UILaunchImageName</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageName</key>
+** Processing line: ~ <string>LaunchImage-800-Portrait-736h</string>~
+- Inside source: true
+*** True Line Result
+ <string>LaunchImage-800-Portrait-736h</string>
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageOrientation</key>
+** Processing line: ~ <string>Portrait</string>~
+- Inside source: true
+*** True Line Result
+ <string>Portrait</string>
+** Processing line: ~ <key>UILaunchImageSize</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageSize</key>
+** Processing line: ~ <string>{414, 736}</string>~
+- Inside source: true
+*** True Line Result
+ <string>{414, 736}</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageMinimumOSVersion</key>
+** Processing line: ~ <string>8.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>8.0</string>
+** Processing line: ~ <key>UILaunchImageName</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageName</key>
+** Processing line: ~ <string>LaunchImage-800-667h</string>~
+- Inside source: true
+*** True Line Result
+ <string>LaunchImage-800-667h</string>
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageOrientation</key>
+** Processing line: ~ <string>Portrait</string>~
+- Inside source: true
+*** True Line Result
+ <string>Portrait</string>
+** Processing line: ~ <key>UILaunchImageSize</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageSize</key>
+** Processing line: ~ <string>{375, 667}</string>~
+- Inside source: true
+*** True Line Result
+ <string>{375, 667}</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageMinimumOSVersion</key>
+** Processing line: ~ <string>7.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>7.0</string>
+** Processing line: ~ <key>UILaunchImageName</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageName</key>
+** Processing line: ~ <string>LaunchImage-700</string>~
+- Inside source: true
+*** True Line Result
+ <string>LaunchImage-700</string>
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageOrientation</key>
+** Processing line: ~ <string>Portrait</string>~
+- Inside source: true
+*** True Line Result
+ <string>Portrait</string>
+** Processing line: ~ <key>UILaunchImageSize</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageSize</key>
+** Processing line: ~ <string>{320, 480}</string>~
+- Inside source: true
+*** True Line Result
+ <string>{320, 480}</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageMinimumOSVersion</key>
+** Processing line: ~ <string>7.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>7.0</string>
+** Processing line: ~ <key>UILaunchImageName</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageName</key>
+** Processing line: ~ <string>LaunchImage-700-568h</string>~
+- Inside source: true
+*** True Line Result
+ <string>LaunchImage-700-568h</string>
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageOrientation</key>
+** Processing line: ~ <string>Portrait</string>~
+- Inside source: true
+*** True Line Result
+ <string>Portrait</string>
+** Processing line: ~ <key>UILaunchImageSize</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageSize</key>
+** Processing line: ~ <string>{320, 568}</string>~
+- Inside source: true
+*** True Line Result
+ <string>{320, 568}</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ <dict>~
+- Inside source: true
+*** True Line Result
+ <dict>
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageMinimumOSVersion</key>
+** Processing line: ~ <string>7.0</string>~
+- Inside source: true
+*** True Line Result
+ <string>7.0</string>
+** Processing line: ~ <key>UILaunchImageName</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageName</key>
+** Processing line: ~ <string>LaunchImage-700-Portrait</string>~
+- Inside source: true
+*** True Line Result
+ <string>LaunchImage-700-Portrait</string>
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageOrientation</key>
+** Processing line: ~ <string>Portrait</string>~
+- Inside source: true
+*** True Line Result
+ <string>Portrait</string>
+** Processing line: ~ <key>UILaunchImageSize</key>~
+- Inside source: true
+*** True Line Result
+ <key>UILaunchImageSize</key>
+** Processing line: ~ <string>{768, 1024}</string>~
+- Inside source: true
+*** True Line Result
+ <string>{768, 1024}</string>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ <key>UIRequiredDeviceCapabilities</key>~
+- Inside source: true
+*** True Line Result
+ <key>UIRequiredDeviceCapabilities</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <string>arm64</string>~
+- Inside source: true
+*** True Line Result
+ <string>arm64</string>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ <key>UIRequiresFullScreen</key>~
+- Inside source: true
+*** True Line Result
+ <key>UIRequiresFullScreen</key>
+** Processing line: ~ <true/>~
+- Inside source: true
+*** True Line Result
+ <true/>
+** Processing line: ~ <key>UIStatusBarStyle</key>~
+- Inside source: true
+*** True Line Result
+ <key>UIStatusBarStyle</key>
+** Processing line: ~ <string>UIStatusBarStyleDefault</string>~
+- Inside source: true
+*** True Line Result
+ <string>UIStatusBarStyleDefault</string>
+** Processing line: ~ <key>UISupportedInterfaceOrientations</key>~
+- Inside source: true
+*** True Line Result
+ <key>UISupportedInterfaceOrientations</key>
+** Processing line: ~ <array>~
+- Inside source: true
+*** True Line Result
+ <array>
+** Processing line: ~ <string>#{device_orientation_xml}</string>~
+- Inside source: true
+*** True Line Result
+ <string>#{device_orientation_xml}</string>
+** Processing line: ~ </array>~
+- Inside source: true
+*** True Line Result
+ </array>
+** Processing line: ~ </dict>~
+- Inside source: true
+*** True Line Result
+ </dict>
+** Processing line: ~ </plist>~
+- Inside source: true
+*** True Line Result
+ </plist>
+** Processing line: ~ XML~
+- Inside source: true
+*** True Line Result
+ XML
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ # <string>UIInterfaceOrientationPortrait</string>~
+- Inside source: true
+*** True Line Result
+ # <string>UIInterfaceOrientationPortrait</string>
+** Processing line: ~ # <string>UIInterfaceOrientationLandscapeRight</string>~
+- Inside source: true
+*** True Line Result
+ # <string>UIInterfaceOrientationLandscapeRight</string>
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.gsub(":app_name", @app_name).strip~
+- Inside source: true
+*** True Line Result
+ $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.gsub(":app_name", @app_name).strip
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @info_plist_written = true~
+- Inside source: true
+*** True Line Result
+ @info_plist_written = true
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def device_orientation_xml~
+- Inside source: true
+*** True Line Result
+ def device_orientation_xml
+** Processing line: ~ return "UIInterfaceOrientationLandscapeRight" if $gtk.logical_width > $gtk.logical_height~
+- Inside source: true
+*** True Line Result
+ return "UIInterfaceOrientationLandscapeRight" if $gtk.logical_width > $gtk.logical_height
+** Processing line: ~ return "UIInterfaceOrientationPortrait"~
+- Inside source: true
+*** True Line Result
+ return "UIInterfaceOrientationPortrait"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def tmp_directory~
+- Inside source: true
+*** True Line Result
+ def tmp_directory
+** Processing line: ~ "#{relative_path}/tmp/ios"~
+- Inside source: true
+*** True Line Result
+ "#{relative_path}/tmp/ios"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def app_path~
+- Inside source: true
+*** True Line Result
+ def app_path
+** Processing line: ~ "#{tmp_directory}/#{@app_name}.app"~
+- Inside source: true
+*** True Line Result
+ "#{tmp_directory}/#{@app_name}.app"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def root_folder~
+- Inside source: true
+*** True Line Result
+ def root_folder
+** Processing line: ~ "#{relative_path}/#{$gtk.cli_arguments[:dragonruby]}"~
+- Inside source: true
+*** True Line Result
+ "#{relative_path}/#{$gtk.cli_arguments[:dragonruby]}"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def write_ip_address~
+- Inside source: true
+*** True Line Result
+ def write_ip_address
+** Processing line: ~ $gtk.write_file "app/server_ip_address.txt", $gtk.ffi_misc.get_local_ip_address.strip~
+- Inside source: true
+*** True Line Result
+ $gtk.write_file "app/server_ip_address.txt", $gtk.ffi_misc.get_local_ip_address.strip
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def create_ipa~
+- Inside source: true
+*** True Line Result
+ def create_ipa
+** Processing line: ~ write_ip_address~
+- Inside source: true
+*** True Line Result
+ write_ip_address
+** Processing line: ~ sh "rm \"#{@app_name}\".ipa"~
+- Inside source: true
+*** True Line Result
+ sh "rm \"#{@app_name}\".ipa"
+** Processing line: ~ sh "rm -rf \"#{app_path}/app\""~
+- Inside source: true
+*** True Line Result
+ sh "rm -rf \"#{app_path}/app\""
+** Processing line: ~ sh "rm -rf \"#{app_path}/sounds\""~
+- Inside source: true
+*** True Line Result
+ sh "rm -rf \"#{app_path}/sounds\""
+** Processing line: ~ sh "rm -rf \"#{app_path}/sprites\""~
+- Inside source: true
+*** True Line Result
+ sh "rm -rf \"#{app_path}/sprites\""
+** Processing line: ~ sh "rm -rf \"#{app_path}/data\""~
+- Inside source: true
+*** True Line Result
+ sh "rm -rf \"#{app_path}/data\""
+** Processing line: ~ sh "rm -rf \"#{app_path}/fonts\""~
+- Inside source: true
+*** True Line Result
+ sh "rm -rf \"#{app_path}/fonts\""
+** Processing line: ~ sh "cp -r \"#{root_folder}/app/\" \"#{app_path}/app/\""~
+- Inside source: true
+*** True Line Result
+ sh "cp -r \"#{root_folder}/app/\" \"#{app_path}/app/\""
+** Processing line: ~ sh "cp -r \"#{root_folder}/sounds/\" \"#{app_path}/sounds/\""~
+- Inside source: true
+*** True Line Result
+ sh "cp -r \"#{root_folder}/sounds/\" \"#{app_path}/sounds/\""
+** Processing line: ~ sh "cp -r \"#{root_folder}/sprites/\" \"#{app_path}/sprites/\""~
+- Inside source: true
+*** True Line Result
+ sh "cp -r \"#{root_folder}/sprites/\" \"#{app_path}/sprites/\""
+** Processing line: ~ sh "cp -r \"#{root_folder}/data/\" \"#{app_path}/data/\""~
+- Inside source: true
+*** True Line Result
+ sh "cp -r \"#{root_folder}/data/\" \"#{app_path}/data/\""
+** Processing line: ~ sh "cp -r \"#{root_folder}/fonts/\" \"#{app_path}/fonts/\""~
+- Inside source: true
+*** True Line Result
+ sh "cp -r \"#{root_folder}/fonts/\" \"#{app_path}/fonts/\""
+** Processing line: ~ sh "mkdir -p #{tmp_directory}/ipa_root/Payload"~
+- Inside source: true
+*** True Line Result
+ sh "mkdir -p #{tmp_directory}/ipa_root/Payload"
+** Processing line: ~ sh "cp -r \"#{app_path}\" \"#{tmp_directory}/ipa_root/Payload\""~
+- Inside source: true
+*** True Line Result
+ sh "cp -r \"#{app_path}\" \"#{tmp_directory}/ipa_root/Payload\""
+** Processing line: ~ sh "chmod -R 755 \"#{tmp_directory}/ipa_root/Payload\""~
+- Inside source: true
+*** True Line Result
+ sh "chmod -R 755 \"#{tmp_directory}/ipa_root/Payload\""
+** Processing line: ~ do_zip~
+- Inside source: true
+*** True Line Result
+ do_zip
+** Processing line: ~ sh "cp \"#{tmp_directory}/ipa_root/archive.zip\" \"#{tmp_directory}/#{@app_name}.ipa\""~
+- Inside source: true
+*** True Line Result
+ sh "cp \"#{tmp_directory}/ipa_root/archive.zip\" \"#{tmp_directory}/#{@app_name}.ipa\""
+** Processing line: ~ sh "XCODE_DIR=\"/Applications/Xcode.app/Contents/Developer\" \"#{relative_path}/dragonruby-deploy-ios\" -d \"#{@device_id}\" \"#{tmp_directory}/#{@app_name}.ipa\""~
+- Inside source: true
+*** True Line Result
+ sh "XCODE_DIR=\"/Applications/Xcode.app/Contents/Developer\" \"#{relative_path}/dragonruby-deploy-ios\" -d \"#{@device_id}\" \"#{tmp_directory}/#{@app_name}.ipa\""
+** Processing line: ~ cmd_result = `ps -e | grep civetweb`~
+- Inside source: true
+*** True Line Result
+ cmd_result = `ps -e | grep civetweb`
+** Processing line: ~ is_civet_running = (`ps -e | grep civetweb`).strip.each_line.to_a.length > 2~
+- Inside source: true
+*** True Line Result
+ is_civet_running = (`ps -e | grep civetweb`).strip.each_line.to_a.length > 2
+** Processing line: ~ if !is_civet_running~
+- Inside source: true
+*** True Line Result
+ if !is_civet_running
+** Processing line: ~ $gtk.system "cp \"#{relative_path}/civetweb\" \"#{tmp_directory}/../src_backup/civetweb\""~
+- Inside source: true
+*** True Line Result
+ $gtk.system "cp \"#{relative_path}/civetweb\" \"#{tmp_directory}/../src_backup/civetweb\""
+** Processing line: ~ $gtk.system "open \"#{tmp_directory}/../src_backup/civetweb\" -g"~
+- Inside source: true
+*** True Line Result
+ $gtk.system "open \"#{tmp_directory}/../src_backup/civetweb\" -g"
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ log "* INFO: civetweb is running already running. No need to start another instance."~
+- Inside source: true
+*** True Line Result
+ log "* INFO: civetweb is running already running. No need to start another instance."
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ log_info "Check your device!!"~
+- Inside source: true
+*** True Line Result
+ log_info "Check your device!!"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def do_zip~
+- Inside source: true
+*** True Line Result
+ def do_zip
+** Processing line: ~ $gtk.write_file_root "tmp/ios/do_zip.sh", <<-SCRIPT~
+- Inside source: true
+*** True Line Result
+ $gtk.write_file_root "tmp/ios/do_zip.sh", <<-SCRIPT
+** Processing line: ~ pushd #{tmp_directory}/ipa_root/~
+- Inside source: true
+*** True Line Result
+ pushd #{tmp_directory}/ipa_root/
+** Processing line: ~ zip -q -r archive.zip Payload~
+- Inside source: true
+*** True Line Result
+ zip -q -r archive.zip Payload
+** Processing line: ~ popd~
+- Inside source: true
+*** True Line Result
+ popd
+** Processing line: ~ SCRIPT~
+- Inside source: true
+*** True Line Result
+ SCRIPT
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ sh "sh #{tmp_directory}/do_zip.sh"~
+- Inside source: true
+*** True Line Result
+ sh "sh #{tmp_directory}/do_zip.sh"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def sh cmd~
+- Inside source: true
+*** True Line Result
+ def sh cmd
+** Processing line: ~ log_info cmd.strip~
+- Inside source: true
+*** True Line Result
+ log_info cmd.strip
+** Processing line: ~ result = `#{cmd}`~
+- Inside source: true
+*** True Line Result
+ result = `#{cmd}`
+** Processing line: ~ if result.strip.length > 0~
+- Inside source: true
+*** True Line Result
+ if result.strip.length > 0
+** Processing line: ~ log_info result.strip.each_line.map(&:strip).join("\n")~
+- Inside source: true
+*** True Line Result
+ log_info result.strip.each_line.map(&:strip).join("\n")
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ result~
+- Inside source: true
+*** True Line Result
+ result
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def deploy~
+- Inside source: true
+*** True Line Result
+ def deploy
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
+** Processing line: ~* itch_wizard.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* itch_wizard.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./dragon/itch_wizard.rb~
+- Inside source: true
+*** True Line Result
+ # ./dragon/itch_wizard.rb
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+- Inside source: true
+*** True Line Result
+ # Copyright 2019 DragonRuby LLC
+** Processing line: ~ # MIT License~
+- Inside source: true
+*** True Line Result
+ # MIT License
+** Processing line: ~ # itch_wizard.rb has been released under MIT (*only this file*).~
+- Inside source: true
+*** True Line Result
+ # itch_wizard.rb has been released under MIT (*only this file*).
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class ItchWizard~
+- Inside source: true
+*** True Line Result
+ class ItchWizard
+** Processing line: ~ def steps~
+- Inside source: true
+*** True Line Result
+ def steps
+** Processing line: ~ [~
+- Inside source: true
+*** True Line Result
+ [
+** Processing line: ~ :check_metadata,~
+- Inside source: true
+*** True Line Result
+ :check_metadata,
+** Processing line: ~ :deploy~
+- Inside source: true
+*** True Line Result
+ :deploy
+** Processing line: ~ ]~
+- Inside source: true
+*** True Line Result
+ ]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def metadata_file_path~
+- Inside source: true
+*** True Line Result
+ def metadata_file_path
+** Processing line: ~ "metadata/game_metadata.txt"~
+- Inside source: true
+*** True Line Result
+ "metadata/game_metadata.txt"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def get_metadata~
+- Inside source: true
+*** True Line Result
+ def get_metadata
+** Processing line: ~ metadata = $gtk.read_file metadata_file_path~
+- Inside source: true
+*** True Line Result
+ metadata = $gtk.read_file metadata_file_path
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if !metadata~
+- Inside source: true
+*** True Line Result
+ if !metadata
+** Processing line: ~ write_blank_metadata~
+- Inside source: true
+*** True Line Result
+ write_blank_metadata
+** Processing line: ~ metadata = $gtk.read_file metadata_file_path~
+- Inside source: true
+*** True Line Result
+ metadata = $gtk.read_file metadata_file_path
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a~
+- Inside source: true
+*** True Line Result
+ dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ dev_id: dev_id.strip,~
+- Inside source: true
+*** True Line Result
+ dev_id: dev_id.strip,
+** Processing line: ~ dev_title: dev_title.strip,~
+- Inside source: true
+*** True Line Result
+ dev_title: dev_title.strip,
+** Processing line: ~ game_id: game_id.strip,~
+- Inside source: true
+*** True Line Result
+ game_id: game_id.strip,
+** Processing line: ~ game_title: game_title.strip,~
+- Inside source: true
+*** True Line Result
+ game_title: game_title.strip,
+** Processing line: ~ version: version.strip,~
+- Inside source: true
+*** True Line Result
+ version: version.strip,
+** Processing line: ~ icon: icon.strip~
+- Inside source: true
+*** True Line Result
+ icon: icon.strip
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def write_blank_metadata~
+- Inside source: true
+*** True Line Result
+ def write_blank_metadata
+** Processing line: ~ $gtk.write_file metadata_file_path, <<-S.strip~
+- Inside source: true
+*** True Line Result
+ $gtk.write_file metadata_file_path, <<-S.strip
+** Processing line: ~ #devid=myname~
+- Inside source: true
+*** True Line Result
+ #devid=myname
+** Processing line: ~ #devtitle=My Name~
+- Inside source: true
+*** True Line Result
+ #devtitle=My Name
+** Processing line: ~ #gameid=mygame~
+- Inside source: true
+*** True Line Result
+ #gameid=mygame
+** Processing line: ~ #gametitle=My Game~
+- Inside source: true
+*** True Line Result
+ #gametitle=My Game
+** Processing line: ~ #version=0.1~
+- Inside source: true
+*** True Line Result
+ #version=0.1
+** Processing line: ~ #icon=metadata/icon.png~
+- Inside source: true
+*** True Line Result
+ #icon=metadata/icon.png
+** Processing line: ~ S~
+- Inside source: true
+*** True Line Result
+ S
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def check_metadata~
+- Inside source: true
+*** True Line Result
+ def check_metadata
+** Processing line: ~ metadata_text = $gtk.read_file metadata_file_path~
+- Inside source: true
+*** True Line Result
+ metadata_text = $gtk.read_file metadata_file_path
+** Processing line: ~ if !metadata_text~
+- Inside source: true
+*** True Line Result
+ if !metadata_text
+** Processing line: ~ write_blank_metadata~
+- Inside source: true
+*** True Line Result
+ write_blank_metadata
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if metadata_text.each_line.to_a.length != 6~
+- Inside source: true
+*** True Line Result
+ if metadata_text.each_line.to_a.length != 6
+** Processing line: ~ write_blank_metadata~
+- Inside source: true
+*** True Line Result
+ write_blank_metadata
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ log "* INFO: Contents of #{metadata_file_path}:"~
+- Inside source: true
+*** True Line Result
+ log "* INFO: Contents of #{metadata_file_path}:"
+** Processing line: ~ log "#+begin_src txt"~
+- Inside source: true
+*** True Line Result
+ log "#+begin_src txt"
+** Processing line: ~ metadata_text.each_line { |l| log " #{l}" }~
+- Inside source: true
+*** True Line Result
+ metadata_text.each_line { |l| log " #{l}" }
+** Processing line: ~ log "#+end_src"~
+- Inside source: true
+*** True Line Result
+ log "#+end_src"
+** Processing line: ~ metadata = get_metadata~
+- Inside source: true
+*** True Line Result
+ metadata = get_metadata
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if metadata[:dev_id].start_with?("#") || !@dev_id~
+- Inside source: true
+*** True Line Result
+ if metadata[:dev_id].start_with?("#") || !@dev_id
+** Processing line: ~ log "* PROMPT: Please provide your username for Itch."~
+- Inside source: true
+*** True Line Result
+ log "* PROMPT: Please provide your username for Itch."
+** Processing line: ~ $console.set_command "$wizards.itch.set_dev_id \"your-itch-username\""~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.itch.set_dev_id \"your-itch-username\""
+** Processing line: ~ return :need_dev_id~
+- Inside source: true
+*** True Line Result
+ return :need_dev_id
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if metadata[:dev_title].start_with?("#") || !@dev_title~
+- Inside source: true
+*** True Line Result
+ if metadata[:dev_title].start_with?("#") || !@dev_title
+** Processing line: ~ log "* PROMPT: Please provide developer's/company's name that you want displayed."~
+- Inside source: true
+*** True Line Result
+ log "* PROMPT: Please provide developer's/company's name that you want displayed."
+** Processing line: ~ $console.set_command "$wizards.itch.set_dev_title \"Your Name\""~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.itch.set_dev_title \"Your Name\""
+** Processing line: ~ return :need_dev_title~
+- Inside source: true
+*** True Line Result
+ return :need_dev_title
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if metadata[:game_id].start_with?("#") || !@game_id~
+- Inside source: true
+*** True Line Result
+ if metadata[:game_id].start_with?("#") || !@game_id
+** Processing line: ~ log "* PROMPT: Please provide the id for you game. This is the id you specified when you set up a new game page on Itch."~
+- Inside source: true
+*** True Line Result
+ log "* PROMPT: Please provide the id for you game. This is the id you specified when you set up a new game page on Itch."
+** Processing line: ~ $console.set_command "$wizards.itch.set_game_id \"your-game-id\""~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.itch.set_game_id \"your-game-id\""
+** Processing line: ~ return :need_game_id~
+- Inside source: true
+*** True Line Result
+ return :need_game_id
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if metadata[:game_title].start_with?("#") || !@game_title~
+- Inside source: true
+*** True Line Result
+ if metadata[:game_title].start_with?("#") || !@game_title
+** Processing line: ~ log "* PROMPT: Please provide the display name for your game. (This can include spaces)"~
+- Inside source: true
+*** True Line Result
+ log "* PROMPT: Please provide the display name for your game. (This can include spaces)"
+** Processing line: ~ $console.set_command "$wizards.itch.set_game_title \"Your Game\""~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.itch.set_game_title \"Your Game\""
+** Processing line: ~ return :need_game_title~
+- Inside source: true
+*** True Line Result
+ return :need_game_title
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if metadata[:version].start_with?("#") || !@version~
+- Inside source: true
+*** True Line Result
+ if metadata[:version].start_with?("#") || !@version
+** Processing line: ~ log "* PROMPT: Please provide the version for your game."~
+- Inside source: true
+*** True Line Result
+ log "* PROMPT: Please provide the version for your game."
+** Processing line: ~ $console.set_command "$wizards.itch.set_version \"1.0\""~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.itch.set_version \"1.0\""
+** Processing line: ~ return :need_version~
+- Inside source: true
+*** True Line Result
+ return :need_version
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if metadata[:icon].start_with?("#") || !@icon~
+- Inside source: true
+*** True Line Result
+ if metadata[:icon].start_with?("#") || !@icon
+** Processing line: ~ log "* PROPT: Please provide icon path for your game."~
+- Inside source: true
+*** True Line Result
+ log "* PROPT: Please provide icon path for your game."
+** Processing line: ~ $console.set_command "$wizards.itch.set_icon \"icon.png\""~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.itch.set_icon \"icon.png\""
+** Processing line: ~ return :need_icon~
+- Inside source: true
+*** True Line Result
+ return :need_icon
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ return :success~
+- Inside source: true
+*** True Line Result
+ return :success
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_dev_id value~
+- Inside source: true
+*** True Line Result
+ def set_dev_id value
+** Processing line: ~ @dev_id = value~
+- Inside source: true
+*** True Line Result
+ @dev_id = value
+** Processing line: ~ write_metadata~
+- Inside source: true
+*** True Line Result
+ write_metadata
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_dev_title value~
+- Inside source: true
+*** True Line Result
+ def set_dev_title value
+** Processing line: ~ @dev_title = value~
+- Inside source: true
+*** True Line Result
+ @dev_title = value
+** Processing line: ~ write_metadata~
+- Inside source: true
+*** True Line Result
+ write_metadata
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_game_id value~
+- Inside source: true
+*** True Line Result
+ def set_game_id value
+** Processing line: ~ @game_id = value~
+- Inside source: true
+*** True Line Result
+ @game_id = value
+** Processing line: ~ write_metadata~
+- Inside source: true
+*** True Line Result
+ write_metadata
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_game_title value~
+- Inside source: true
+*** True Line Result
+ def set_game_title value
+** Processing line: ~ @game_title = value~
+- Inside source: true
+*** True Line Result
+ @game_title = value
+** Processing line: ~ write_metadata~
+- Inside source: true
+*** True Line Result
+ write_metadata
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_version value~
+- Inside source: true
+*** True Line Result
+ def set_version value
+** Processing line: ~ @version = value~
+- Inside source: true
+*** True Line Result
+ @version = value
+** Processing line: ~ write_metadata~
+- Inside source: true
+*** True Line Result
+ write_metadata
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def set_icon value~
+- Inside source: true
+*** True Line Result
+ def set_icon value
+** Processing line: ~ @icon = value~
+- Inside source: true
+*** True Line Result
+ @icon = value
+** Processing line: ~ write_metadata~
+- Inside source: true
+*** True Line Result
+ write_metadata
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def write_metadata~
+- Inside source: true
+*** True Line Result
+ def write_metadata
+** Processing line: ~ text = ""~
+- Inside source: true
+*** True Line Result
+ text = ""
+** Processing line: ~ if @dev_id~
+- Inside source: true
+*** True Line Result
+ if @dev_id
+** Processing line: ~ text += "devid=#{@dev_id}\n"~
+- Inside source: true
+*** True Line Result
+ text += "devid=#{@dev_id}\n"
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ text += "#devid=myname\n"~
+- Inside source: true
+*** True Line Result
+ text += "#devid=myname\n"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if @dev_title~
+- Inside source: true
+*** True Line Result
+ if @dev_title
+** Processing line: ~ text += "devtitle=#{@dev_title}\n"~
+- Inside source: true
+*** True Line Result
+ text += "devtitle=#{@dev_title}\n"
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ text += "#devtitle=My Name\n"~
+- Inside source: true
+*** True Line Result
+ text += "#devtitle=My Name\n"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if @game_id~
+- Inside source: true
+*** True Line Result
+ if @game_id
+** Processing line: ~ text += "gameid=#{@game_id}\n"~
+- Inside source: true
+*** True Line Result
+ text += "gameid=#{@game_id}\n"
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ text += "#gameid=gameid\n"~
+- Inside source: true
+*** True Line Result
+ text += "#gameid=gameid\n"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if @game_title~
+- Inside source: true
+*** True Line Result
+ if @game_title
+** Processing line: ~ text += "gametitle=#{@game_title}\n"~
+- Inside source: true
+*** True Line Result
+ text += "gametitle=#{@game_title}\n"
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ text += "#gametitle=Game Name\n"~
+- Inside source: true
+*** True Line Result
+ text += "#gametitle=Game Name\n"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if @version~
+- Inside source: true
+*** True Line Result
+ if @version
+** Processing line: ~ text += "version=#{@version}\n"~
+- Inside source: true
+*** True Line Result
+ text += "version=#{@version}\n"
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ text += "#version=0.1\n"~
+- Inside source: true
+*** True Line Result
+ text += "#version=0.1\n"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if @icon~
+- Inside source: true
+*** True Line Result
+ if @icon
+** Processing line: ~ text += "icon=metadata/#{@icon}\n"~
+- Inside source: true
+*** True Line Result
+ text += "icon=metadata/#{@icon}\n"
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ text += "#icon=metadata/icon.png\n"~
+- Inside source: true
+*** True Line Result
+ text += "#icon=metadata/icon.png\n"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ $gtk.write_file metadata_file_path, text~
+- Inside source: true
+*** True Line Result
+ $gtk.write_file metadata_file_path, text
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def relative_path~
+- Inside source: true
+*** True Line Result
+ def relative_path
+** Processing line: ~ (File.dirname $gtk.binary_path)~
+- Inside source: true
+*** True Line Result
+ (File.dirname $gtk.binary_path)
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def package_command~
+- Inside source: true
+*** True Line Result
+ def package_command
+** Processing line: ~ "#{File.join $gtk.get_base_dir, 'dragonruby-publish'}"~
+- Inside source: true
+*** True Line Result
+ "#{File.join $gtk.get_base_dir, 'dragonruby-publish'}"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def deploy~
+- Inside source: true
+*** True Line Result
+ def deploy
+** Processing line: ~ log_info "* Running dragonruby-publish: #{package_command}"~
+- Inside source: true
+*** True Line Result
+ log_info "* Running dragonruby-publish: #{package_command}"
+** Processing line: ~ results = $gtk.exec package_command~
+- Inside source: true
+*** True Line Result
+ results = $gtk.exec package_command
+** Processing line: ~ log "#+begin_src"~
+- Inside source: true
+*** True Line Result
+ log "#+begin_src"
+** Processing line: ~ log results~
+- Inside source: true
+*** True Line Result
+ log results
+** Processing line: ~ log "#+end_src"~
+- Inside source: true
+*** True Line Result
+ log "#+end_src"
+** Processing line: ~ :success~
+- Inside source: true
+*** True Line Result
+ :success
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def start~
+- Inside source: true
+*** True Line Result
+ def start
+** Processing line: ~ log "================"~
+- Inside source: true
+*** True Line Result
+ log "================"
+** Processing line: ~ log "* INFO: Starting Itch Wizard."~
+- Inside source: true
+*** True Line Result
+ log "* INFO: Starting Itch Wizard."
+** Processing line: ~ @start_at = Kernel.global_tick_count~
+- Inside source: true
+*** True Line Result
+ @start_at = Kernel.global_tick_count
+** Processing line: ~ steps.each do |m|~
+- Inside source: true
+*** True Line Result
+ steps.each do |m|
+** Processing line: ~ begin~
+- Inside source: true
+*** True Line Result
+ begin
+** Processing line: ~ log_info "Running Itch Wizard Step: ~$wizards.itch.#{m}~"~
+- Inside source: true
+*** True Line Result
+ log_info "Running Itch Wizard Step: ~$wizards.itch.#{m}~"
+** Processing line: ~ result = (send m) || :success if @wizard_status[m][:result] != :success~
+- Inside source: true
+*** True Line Result
+ result = (send m) || :success if @wizard_status[m][:result] != :success
+** Processing line: ~ @wizard_status[m][:result] = result~
+- Inside source: true
+*** True Line Result
+ @wizard_status[m][:result] = result
+** Processing line: ~ if result != :success~
+- Inside source: true
+*** True Line Result
+ if result != :success
+** Processing line: ~ log_info "Exiting wizard. :#{result}"~
+- Inside source: true
+*** True Line Result
+ log_info "Exiting wizard. :#{result}"
+** Processing line: ~ break~
+- Inside source: true
+*** True Line Result
+ break
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ rescue Exception => e~
+- Inside source: true
+*** True Line Result
+ rescue Exception => e
+** Processing line: ~ if e.is_a? WizardException~
+- Inside source: true
+*** True Line Result
+ if e.is_a? WizardException
+** Processing line: ~ $console.log.clear~
+- Inside source: true
+*** True Line Result
+ $console.log.clear
+** Processing line: ~ $console.archived_log.clear~
+- Inside source: true
+*** True Line Result
+ $console.archived_log.clear
+** Processing line: ~ log "=" * $console.console_text_width~
+- Inside source: true
+*** True Line Result
+ log "=" * $console.console_text_width
+** Processing line: ~ e.console_primitives.each do |p|~
+- Inside source: true
+*** True Line Result
+ e.console_primitives.each do |p|
+** Processing line: ~ $console.add_primitive p~
+- Inside source: true
+*** True Line Result
+ $console.add_primitive p
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ log "=" * $console.console_text_width~
+- Inside source: true
+*** True Line Result
+ log "=" * $console.console_text_width
+** Processing line: ~ $console.set_command (e.console_command || "$wizards.itch.start")~
+- Inside source: true
+*** True Line Result
+ $console.set_command (e.console_command || "$wizards.itch.start")
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ log_error "Step #{m} failed."~
+- Inside source: true
+*** True Line Result
+ log_error "Step #{m} failed."
+** Processing line: ~ log_error e.to_s~
+- Inside source: true
+*** True Line Result
+ log_error e.to_s
+** Processing line: ~ $console.set_command "$wizards.itch.start"~
+- Inside source: true
+*** True Line Result
+ $console.set_command "$wizards.itch.start"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ break~
+- Inside source: true
+*** True Line Result
+ break
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def reset~
+- Inside source: true
+*** True Line Result
+ def reset
+** Processing line: ~ @dev_id = nil~
+- Inside source: true
+*** True Line Result
+ @dev_id = nil
+** Processing line: ~ @dev_title = nil~
+- Inside source: true
+*** True Line Result
+ @dev_title = nil
+** Processing line: ~ @game_id = nil~
+- Inside source: true
+*** True Line Result
+ @game_id = nil
+** Processing line: ~ @game_title = nil~
+- Inside source: true
+*** True Line Result
+ @game_title = nil
+** Processing line: ~ @version = nil~
+- Inside source: true
+*** True Line Result
+ @version = nil
+** Processing line: ~ @icon = nil~
+- Inside source: true
+*** True Line Result
+ @icon = nil
+** Processing line: ~ init_wizard_status~
+- Inside source: true
+*** True Line Result
+ init_wizard_status
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def restart~
+- Inside source: true
+*** True Line Result
+ def restart
+** Processing line: ~ reset~
+- Inside source: true
+*** True Line Result
+ reset
+** Processing line: ~ start~
+- Inside source: true
+*** True Line Result
+ start
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ reset~
+- Inside source: true
+*** True Line Result
+ reset
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def init_wizard_status~
+- Inside source: true
+*** True Line Result
+ def init_wizard_status
+** Processing line: ~ @wizard_status = {}~
+- Inside source: true
+*** True Line Result
+ @wizard_status = {}
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ steps.each do |m|~
+- Inside source: true
+*** True Line Result
+ steps.each do |m|
+** Processing line: ~ @wizard_status[m] = { result: :not_started }~
+- Inside source: true
+*** True Line Result
+ @wizard_status[m] = { result: :not_started }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ previous_step = nil~
+- Inside source: true
+*** True Line Result
+ previous_step = nil
+** Processing line: ~ next_step = nil~
+- Inside source: true
+*** True Line Result
+ next_step = nil
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~
+- Inside source: true
+*** True Line Result
+ steps.each_cons(2) do |current_step, next_step|
+** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~
+- Inside source: true
+*** True Line Result
+ @wizard_status[current_step][:next_step] = next_step
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~
+- Inside source: true
+*** True Line Result
+ steps.reverse.each_cons(2) do |current_step, previous_step|
+** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~
+- Inside source: true
+*** True Line Result
+ @wizard_status[current_step][:previous_step] = previous_step
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
+** Processing line: ~* layout.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* layout.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./dragon/layout.rb~
+- Inside source: true
+*** True Line Result
+ # ./dragon/layout.rb
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+- Inside source: true
+*** True Line Result
+ # Copyright 2019 DragonRuby LLC
+** Processing line: ~ # MIT License~
+- Inside source: true
+*** True Line Result
+ # MIT License
+** Processing line: ~ # layout.rb has been released under MIT (*only this file*).~
+- Inside source: true
+*** True Line Result
+ # layout.rb has been released under MIT (*only this file*).
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ module GTK~
+- Inside source: true
+*** True Line Result
+ module GTK
+** Processing line: ~ class Margin~
+- Inside source: true
+*** True Line Result
+ class Margin
+** Processing line: ~ attr :left, :right, :top, :bottom~
+- Inside source: true
+*** True Line Result
+ attr :left, :right, :top, :bottom
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @left = 0~
+- Inside source: true
+*** True Line Result
+ @left = 0
+** Processing line: ~ @right = 0~
+- Inside source: true
+*** True Line Result
+ @right = 0
+** Processing line: ~ @top = 0~
+- Inside source: true
+*** True Line Result
+ @top = 0
+** Processing line: ~ @bottom = 0~
+- Inside source: true
+*** True Line Result
+ @bottom = 0
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ left: @left,~
+- Inside source: true
+*** True Line Result
+ left: @left,
+** Processing line: ~ right: @right,~
+- Inside source: true
+*** True Line Result
+ right: @right,
+** Processing line: ~ top: @top,~
+- Inside source: true
+*** True Line Result
+ top: @top,
+** Processing line: ~ bottom: @bottom,~
+- Inside source: true
+*** True Line Result
+ bottom: @bottom,
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inspect~
+- Inside source: true
+*** True Line Result
+ def inspect
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class SafeArea~
+- Inside source: true
+*** True Line Result
+ class SafeArea
+** Processing line: ~ attr :w, :h, :margin~
+- Inside source: true
+*** True Line Result
+ attr :w, :h, :margin
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @w = 0~
+- Inside source: true
+*** True Line Result
+ @w = 0
+** Processing line: ~ @h = 0~
+- Inside source: true
+*** True Line Result
+ @h = 0
+** Processing line: ~ @margin = Margin.new~
+- Inside source: true
+*** True Line Result
+ @margin = Margin.new
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ w: @w,~
+- Inside source: true
+*** True Line Result
+ w: @w,
+** Processing line: ~ h: @h,~
+- Inside source: true
+*** True Line Result
+ h: @h,
+** Processing line: ~ margin: @margin.serialize~
+- Inside source: true
+*** True Line Result
+ margin: @margin.serialize
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inspect~
+- Inside source: true
+*** True Line Result
+ def inspect
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class GridArea~
+- Inside source: true
+*** True Line Result
+ class GridArea
+** Processing line: ~ attr :w, :h, :margin, :gutter, :col_count, :row_count, :cell_w, :cell_h, :outer_gutter~
+- Inside source: true
+*** True Line Result
+ attr :w, :h, :margin, :gutter, :col_count, :row_count, :cell_w, :cell_h, :outer_gutter
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @w = 0~
+- Inside source: true
+*** True Line Result
+ @w = 0
+** Processing line: ~ @h = 0~
+- Inside source: true
+*** True Line Result
+ @h = 0
+** Processing line: ~ @gutter = 0~
+- Inside source: true
+*** True Line Result
+ @gutter = 0
+** Processing line: ~ @outer_gutter = 0~
+- Inside source: true
+*** True Line Result
+ @outer_gutter = 0
+** Processing line: ~ @col_count = 0~
+- Inside source: true
+*** True Line Result
+ @col_count = 0
+** Processing line: ~ @row_count = 0~
+- Inside source: true
+*** True Line Result
+ @row_count = 0
+** Processing line: ~ @margin = Margin.new~
+- Inside source: true
+*** True Line Result
+ @margin = Margin.new
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ w: @w,~
+- Inside source: true
+*** True Line Result
+ w: @w,
+** Processing line: ~ h: @h,~
+- Inside source: true
+*** True Line Result
+ h: @h,
+** Processing line: ~ gutter: @gutter,~
+- Inside source: true
+*** True Line Result
+ gutter: @gutter,
+** Processing line: ~ outer_gutter: @outer_gutter,~
+- Inside source: true
+*** True Line Result
+ outer_gutter: @outer_gutter,
+** Processing line: ~ col_count: @col_count,~
+- Inside source: true
+*** True Line Result
+ col_count: @col_count,
+** Processing line: ~ row_count: @row_count,~
+- Inside source: true
+*** True Line Result
+ row_count: @row_count,
+** Processing line: ~ margin: @margin.serialize~
+- Inside source: true
+*** True Line Result
+ margin: @margin.serialize
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inspect~
+- Inside source: true
+*** True Line Result
+ def inspect
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class ControlArea~
+- Inside source: true
+*** True Line Result
+ class ControlArea
+** Processing line: ~ attr :cell_size, :w, :h, :margin~
+- Inside source: true
+*** True Line Result
+ attr :cell_size, :w, :h, :margin
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @margin = Margin.new~
+- Inside source: true
+*** True Line Result
+ @margin = Margin.new
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ cell_size: @cell_size,~
+- Inside source: true
+*** True Line Result
+ cell_size: @cell_size,
+** Processing line: ~ w: @w,~
+- Inside source: true
+*** True Line Result
+ w: @w,
+** Processing line: ~ h: @h,~
+- Inside source: true
+*** True Line Result
+ h: @h,
+** Processing line: ~ margin: @margin.serialize,~
+- Inside source: true
+*** True Line Result
+ margin: @margin.serialize,
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inspect~
+- Inside source: true
+*** True Line Result
+ def inspect
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class Device~
+- Inside source: true
+*** True Line Result
+ class Device
+** Processing line: ~ attr :w, :h, :safe_area, :grid_area, :control_area, :name, :aspect~
+- Inside source: true
+*** True Line Result
+ attr :w, :h, :safe_area, :grid_area, :control_area, :name, :aspect
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @name = ""~
+- Inside source: true
+*** True Line Result
+ @name = ""
+** Processing line: ~ @w = 0~
+- Inside source: true
+*** True Line Result
+ @w = 0
+** Processing line: ~ @h = 0~
+- Inside source: true
+*** True Line Result
+ @h = 0
+** Processing line: ~ @safe_area = SafeArea.new~
+- Inside source: true
+*** True Line Result
+ @safe_area = SafeArea.new
+** Processing line: ~ @grid_area = GridArea.new~
+- Inside source: true
+*** True Line Result
+ @grid_area = GridArea.new
+** Processing line: ~ @control_area = ControlArea.new~
+- Inside source: true
+*** True Line Result
+ @control_area = ControlArea.new
+** Processing line: ~ @aspect = AspectRatio.new~
+- Inside source: true
+*** True Line Result
+ @aspect = AspectRatio.new
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def assert! result, message~
+- Inside source: true
+*** True Line Result
+ def assert! result, message
+** Processing line: ~ return if result~
+- Inside source: true
+*** True Line Result
+ return if result
+** Processing line: ~ raise message~
+- Inside source: true
+*** True Line Result
+ raise message
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def check_math!~
+- Inside source: true
+*** True Line Result
+ def check_math!
+** Processing line: ~ assert! (@control_area.w + @control_area.margin.left + @control_area.margin.right) == @w, "Math for Width didn't pan out."~
+- Inside source: true
+*** True Line Result
+ assert! (@control_area.w + @control_area.margin.left + @control_area.margin.right) == @w, "Math for Width didn't pan out."
+** Processing line: ~ assert! (@control_area.h + @control_area.margin.top + @control_area.margin.bottom) == @h, "Math for Height didn't pan out."~
+- Inside source: true
+*** True Line Result
+ assert! (@control_area.h + @control_area.margin.top + @control_area.margin.bottom) == @h, "Math for Height didn't pan out."
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ name: @name,~
+- Inside source: true
+*** True Line Result
+ name: @name,
+** Processing line: ~ w: @w,~
+- Inside source: true
+*** True Line Result
+ w: @w,
+** Processing line: ~ h: @h,~
+- Inside source: true
+*** True Line Result
+ h: @h,
+** Processing line: ~ aspect: @aspect.serialize,~
+- Inside source: true
+*** True Line Result
+ aspect: @aspect.serialize,
+** Processing line: ~ safe_area: @safe_area.serialize,~
+- Inside source: true
+*** True Line Result
+ safe_area: @safe_area.serialize,
+** Processing line: ~ grid_area: @grid_area.serialize,~
+- Inside source: true
+*** True Line Result
+ grid_area: @grid_area.serialize,
+** Processing line: ~ control_area: @control_area.serialize~
+- Inside source: true
+*** True Line Result
+ control_area: @control_area.serialize
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inspect~
+- Inside source: true
+*** True Line Result
+ def inspect
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class AspectRatio~
+- Inside source: true
+*** True Line Result
+ class AspectRatio
+** Processing line: ~ attr :w, :h, :u~
+- Inside source: true
+*** True Line Result
+ attr :w, :h, :u
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @w = 0~
+- Inside source: true
+*** True Line Result
+ @w = 0
+** Processing line: ~ @h = 0~
+- Inside source: true
+*** True Line Result
+ @h = 0
+** Processing line: ~ @u = 0~
+- Inside source: true
+*** True Line Result
+ @u = 0
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ w: @w,~
+- Inside source: true
+*** True Line Result
+ w: @w,
+** Processing line: ~ h: @h,~
+- Inside source: true
+*** True Line Result
+ h: @h,
+** Processing line: ~ u: @u~
+- Inside source: true
+*** True Line Result
+ u: @u
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inspect~
+- Inside source: true
+*** True Line Result
+ def inspect
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class Layout~
+- Inside source: true
+*** True Line Result
+ class Layout
+** Processing line: ~ attr :w, :h, :rect_cache~
+- Inside source: true
+*** True Line Result
+ attr :w, :h, :rect_cache
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize w, h~
+- Inside source: true
+*** True Line Result
+ def initialize w, h
+** Processing line: ~ @w = w~
+- Inside source: true
+*** True Line Result
+ @w = w
+** Processing line: ~ @h = h~
+- Inside source: true
+*** True Line Result
+ @h = h
+** Processing line: ~ @rect_cache = {}~
+- Inside source: true
+*** True Line Result
+ @rect_cache = {}
+** Processing line: ~ init_device @w, @h~
+- Inside source: true
+*** True Line Result
+ init_device @w, @h
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def u_for_16x9 w, h~
+- Inside source: true
+*** True Line Result
+ def u_for_16x9 w, h
+** Processing line: ~ u = (w.fdiv 16).floor~
+- Inside source: true
+*** True Line Result
+ u = (w.fdiv 16).floor
+** Processing line: ~ u = (h.fdiv 9).floor if (u * 9) > h~
+- Inside source: true
+*** True Line Result
+ u = (h.fdiv 9).floor if (u * 9) > h
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ u: u,~
+- Inside source: true
+*** True Line Result
+ u: u,
+** Processing line: ~ w: u * 16,~
+- Inside source: true
+*** True Line Result
+ w: u * 16,
+** Processing line: ~ h: u * 9~
+- Inside source: true
+*** True Line Result
+ h: u * 9
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_relative_size_enum size_enum~
+- Inside source: true
+*** True Line Result
+ def font_relative_size_enum size_enum
+** Processing line: ~ base_line_logical = 22~
+- Inside source: true
+*** True Line Result
+ base_line_logical = 22
+** Processing line: ~ base_line_actual = font_size_med~
+- Inside source: true
+*** True Line Result
+ base_line_actual = font_size_med
+** Processing line: ~ target_logical = size_enum~
+- Inside source: true
+*** True Line Result
+ target_logical = size_enum
+** Processing line: ~ target_logical = 1 if target_logical <= 0~
+- Inside source: true
+*** True Line Result
+ target_logical = 1 if target_logical <= 0
+** Processing line: ~ (base_line_actual / base_line_logical) * target_logical~
+- Inside source: true
+*** True Line Result
+ (base_line_actual / base_line_logical) * target_logical
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_px_to_pt px~
+- Inside source: true
+*** True Line Result
+ def font_px_to_pt px
+** Processing line: ~ (px / 1.33333).floor~
+- Inside source: true
+*** True Line Result
+ (px / 1.33333).floor
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_pt_to_px pt~
+- Inside source: true
+*** True Line Result
+ def font_pt_to_px pt
+** Processing line: ~ pt * 1.333333~
+- Inside source: true
+*** True Line Result
+ pt * 1.333333
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_size_cell~
+- Inside source: true
+*** True Line Result
+ def font_size_cell
+** Processing line: ~ (cell_height / 1.33333)~
+- Inside source: true
+*** True Line Result
+ (cell_height / 1.33333)
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_size_xl~
+- Inside source: true
+*** True Line Result
+ def font_size_xl
+** Processing line: ~ font_size_cell~
+- Inside source: true
+*** True Line Result
+ font_size_cell
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_size_lg~
+- Inside source: true
+*** True Line Result
+ def font_size_lg
+** Processing line: ~ font_size_cell * 0.8~
+- Inside source: true
+*** True Line Result
+ font_size_cell * 0.8
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_size_med~
+- Inside source: true
+*** True Line Result
+ def font_size_med
+** Processing line: ~ font_size_cell * 0.7~
+- Inside source: true
+*** True Line Result
+ font_size_cell * 0.7
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_size_sm~
+- Inside source: true
+*** True Line Result
+ def font_size_sm
+** Processing line: ~ font_size_cell * 0.6~
+- Inside source: true
+*** True Line Result
+ font_size_cell * 0.6
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_size_xs~
+- Inside source: true
+*** True Line Result
+ def font_size_xs
+** Processing line: ~ font_size_cell * 0.5~
+- Inside source: true
+*** True Line Result
+ font_size_cell * 0.5
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def font_size~
+- Inside source: true
+*** True Line Result
+ def font_size
+** Processing line: ~ font_size_cell * 0.7~
+- Inside source: true
+*** True Line Result
+ font_size_cell * 0.7
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def logical_rect~
+- Inside source: true
+*** True Line Result
+ def logical_rect
+** Processing line: ~ @logical_rect ||= { x: 0,~
+- Inside source: true
+*** True Line Result
+ @logical_rect ||= { x: 0,
+** Processing line: ~ y: 0,~
+- Inside source: true
+*** True Line Result
+ y: 0,
+** Processing line: ~ w: @w,~
+- Inside source: true
+*** True Line Result
+ w: @w,
+** Processing line: ~ h: @h }~
+- Inside source: true
+*** True Line Result
+ h: @h }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def safe_rect~
+- Inside source: true
+*** True Line Result
+ def safe_rect
+** Processing line: ~ @safe_rect ||= { x: 0,~
+- Inside source: true
+*** True Line Result
+ @safe_rect ||= { x: 0,
+** Processing line: ~ y: 0,~
+- Inside source: true
+*** True Line Result
+ y: 0,
+** Processing line: ~ w: @w,~
+- Inside source: true
+*** True Line Result
+ w: @w,
+** Processing line: ~ h: @h }~
+- Inside source: true
+*** True Line Result
+ h: @h }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def control_rect~
+- Inside source: true
+*** True Line Result
+ def control_rect
+** Processing line: ~ @control_rect ||= { x: device.control_area.margin.left,~
+- Inside source: true
+*** True Line Result
+ @control_rect ||= { x: device.control_area.margin.left,
+** Processing line: ~ y: device.control_area.margin.top,~
+- Inside source: true
+*** True Line Result
+ y: device.control_area.margin.top,
+** Processing line: ~ w: device.control_area.w,~
+- Inside source: true
+*** True Line Result
+ w: device.control_area.w,
+** Processing line: ~ h: device.control_area.h }~
+- Inside source: true
+*** True Line Result
+ h: device.control_area.h }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def row_count~
+- Inside source: true
+*** True Line Result
+ def row_count
+** Processing line: ~ device.grid_area.row_count~
+- Inside source: true
+*** True Line Result
+ device.grid_area.row_count
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def col_count~
+- Inside source: true
+*** True Line Result
+ def col_count
+** Processing line: ~ device.grid_area.col_count~
+- Inside source: true
+*** True Line Result
+ device.grid_area.col_count
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def gutter_height~
+- Inside source: true
+*** True Line Result
+ def gutter_height
+** Processing line: ~ device.grid_area.gutter~
+- Inside source: true
+*** True Line Result
+ device.grid_area.gutter
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def gutter_width~
+- Inside source: true
+*** True Line Result
+ def gutter_width
+** Processing line: ~ device.grid_area.gutter~
+- Inside source: true
+*** True Line Result
+ device.grid_area.gutter
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def outer_gutter~
+- Inside source: true
+*** True Line Result
+ def outer_gutter
+** Processing line: ~ device.grid_area.outer_gutter~
+- Inside source: true
+*** True Line Result
+ device.grid_area.outer_gutter
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def cell_height~
+- Inside source: true
+*** True Line Result
+ def cell_height
+** Processing line: ~ device.control_area.cell_size~
+- Inside source: true
+*** True Line Result
+ device.control_area.cell_size
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def cell_width~
+- Inside source: true
+*** True Line Result
+ def cell_width
+** Processing line: ~ device.control_area.cell_size~
+- Inside source: true
+*** True Line Result
+ device.control_area.cell_size
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def rect_defaults~
+- Inside source: true
+*** True Line Result
+ def rect_defaults
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ row: nil,~
+- Inside source: true
+*** True Line Result
+ row: nil,
+** Processing line: ~ col: nil,~
+- Inside source: true
+*** True Line Result
+ col: nil,
+** Processing line: ~ h: 1,~
+- Inside source: true
+*** True Line Result
+ h: 1,
+** Processing line: ~ w: 1,~
+- Inside source: true
+*** True Line Result
+ w: 1,
+** Processing line: ~ dx: 0,~
+- Inside source: true
+*** True Line Result
+ dx: 0,
+** Processing line: ~ dy: 0,~
+- Inside source: true
+*** True Line Result
+ dy: 0,
+** Processing line: ~ rect: :control_rect~
+- Inside source: true
+*** True Line Result
+ rect: :control_rect
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def rect opts~
+- Inside source: true
+*** True Line Result
+ def rect opts
+** Processing line: ~ opts = rect_defaults.merge opts~
+- Inside source: true
+*** True Line Result
+ opts = rect_defaults.merge opts
+** Processing line: ~ result = send opts[:rect]~
+- Inside source: true
+*** True Line Result
+ result = send opts[:rect]
+** Processing line: ~ if opts[:row] && opts[:col] && opts[:w] && opts[:h]~
+- Inside source: true
+*** True Line Result
+ if opts[:row] && opts[:col] && opts[:w] && opts[:h]
+** Processing line: ~ col = rect_col opts[:col], opts[:w]~
+- Inside source: true
+*** True Line Result
+ col = rect_col opts[:col], opts[:w]
+** Processing line: ~ row = rect_row opts[:row], opts[:h]~
+- Inside source: true
+*** True Line Result
+ row = rect_row opts[:row], opts[:h]
+** Processing line: ~ result = control_rect.merge x: col.x,~
+- Inside source: true
+*** True Line Result
+ result = control_rect.merge x: col.x,
+** Processing line: ~ y: row.y,~
+- Inside source: true
+*** True Line Result
+ y: row.y,
+** Processing line: ~ w: col.w,~
+- Inside source: true
+*** True Line Result
+ w: col.w,
+** Processing line: ~ h: row.h~
+- Inside source: true
+*** True Line Result
+ h: row.h
+** Processing line: ~ elsif opts[:row] && !opts[:col]~
+- Inside source: true
+*** True Line Result
+ elsif opts[:row] && !opts[:col]
+** Processing line: ~ result = rect_row opts[:row], opts[:h]~
+- Inside source: true
+*** True Line Result
+ result = rect_row opts[:row], opts[:h]
+** Processing line: ~ elsif !opts[:row] && opts[:col]~
+- Inside source: true
+*** True Line Result
+ elsif !opts[:row] && opts[:col]
+** Processing line: ~ result = rect_col opts[:col], opts[:w]~
+- Inside source: true
+*** True Line Result
+ result = rect_col opts[:col], opts[:w]
+** Processing line: ~ else~
+- Inside source: true
+*** True Line Result
+ else
+** Processing line: ~ raise "LayoutTheory::rect unable to process opts #{opts}."~
+- Inside source: true
+*** True Line Result
+ raise "LayoutTheory::rect unable to process opts #{opts}."
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if opts[:max_height] && opts[:max_height] >= 0~
+- Inside source: true
+*** True Line Result
+ if opts[:max_height] && opts[:max_height] >= 0
+** Processing line: ~ if result[:h] > opts[:max_height]~
+- Inside source: true
+*** True Line Result
+ if result[:h] > opts[:max_height]
+** Processing line: ~ delta = (result[:h] - opts[:max_height]) * 2~
+- Inside source: true
+*** True Line Result
+ delta = (result[:h] - opts[:max_height]) * 2
+** Processing line: ~ result[:y] += delta~
+- Inside source: true
+*** True Line Result
+ result[:y] += delta
+** Processing line: ~ result[:h] = opts[:max_height]~
+- Inside source: true
+*** True Line Result
+ result[:h] = opts[:max_height]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if opts[:max_width] && opts[:max_width] >= 0~
+- Inside source: true
+*** True Line Result
+ if opts[:max_width] && opts[:max_width] >= 0
+** Processing line: ~ if result[:w] > opts[:max_width]~
+- Inside source: true
+*** True Line Result
+ if result[:w] > opts[:max_width]
+** Processing line: ~ delta = (result[:w] - opts[:max_width]) * 2~
+- Inside source: true
+*** True Line Result
+ delta = (result[:w] - opts[:max_width]) * 2
+** Processing line: ~ result[:x] += delta~
+- Inside source: true
+*** True Line Result
+ result[:x] += delta
+** Processing line: ~ result[:w] = opts[:max_width]~
+- Inside source: true
+*** True Line Result
+ result[:w] = opts[:max_width]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ result[:x] += opts[:dx]~
+- Inside source: true
+*** True Line Result
+ result[:x] += opts[:dx]
+** Processing line: ~ result[:y] += opts[:dy]~
+- Inside source: true
+*** True Line Result
+ result[:y] += opts[:dy]
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if opts[:include_row_gutter]~
+- Inside source: true
+*** True Line Result
+ if opts[:include_row_gutter]
+** Processing line: ~ result[:x] -= device.grid_area.gutter~
+- Inside source: true
+*** True Line Result
+ result[:x] -= device.grid_area.gutter
+** Processing line: ~ result[:w] += device.grid_area.gutter * 2~
+- Inside source: true
+*** True Line Result
+ result[:w] += device.grid_area.gutter * 2
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ if opts[:include_col_gutter]~
+- Inside source: true
+*** True Line Result
+ if opts[:include_col_gutter]
+** Processing line: ~ result[:y] -= device.grid_area.gutter~
+- Inside source: true
+*** True Line Result
+ result[:y] -= device.grid_area.gutter
+** Processing line: ~ result[:h] += device.grid_area.gutter * 2~
+- Inside source: true
+*** True Line Result
+ result[:h] += device.grid_area.gutter * 2
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ result~
+- Inside source: true
+*** True Line Result
+ result
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def rect_center reference, target~
+- Inside source: true
+*** True Line Result
+ def rect_center reference, target
+** Processing line: ~ delta_x = (reference.w - target.w).fdiv 2~
+- Inside source: true
+*** True Line Result
+ delta_x = (reference.w - target.w).fdiv 2
+** Processing line: ~ delta_y = (reference.h - target.h).fdiv 2~
+- Inside source: true
+*** True Line Result
+ delta_y = (reference.h - target.h).fdiv 2
+** Processing line: ~ [target.x - delta_x, target.y - delta_y, target.w, target.h]~
+- Inside source: true
+*** True Line Result
+ [target.x - delta_x, target.y - delta_y, target.w, target.h]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def rect_row index, h~
+- Inside source: true
+*** True Line Result
+ def rect_row index, h
+** Processing line: ~ @rect_cache[:row] ||= {}~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:row] ||= {}
+** Processing line: ~ @rect_cache[:row][index] ||= {}~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:row][index] ||= {}
+** Processing line: ~ return @rect_cache[:row][index][h] if @rect_cache[:row][index][h]~
+- Inside source: true
+*** True Line Result
+ return @rect_cache[:row][index][h] if @rect_cache[:row][index][h]
+** Processing line: ~ row_h = (device.grid_area.gutter * (h - 1)) +~
+- Inside source: true
+*** True Line Result
+ row_h = (device.grid_area.gutter * (h - 1)) +
+** Processing line: ~ (device.control_area.cell_size * h)~
+- Inside source: true
+*** True Line Result
+ (device.control_area.cell_size * h)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ row_h = row_h.to_i~
+- Inside source: true
+*** True Line Result
+ row_h = row_h.to_i
+** Processing line: ~ row_h -= 1 if row_h.odd?~
+- Inside source: true
+*** True Line Result
+ row_h -= 1 if row_h.odd?
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ row_y = (control_rect.y) +~
+- Inside source: true
+*** True Line Result
+ row_y = (control_rect.y) +
+** Processing line: ~ (device.grid_area.gutter * index) +~
+- Inside source: true
+*** True Line Result
+ (device.grid_area.gutter * index) +
+** Processing line: ~ (device.control_area.cell_size * index)~
+- Inside source: true
+*** True Line Result
+ (device.control_area.cell_size * index)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ row_y = row_y.to_i~
+- Inside source: true
+*** True Line Result
+ row_y = row_y.to_i
+** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) > @device.grid_area.row_count.half~
+- Inside source: true
+*** True Line Result
+ row_y += 1 if row_y.odd? && (index + 1) > @device.grid_area.row_count.half
+** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) <= @device.grid_area.row_count.half~
+- Inside source: true
+*** True Line Result
+ row_y += 1 if row_y.odd? && (index + 1) <= @device.grid_area.row_count.half
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ row_y = device.h - row_y - row_h~
+- Inside source: true
+*** True Line Result
+ row_y = device.h - row_y - row_h
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ result = control_rect.merge y: row_y, h: row_h~
+- Inside source: true
+*** True Line Result
+ result = control_rect.merge y: row_y, h: row_h
+** Processing line: ~ @rect_cache[:row][index][h] = result~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:row][index][h] = result
+** Processing line: ~ @rect_cache[:row][index][h]~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:row][index][h]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def rect_col index, w~
+- Inside source: true
+*** True Line Result
+ def rect_col index, w
+** Processing line: ~ @rect_cache[:col] ||= {}~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:col] ||= {}
+** Processing line: ~ @rect_cache[:col][index] ||= {}~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:col][index] ||= {}
+** Processing line: ~ return @rect_cache[:col][index][w] if @rect_cache[:col][index][w]~
+- Inside source: true
+*** True Line Result
+ return @rect_cache[:col][index][w] if @rect_cache[:col][index][w]
+** Processing line: ~ col_x = (control_rect.x) +~
+- Inside source: true
+*** True Line Result
+ col_x = (control_rect.x) +
+** Processing line: ~ (device.grid_area.gutter * index) +~
+- Inside source: true
+*** True Line Result
+ (device.grid_area.gutter * index) +
+** Processing line: ~ (device.control_area.cell_size * index)~
+- Inside source: true
+*** True Line Result
+ (device.control_area.cell_size * index)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ col_x = col_x.to_i~
+- Inside source: true
+*** True Line Result
+ col_x = col_x.to_i
+** Processing line: ~ col_x -= 1 if col_x.odd? && (index + 1) < @device.grid_area.col_count.half~
+- Inside source: true
+*** True Line Result
+ col_x -= 1 if col_x.odd? && (index + 1) < @device.grid_area.col_count.half
+** Processing line: ~ col_x += 1 if col_x.odd? && (index + 1) >= @device.grid_area.col_count.half~
+- Inside source: true
+*** True Line Result
+ col_x += 1 if col_x.odd? && (index + 1) >= @device.grid_area.col_count.half
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ col_w = (device.grid_area.gutter * (w - 1)) +~
+- Inside source: true
+*** True Line Result
+ col_w = (device.grid_area.gutter * (w - 1)) +
+** Processing line: ~ (device.control_area.cell_size * w)~
+- Inside source: true
+*** True Line Result
+ (device.control_area.cell_size * w)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ col_w = col_w.to_i~
+- Inside source: true
+*** True Line Result
+ col_w = col_w.to_i
+** Processing line: ~ col_w -= 1 if col_w.odd?~
+- Inside source: true
+*** True Line Result
+ col_w -= 1 if col_w.odd?
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ result = control_rect.merge x: col_x, w: col_w~
+- Inside source: true
+*** True Line Result
+ result = control_rect.merge x: col_x, w: col_w
+** Processing line: ~ @rect_cache[:col][index][w] = result~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:col][index][w] = result
+** Processing line: ~ @rect_cache[:col][index][w]~
+- Inside source: true
+*** True Line Result
+ @rect_cache[:col][index][w]
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def device~
+- Inside source: true
+*** True Line Result
+ def device
+** Processing line: ~ @device~
+- Inside source: true
+*** True Line Result
+ @device
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def init_device w, h~
+- Inside source: true
+*** True Line Result
+ def init_device w, h
+** Processing line: ~ @device = Device.new~
+- Inside source: true
+*** True Line Result
+ @device = Device.new
+** Processing line: ~ @device.w = w~
+- Inside source: true
+*** True Line Result
+ @device.w = w
+** Processing line: ~ @device.h = h~
+- Inside source: true
+*** True Line Result
+ @device.h = h
+** Processing line: ~ @device.name = "Device"~
+- Inside source: true
+*** True Line Result
+ @device.name = "Device"
+** Processing line: ~ @device.aspect.w = (u_for_16x9 w, h)[:w]~
+- Inside source: true
+*** True Line Result
+ @device.aspect.w = (u_for_16x9 w, h)[:w]
+** Processing line: ~ @device.aspect.h = (u_for_16x9 w, h)[:h]~
+- Inside source: true
+*** True Line Result
+ @device.aspect.h = (u_for_16x9 w, h)[:h]
+** Processing line: ~ @device.aspect.u = (u_for_16x9 w, h)[:u]~
+- Inside source: true
+*** True Line Result
+ @device.aspect.u = (u_for_16x9 w, h)[:u]
+** Processing line: ~ @device.safe_area.w = @device.aspect.u * 16~
+- Inside source: true
+*** True Line Result
+ @device.safe_area.w = @device.aspect.u * 16
+** Processing line: ~ @device.safe_area.h = @device.aspect.u * 9~
+- Inside source: true
+*** True Line Result
+ @device.safe_area.h = @device.aspect.u * 9
+** Processing line: ~ @device.safe_area.margin.left = ((@device.w - @device.safe_area.w).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.safe_area.margin.left = ((@device.w - @device.safe_area.w).fdiv 2).floor
+** Processing line: ~ @device.safe_area.margin.right = ((@device.w - @device.safe_area.w).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.safe_area.margin.right = ((@device.w - @device.safe_area.w).fdiv 2).floor
+** Processing line: ~ @device.safe_area.margin.top = ((@device.h - @device.safe_area.h).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.safe_area.margin.top = ((@device.h - @device.safe_area.h).fdiv 2).floor
+** Processing line: ~ @device.safe_area.margin.bottom = ((@device.h - @device.safe_area.h).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.safe_area.margin.bottom = ((@device.h - @device.safe_area.h).fdiv 2).floor
+** Processing line: ~ @device.grid_area.outer_gutter = @device.w / 80~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.outer_gutter = @device.w / 80
+** Processing line: ~ @device.grid_area.gutter = @device.w / 160~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.gutter = @device.w / 160
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @device.grid_area.w = @device.safe_area.w - (@device.grid_area.outer_gutter * 2)~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.w = @device.safe_area.w - (@device.grid_area.outer_gutter * 2)
+** Processing line: ~ @device.grid_area.h = @device.safe_area.h - (@device.grid_area.outer_gutter * 2)~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.h = @device.safe_area.h - (@device.grid_area.outer_gutter * 2)
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @device.grid_area.margin.left = ((@device.w - @device.grid_area.w).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.margin.left = ((@device.w - @device.grid_area.w).fdiv 2).floor
+** Processing line: ~ @device.grid_area.margin.right = ((@device.w - @device.grid_area.w).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.margin.right = ((@device.w - @device.grid_area.w).fdiv 2).floor
+** Processing line: ~ @device.grid_area.margin.top = ((@device.h - @device.grid_area.h).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.margin.top = ((@device.h - @device.grid_area.h).fdiv 2).floor
+** Processing line: ~ @device.grid_area.margin.bottom = ((@device.h - @device.grid_area.h).fdiv 2).floor~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.margin.bottom = ((@device.h - @device.grid_area.h).fdiv 2).floor
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @device.grid_area.col_count = 24~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.col_count = 24
+** Processing line: ~ @device.grid_area.row_count = 12~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.row_count = 12
+** Processing line: ~ @device.grid_area.cell_w = ((@device.aspect.w - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.col_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.col_count~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.cell_w = ((@device.aspect.w - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.col_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.col_count
+** Processing line: ~ @device.grid_area.cell_h = ((@device.aspect.h - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.row_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.row_count~
+- Inside source: true
+*** True Line Result
+ @device.grid_area.cell_h = ((@device.aspect.h - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.row_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.row_count
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_w~
+- Inside source: true
+*** True Line Result
+ @device.control_area.cell_size = @device.grid_area.cell_w
+** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_h if @device.grid_area.cell_h < @device.grid_area.cell_w && @device.grid_area.cell_h > 0~
+- Inside source: true
+*** True Line Result
+ @device.control_area.cell_size = @device.grid_area.cell_h if @device.grid_area.cell_h < @device.grid_area.cell_w && @device.grid_area.cell_h > 0
+** Processing line: ~ @device.control_area.cell_size = @device.control_area.cell_size.floor~
+- Inside source: true
+*** True Line Result
+ @device.control_area.cell_size = @device.control_area.cell_size.floor
+** Processing line: ~ @device.control_area.w = (@device.control_area.cell_size * @device.grid_area.col_count) + (@device.grid_area.gutter * (@device.grid_area.col_count - 1))~
+- Inside source: true
+*** True Line Result
+ @device.control_area.w = (@device.control_area.cell_size * @device.grid_area.col_count) + (@device.grid_area.gutter * (@device.grid_area.col_count - 1))
+** Processing line: ~ @device.control_area.h = (@device.control_area.cell_size * @device.grid_area.row_count) + (@device.grid_area.gutter * (@device.grid_area.row_count - 1))~
+- Inside source: true
+*** True Line Result
+ @device.control_area.h = (@device.control_area.cell_size * @device.grid_area.row_count) + (@device.grid_area.gutter * (@device.grid_area.row_count - 1))
+** Processing line: ~ @device.control_area.margin.left = (@device.w - @device.control_area.w).fdiv 2~
+- Inside source: true
+*** True Line Result
+ @device.control_area.margin.left = (@device.w - @device.control_area.w).fdiv 2
+** Processing line: ~ @device.control_area.margin.right = (@device.w - @device.control_area.w).fdiv 2~
+- Inside source: true
+*** True Line Result
+ @device.control_area.margin.right = (@device.w - @device.control_area.w).fdiv 2
+** Processing line: ~ @device.control_area.margin.top = (@device.h - @device.control_area.h).fdiv 2~
+- Inside source: true
+*** True Line Result
+ @device.control_area.margin.top = (@device.h - @device.control_area.h).fdiv 2
+** Processing line: ~ @device.control_area.margin.bottom = (@device.h - @device.control_area.h).fdiv 2~
+- Inside source: true
+*** True Line Result
+ @device.control_area.margin.bottom = (@device.h - @device.control_area.h).fdiv 2
+** Processing line: ~ @device~
+- Inside source: true
+*** True Line Result
+ @device
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def serialize~
+- Inside source: true
+*** True Line Result
+ def serialize
+** Processing line: ~ {~
+- Inside source: true
+*** True Line Result
+ {
+** Processing line: ~ device: @device.serialize,~
+- Inside source: true
+*** True Line Result
+ device: @device.serialize,
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def inspect~
+- Inside source: true
+*** True Line Result
+ def inspect
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def to_s~
+- Inside source: true
+*** True Line Result
+ def to_s
+** Processing line: ~ serialize.to_s~
+- Inside source: true
+*** True Line Result
+ serialize.to_s
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
** Processing line: ~* log.rb~
- Header detected.
*** True Line Result
@@ -105891,6 +113899,26 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def from_right~
+- Inside source: true
+*** True Line Result
+ def from_right
+** Processing line: ~ return 1280 - self unless $gtk~
+- Inside source: true
+*** True Line Result
+ return 1280 - self unless $gtk
+** Processing line: ~ $gtk.args.grid.w - self~
+- Inside source: true
+*** True Line Result
+ $gtk.args.grid.w - self
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -107379,6 +115407,54 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def pixel_arrays~
+- Inside source: true
+*** True Line Result
+ def pixel_arrays
+** Processing line: ~ @args.pixel_arrays.each { |k,v|~
+- Inside source: true
+*** True Line Result
+ @args.pixel_arrays.each { |k,v|
+** Processing line: ~ if v.pixels.length == (v.width * v.height) # !!! FIXME: warning? exception? Different API?~
+- Inside source: true
+*** True Line Result
+ if v.pixels.length == (v.width * v.height) # !!! FIXME: warning? exception? Different API?
+** Processing line: ~ @ffi_draw.upload_pixel_array k.to_s, v.width.to_i, v.height.to_i, v.pixels~
+- Inside source: true
+*** True Line Result
+ @ffi_draw.upload_pixel_array k.to_s, v.width.to_i, v.height.to_i, v.pixels
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ rescue Exception => e~
+- Inside source: true
+*** True Line Result
+ rescue Exception => e
+** Processing line: ~ pause!~
+- Inside source: true
+*** True Line Result
+ pause!
+** Processing line: ~ pretty_print_exception_and_export! e~
+- Inside source: true
+*** True Line Result
+ pretty_print_exception_and_export! e
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ end~
- Inside source: true
*** True Line Result
@@ -109179,6 +117255,18 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~
+- Inside source: true
+*** True Line Result
+ # Contributors outside of DragonRuby who also hold Copyright:
+** Processing line: ~ # - Dan Healy: https://github.com/danhealy~
+- Inside source: true
+*** True Line Result
+ # - Dan Healy: https://github.com/danhealy
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ module GTK~
- Inside source: true
*** True Line Result
@@ -109495,6 +117583,38 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
+** Processing line: ~ def self.trace_times_string~
+- Inside source: true
+*** True Line Result
+ def self.trace_times_string
+** Processing line: ~ str = []~
+- Inside source: true
+*** True Line Result
+ str = []
+** Processing line: ~ $trace_performance.sort_by {|method_name, times| -times[:avg] }.each do |method_name, times|~
+- Inside source: true
+*** True Line Result
+ $trace_performance.sort_by {|method_name, times| -times[:avg] }.each do |method_name, times|
+** Processing line: ~ str << "#{method_name}: #{times[:sum].round(2)}/#{times[:count]} #{times[:min]}ms min, #{times[:avg].round(2)}ms avg, #{times[:max]}ms max"~
+- Inside source: true
+*** True Line Result
+ str << "#{method_name}: #{times[:sum].round(2)}/#{times[:count]} #{times[:min]}ms min, #{times[:avg].round(2)}ms avg, #{times[:max]}ms max"
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ str.join("\n")~
+- Inside source: true
+*** True Line Result
+ str.join("\n")
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ def self.flush_trace pad_with_newline = false~
- Inside source: true
*** True Line Result
@@ -109503,14 +117623,18 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
$trace_puts ||= []
+** Processing line: ~ puts "(Trace info flushed!)"~
+- Inside source: true
+*** True Line Result
+ puts "(Trace info flushed!)"
** Processing line: ~ if $trace_puts.length > 0~
- Inside source: true
*** True Line Result
if $trace_puts.length > 0
-** Processing line: ~ text = $trace_puts.join("")~
+** Processing line: ~ text = $trace_puts.join("").strip + "\n" + self.trace_times_string + "\n"~
- Inside source: true
*** True Line Result
- text = $trace_puts.join("")
+ text = $trace_puts.join("").strip + "\n" + self.trace_times_string + "\n"
** Processing line: ~ if pad_with_newline~
- Inside source: true
*** True Line Result
@@ -109567,6 +117691,42 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
$trace_call_depth ||=0
+** Processing line: ~ $trace_performance = Hash.new {|h,k|~
+- Inside source: true
+*** True Line Result
+ $trace_performance = Hash.new {|h,k|
+** Processing line: ~ h[k] = {~
+- Inside source: true
+*** True Line Result
+ h[k] = {
+** Processing line: ~ min: 100000,~
+- Inside source: true
+*** True Line Result
+ min: 100000,
+** Processing line: ~ max: 0,~
+- Inside source: true
+*** True Line Result
+ max: 0,
+** Processing line: ~ avg: 0,~
+- Inside source: true
+*** True Line Result
+ avg: 0,
+** Processing line: ~ sum: 0,~
+- Inside source: true
+*** True Line Result
+ sum: 0,
+** Processing line: ~ count: 0~
+- Inside source: true
+*** True Line Result
+ count: 0
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
+** Processing line: ~ }~
+- Inside source: true
+*** True Line Result
+ }
** Processing line: ~ flush_trace~
- Inside source: true
*** True Line Result
@@ -109635,14 +117795,26 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
parameters = "#{args}"[1..-2]
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ $trace_puts << "\n #{tab_width}#{m}(#{parameters})"~
- Inside source: true
*** True Line Result
$trace_puts << "\n #{tab_width}#{m}(#{parameters})"
-** Processing line: ~ execution_time = Time.new.to_i~
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ execution_time = Time.new~
- Inside source: true
*** True Line Result
- execution_time = Time.new.to_i
+ execution_time = Time.new
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ $last_method_traced = trace_method_name~
- Inside source: true
*** True Line Result
@@ -109651,14 +117823,50 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
$trace_history << [m, parameters]
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ result = send(trace_method_name, *args)~
- Inside source: true
*** True Line Result
result = send(trace_method_name, *args)
-** Processing line: ~ completion_time = Time.new.to_i~
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ class_m = "#{instance.class}##{m}"~
- Inside source: true
*** True Line Result
- completion_time = Time.new.to_i
+ class_m = "#{instance.class}##{m}"
+** Processing line: ~ completion_time = ((Time.new - execution_time).to_f * 1000).round(2)~
+- Inside source: true
+*** True Line Result
+ completion_time = ((Time.new - execution_time).to_f * 1000).round(2)
+** Processing line: ~ $trace_performance[class_m][:min] = [$trace_performance[class_m][:min], completion_time].min~
+- Inside source: true
+*** True Line Result
+ $trace_performance[class_m][:min] = [$trace_performance[class_m][:min], completion_time].min
+** Processing line: ~ $trace_performance[class_m][:max] = [$trace_performance[class_m][:max], completion_time].max~
+- Inside source: true
+*** True Line Result
+ $trace_performance[class_m][:max] = [$trace_performance[class_m][:max], completion_time].max
+** Processing line: ~ $trace_performance[class_m][:count] += 1~
+- Inside source: true
+*** True Line Result
+ $trace_performance[class_m][:count] += 1
+** Processing line: ~ $trace_performance[class_m][:sum] += completion_time~
+- Inside source: true
+*** True Line Result
+ $trace_performance[class_m][:sum] += completion_time
+** Processing line: ~ $trace_performance[class_m][:avg] = $trace_performance[class_m][:sum].fdiv($trace_performance[class_m][:count])~
+- Inside source: true
+*** True Line Result
+ $trace_performance[class_m][:avg] = $trace_performance[class_m][:sum].fdiv($trace_performance[class_m][:count])
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
** Processing line: ~ instance.__trace_call_depth__ -= 1~
- Inside source: true
*** True Line Result
@@ -109667,10 +117875,10 @@ Follows is a source code listing for all files that have been open sourced. This
- Inside source: true
*** True Line Result
instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0
-** Processing line: ~ $trace_puts << "\n #{tab_width} success: #{m}"~
+** Processing line: ~ $trace_puts << "\n #{tab_width} #{completion_time > 10 ? '!!! ' : ''}#{completion_time}ms success: #{m}"~
- Inside source: true
*** True Line Result
- $trace_puts << "\n #{tab_width} success: #{m}"
+ $trace_puts << "\n #{tab_width} #{completion_time > 10 ? '!!! ' : ''}#{completion_time}ms success: #{m}"
** Processing line: ~ if instance.__trace_call_depth__ == 0~
- Inside source: true
*** True Line Result
@@ -109771,6 +117979,90 @@ Follows is a source code listing for all files that have been open sourced. This
- Line was identified as the end of a code block.
*** True Line Result
#+end_src
+** Processing line: ~~
+- End of paragraph detected.
+*** True Line Result
+
+** Processing line: ~* wizards.rb~
+- Header detected.
+*** True Line Result
+
+*** True Line Result
+* wizards.rb
+** Processing line: ~#+begin_src ruby~
+- Line was identified as the beginning of a code block.
+*** True Line Result
+
+*** True Line Result
+#+begin_src ruby
+** Processing line: ~ # ./dragon/wizards.rb~
+- Inside source: true
+*** True Line Result
+ # ./dragon/wizards.rb
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+- Inside source: true
+*** True Line Result
+ # Copyright 2019 DragonRuby LLC
+** Processing line: ~ # MIT License~
+- Inside source: true
+*** True Line Result
+ # MIT License
+** Processing line: ~ # wizards.rb has been released under MIT (*only this file*).~
+- Inside source: true
+*** True Line Result
+ # wizards.rb has been released under MIT (*only this file*).
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ module GTK~
+- Inside source: true
+*** True Line Result
+ module GTK
+** Processing line: ~ class Wizards~
+- Inside source: true
+*** True Line Result
+ class Wizards
+** Processing line: ~ attr_accessor :ios, :itch~
+- Inside source: true
+*** True Line Result
+ attr_accessor :ios, :itch
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~ def initialize~
+- Inside source: true
+*** True Line Result
+ def initialize
+** Processing line: ~ @ios = IOSWizard.new~
+- Inside source: true
+*** True Line Result
+ @ios = IOSWizard.new
+** Processing line: ~ @itch = ItchWizard.new~
+- Inside source: true
+*** True Line Result
+ @itch = ItchWizard.new
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~ end~
+- Inside source: true
+*** True Line Result
+ end
+** Processing line: ~~
+- Inside source: true
+*** True Line Result
+
+** Processing line: ~#+end_src~
+- Line was identified as the end of a code block.
+*** True Line Result
+#+end_src
* Processing Html Given True Lines
** Processing line: ~* DragonRuby Game Toolkit Live Docs~
- H1 detected.
@@ -112790,6 +121082,22 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
+** Processing line: ~* DOCS: ~GTK::Runtime#reset~~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~DOCS: ~GTK::Runtime#reset~~
+- Line's tilde count is: 2
+- Line contains link marker: false
+- CODE detected.
+** Processing line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~
+- P detected.
+- Determining if line is a header.
+- Line does not appear to be a header.
+- Formatting line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
** Processing line: ~* DOCS: ~GTK::Runtime#calcstringbox~~
- H1 detected.
- Determining if line is a header.
@@ -112816,22 +121124,6 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
-** Processing line: ~* DOCS: ~GTK::Runtime#reset~~
-- H1 detected.
-- Determining if line is a header.
-- Line contains ~* ~... gsub-ing empty string
-- Formatting line: ~DOCS: ~GTK::Runtime#reset~~
-- Line's tilde count is: 2
-- Line contains link marker: false
-- CODE detected.
-** Processing line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~
-- P detected.
-- Determining if line is a header.
-- Line does not appear to be a header.
-- Formatting line: ~This function will reset Kernel.tick_count to 0 and will remove all data from args.state.~
-- Line's tilde count is: 0
-- Line contains link marker: false
-** Processing line: ~~
** Processing line: ~* DOCS: ~Array~~
- H1 detected.
- Determining if line is a header.
@@ -113511,6 +121803,65 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~~
** Processing line: ~~
** Processing line: ~~
+** Processing line: ~* DOCS: ~GTK::Outputs#screenshots~~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~DOCS: ~GTK::Outputs#screenshots~~
+- Line's tilde count is: 2
+- Line contains link marker: false
+- CODE detected.
+** Processing line: ~~
+** Processing line: ~Add a hash to this collection to take a screenshot and save as png file. The keys of the hash can be provided in any order.~
+- P detected.
+- Determining if line is a header.
+- Line does not appear to be a header.
+- Formatting line: ~Add a hash to this collection to take a screenshot and save as png file. The keys of the hash can be provided in any order.~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src~
+- PRE start detected.
+** Processing line: ~ def tick args~
+** Processing line: ~ args.outputs.screenshots << {~
+** Processing line: ~ x: 0, y: 0, w: 100, h: 100, # Which portion of the screen should be captured~
+** Processing line: ~ path: 'screenshot.png', # Output path of PNG file (inside game directory)~
+** Processing line: ~ r: 255, g: 255, b: 255, a: 0 # Optional chroma key~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~** Chroma key (Making a color transparent)~
+- H2 detected.
+- Determining if line is a header.
+- Line contains ~** ~... gsub-ing empty string
+- Formatting line: ~Chroma key (Making a color transparent)~
+- Line's tilde count is: 0
+- Line contains link marker: false
+- Determining if line is a header.
+- Line contains ~** ~... gsub-ing empty string
+- Formatting line: ~Chroma key (Making a color transparent)~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file. This can be useful if you want to create files with transparent background like spritesheets. The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~.~
+- P detected.
+- Determining if line is a header.
+- Line does not appear to be a header.
+- Formatting line: ~By specifying the r, g, b and a keys of the hash you change the transparency of a color in the resulting PNG file. This can be useful if you want to create files with transparent background like spritesheets. The transparency of the color specified by ~r~, ~g~, ~b~ will be set to the transparency specified by ~a~.~
+- Line's tilde count is: 8
+- Line contains link marker: false
+- CODE detected.
+** Processing line: ~The example above sets the color white (255, 255, 255) as transparent.~
+- P detected.
+- Determining if line is a header.
+- Line does not appear to be a header.
+- Formatting line: ~The example above sets the color white (255, 255, 255) as transparent.~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
** Processing line: ~* DOCS: ~GTK::Mouse~~
- H1 detected.
- Determining if line is a header.
@@ -115461,22 +123812,6 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
-** Processing line: ~* Learn Ruby Optional - Intermediate Ruby Primer - repl.rb~
-- H1 detected.
-- Determining if line is a header.
-- Line contains ~* ~... gsub-ing empty string
-- Formatting line: ~Learn Ruby Optional - Intermediate Ruby Primer - repl.rb~
-- Line's tilde count is: 0
-- Line contains link marker: false
-** Processing line: ~~
-** Processing line: ~#+begin_src ruby~
-- PRE start detected.
-** Processing line: ~ # ./samples/00_learn_ruby_optional/00_intermediate_ruby_primer/app/repl.rb~
-** Processing line: ~~
-** Processing line: ~#+end_src~
-- PRE end detected.
-** Processing line: ~~
-** Processing line: ~~
** Processing line: ~* Rendering Basics - Labels - main.rb~
- H1 detected.
- Determining if line is a header.
@@ -116114,6 +124449,9 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~ def spawn_new_sound args, num~
+** Processing line: ~ input = nil~
+** Processing line: ~ input = "sounds/#{num}.#{(num == 6) ? 'ogg' : 'wav'}"~
+** Processing line: ~~
** Processing line: ~ # Spawn randomly in an area that won't be covered by UI.~
** Processing line: ~ screenx = (rand * 600.0) + 200.0~
** Processing line: ~ screeny = (rand * 400.0) + 100.0~
@@ -116123,7 +124461,7 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ # you can hang anything on the audio hashes you want, so we store the~
** Processing line: ~ # actual screen position in here for convenience.~
** Processing line: ~ args.audio[args.state.next_sound_index] = {~
-** Processing line: ~ filename: "sounds/#{num}.#{(num == 6) ? 'ogg' : 'wav'}",~
+** Processing line: ~ input: input,~
** Processing line: ~ screenx: screenx,~
** Processing line: ~ screeny: screeny,~
** Processing line: ~ x: ((screenx / 1279.0) * 2.0) - 1.0, # scale to -1.0 - 1.0 range~
@@ -116177,6 +124515,377 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ render_ui args~
** Processing line: ~ end~
** Processing line: ~~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~* Rendering Basics - Sound Synthesis - main.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~Rendering Basics - Sound Synthesis - main.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./samples/01_rendering_basics/07_sound_synthesis/app/main.rb~
+** Processing line: ~ def tick args~
+** Processing line: ~ defaults args~
+** Processing line: ~ render args~
+** Processing line: ~ input args~
+** Processing line: ~ process_audio_queue args~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def defaults args~
+** Processing line: ~ args.state.sine_waves ||= {}~
+** Processing line: ~ args.state.audio_queue ||= []~
+** Processing line: ~ args.state.buttons ||= [~
+** Processing line: ~ (frequency_buttons args),~
+** Processing line: ~ (note_buttons args),~
+** Processing line: ~ (bell_buttons args)~
+** Processing line: ~ ].flatten~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def frequency_buttons args~
+** Processing line: ~ [~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 4.0, col: 0, text: "300hz",~
+** Processing line: ~ frequency: 300,~
+** Processing line: ~ method_to_call: :play_sine_wave),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 5.0, col: 0, text: "400hz",~
+** Processing line: ~ frequency: 400,~
+** Processing line: ~ method_to_call: :play_sine_wave),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 6.0, col: 0, text: "500hz",~
+** Processing line: ~ frequency: 500,~
+** Processing line: ~ method_to_call: :play_sine_wave),~
+** Processing line: ~ ]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def play_sine_wave args, sender~
+** Processing line: ~ queue_sine_wave args,~
+** Processing line: ~ frequency: sender[:frequency],~
+** Processing line: ~ duration: 1.seconds,~
+** Processing line: ~ fade_out: true~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~ def note_buttons args~
+** Processing line: ~ [~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 1.5, col: 3, text: "C4",~
+** Processing line: ~ note: :c, octave: 4, method_to_call: :play_note),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 2.5, col: 3, text: "D4",~
+** Processing line: ~ note: :d, octave: 4, method_to_call: :play_note),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 3.5, col: 3, text: "E4",~
+** Processing line: ~ note: :e, octave: 4, method_to_call: :play_note),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 4.5, col: 3, text: "F4",~
+** Processing line: ~ note: :f, octave: 4, method_to_call: :play_note),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 5.5, col: 3, text: "G4",~
+** Processing line: ~ note: :g, octave: 4, method_to_call: :play_note),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 6.5, col: 3, text: "A5",~
+** Processing line: ~ note: :a, octave: 5, method_to_call: :play_note),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 7.5, col: 3, text: "B5",~
+** Processing line: ~ note: :b, octave: 5, method_to_call: :play_note),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 8.5, col: 3, text: "C5",~
+** Processing line: ~ note: :c, octave: 5, method_to_call: :play_note),~
+** Processing line: ~ ]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def play_note args, sender~
+** Processing line: ~ queue_sine_wave args,~
+** Processing line: ~ frequency: (frequency_for note: sender[:note],~
+** Processing line: ~ octave: sender[:octave]),~
+** Processing line: ~ duration: 1.seconds,~
+** Processing line: ~ fade_out: true~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def bell_buttons args~
+** Processing line: ~ [~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 1.5, col: 6, text: "Bell C4",~
+** Processing line: ~ note: :c, octave: 4, method_to_call: :play_bell),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 2.5, col: 6, text: "Bell D4",~
+** Processing line: ~ note: :d, octave: 4, method_to_call: :play_bell),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 3.5, col: 6, text: "Bell E4",~
+** Processing line: ~ note: :e, octave: 4, method_to_call: :play_bell),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 4.5, col: 6, text: "Bell F4",~
+** Processing line: ~ note: :f, octave: 4, method_to_call: :play_bell),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 5.5, col: 6, text: "Bell G4",~
+** Processing line: ~ note: :g, octave: 4, method_to_call: :play_bell),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 6.5, col: 6, text: "Bell A5",~
+** Processing line: ~ note: :a, octave: 5, method_to_call: :play_bell),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 7.5, col: 6, text: "Bell B5",~
+** Processing line: ~ note: :b, octave: 5, method_to_call: :play_bell),~
+** Processing line: ~ (button args,~
+** Processing line: ~ row: 8.5, col: 6, text: "Bell C5",~
+** Processing line: ~ note: :c, octave: 5, method_to_call: :play_bell),~
+** Processing line: ~ ]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def play_bell args, sender~
+** Processing line: ~ queue_bell args,~
+** Processing line: ~ frequency: (frequency_for note: sender[:note],~
+** Processing line: ~ octave: sender[:octave]),~
+** Processing line: ~ duration: 2.seconds,~
+** Processing line: ~ fade_out: true~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def render args~
+** Processing line: ~ args.outputs.borders << args.state.buttons.map { |b| b[:border] }~
+** Processing line: ~ args.outputs.labels << args.state.buttons.map { |b| b[:label] }~
+** Processing line: ~ args.outputs.labels << args.layout~
+** Processing line: ~ .rect(row: 0,~
+** Processing line: ~ col: 11.5)~
+** Processing line: ~ .yield_self { |r| r.merge y: r.y + r.h }~
+** Processing line: ~ .merge(text: "This is a Pro only feature. Click here to watch the YouTube video if you are on the Standard License.",~
+** Processing line: ~ alignment_enum: 1)~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def input args~
+** Processing line: ~ args.state.buttons.each do |b|~
+** Processing line: ~ if args.inputs.mouse.click.inside_rect? b[:rect]~
+** Processing line: ~ parameter_string = (b.slice :frequency, :note, :octave).map { |k, v| "#{k}: #{v}" }.join ", "~
+** Processing line: ~ args.gtk.notify! "#{b[:method_to_call]} #{parameter_string}"~
+** Processing line: ~ send b[:method_to_call], args, b~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if args.inputs.mouse.click.inside_rect? (args.layout.rect(row: 0).yield_self { |r| r.merge y: r.y + r.h.half, h: r.h.half })~
+** Processing line: ~ args.gtk.openurl 'https://www.youtube.com/watch?v=zEzovM5jT-k&ab_channel=AmirRajan'~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def process_audio_queue args~
+** Processing line: ~ to_queue = args.state.audio_queue.find_all { |v| v[:queue_at] <= args.tick_count }~
+** Processing line: ~ args.state.audio_queue -= to_queue~
+** Processing line: ~~
+** Processing line: ~ to_queue.each do |a|~
+** Processing line: ~ args.audio[a[:id]] = a~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ args.audio.each do |k, v|~
+** Processing line: ~ if v[:decay_rate]~
+** Processing line: ~ v[:gain] -= v[:decay_rate]~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ sounds_to_stop = args.audio.find_all do |k, v|~
+** Processing line: ~ v[:stop_at] && args.state.tick_count >= v[:stop_at]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ sounds_to_stop.each do |(k, v)|~
+** Processing line: ~ args.audio.delete k~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def graph_sine_wave args, sine_wave, frequency~
+** Processing line: ~ if args.state.tick_count != args.state.graphed_at~
+** Processing line: ~ args.outputs.static_lines.clear~
+** Processing line: ~ args.outputs.static_sprites.clear~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ r, g, b = frequency.to_i % 80, frequency.to_i % 128, frequency.to_i % 255~
+** Processing line: ~ center_row = args.layout.rect(row: 5, col: 9)~
+** Processing line: ~ x_scale = 20~
+** Processing line: ~ y_scale = 100~
+** Processing line: ~ max_points = 20~
+** Processing line: ~~
+** Processing line: ~ points = sine_wave~
+** Processing line: ~ if sine_wave.length > max_points~
+** Processing line: ~ resolution = sine_wave.length.idiv max_points~
+** Processing line: ~ points = sine_wave.find_all~
+** Processing line: ~ .with_index { |y, i| i % resolution == 0 }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ args.outputs.static_lines << points.map_with_index do |y, x|~
+** Processing line: ~ next_y = points[x + 1]~
+** Processing line: ~~
+** Processing line: ~ if next_y~
+** Processing line: ~ {~
+** Processing line: ~ x: center_row.x + (x * x_scale),~
+** Processing line: ~ y: center_row.y + center_row.h.half + y_scale * y,~
+** Processing line: ~ x2: center_row.x + ((x + 1) * x_scale),~
+** Processing line: ~ y2: center_row.y + center_row.h.half + y_scale * next_y,~
+** Processing line: ~ r: r,~
+** Processing line: ~ g: g,~
+** Processing line: ~ b: b~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ args.outputs.static_sprites << points.map_with_index do |y, x|~
+** Processing line: ~ {~
+** Processing line: ~ x: (center_row.x + (x * x_scale)) - 1,~
+** Processing line: ~ y: (center_row.y + center_row.h.half + y_scale * y) - 1,~
+** Processing line: ~ w: 2,~
+** Processing line: ~ h: 2,~
+** Processing line: ~ path: 'sprites/square-black.png'~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ args.state.graphed_at = args.state.tick_count~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def defaults_period_sine_wave_for~
+** Processing line: ~ { frequency: 440, sample_rate: 48000 }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def sine_wave_for opts = { }~
+** Processing line: ~ opts = defaults_period_sine_wave_for.merge opts~
+** Processing line: ~ frequency = opts[:frequency]~
+** Processing line: ~ sample_rate = opts[:sample_rate]~
+** Processing line: ~ period_size = (sample_rate.fdiv frequency).ceil~
+** Processing line: ~ period_size.map_with_index do |i|~
+** Processing line: ~ Math::sin((2.0 * Math::PI) / (sample_rate.to_f / frequency.to_f) * i)~
+** Processing line: ~ end.to_a~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def generate_audio_data sine_wave, sample_rate~
+** Processing line: ~ sample_size = (sample_rate.fdiv (1000.fdiv 60)).ceil~
+** Processing line: ~ copy_count = (sample_size.fdiv sine_wave.length).ceil~
+** Processing line: ~ sine_wave * copy_count~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def defaults_queue_sine_wave~
+** Processing line: ~ { frequency: 440, duration: 60, gain: 1.0, fade_out: false, queue_in: 0 }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def queue_sine_wave args, opts = { }~
+** Processing line: ~ opts = defaults_queue_sine_wave.merge opts~
+** Processing line: ~ decay_rate = 0~
+** Processing line: ~ decay_rate = 1.fdiv(opts[:duration]) * opts[:gain] if opts[:fade_out]~
+** Processing line: ~ frequency = opts[:frequency]~
+** Processing line: ~ sample_rate = 48000~
+** Processing line: ~~
+** Processing line: ~ audio_state = {~
+** Processing line: ~ id: (new_id! args),~
+** Processing line: ~ frequency: frequency,~
+** Processing line: ~ sample_rate: 48000,~
+** Processing line: ~ stop_at: args.tick_count + opts[:queue_in] + opts[:duration],~
+** Processing line: ~ gain: opts[:gain].to_f,~
+** Processing line: ~ queue_at: args.state.tick_count + opts[:queue_in],~
+** Processing line: ~ decay_rate: decay_rate,~
+** Processing line: ~ pitch: 1.0,~
+** Processing line: ~ looping: true,~
+** Processing line: ~ paused: false~
+** Processing line: ~ }~
+** Processing line: ~~
+** Processing line: ~ sine_wave = sine_wave_for frequency: frequency, sample_rate: sample_rate~
+** Processing line: ~ args.state.sine_waves[frequency] ||= sine_wave_for frequency: frequency, sample_rate: sample_rate~
+** Processing line: ~~
+** Processing line: ~ proc = lambda do~
+** Processing line: ~ generate_audio_data args.state.sine_waves[frequency], sample_rate~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ audio_state[:input] = [1, sample_rate, proc]~
+** Processing line: ~ graph_sine_wave args, sine_wave, frequency~
+** Processing line: ~ args.state.audio_queue << audio_state~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def defaults_queue_bell~
+** Processing line: ~ { frequency: 440, duration: 1.seconds, queue_in: 0 }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def queue_bell args, opts = {}~
+** Processing line: ~ (bell_to_sine_waves (defaults_queue_bell.merge opts)).each { |b| queue_sine_wave args, b }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def bell_harmonics~
+** Processing line: ~ [~
+** Processing line: ~ { frequency_ratio: 0.5, duration_ratio: 1.00 },~
+** Processing line: ~ { frequency_ratio: 1.0, duration_ratio: 0.80 },~
+** Processing line: ~ { frequency_ratio: 2.0, duration_ratio: 0.60 },~
+** Processing line: ~ { frequency_ratio: 3.0, duration_ratio: 0.40 },~
+** Processing line: ~ { frequency_ratio: 4.2, duration_ratio: 0.25 },~
+** Processing line: ~ { frequency_ratio: 5.4, duration_ratio: 0.20 },~
+** Processing line: ~ { frequency_ratio: 6.8, duration_ratio: 0.15 }~
+** Processing line: ~ ]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def bell_to_sine_waves opts~
+** Processing line: ~ bell_harmonics.map do |b|~
+** Processing line: ~ {~
+** Processing line: ~ frequency: opts[:frequency] * b[:frequency_ratio],~
+** Processing line: ~ duration: opts[:duration] * b[:duration_ratio],~
+** Processing line: ~ queue_in: opts[:queue_in],~
+** Processing line: ~ gain: (1.fdiv bell_harmonics.length),~
+** Processing line: ~ fade_out: true~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def defaults_frequency_for~
+** Processing line: ~ { note: :a, octave: 5, sharp: false, flat: false }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def frequency_for opts = {}~
+** Processing line: ~ opts = defaults_frequency_for.merge opts~
+** Processing line: ~ octave_offset_multiplier = opts[:octave] - 5~
+** Processing line: ~ note = note_frequencies_octave_5[opts[:note]]~
+** Processing line: ~ if octave_offset_multiplier < 0~
+** Processing line: ~ note = note * 1 / (octave_offset_multiplier.abs + 1)~
+** Processing line: ~ elsif octave_offset_multiplier > 0~
+** Processing line: ~ note = note * (octave_offset_multiplier.abs + 1) / 1~
+** Processing line: ~ end~
+** Processing line: ~ note~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def note_frequencies_octave_5~
+** Processing line: ~ {~
+** Processing line: ~ a: 440.0,~
+** Processing line: ~ a_sharp: 466.16, b_flat: 466.16,~
+** Processing line: ~ b: 493.88,~
+** Processing line: ~ c: 523.25,~
+** Processing line: ~ c_sharp: 554.37, d_flat: 587.33,~
+** Processing line: ~ d: 587.33,~
+** Processing line: ~ d_sharp: 622.25, e_flat: 659.25,~
+** Processing line: ~ e: 659.25,~
+** Processing line: ~ f: 698.25,~
+** Processing line: ~ f_sharp: 739.99, g_flat: 739.99,~
+** Processing line: ~ g: 783.99,~
+** Processing line: ~ g_sharp: 830.61, a_flat: 830.61~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def new_id! args~
+** Processing line: ~ args.state.audio_id ||= 0~
+** Processing line: ~ args.state.audio_id += 1~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def button args, opts~
+** Processing line: ~ button_def = opts.merge rect: (args.layout.rect (opts.merge w: 2, h: 1))~
+** Processing line: ~~
+** Processing line: ~ button_def[:border] = button_def[:rect].merge r: 0, g: 0, b: 0~
+** Processing line: ~~
+** Processing line: ~ font_size_enum = args.layout.font_relative_size_enum 0~
+** Processing line: ~ label_offset_x = 4~
+** Processing line: ~ label_offset_y = button_def[:rect].h.half + button_def[:rect].h.idiv(4)~
+** Processing line: ~~
+** Processing line: ~ button_def[:label] = button_def[:rect].merge text: opts[:text],~
+** Processing line: ~ size_enum: font_size_enum,~
+** Processing line: ~ x: button_def[:rect].x + label_offset_x,~
+** Processing line: ~ y: button_def[:rect].y + label_offset_y~
+** Processing line: ~~
+** Processing line: ~ button_def~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ $gtk.reset~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
@@ -116832,6 +125541,64 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
+** Processing line: ~* Input Basics - Touch - main.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~Input Basics - Touch - main.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./samples/02_input_basics/06_touch/app/main.rb~
+** Processing line: ~ def tick args~
+** Processing line: ~ args.outputs.background_color = [ 0, 0, 0 ]~
+** Processing line: ~ args.outputs.primitives << [640, 700, "Touch your screen.", 5, 1, 255, 255, 255].label~
+** Processing line: ~~
+** Processing line: ~ # If you don't want to get fancy, you can just look for finger_one~
+** Processing line: ~ # (and _two, if you like), which are assigned in the order new touches hit~
+** Processing line: ~ # the screen. If not nil, they are touching right now, and are just~
+** Processing line: ~ # references to specific items in the args.input.touch hash.~
+** Processing line: ~ # If finger_one lifts off, it will become nil, but finger_two, if it was~
+** Processing line: ~ # touching, remains until it also lifts off. When all fingers lift off, the~
+** Processing line: ~ # the next new touch will be finger_one again, but until then, new touches~
+** Processing line: ~ # don't fill in earlier slots.~
+** Processing line: ~ if !args.inputs.finger_one.nil?~
+** Processing line: ~ args.outputs.primitives << [640, 650, "Finger #1 is touching at (#{args.inputs.finger_one.x}, #{args.inputs.finger_one.y}).", 5, 1, 255, 255, 255].label~
+** Processing line: ~ end~
+** Processing line: ~ if !args.inputs.finger_two.nil?~
+** Processing line: ~ args.outputs.primitives << [640, 600, "Finger #2 is touching at (#{args.inputs.finger_two.x}, #{args.inputs.finger_two.y}).", 5, 1, 255, 255, 255].label~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ # Here's the more flexible interface: this will report as many simultaneous~
+** Processing line: ~ # touches as the system can handle, but it's a little more effort to track~
+** Processing line: ~ # them. Each item in the args.input.touch hash has a unique key (an~
+** Processing line: ~ # incrementing integer) that exists until the finger lifts off. You can~
+** Processing line: ~ # tell which order the touches happened globally by the key value, or~
+** Processing line: ~ # by the touch[id].touch_order field, which resets to zero each time all~
+** Processing line: ~ # touches have lifted.~
+** Processing line: ~~
+** Processing line: ~ args.state.colors ||= [~
+** Processing line: ~ 0xFF0000, 0x00FF00, 0x1010FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF~
+** Processing line: ~ ]~
+** Processing line: ~~
+** Processing line: ~ size = 100~
+** Processing line: ~ args.inputs.touch.each { |k,v|~
+** Processing line: ~ color = args.state.colors[v.touch_order % 7]~
+** Processing line: ~ r = (color & 0xFF0000) >> 16~
+** Processing line: ~ g = (color & 0x00FF00) >> 8~
+** Processing line: ~ b = (color & 0x0000FF)~
+** Processing line: ~ args.outputs.primitives << [v.x - (size / 2), v.y + (size / 2), size, size, r, g, b, 255].solid~
+** Processing line: ~ args.outputs.primitives << [v.x, v.y + size, k.to_s, 0, 1, 0, 0, 0].label~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
** Processing line: ~* Rendering Sprites - Animation Using Separate Pngs - main.rb~
- H1 detected.
- Determining if line is a header.
@@ -121579,6 +130346,63 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
+** Processing line: ~* Advanced Rendering - Pixel Arrays - main.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~Advanced Rendering - Pixel Arrays - main.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./samples/07_advanced_rendering/06_pixel_arrays/app/main.rb~
+** Processing line: ~ $gtk.reset~
+** Processing line: ~~
+** Processing line: ~ def tick args~
+** Processing line: ~ args.state.posinc ||= 1~
+** Processing line: ~ args.state.pos ||= 0~
+** Processing line: ~ args.state.rotation ||= 0~
+** Processing line: ~~
+** Processing line: ~ dimension = 10 # keep it small and let the GPU scale it when rendering the sprite.~
+** Processing line: ~~
+** Processing line: ~ # Set up our "scanner" pixel array and fill it with black pixels.~
+** Processing line: ~ args.pixel_array(:scanner).width = dimension~
+** Processing line: ~ args.pixel_array(:scanner).height = dimension~
+** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF000000, 0, dimension * dimension) # black, full alpha~
+** Processing line: ~~
+** Processing line: ~ # Draw a green line that bounces up and down the sprite.~
+** Processing line: ~ args.pixel_array(:scanner).pixels.fill(0xFF00FF00, dimension * args.state.pos, dimension) # green, full alpha~
+** Processing line: ~~
+** Processing line: ~ # Adjust position for next frame.~
+** Processing line: ~ args.state.pos += args.state.posinc~
+** Processing line: ~ if args.state.posinc > 0 && args.state.pos >= dimension~
+** Processing line: ~ args.state.posinc = -1~
+** Processing line: ~ args.state.pos = dimension - 1~
+** Processing line: ~ elsif args.state.posinc < 0 && args.state.pos < 0~
+** Processing line: ~ args.state.posinc = 1~
+** Processing line: ~ args.state.pos = 1~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~
+** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~
+** Processing line: ~ # used like any other sprite.~
+** Processing line: ~ w = 100~
+** Processing line: ~ h = 100~
+** Processing line: ~ x = (1280 - w) / 2~
+** Processing line: ~ y = (720 - h) / 2~
+** Processing line: ~ args.outputs.background_color = [64, 0, 128]~
+** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~
+** Processing line: ~ args.state.rotation += 1~
+** Processing line: ~~
+** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
** Processing line: ~* Tweening Lerping Easing Functions - Easing Functions - main.rb~
- H1 detected.
- Determining if line is a header.
@@ -123401,6 +132225,44 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
+** Processing line: ~* 12 C Extensions - Native Pixel Arrays - main.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~12 C Extensions - Native Pixel Arrays - main.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./samples/12_c_extensions/03_native_pixel_arrays/app/main.rb~
+** Processing line: ~ $gtk.ffi_misc.gtk_dlopen("ext")~
+** Processing line: ~ include FFI::CExt~
+** Processing line: ~~
+** Processing line: ~ def tick args~
+** Processing line: ~ args.state.rotation ||= 0~
+** Processing line: ~~
+** Processing line: ~ update_scanner_texture # this calls into a C extension!~
+** Processing line: ~~
+** Processing line: ~ # New/changed pixel arrays get uploaded to the GPU before we render~
+** Processing line: ~ # anything. At that point, they can be scaled, rotated, and otherwise~
+** Processing line: ~ # used like any other sprite.~
+** Processing line: ~ w = 100~
+** Processing line: ~ h = 100~
+** Processing line: ~ x = (1280 - w) / 2~
+** Processing line: ~ y = (720 - h) / 2~
+** Processing line: ~ args.outputs.background_color = [64, 0, 128]~
+** Processing line: ~ args.outputs.primitives << [x, y, w, h, :scanner, args.state.rotation].sprite~
+** Processing line: ~ args.state.rotation += 1~
+** Processing line: ~~
+** Processing line: ~ args.outputs.primitives << args.gtk.current_framerate_primitives~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
** Processing line: ~* 3d - 3d Cube - main.rb~
- H1 detected.
- Determining if line is a header.
@@ -129250,39 +138112,6 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
-** Processing line: ~* Platformer - Gorillas Basic - repl.rb~
-- H1 detected.
-- Determining if line is a header.
-- Line contains ~* ~... gsub-ing empty string
-- Formatting line: ~Platformer - Gorillas Basic - repl.rb~
-- Line's tilde count is: 0
-- Line contains link marker: false
-** Processing line: ~~
-** Processing line: ~#+begin_src ruby~
-- PRE start detected.
-** Processing line: ~ # ./samples/99_genre_platformer/gorillas_basic/app/repl.rb~
-** Processing line: ~ begin~
-** Processing line: ~ if $gtk.args.state.current_turn == :player_1_angle~
-** Processing line: ~ $gtk.args.state.player_1_angle = "#{60 + 10.randomize(:ratio).to_i}"~
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-** Processing line: ~ $gtk.args.state.player_1_velocity = "#{30 + 20.randomize(:ratio).to_i}"~
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-** Processing line: ~ elsif $gtk.args.state.current_turn == :player_2_angle~
-** Processing line: ~ $gtk.args.state.player_2_angle = "#{60 + 10.randomize(:ratio).to_i}"~
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-** Processing line: ~ $gtk.args.state.player_2_velocity = "#{30 + 20.randomize(:ratio).to_i}"~
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-** Processing line: ~ else~
-** Processing line: ~ $you_so_basic_gorillas.input_execute_turn~
-** Processing line: ~ end~
-** Processing line: ~ rescue Exception => e~
-** Processing line: ~ puts e~
-** Processing line: ~ end~
-** Processing line: ~~
-** Processing line: ~#+end_src~
-- PRE end detected.
-** Processing line: ~~
-** Processing line: ~~
** Processing line: ~* Platformer - Gorillas Basic - tests.rb~
- H1 detected.
- Determining if line is a header.
@@ -132780,23 +141609,6 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
-** Processing line: ~* Rpg Narrative - Return Of Serenity - repl.rb~
-- H1 detected.
-- Determining if line is a header.
-- Line contains ~* ~... gsub-ing empty string
-- Formatting line: ~Rpg Narrative - Return Of Serenity - repl.rb~
-- Line's tilde count is: 0
-- Line contains link marker: false
-** Processing line: ~~
-** Processing line: ~#+begin_src ruby~
-- PRE start detected.
-** Processing line: ~ # ./samples/99_genre_rpg_narrative/return_of_serenity/app/repl.rb~
-** Processing line: ~ puts $gtk.args.state.current_scene~
-** Processing line: ~~
-** Processing line: ~#+end_src~
-- PRE end detected.
-** Processing line: ~~
-** Processing line: ~~
** Processing line: ~* Rpg Narrative - Return Of Serenity - require.rb~
- H1 detected.
- Determining if line is a header.
@@ -135827,6 +144639,8 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~~
** Processing line: ~ attr_accessor :wizards~
** Processing line: ~~
+** Processing line: ~ attr_accessor :layout~
+** Processing line: ~~
** Processing line: ~ def initialize runtime, recording~
** Processing line: ~ @inputs = Inputs.new~
** Processing line: ~ @outputs = Outputs.new args: self~
@@ -135838,9 +144652,11 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @recording = recording~
** Processing line: ~ @grid = Grid.new runtime~
** Processing line: ~ @render_targets = {}~
+** Processing line: ~ @pixel_arrays = {}~
** Processing line: ~ @all_tests = []~
** Processing line: ~ @geometry = GTK::Geometry~
** Processing line: ~ @wizards = Wizards.new~
+** Processing line: ~ @layout = GTK::Layout.new @grid.w, @grid.h~
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~~
@@ -135869,6 +144685,26 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ [grid, inputs, state, outputs, runtime, passes]~
** Processing line: ~ end~
** Processing line: ~~
+** Processing line: ~ def clear_pixel_arrays~
+** Processing line: ~ pixel_arrays_clear~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def pixel_arrays_clear~
+** Processing line: ~ @pixel_arrays = {}~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def pixel_arrays~
+** Processing line: ~ @pixel_arrays~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def pixel_array name~
+** Processing line: ~ name = name.to_s~
+** Processing line: ~ if !@pixel_arrays[name]~
+** Processing line: ~ @pixel_arrays[name] = PixelArray.new~
+** Processing line: ~ end~
+** Processing line: ~ @pixel_arrays[name]~
+** Processing line: ~ end~
+** Processing line: ~~
** Processing line: ~ def clear_render_targets~
** Processing line: ~ render_targets_clear~
** Processing line: ~ end~
@@ -136168,6 +145004,10 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ args.passes~
** Processing line: ~ end~
** Processing line: ~~
+** Processing line: ~ def pixel_arrays~
+** Processing line: ~ args.pixel_arrays~
+** Processing line: ~ end~
+** Processing line: ~~
** Processing line: ~ def geometry~
** Processing line: ~ args.geometry~
** Processing line: ~ end~
@@ -136269,6 +145109,8 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~~
** Processing line: ~ module GTK~
** Processing line: ~ class Console~
+** Processing line: ~ include ConsoleDeprecated~
+** Processing line: ~~
** Processing line: ~ attr_accessor :show_reason, :log, :logo, :background_color,~
** Processing line: ~ :text_color, :animation_duration,~
** Processing line: ~ :max_log_lines, :max_history, :log,~
@@ -136339,7 +145181,7 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @disabled = false~
** Processing line: ~ end~
** Processing line: ~~
-** Processing line: ~ def addsprite obj~
+** Processing line: ~ def add_sprite obj~
** Processing line: ~ @log_invocation_count += 1~
** Processing line: ~ obj[:id] ||= "id_#{obj[:path]}_#{Time.now.to_i}".to_sym~
** Processing line: ~~
@@ -136359,14 +145201,14 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~~
** Processing line: ~ def add_primitive obj~
** Processing line: ~ if obj.is_a? Hash~
-** Processing line: ~ addsprite obj~
+** Processing line: ~ add_sprite obj~
** Processing line: ~ else~
-** Processing line: ~ addtext obj~
+** Processing line: ~ add_text obj~
** Processing line: ~ end~
** Processing line: ~ nil~
** Processing line: ~ end~
** Processing line: ~~
-** Processing line: ~ def addtext obj~
+** Processing line: ~ def add_text obj~
** Processing line: ~ @last_log_lines_count ||= 1~
** Processing line: ~ @log_invocation_count += 1~
** Processing line: ~~
@@ -136490,12 +145332,12 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @toasted_at = Kernel.global_tick_count~
** Processing line: ~ log_once_info :perma_toast_tip, "Use console.perma_toast to show the toast for longer."~
** Processing line: ~ dwim_duration = 5.seconds~
-** Processing line: ~ addtext "* toast :#{id}"~
+** Processing line: ~ add_text "* toast :#{id}"~
** Processing line: ~ puts "* TOAST: :#{id}"~
** Processing line: ~ messages.each do |message|~
** Processing line: ~ lines = message.to_s.wrapped_lines(self.console_text_width)~
** Processing line: ~ dwim_duration += lines.length.seconds~
-** Processing line: ~ addtext "** #{message}"~
+** Processing line: ~ add_text "** #{message}"~
** Processing line: ~ puts "** #{message}"~
** Processing line: ~ end~
** Processing line: ~ show :toast~
@@ -136713,6 +145555,10 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @command_history_index -= 1~
** Processing line: ~ self.current_input_str = @command_history[@command_history_index].dup~
** Processing line: ~ end~
+** Processing line: ~ elsif args.inputs.keyboard.key_down.left~
+** Processing line: ~ prompt.move_cursor_left~
+** Processing line: ~ elsif args.inputs.keyboard.key_down.right~
+** Processing line: ~ prompt.move_cursor_right~
** Processing line: ~ elsif inputs_scroll_up_full? args~
** Processing line: ~ scroll_up_full~
** Processing line: ~ elsif inputs_scroll_down_full? args~
@@ -137320,23 +146166,53 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @cursor_color = Color.new [187, 21, 6]~
** Processing line: ~ @console_text_width = console_text_width~
** Processing line: ~~
+** Processing line: ~ @cursor_position = 0~
+** Processing line: ~ update_cursor_position_px~
+** Processing line: ~~
** Processing line: ~ @last_autocomplete_prefix = nil~
** Processing line: ~ @next_candidate_index = 0~
** Processing line: ~ end~
** Processing line: ~~
+** Processing line: ~ def update_cursor_position_px~
+** Processing line: ~ @cursor_position_px = ($gtk.calcstringbox (@prompt + @current_input_str[0...@cursor_position]), @font_style.size_enum, @font_style.font).x~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def current_input_str=(str)~
+** Processing line: ~ @current_input_str = str~
+** Processing line: ~ @cursor_position = str.length~
+** Processing line: ~ end~
+** Processing line: ~~
** Processing line: ~ def <<(str)~
-** Processing line: ~ @current_input_str << str~
+** Processing line: ~ @current_input_str = @current_input_str[0...@cursor_position] + str + @current_input_str[@cursor_position..-1]~
+** Processing line: ~ @cursor_position += str.length~
+** Processing line: ~ update_cursor_position_px~
** Processing line: ~ @current_input_changed_at = Kernel.global_tick_count~
** Processing line: ~ reset_autocomplete~
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~ def backspace~
-** Processing line: ~ @current_input_str.chop!~
+** Processing line: ~ return if current_input_str.length.zero? || @cursor_position.zero?~
+** Processing line: ~~
+** Processing line: ~ @current_input_str = @current_input_str[0...(@cursor_position - 1)] + @current_input_str[@cursor_position..-1]~
+** Processing line: ~ @cursor_position -= 1~
+** Processing line: ~ update_cursor_position_px~
** Processing line: ~ reset_autocomplete~
** Processing line: ~ end~
** Processing line: ~~
+** Processing line: ~ def move_cursor_left~
+** Processing line: ~ @cursor_position -= 1 if @cursor_position > 0~
+** Processing line: ~ update_cursor_position_px~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def move_cursor_right~
+** Processing line: ~ @cursor_position += 1 if @cursor_position < current_input_str.length~
+** Processing line: ~ update_cursor_position_px~
+** Processing line: ~ end~
+** Processing line: ~~
** Processing line: ~ def clear~
** Processing line: ~ @current_input_str = ''~
+** Processing line: ~ @cursor_position = 0~
+** Processing line: ~ update_cursor_position_px~
** Processing line: ~ reset_autocomplete~
** Processing line: ~ end~
** Processing line: ~~
@@ -137355,7 +146231,10 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @next_candidate_index += 1~
** Processing line: ~ @next_candidate_index = 0 if @next_candidate_index >= candidates.length~
** Processing line: ~ self.current_input_str = display_autocomplete_candidate(candidate)~
+** Processing line: ~ update_cursor_position_px~
** Processing line: ~ end~
+** Processing line: ~ rescue Exception => e~
+** Processing line: ~ puts "* BUG: Tab autocompletion failed. Let us know about this.\n#{e}"~
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~ def pretty_print_strings_as_table items~
@@ -137414,7 +146293,21 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~~
** Processing line: ~ def render(args, x:, y:)~
** Processing line: ~ args.outputs.reserved << font_style.label(x: x, y: y, text: "#{@prompt}#{current_input_str}", color: @text_color)~
-** Processing line: ~ args.outputs.reserved << font_style.label(x: x - 2, y: y + 3, text: (" " * (@prompt.length + current_input_str.length)) + "|", color: @cursor_color)~
+** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 0.5,~
+** Processing line: ~ y: y + 5,~
+** Processing line: ~ x2: x + @cursor_position_px + 0.5,~
+** Processing line: ~ y2: y + @font_style.letter_size.y + 5)~
+** Processing line: ~~
+** Processing line: ~ args.outputs.reserved << (@cursor_color.to_h.merge x: x + @cursor_position_px + 1,~
+** Processing line: ~ y: y + 5,~
+** Processing line: ~ x2: x + @cursor_position_px + 1,~
+** Processing line: ~ y2: y + @font_style.letter_size.y + 5)~
+** Processing line: ~~
+** Processing line: ~ # debugging rectangle for string~
+** Processing line: ~ # args.outputs.reserved << (@cursor_color.to_h.merge x: x,~
+** Processing line: ~ # y: y + 5,~
+** Processing line: ~ # w: @cursor_position_px,~
+** Processing line: ~ # h: @font_style.letter_size.y).border~
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~ def tick~
@@ -139457,6 +148350,59 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~~
** Processing line: ~ alias_method :inspect, :to_s~
** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ # Provides access to multitouch input~
+** Processing line: ~ #~
+** Processing line: ~ # @gtk~
+** Processing line: ~ class FingerTouch~
+** Processing line: ~~
+** Processing line: ~ # @gtk~
+** Processing line: ~ attr_accessor :moved,~
+** Processing line: ~ :moved_at,~
+** Processing line: ~ :global_moved_at,~
+** Processing line: ~ :touch_order,~
+** Processing line: ~ :x, :y~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @moved = false~
+** Processing line: ~ @moved_at = 0~
+** Processing line: ~ @global_moved_at = 0~
+** Processing line: ~ @touch_order = 0~
+** Processing line: ~ @x = 0~
+** Processing line: ~ @y = 0~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def point~
+** Processing line: ~ [@x, @y].point~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inside_rect? rect~
+** Processing line: ~ point.inside_rect? rect~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inside_circle? center, radius~
+** Processing line: ~ point.point_inside_circle? center, radius~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ alias_method :position, :point~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ result = {}~
+** Processing line: ~ result[:x] = @x~
+** Processing line: ~ result[:y] = @y~
+** Processing line: ~ result[:touch_order] = @touch_order~
+** Processing line: ~ result[:moved] = @moved~
+** Processing line: ~ result[:moved_at] = @moved_at~
+** Processing line: ~~
+** Processing line: ~ result~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ alias_method :inspect, :to_s~
+** Processing line: ~ end~
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~ module GTK~
@@ -139477,6 +148423,11 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ # @gtk~
** Processing line: ~ attr_reader :mouse~
** Processing line: ~~
+** Processing line: ~ # @return {FingerTouch}~
+** Processing line: ~ # @gtk~
+** Processing line: ~ attr_reader :touch~
+** Processing line: ~ attr_accessor :finger_one, :finger_two~
+** Processing line: ~~
** Processing line: ~ # @gtk~
** Processing line: ~ attr_accessor :text, :history~
** Processing line: ~~
@@ -139484,6 +148435,9 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @controllers = [Controller.new, Controller.new]~
** Processing line: ~ @keyboard = Keyboard.new~
** Processing line: ~ @mouse = Mouse.new~
+** Processing line: ~ @touch = {}~
+** Processing line: ~ @finger_one = nil~
+** Processing line: ~ @finger_two = nil~
** Processing line: ~ @text = []~
** Processing line: ~ end~
** Processing line: ~~
@@ -139559,6 +148513,9 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ @mouse.clear~
** Processing line: ~ @keyboard.clear~
** Processing line: ~ @controllers.each(&:clear)~
+** Processing line: ~ @touch.clear~
+** Processing line: ~ @finger_one = nil~
+** Processing line: ~ @finger_two = nil~
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~ # @return [Hash]~
@@ -139578,6 +148535,1418 @@ Follows is a source code listing for all files that have been open sourced. This
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
+** Processing line: ~* ios_wizard.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~ios_wizard.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./dragon/ios_wizard.rb~
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+** Processing line: ~ # MIT License~
+** Processing line: ~ # ios_wizard.rb has been released under MIT (*only this file*).~
+** Processing line: ~~
+** Processing line: ~ class WizardException < Exception~
+** Processing line: ~ attr_accessor :console_primitives~
+** Processing line: ~~
+** Processing line: ~ def initialize *console_primitives~
+** Processing line: ~ @console_primitives = console_primitives~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ class IOSWizard~
+** Processing line: ~ def initialize~
+** Processing line: ~ @doctor_executed_at = 0~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def relative_path~
+** Processing line: ~ (File.dirname $gtk.binary_path)~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def steps~
+** Processing line: ~ [~
+** Processing line: ~ :check_for_xcode,~
+** Processing line: ~ :check_for_brew,~
+** Processing line: ~ :check_for_certs,~
+** Processing line: ~ :check_for_device,~
+** Processing line: ~ :check_for_dev_profile,~
+** Processing line: ~ :determine_app_name,~
+** Processing line: ~ :determine_app_id,~
+** Processing line: ~ :blow_away_temp,~
+** Processing line: ~ :stage_app,~
+** Processing line: ~ :write_info_plist,~
+** Processing line: ~ :write_entitlements_plist,~
+** Processing line: ~ :code_sign,~
+** Processing line: ~ :create_ipa,~
+** Processing line: ~ :deploy,~
+** Processing line: ~ ]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def get_reserved_sprite png~
+** Processing line: ~ sprite_path = ".dragonruby/sprites/wizards/ios/#{png}"~
+** Processing line: ~~
+** Processing line: ~ if !$gtk.ivar :rcb_release_mode~
+** Processing line: ~ sprite_path = "deploy_template/#{sprite_path}"~
+** Processing line: ~ $gtk.reset_sprite sprite_path~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if !$gtk.read_file sprite_path~
+** Processing line: ~ log_error "png #{png} not found."~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ sprite_path~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def start~
+** Processing line: ~ @certificate_name = nil~
+** Processing line: ~ init_wizard_status~
+** Processing line: ~ log_info "Starting iOS Wizard so we can deploy to your device."~
+** Processing line: ~ @start_at = Kernel.global_tick_count~
+** Processing line: ~ steps.each do |m|~
+** Processing line: ~ begin~
+** Processing line: ~ result = (send m) || :success if @wizard_status[m][:result] != :success~
+** Processing line: ~ @wizard_status[m][:result] = result~
+** Processing line: ~ rescue Exception => e~
+** Processing line: ~ if e.is_a? WizardException~
+** Processing line: ~ $console.log.clear~
+** Processing line: ~ $console.archived_log.clear~
+** Processing line: ~ log "=" * $console.console_text_width~
+** Processing line: ~ e.console_primitives.each do |p|~
+** Processing line: ~ $console.add_primitive p~
+** Processing line: ~ end~
+** Processing line: ~ log "=" * $console.console_text_width~
+** Processing line: ~ else~
+** Processing line: ~ log_error "Step #{m} failed."~
+** Processing line: ~ log_error e.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ $console.set_command "$wizards.ios.start"~
+** Processing line: ~~
+** Processing line: ~ break~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ return nil~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def always_fail~
+** Processing line: ~ return false if $gtk.ivar :rcb_release_mode~
+** Processing line: ~ return true~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def check_for_xcode~
+** Processing line: ~ if !cli_app_exist?(xcodebuild_cli_app)~
+** Processing line: ~ raise WizardException.new(~
+** Processing line: ~ "* You need Xcode to use $wizards.ios.start.",~
+** Processing line: ~ { w: 75, h: 75, path: get_reserved_sprite("xcode.png") },~
+** Processing line: ~ "** 1. Go to http://developer.apple.com and register.",~
+** Processing line: ~ "** 2. Download Xcode 11.3+ from http://developer.apple.com/downloads.",~
+** Processing line: ~ " NOTE: DO NOT install Xcode from the App Store. Use the link above.",~
+** Processing line: ~ { w: 700, h: 359, path: get_reserved_sprite("xcode-downloads.png") },~
+** Processing line: ~ "** 3. After installing. Open up Xcode to accept the EULA."~
+** Processing line: ~ )~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def check_for_brew~
+** Processing line: ~ if !cli_app_exist?('brew')~
+** Processing line: ~ raise WizardException.new(~
+** Processing line: ~ "* You need to install Brew.",~
+** Processing line: ~ { w: 700, h: 388, path: get_reserved_sprite("brew.png") },~
+** Processing line: ~ "** 1. Go to http://brew.sh.",~
+** Processing line: ~ "** 2. Copy the command that starts with `/bin/bash -c` on the site.",~
+** Processing line: ~ "** 3. Open Terminal and run the command you copied from the website.",~
+** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~
+** Processing line: ~ )~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def init_wizard_status~
+** Processing line: ~ @wizard_status = {}~
+** Processing line: ~ steps.each do |m|~
+** Processing line: ~ @wizard_status[m] = { result: :not_started }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ previous_step = nil~
+** Processing line: ~ next_step = nil~
+** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~
+** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~
+** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def restart~
+** Processing line: ~ init_wizard_status~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def check_for_dev_profile~
+** Processing line: ~ if !($gtk.read_file 'profiles/development.mobileprovision')~
+** Processing line: ~ $gtk.system "mkdir -p #{relative_path}/profiles"~
+** Processing line: ~ $gtk.system "open #{relative_path}/profiles"~
+** Processing line: ~ $gtk.system "echo Download the mobile provisioning profile and place it here with the name development.mobileprovision > #{relative_path}/profiles/README.txt"~
+** Processing line: ~ raise WizardException.new(~
+** Processing line: ~ "* I didn't find a mobile provision.",~
+** Processing line: ~ "** 1. Go to http://developer.apple.com and click \"Certificates, IDs & Profiles\".",~
+** Processing line: ~ "** 2. Add an App Identifier.",~
+** Processing line: ~ "** 3. Select the App IDs option from the list.",~
+** Processing line: ~ { w: 700, h: 75, path: get_reserved_sprite("identifiers.png") },~
+** Processing line: ~ "** 4. Add your Device next. You can use idevice_id -l to get the UUID of your device.",~
+** Processing line: ~ { w: 365, h: 69, path: get_reserved_sprite("device-link.png") },~
+** Processing line: ~ "** 5. Create a Profile. Associate your certs, id, and device.",~
+** Processing line: ~ { w: 300, h: 122, path: get_reserved_sprite("profiles.png") },~
+** Processing line: ~ "** 6. Download the mobile provision and save it to 'profiles/development.mobileprovision'.",~
+** Processing line: ~ { w: 200, h: 124, path: get_reserved_sprite("profiles-folder.png") },~
+** Processing line: ~ )~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def determine_app_name~
+** Processing line: ~ @app_name = dev_profile_xml[:children].first[:children].first[:children][1][:children].first[:data]~
+** Processing line: ~ log_info "App name is: #{@app_name}."~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def dev_profile_xml~
+** Processing line: ~ xml = $gtk.read_file 'profiles/development.mobileprovision'~
+** Processing line: ~ scrubbed = xml.each_line.map do |l|~
+** Processing line: ~ if l.strip.start_with? "<"~
+** Processing line: ~ if l.start_with? '</plist>'~
+** Processing line: ~ '</plist>'~
+** Processing line: ~ elsif l.include? "Apple Inc."~
+** Processing line: ~ nil~
+** Processing line: ~ elsif l.include? '<data>'~
+** Processing line: ~ nil~
+** Processing line: ~ else~
+** Processing line: ~ l~
+** Processing line: ~ end~
+** Processing line: ~ else~
+** Processing line: ~ nil~
+** Processing line: ~ end~
+** Processing line: ~ end.reject { |l| !l }.join~
+** Processing line: ~ $gtk.parse_xml scrubbed~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def determine_app_id~
+** Processing line: ~ # lol~
+** Processing line: ~ @app_id = dev_profile_xml[:children].first[:children].first[:children][13][:children][1][:children].first[:data]~
+** Processing line: ~ log_info "App Identifier is set to : #{@app_id}"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_app_name name~
+** Processing line: ~ @app_name = name~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_dev_profile path~
+** Processing line: ~ if !$gtk.read_file path~
+** Processing line: ~ log_error "I couldn't find a development profile at #{path}."~
+** Processing line: ~ ask_for_dev_profile~
+** Processing line: ~ else~
+** Processing line: ~ @dev_profile_path = path~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def blow_away_temp~
+** Processing line: ~ sh "rm -rf #{tmp_directory}"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def stage_app~
+** Processing line: ~ log_info "Staging."~
+** Processing line: ~ sh "mkdir -p #{tmp_directory}"~
+** Processing line: ~ sh "cp -R #{relative_path}/dragonruby-ios.app \"#{tmp_directory}/#{@app_name}.app\""~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_app_id id~
+** Processing line: ~ log_info = "App Id set to: #{id}"~
+** Processing line: ~ @app_id = id~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def check_for_device~
+** Processing line: ~ log_info "Looking for device."~
+** Processing line: ~~
+** Processing line: ~ if !cli_app_exist?(idevice_id_cli_app)~
+** Processing line: ~ raise WizardException.new(~
+** Processing line: ~ "* It doesn't look like you have the libimobiledevice iOS protocol library installed.",~
+** Processing line: ~ "** 1. Open Terminal.",~
+** Processing line: ~ { w: 700, h: 99, path: get_reserved_sprite("terminal.png") },~
+** Processing line: ~ "** 2. Run: `brew install libimobiledevice`.",~
+** Processing line: ~ { w: 500, h: 93, path: get_reserved_sprite("brew-install-libimobiledevice.png") },~
+** Processing line: ~ )~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if connected_devices.length == 0~
+** Processing line: ~ raise WizardException.new("* I couldn't find any connected devices. Connect your iOS device to your Mac and try again.")~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ @device_id = connected_devices.first~
+** Processing line: ~ log_info "I will be using device with UUID #{@device_id}"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def check_for_certs~
+** Processing line: ~ log_info "Attempting to find certificates on your computer."~
+** Processing line: ~~
+** Processing line: ~ if !cli_app_exist?(security_cli_app)~
+** Processing line: ~ raise WizardException.new(~
+** Processing line: ~ "* It doesn't look like you have #{security_cli_app}.",~
+** Processing line: ~ "** 1. Open Disk Utility and run First Aid.",~
+** Processing line: ~ { w: 700, h: 148, path: get_reserved_sprite("disk-utility.png") },~
+** Processing line: ~ )~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if valid_certs.length == 0~
+** Processing line: ~ raise WizardException.new(~
+** Processing line: ~ "* It doesn't look like you have any valid certs installed.",~
+** Processing line: ~ "** 1. Open Xcode.",~
+** Processing line: ~ "** 2. Log into your developer account. Xcode -> Preferences -> Accounts.",~
+** Processing line: ~ { w: 700, h: 98, path: get_reserved_sprite("login-xcode.png") },~
+** Processing line: ~ "** 3. After loggin in, select Manage Certificates...",~
+** Processing line: ~ { w: 700, h: 115, path: get_reserved_sprite("manage-certificates.png") },~
+** Processing line: ~ "** 4. Add a certificate for Apple Development.",~
+** Processing line: ~ { w: 700, h: 217, path: get_reserved_sprite("add-cert.png") },~
+** Processing line: ~ )~
+** Processing line: ~ raise "You do not have any Apple development certs on this computer."~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ @certificate_name = valid_certs.first[:name]~
+** Processing line: ~ log_info "I will be using '#{@certificate_name}' to deploy to your device."~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def idevice_id_cli_app~
+** Processing line: ~ "idevice_id"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def security_cli_app~
+** Processing line: ~ "/usr/bin/security"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def xcodebuild_cli_app~
+** Processing line: ~ "xcodebuild"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def valid_certs~
+** Processing line: ~ certs = sh("#{security_cli_app} -q find-identity -p codesigning -v").each_line.map do |l|~
+** Processing line: ~ if l.include?(")") && !l.include?("Developer ID") && l.include?("Development")~
+** Processing line: ~ l.strip~
+** Processing line: ~ else~
+** Processing line: ~ nil~
+** Processing line: ~ end~
+** Processing line: ~ end.reject_nil.map do |l|~
+** Processing line: ~ number, id, name = l.split(' ', 3)~
+** Processing line: ~ name = name.gsub("\"", "") if name~
+** Processing line: ~ {~
+** Processing line: ~ number: 1,~
+** Processing line: ~ id: id,~
+** Processing line: ~ name: name~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def connected_devices~
+** Processing line: ~ sh("idevice_id -l").strip.each_line.map do |l|~
+** Processing line: ~ l.strip~
+** Processing line: ~ end.reject { |l| l.length == 0 }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def cli_app_exist? app~
+** Processing line: ~ `which #{app}`.strip.length != 0~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def write_entitlements_plist~
+** Processing line: ~ entitlement_plist_string = <<-XML~
+** Processing line: ~ <?xml version="1.0" encoding="UTF-8"?>~
+** Processing line: ~ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
+** Processing line: ~ <plist version="1.0">~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>application-identifier</key>~
+** Processing line: ~ <string>:app_id</string>~
+** Processing line: ~ <key>get-task-allow</key>~
+** Processing line: ~ <true/>~
+** Processing line: ~ </dict>~
+** Processing line: ~ </plist>~
+** Processing line: ~ XML~
+** Processing line: ~~
+** Processing line: ~ log_info "Creating Entitlements.plist"~
+** Processing line: ~~
+** Processing line: ~ $gtk.write_file_root "tmp/ios/Entitlements.plist", entitlement_plist_string.gsub(":app_id", @app_id).strip~
+** Processing line: ~~
+** Processing line: ~ sh "/usr/bin/plutil -convert binary1 \"#{tmp_directory}/Entitlements.plist\""~
+** Processing line: ~ sh "/usr/bin/plutil -convert xml1 \"#{tmp_directory}/Entitlements.plist\""~
+** Processing line: ~~
+** Processing line: ~ @entitlement_plist_written = true~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def code_sign~
+** Processing line: ~ sh "cp #{@dev_profile_path} \"#{app_path}/embedded.mobileprovision\""~
+** Processing line: ~~
+** Processing line: ~ log_info "Signing app with #{@certificate_name}."~
+** Processing line: ~~
+** Processing line: ~ sh "/usr/bin/plutil -convert binary1 \"#{app_path}/Info.plist\""~
+** Processing line: ~~
+** Processing line: ~ sh "CODESIGN_ALLOCATE=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate\" /usr/bin/codesign -f -s \"#{@certificate_name}\" --entitlements #{tmp_directory}/Entitlements.plist \"#{tmp_directory}/#{@app_name}.app\""~
+** Processing line: ~~
+** Processing line: ~ @code_sign_completed = true~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def write_info_plist~
+** Processing line: ~ log_info "Adding Info.plist."~
+** Processing line: ~~
+** Processing line: ~ info_plist_string = <<-XML~
+** Processing line: ~ <?xml version="1.0" encoding="UTF-8"?>~
+** Processing line: ~ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
+** Processing line: ~ <plist version="1.0">~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>NSAppTransportSecurity</key>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>NSAllowsArbitraryLoads</key>~
+** Processing line: ~ <true/>~
+** Processing line: ~ <key>NSExceptionDomains</key>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>google.com</key>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>NSExceptionAllowsInsecureHTTPLoads</key>~
+** Processing line: ~ <true/>~
+** Processing line: ~ <key>NSIncludesSubdomains</key>~
+** Processing line: ~ <true/>~
+** Processing line: ~ </dict>~
+** Processing line: ~ </dict>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <key>BuildMachineOSBuild</key>~
+** Processing line: ~ <string>19C57</string>~
+** Processing line: ~ <key>CFBundleDevelopmentRegion</key>~
+** Processing line: ~ <string>en</string>~
+** Processing line: ~ <key>CFBundleDisplayName</key>~
+** Processing line: ~ <string>:app_name</string>~
+** Processing line: ~ <key>CFBundleExecutable</key>~
+** Processing line: ~ <string>Runtime</string>~
+** Processing line: ~ <key>CFBundleIconFiles</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <string>AppIcon60x60</string>~
+** Processing line: ~ </array>~
+** Processing line: ~ <key>CFBundleIcons</key>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>CFBundlePrimaryIcon</key>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>CFBundleIconFiles</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <string>AppIcon60x60</string>~
+** Processing line: ~ </array>~
+** Processing line: ~ <key>CFBundleIconName</key>~
+** Processing line: ~ <string>AppIcon</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <key>CFBundleIcons~ipad</key>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>CFBundlePrimaryIcon</key>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>CFBundleIconFiles</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <string>AppIcon60x60</string>~
+** Processing line: ~ <string>AppIcon76x76</string>~
+** Processing line: ~ </array>~
+** Processing line: ~ <key>CFBundleIconName</key>~
+** Processing line: ~ <string>AppIcon</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <key>CFBundleIdentifier</key>~
+** Processing line: ~ <string>com.carlile.swisscheese</string>~
+** Processing line: ~ <key>CFBundleInfoDictionaryVersion</key>~
+** Processing line: ~ <string>6.0</string>~
+** Processing line: ~ <key>CFBundleName</key>~
+** Processing line: ~ <string>:app_name</string>~
+** Processing line: ~ <key>CFBundlePackageType</key>~
+** Processing line: ~ <string>APPL</string>~
+** Processing line: ~ <key>CFBundleShortVersionString</key>~
+** Processing line: ~ <string>1.0</string>~
+** Processing line: ~ <key>CFBundleSignature</key>~
+** Processing line: ~ <string>????</string>~
+** Processing line: ~ <key>CFBundleSupportedPlatforms</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <string>iPhoneOS</string>~
+** Processing line: ~ </array>~
+** Processing line: ~ <key>CFBundleVersion</key>~
+** Processing line: ~ <string>1.0</string>~
+** Processing line: ~ <key>DTCompiler</key>~
+** Processing line: ~ <string>com.apple.compilers.llvm.clang.1_0</string>~
+** Processing line: ~ <key>DTPlatformBuild</key>~
+** Processing line: ~ <string>17B102</string>~
+** Processing line: ~ <key>DTPlatformName</key>~
+** Processing line: ~ <string>iphoneos</string>~
+** Processing line: ~ <key>DTPlatformVersion</key>~
+** Processing line: ~ <string>13.2</string>~
+** Processing line: ~ <key>DTSDKBuild</key>~
+** Processing line: ~ <string>17B102</string>~
+** Processing line: ~ <key>DTSDKName</key>~
+** Processing line: ~ <string>iphoneos13.2</string>~
+** Processing line: ~ <key>DTXcode</key>~
+** Processing line: ~ <string>01131</string>~
+** Processing line: ~ <key>DTXcodeBuild</key>~
+** Processing line: ~ <string>11C505</string>~
+** Processing line: ~ <key>ITSAppUsesNonExemptEncryption</key>~
+** Processing line: ~ <false/>~
+** Processing line: ~ <key>MinimumOSVersion</key>~
+** Processing line: ~ <string>11.0</string>~
+** Processing line: ~ <key>UIAppFonts</key>~
+** Processing line: ~ <array/>~
+** Processing line: ~ <key>UIBackgroundModes</key>~
+** Processing line: ~ <array/>~
+** Processing line: ~ <key>UIDeviceFamily</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <integer>1</integer>~
+** Processing line: ~ <integer>2</integer>~
+** Processing line: ~ </array>~
+** Processing line: ~ <key>UILaunchImages</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+** Processing line: ~ <string>11.0</string>~
+** Processing line: ~ <key>UILaunchImageName</key>~
+** Processing line: ~ <string>LaunchImage-1100-Portrait-2436h</string>~
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+** Processing line: ~ <string>Portrait</string>~
+** Processing line: ~ <key>UILaunchImageSize</key>~
+** Processing line: ~ <string>{375, 812}</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+** Processing line: ~ <string>8.0</string>~
+** Processing line: ~ <key>UILaunchImageName</key>~
+** Processing line: ~ <string>LaunchImage-800-Portrait-736h</string>~
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+** Processing line: ~ <string>Portrait</string>~
+** Processing line: ~ <key>UILaunchImageSize</key>~
+** Processing line: ~ <string>{414, 736}</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+** Processing line: ~ <string>8.0</string>~
+** Processing line: ~ <key>UILaunchImageName</key>~
+** Processing line: ~ <string>LaunchImage-800-667h</string>~
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+** Processing line: ~ <string>Portrait</string>~
+** Processing line: ~ <key>UILaunchImageSize</key>~
+** Processing line: ~ <string>{375, 667}</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+** Processing line: ~ <string>7.0</string>~
+** Processing line: ~ <key>UILaunchImageName</key>~
+** Processing line: ~ <string>LaunchImage-700</string>~
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+** Processing line: ~ <string>Portrait</string>~
+** Processing line: ~ <key>UILaunchImageSize</key>~
+** Processing line: ~ <string>{320, 480}</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+** Processing line: ~ <string>7.0</string>~
+** Processing line: ~ <key>UILaunchImageName</key>~
+** Processing line: ~ <string>LaunchImage-700-568h</string>~
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+** Processing line: ~ <string>Portrait</string>~
+** Processing line: ~ <key>UILaunchImageSize</key>~
+** Processing line: ~ <string>{320, 568}</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ <dict>~
+** Processing line: ~ <key>UILaunchImageMinimumOSVersion</key>~
+** Processing line: ~ <string>7.0</string>~
+** Processing line: ~ <key>UILaunchImageName</key>~
+** Processing line: ~ <string>LaunchImage-700-Portrait</string>~
+** Processing line: ~ <key>UILaunchImageOrientation</key>~
+** Processing line: ~ <string>Portrait</string>~
+** Processing line: ~ <key>UILaunchImageSize</key>~
+** Processing line: ~ <string>{768, 1024}</string>~
+** Processing line: ~ </dict>~
+** Processing line: ~ </array>~
+** Processing line: ~ <key>UIRequiredDeviceCapabilities</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <string>arm64</string>~
+** Processing line: ~ </array>~
+** Processing line: ~ <key>UIRequiresFullScreen</key>~
+** Processing line: ~ <true/>~
+** Processing line: ~ <key>UIStatusBarStyle</key>~
+** Processing line: ~ <string>UIStatusBarStyleDefault</string>~
+** Processing line: ~ <key>UISupportedInterfaceOrientations</key>~
+** Processing line: ~ <array>~
+** Processing line: ~ <string>#{device_orientation_xml}</string>~
+** Processing line: ~ </array>~
+** Processing line: ~ </dict>~
+** Processing line: ~ </plist>~
+** Processing line: ~ XML~
+** Processing line: ~~
+** Processing line: ~ # <string>UIInterfaceOrientationPortrait</string>~
+** Processing line: ~ # <string>UIInterfaceOrientationLandscapeRight</string>~
+** Processing line: ~~
+** Processing line: ~ $gtk.write_file_root "tmp/ios/#{@app_name}.app/Info.plist", info_plist_string.gsub(":app_name", @app_name).strip~
+** Processing line: ~~
+** Processing line: ~ @info_plist_written = true~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def device_orientation_xml~
+** Processing line: ~ return "UIInterfaceOrientationLandscapeRight" if $gtk.logical_width > $gtk.logical_height~
+** Processing line: ~ return "UIInterfaceOrientationPortrait"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def tmp_directory~
+** Processing line: ~ "#{relative_path}/tmp/ios"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def app_path~
+** Processing line: ~ "#{tmp_directory}/#{@app_name}.app"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def root_folder~
+** Processing line: ~ "#{relative_path}/#{$gtk.cli_arguments[:dragonruby]}"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def write_ip_address~
+** Processing line: ~ $gtk.write_file "app/server_ip_address.txt", $gtk.ffi_misc.get_local_ip_address.strip~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def create_ipa~
+** Processing line: ~ write_ip_address~
+** Processing line: ~ sh "rm \"#{@app_name}\".ipa"~
+** Processing line: ~ sh "rm -rf \"#{app_path}/app\""~
+** Processing line: ~ sh "rm -rf \"#{app_path}/sounds\""~
+** Processing line: ~ sh "rm -rf \"#{app_path}/sprites\""~
+** Processing line: ~ sh "rm -rf \"#{app_path}/data\""~
+** Processing line: ~ sh "rm -rf \"#{app_path}/fonts\""~
+** Processing line: ~ sh "cp -r \"#{root_folder}/app/\" \"#{app_path}/app/\""~
+** Processing line: ~ sh "cp -r \"#{root_folder}/sounds/\" \"#{app_path}/sounds/\""~
+** Processing line: ~ sh "cp -r \"#{root_folder}/sprites/\" \"#{app_path}/sprites/\""~
+** Processing line: ~ sh "cp -r \"#{root_folder}/data/\" \"#{app_path}/data/\""~
+** Processing line: ~ sh "cp -r \"#{root_folder}/fonts/\" \"#{app_path}/fonts/\""~
+** Processing line: ~ sh "mkdir -p #{tmp_directory}/ipa_root/Payload"~
+** Processing line: ~ sh "cp -r \"#{app_path}\" \"#{tmp_directory}/ipa_root/Payload\""~
+** Processing line: ~ sh "chmod -R 755 \"#{tmp_directory}/ipa_root/Payload\""~
+** Processing line: ~ do_zip~
+** Processing line: ~ sh "cp \"#{tmp_directory}/ipa_root/archive.zip\" \"#{tmp_directory}/#{@app_name}.ipa\""~
+** Processing line: ~ sh "XCODE_DIR=\"/Applications/Xcode.app/Contents/Developer\" \"#{relative_path}/dragonruby-deploy-ios\" -d \"#{@device_id}\" \"#{tmp_directory}/#{@app_name}.ipa\""~
+** Processing line: ~ cmd_result = `ps -e | grep civetweb`~
+** Processing line: ~ is_civet_running = (`ps -e | grep civetweb`).strip.each_line.to_a.length > 2~
+** Processing line: ~ if !is_civet_running~
+** Processing line: ~ $gtk.system "cp \"#{relative_path}/civetweb\" \"#{tmp_directory}/../src_backup/civetweb\""~
+** Processing line: ~ $gtk.system "open \"#{tmp_directory}/../src_backup/civetweb\" -g"~
+** Processing line: ~ else~
+** Processing line: ~ log "* INFO: civetweb is running already running. No need to start another instance."~
+** Processing line: ~ end~
+** Processing line: ~ log_info "Check your device!!"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def do_zip~
+** Processing line: ~ $gtk.write_file_root "tmp/ios/do_zip.sh", <<-SCRIPT~
+** Processing line: ~ pushd #{tmp_directory}/ipa_root/~
+** Processing line: ~ zip -q -r archive.zip Payload~
+** Processing line: ~ popd~
+** Processing line: ~ SCRIPT~
+** Processing line: ~~
+** Processing line: ~ sh "sh #{tmp_directory}/do_zip.sh"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def sh cmd~
+** Processing line: ~ log_info cmd.strip~
+** Processing line: ~ result = `#{cmd}`~
+** Processing line: ~ if result.strip.length > 0~
+** Processing line: ~ log_info result.strip.each_line.map(&:strip).join("\n")~
+** Processing line: ~ end~
+** Processing line: ~ result~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def deploy~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~* itch_wizard.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~itch_wizard.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./dragon/itch_wizard.rb~
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+** Processing line: ~ # MIT License~
+** Processing line: ~ # itch_wizard.rb has been released under MIT (*only this file*).~
+** Processing line: ~~
+** Processing line: ~ class ItchWizard~
+** Processing line: ~ def steps~
+** Processing line: ~ [~
+** Processing line: ~ :check_metadata,~
+** Processing line: ~ :deploy~
+** Processing line: ~ ]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def metadata_file_path~
+** Processing line: ~ "metadata/game_metadata.txt"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def get_metadata~
+** Processing line: ~ metadata = $gtk.read_file metadata_file_path~
+** Processing line: ~~
+** Processing line: ~ if !metadata~
+** Processing line: ~ write_blank_metadata~
+** Processing line: ~ metadata = $gtk.read_file metadata_file_path~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ dev_id, dev_title, game_id, game_title, version, icon = *metadata.each_line.to_a~
+** Processing line: ~~
+** Processing line: ~ {~
+** Processing line: ~ dev_id: dev_id.strip,~
+** Processing line: ~ dev_title: dev_title.strip,~
+** Processing line: ~ game_id: game_id.strip,~
+** Processing line: ~ game_title: game_title.strip,~
+** Processing line: ~ version: version.strip,~
+** Processing line: ~ icon: icon.strip~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def write_blank_metadata~
+** Processing line: ~ $gtk.write_file metadata_file_path, <<-S.strip~
+** Processing line: ~ #devid=myname~
+** Processing line: ~ #devtitle=My Name~
+** Processing line: ~ #gameid=mygame~
+** Processing line: ~ #gametitle=My Game~
+** Processing line: ~ #version=0.1~
+** Processing line: ~ #icon=metadata/icon.png~
+** Processing line: ~ S~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def check_metadata~
+** Processing line: ~ metadata_text = $gtk.read_file metadata_file_path~
+** Processing line: ~ if !metadata_text~
+** Processing line: ~ write_blank_metadata~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if metadata_text.each_line.to_a.length != 6~
+** Processing line: ~ write_blank_metadata~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ log "* INFO: Contents of #{metadata_file_path}:"~
+** Processing line: ~ log "#+begin_src txt"~
+** Processing line: ~ metadata_text.each_line { |l| log " #{l}" }~
+** Processing line: ~ log "#+end_src"~
+** Processing line: ~ metadata = get_metadata~
+** Processing line: ~~
+** Processing line: ~ if metadata[:dev_id].start_with?("#") || !@dev_id~
+** Processing line: ~ log "* PROMPT: Please provide your username for Itch."~
+** Processing line: ~ $console.set_command "$wizards.itch.set_dev_id \"your-itch-username\""~
+** Processing line: ~ return :need_dev_id~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if metadata[:dev_title].start_with?("#") || !@dev_title~
+** Processing line: ~ log "* PROMPT: Please provide developer's/company's name that you want displayed."~
+** Processing line: ~ $console.set_command "$wizards.itch.set_dev_title \"Your Name\""~
+** Processing line: ~ return :need_dev_title~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if metadata[:game_id].start_with?("#") || !@game_id~
+** Processing line: ~ log "* PROMPT: Please provide the id for you game. This is the id you specified when you set up a new game page on Itch."~
+** Processing line: ~ $console.set_command "$wizards.itch.set_game_id \"your-game-id\""~
+** Processing line: ~ return :need_game_id~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if metadata[:game_title].start_with?("#") || !@game_title~
+** Processing line: ~ log "* PROMPT: Please provide the display name for your game. (This can include spaces)"~
+** Processing line: ~ $console.set_command "$wizards.itch.set_game_title \"Your Game\""~
+** Processing line: ~ return :need_game_title~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if metadata[:version].start_with?("#") || !@version~
+** Processing line: ~ log "* PROMPT: Please provide the version for your game."~
+** Processing line: ~ $console.set_command "$wizards.itch.set_version \"1.0\""~
+** Processing line: ~ return :need_version~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if metadata[:icon].start_with?("#") || !@icon~
+** Processing line: ~ log "* PROPT: Please provide icon path for your game."~
+** Processing line: ~ $console.set_command "$wizards.itch.set_icon \"icon.png\""~
+** Processing line: ~ return :need_icon~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ return :success~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_dev_id value~
+** Processing line: ~ @dev_id = value~
+** Processing line: ~ write_metadata~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_dev_title value~
+** Processing line: ~ @dev_title = value~
+** Processing line: ~ write_metadata~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_game_id value~
+** Processing line: ~ @game_id = value~
+** Processing line: ~ write_metadata~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_game_title value~
+** Processing line: ~ @game_title = value~
+** Processing line: ~ write_metadata~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_version value~
+** Processing line: ~ @version = value~
+** Processing line: ~ write_metadata~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def set_icon value~
+** Processing line: ~ @icon = value~
+** Processing line: ~ write_metadata~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def write_metadata~
+** Processing line: ~ text = ""~
+** Processing line: ~ if @dev_id~
+** Processing line: ~ text += "devid=#{@dev_id}\n"~
+** Processing line: ~ else~
+** Processing line: ~ text += "#devid=myname\n"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if @dev_title~
+** Processing line: ~ text += "devtitle=#{@dev_title}\n"~
+** Processing line: ~ else~
+** Processing line: ~ text += "#devtitle=My Name\n"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if @game_id~
+** Processing line: ~ text += "gameid=#{@game_id}\n"~
+** Processing line: ~ else~
+** Processing line: ~ text += "#gameid=gameid\n"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if @game_title~
+** Processing line: ~ text += "gametitle=#{@game_title}\n"~
+** Processing line: ~ else~
+** Processing line: ~ text += "#gametitle=Game Name\n"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if @version~
+** Processing line: ~ text += "version=#{@version}\n"~
+** Processing line: ~ else~
+** Processing line: ~ text += "#version=0.1\n"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if @icon~
+** Processing line: ~ text += "icon=metadata/#{@icon}\n"~
+** Processing line: ~ else~
+** Processing line: ~ text += "#icon=metadata/icon.png\n"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ $gtk.write_file metadata_file_path, text~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def relative_path~
+** Processing line: ~ (File.dirname $gtk.binary_path)~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def package_command~
+** Processing line: ~ "#{File.join $gtk.get_base_dir, 'dragonruby-publish'}"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def deploy~
+** Processing line: ~ log_info "* Running dragonruby-publish: #{package_command}"~
+** Processing line: ~ results = $gtk.exec package_command~
+** Processing line: ~ log "#+begin_src"~
+** Processing line: ~ log results~
+** Processing line: ~ log "#+end_src"~
+** Processing line: ~ :success~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def start~
+** Processing line: ~ log "================"~
+** Processing line: ~ log "* INFO: Starting Itch Wizard."~
+** Processing line: ~ @start_at = Kernel.global_tick_count~
+** Processing line: ~ steps.each do |m|~
+** Processing line: ~ begin~
+** Processing line: ~ log_info "Running Itch Wizard Step: ~$wizards.itch.#{m}~"~
+** Processing line: ~ result = (send m) || :success if @wizard_status[m][:result] != :success~
+** Processing line: ~ @wizard_status[m][:result] = result~
+** Processing line: ~ if result != :success~
+** Processing line: ~ log_info "Exiting wizard. :#{result}"~
+** Processing line: ~ break~
+** Processing line: ~ end~
+** Processing line: ~ rescue Exception => e~
+** Processing line: ~ if e.is_a? WizardException~
+** Processing line: ~ $console.log.clear~
+** Processing line: ~ $console.archived_log.clear~
+** Processing line: ~ log "=" * $console.console_text_width~
+** Processing line: ~ e.console_primitives.each do |p|~
+** Processing line: ~ $console.add_primitive p~
+** Processing line: ~ end~
+** Processing line: ~ log "=" * $console.console_text_width~
+** Processing line: ~ $console.set_command (e.console_command || "$wizards.itch.start")~
+** Processing line: ~ else~
+** Processing line: ~ log_error "Step #{m} failed."~
+** Processing line: ~ log_error e.to_s~
+** Processing line: ~ $console.set_command "$wizards.itch.start"~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ break~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def reset~
+** Processing line: ~ @dev_id = nil~
+** Processing line: ~ @dev_title = nil~
+** Processing line: ~ @game_id = nil~
+** Processing line: ~ @game_title = nil~
+** Processing line: ~ @version = nil~
+** Processing line: ~ @icon = nil~
+** Processing line: ~ init_wizard_status~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def restart~
+** Processing line: ~ reset~
+** Processing line: ~ start~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ reset~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def init_wizard_status~
+** Processing line: ~ @wizard_status = {}~
+** Processing line: ~~
+** Processing line: ~ steps.each do |m|~
+** Processing line: ~ @wizard_status[m] = { result: :not_started }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ previous_step = nil~
+** Processing line: ~ next_step = nil~
+** Processing line: ~~
+** Processing line: ~ steps.each_cons(2) do |current_step, next_step|~
+** Processing line: ~ @wizard_status[current_step][:next_step] = next_step~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ steps.reverse.each_cons(2) do |current_step, previous_step|~
+** Processing line: ~ @wizard_status[current_step][:previous_step] = previous_step~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~* layout.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~layout.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./dragon/layout.rb~
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+** Processing line: ~ # MIT License~
+** Processing line: ~ # layout.rb has been released under MIT (*only this file*).~
+** Processing line: ~~
+** Processing line: ~ module GTK~
+** Processing line: ~ class Margin~
+** Processing line: ~ attr :left, :right, :top, :bottom~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @left = 0~
+** Processing line: ~ @right = 0~
+** Processing line: ~ @top = 0~
+** Processing line: ~ @bottom = 0~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ {~
+** Processing line: ~ left: @left,~
+** Processing line: ~ right: @right,~
+** Processing line: ~ top: @top,~
+** Processing line: ~ bottom: @bottom,~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inspect~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ class SafeArea~
+** Processing line: ~ attr :w, :h, :margin~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @w = 0~
+** Processing line: ~ @h = 0~
+** Processing line: ~ @margin = Margin.new~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ {~
+** Processing line: ~ w: @w,~
+** Processing line: ~ h: @h,~
+** Processing line: ~ margin: @margin.serialize~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inspect~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ class GridArea~
+** Processing line: ~ attr :w, :h, :margin, :gutter, :col_count, :row_count, :cell_w, :cell_h, :outer_gutter~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @w = 0~
+** Processing line: ~ @h = 0~
+** Processing line: ~ @gutter = 0~
+** Processing line: ~ @outer_gutter = 0~
+** Processing line: ~ @col_count = 0~
+** Processing line: ~ @row_count = 0~
+** Processing line: ~ @margin = Margin.new~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ {~
+** Processing line: ~ w: @w,~
+** Processing line: ~ h: @h,~
+** Processing line: ~ gutter: @gutter,~
+** Processing line: ~ outer_gutter: @outer_gutter,~
+** Processing line: ~ col_count: @col_count,~
+** Processing line: ~ row_count: @row_count,~
+** Processing line: ~ margin: @margin.serialize~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inspect~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ class ControlArea~
+** Processing line: ~ attr :cell_size, :w, :h, :margin~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @margin = Margin.new~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ {~
+** Processing line: ~ cell_size: @cell_size,~
+** Processing line: ~ w: @w,~
+** Processing line: ~ h: @h,~
+** Processing line: ~ margin: @margin.serialize,~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inspect~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ class Device~
+** Processing line: ~ attr :w, :h, :safe_area, :grid_area, :control_area, :name, :aspect~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @name = ""~
+** Processing line: ~ @w = 0~
+** Processing line: ~ @h = 0~
+** Processing line: ~ @safe_area = SafeArea.new~
+** Processing line: ~ @grid_area = GridArea.new~
+** Processing line: ~ @control_area = ControlArea.new~
+** Processing line: ~ @aspect = AspectRatio.new~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def assert! result, message~
+** Processing line: ~ return if result~
+** Processing line: ~ raise message~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def check_math!~
+** Processing line: ~ assert! (@control_area.w + @control_area.margin.left + @control_area.margin.right) == @w, "Math for Width didn't pan out."~
+** Processing line: ~ assert! (@control_area.h + @control_area.margin.top + @control_area.margin.bottom) == @h, "Math for Height didn't pan out."~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ {~
+** Processing line: ~ name: @name,~
+** Processing line: ~ w: @w,~
+** Processing line: ~ h: @h,~
+** Processing line: ~ aspect: @aspect.serialize,~
+** Processing line: ~ safe_area: @safe_area.serialize,~
+** Processing line: ~ grid_area: @grid_area.serialize,~
+** Processing line: ~ control_area: @control_area.serialize~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inspect~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ class AspectRatio~
+** Processing line: ~ attr :w, :h, :u~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @w = 0~
+** Processing line: ~ @h = 0~
+** Processing line: ~ @u = 0~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ {~
+** Processing line: ~ w: @w,~
+** Processing line: ~ h: @h,~
+** Processing line: ~ u: @u~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inspect~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ class Layout~
+** Processing line: ~ attr :w, :h, :rect_cache~
+** Processing line: ~~
+** Processing line: ~ def initialize w, h~
+** Processing line: ~ @w = w~
+** Processing line: ~ @h = h~
+** Processing line: ~ @rect_cache = {}~
+** Processing line: ~ init_device @w, @h~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def u_for_16x9 w, h~
+** Processing line: ~ u = (w.fdiv 16).floor~
+** Processing line: ~ u = (h.fdiv 9).floor if (u * 9) > h~
+** Processing line: ~~
+** Processing line: ~ {~
+** Processing line: ~ u: u,~
+** Processing line: ~ w: u * 16,~
+** Processing line: ~ h: u * 9~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_relative_size_enum size_enum~
+** Processing line: ~ base_line_logical = 22~
+** Processing line: ~ base_line_actual = font_size_med~
+** Processing line: ~ target_logical = size_enum~
+** Processing line: ~ target_logical = 1 if target_logical <= 0~
+** Processing line: ~ (base_line_actual / base_line_logical) * target_logical~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_px_to_pt px~
+** Processing line: ~ (px / 1.33333).floor~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_pt_to_px pt~
+** Processing line: ~ pt * 1.333333~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_size_cell~
+** Processing line: ~ (cell_height / 1.33333)~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_size_xl~
+** Processing line: ~ font_size_cell~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_size_lg~
+** Processing line: ~ font_size_cell * 0.8~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_size_med~
+** Processing line: ~ font_size_cell * 0.7~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_size_sm~
+** Processing line: ~ font_size_cell * 0.6~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_size_xs~
+** Processing line: ~ font_size_cell * 0.5~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def font_size~
+** Processing line: ~ font_size_cell * 0.7~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def logical_rect~
+** Processing line: ~ @logical_rect ||= { x: 0,~
+** Processing line: ~ y: 0,~
+** Processing line: ~ w: @w,~
+** Processing line: ~ h: @h }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def safe_rect~
+** Processing line: ~ @safe_rect ||= { x: 0,~
+** Processing line: ~ y: 0,~
+** Processing line: ~ w: @w,~
+** Processing line: ~ h: @h }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def control_rect~
+** Processing line: ~ @control_rect ||= { x: device.control_area.margin.left,~
+** Processing line: ~ y: device.control_area.margin.top,~
+** Processing line: ~ w: device.control_area.w,~
+** Processing line: ~ h: device.control_area.h }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def row_count~
+** Processing line: ~ device.grid_area.row_count~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def col_count~
+** Processing line: ~ device.grid_area.col_count~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def gutter_height~
+** Processing line: ~ device.grid_area.gutter~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def gutter_width~
+** Processing line: ~ device.grid_area.gutter~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def outer_gutter~
+** Processing line: ~ device.grid_area.outer_gutter~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def cell_height~
+** Processing line: ~ device.control_area.cell_size~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def cell_width~
+** Processing line: ~ device.control_area.cell_size~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def rect_defaults~
+** Processing line: ~ {~
+** Processing line: ~ row: nil,~
+** Processing line: ~ col: nil,~
+** Processing line: ~ h: 1,~
+** Processing line: ~ w: 1,~
+** Processing line: ~ dx: 0,~
+** Processing line: ~ dy: 0,~
+** Processing line: ~ rect: :control_rect~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def rect opts~
+** Processing line: ~ opts = rect_defaults.merge opts~
+** Processing line: ~ result = send opts[:rect]~
+** Processing line: ~ if opts[:row] && opts[:col] && opts[:w] && opts[:h]~
+** Processing line: ~ col = rect_col opts[:col], opts[:w]~
+** Processing line: ~ row = rect_row opts[:row], opts[:h]~
+** Processing line: ~ result = control_rect.merge x: col.x,~
+** Processing line: ~ y: row.y,~
+** Processing line: ~ w: col.w,~
+** Processing line: ~ h: row.h~
+** Processing line: ~ elsif opts[:row] && !opts[:col]~
+** Processing line: ~ result = rect_row opts[:row], opts[:h]~
+** Processing line: ~ elsif !opts[:row] && opts[:col]~
+** Processing line: ~ result = rect_col opts[:col], opts[:w]~
+** Processing line: ~ else~
+** Processing line: ~ raise "LayoutTheory::rect unable to process opts #{opts}."~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if opts[:max_height] && opts[:max_height] >= 0~
+** Processing line: ~ if result[:h] > opts[:max_height]~
+** Processing line: ~ delta = (result[:h] - opts[:max_height]) * 2~
+** Processing line: ~ result[:y] += delta~
+** Processing line: ~ result[:h] = opts[:max_height]~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if opts[:max_width] && opts[:max_width] >= 0~
+** Processing line: ~ if result[:w] > opts[:max_width]~
+** Processing line: ~ delta = (result[:w] - opts[:max_width]) * 2~
+** Processing line: ~ result[:x] += delta~
+** Processing line: ~ result[:w] = opts[:max_width]~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ result[:x] += opts[:dx]~
+** Processing line: ~ result[:y] += opts[:dy]~
+** Processing line: ~~
+** Processing line: ~ if opts[:include_row_gutter]~
+** Processing line: ~ result[:x] -= device.grid_area.gutter~
+** Processing line: ~ result[:w] += device.grid_area.gutter * 2~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ if opts[:include_col_gutter]~
+** Processing line: ~ result[:y] -= device.grid_area.gutter~
+** Processing line: ~ result[:h] += device.grid_area.gutter * 2~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ result~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def rect_center reference, target~
+** Processing line: ~ delta_x = (reference.w - target.w).fdiv 2~
+** Processing line: ~ delta_y = (reference.h - target.h).fdiv 2~
+** Processing line: ~ [target.x - delta_x, target.y - delta_y, target.w, target.h]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def rect_row index, h~
+** Processing line: ~ @rect_cache[:row] ||= {}~
+** Processing line: ~ @rect_cache[:row][index] ||= {}~
+** Processing line: ~ return @rect_cache[:row][index][h] if @rect_cache[:row][index][h]~
+** Processing line: ~ row_h = (device.grid_area.gutter * (h - 1)) +~
+** Processing line: ~ (device.control_area.cell_size * h)~
+** Processing line: ~~
+** Processing line: ~ row_h = row_h.to_i~
+** Processing line: ~ row_h -= 1 if row_h.odd?~
+** Processing line: ~~
+** Processing line: ~ row_y = (control_rect.y) +~
+** Processing line: ~ (device.grid_area.gutter * index) +~
+** Processing line: ~ (device.control_area.cell_size * index)~
+** Processing line: ~~
+** Processing line: ~ row_y = row_y.to_i~
+** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) > @device.grid_area.row_count.half~
+** Processing line: ~ row_y += 1 if row_y.odd? && (index + 1) <= @device.grid_area.row_count.half~
+** Processing line: ~~
+** Processing line: ~ row_y = device.h - row_y - row_h~
+** Processing line: ~~
+** Processing line: ~ result = control_rect.merge y: row_y, h: row_h~
+** Processing line: ~ @rect_cache[:row][index][h] = result~
+** Processing line: ~ @rect_cache[:row][index][h]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def rect_col index, w~
+** Processing line: ~ @rect_cache[:col] ||= {}~
+** Processing line: ~ @rect_cache[:col][index] ||= {}~
+** Processing line: ~ return @rect_cache[:col][index][w] if @rect_cache[:col][index][w]~
+** Processing line: ~ col_x = (control_rect.x) +~
+** Processing line: ~ (device.grid_area.gutter * index) +~
+** Processing line: ~ (device.control_area.cell_size * index)~
+** Processing line: ~~
+** Processing line: ~ col_x = col_x.to_i~
+** Processing line: ~ col_x -= 1 if col_x.odd? && (index + 1) < @device.grid_area.col_count.half~
+** Processing line: ~ col_x += 1 if col_x.odd? && (index + 1) >= @device.grid_area.col_count.half~
+** Processing line: ~~
+** Processing line: ~ col_w = (device.grid_area.gutter * (w - 1)) +~
+** Processing line: ~ (device.control_area.cell_size * w)~
+** Processing line: ~~
+** Processing line: ~ col_w = col_w.to_i~
+** Processing line: ~ col_w -= 1 if col_w.odd?~
+** Processing line: ~~
+** Processing line: ~ result = control_rect.merge x: col_x, w: col_w~
+** Processing line: ~ @rect_cache[:col][index][w] = result~
+** Processing line: ~ @rect_cache[:col][index][w]~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def device~
+** Processing line: ~ @device~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def init_device w, h~
+** Processing line: ~ @device = Device.new~
+** Processing line: ~ @device.w = w~
+** Processing line: ~ @device.h = h~
+** Processing line: ~ @device.name = "Device"~
+** Processing line: ~ @device.aspect.w = (u_for_16x9 w, h)[:w]~
+** Processing line: ~ @device.aspect.h = (u_for_16x9 w, h)[:h]~
+** Processing line: ~ @device.aspect.u = (u_for_16x9 w, h)[:u]~
+** Processing line: ~ @device.safe_area.w = @device.aspect.u * 16~
+** Processing line: ~ @device.safe_area.h = @device.aspect.u * 9~
+** Processing line: ~ @device.safe_area.margin.left = ((@device.w - @device.safe_area.w).fdiv 2).floor~
+** Processing line: ~ @device.safe_area.margin.right = ((@device.w - @device.safe_area.w).fdiv 2).floor~
+** Processing line: ~ @device.safe_area.margin.top = ((@device.h - @device.safe_area.h).fdiv 2).floor~
+** Processing line: ~ @device.safe_area.margin.bottom = ((@device.h - @device.safe_area.h).fdiv 2).floor~
+** Processing line: ~ @device.grid_area.outer_gutter = @device.w / 80~
+** Processing line: ~ @device.grid_area.gutter = @device.w / 160~
+** Processing line: ~~
+** Processing line: ~ @device.grid_area.w = @device.safe_area.w - (@device.grid_area.outer_gutter * 2)~
+** Processing line: ~ @device.grid_area.h = @device.safe_area.h - (@device.grid_area.outer_gutter * 2)~
+** Processing line: ~~
+** Processing line: ~ @device.grid_area.margin.left = ((@device.w - @device.grid_area.w).fdiv 2).floor~
+** Processing line: ~ @device.grid_area.margin.right = ((@device.w - @device.grid_area.w).fdiv 2).floor~
+** Processing line: ~ @device.grid_area.margin.top = ((@device.h - @device.grid_area.h).fdiv 2).floor~
+** Processing line: ~ @device.grid_area.margin.bottom = ((@device.h - @device.grid_area.h).fdiv 2).floor~
+** Processing line: ~~
+** Processing line: ~ @device.grid_area.col_count = 24~
+** Processing line: ~ @device.grid_area.row_count = 12~
+** Processing line: ~ @device.grid_area.cell_w = ((@device.aspect.w - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.col_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.col_count~
+** Processing line: ~ @device.grid_area.cell_h = ((@device.aspect.h - (@device.grid_area.outer_gutter * 2)) - ((@device.grid_area.row_count - 1) * @device.grid_area.gutter)).fdiv @device.grid_area.row_count~
+** Processing line: ~~
+** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_w~
+** Processing line: ~ @device.control_area.cell_size = @device.grid_area.cell_h if @device.grid_area.cell_h < @device.grid_area.cell_w && @device.grid_area.cell_h > 0~
+** Processing line: ~ @device.control_area.cell_size = @device.control_area.cell_size.floor~
+** Processing line: ~ @device.control_area.w = (@device.control_area.cell_size * @device.grid_area.col_count) + (@device.grid_area.gutter * (@device.grid_area.col_count - 1))~
+** Processing line: ~ @device.control_area.h = (@device.control_area.cell_size * @device.grid_area.row_count) + (@device.grid_area.gutter * (@device.grid_area.row_count - 1))~
+** Processing line: ~ @device.control_area.margin.left = (@device.w - @device.control_area.w).fdiv 2~
+** Processing line: ~ @device.control_area.margin.right = (@device.w - @device.control_area.w).fdiv 2~
+** Processing line: ~ @device.control_area.margin.top = (@device.h - @device.control_area.h).fdiv 2~
+** Processing line: ~ @device.control_area.margin.bottom = (@device.h - @device.control_area.h).fdiv 2~
+** Processing line: ~ @device~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def serialize~
+** Processing line: ~ {~
+** Processing line: ~ device: @device.serialize,~
+** Processing line: ~ }~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def inspect~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def to_s~
+** Processing line: ~ serialize.to_s~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
** Processing line: ~* log.rb~
- H1 detected.
- Determining if line is a header.
@@ -140368,6 +150737,11 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ return 720 - self unless $gtk~
** Processing line: ~ $gtk.args.grid.h - self~
** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def from_right~
+** Processing line: ~ return 1280 - self unless $gtk~
+** Processing line: ~ $gtk.args.grid.w - self~
+** Processing line: ~ end~
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~ class Fixnum~
@@ -140749,6 +151123,18 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ def draw_screenshots~
** Processing line: ~ @args.outputs.screenshots.each { |s| draw_screenshot s }~
** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~ def pixel_arrays~
+** Processing line: ~ @args.pixel_arrays.each { |k,v|~
+** Processing line: ~ if v.pixels.length == (v.width * v.height) # !!! FIXME: warning? exception? Different API?~
+** Processing line: ~ @ffi_draw.upload_pixel_array k.to_s, v.width.to_i, v.height.to_i, v.pixels~
+** Processing line: ~ end~
+** Processing line: ~ }~
+** Processing line: ~ rescue Exception => e~
+** Processing line: ~ pause!~
+** Processing line: ~ pretty_print_exception_and_export! e~
+** Processing line: ~ end~
+** Processing line: ~~
** Processing line: ~ end~
** Processing line: ~ end~
** Processing line: ~ end~
@@ -141235,6 +151621,9 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ # MIT License~
** Processing line: ~ # trace.rb has been released under MIT (*only this file*).~
** Processing line: ~~
+** Processing line: ~ # Contributors outside of DragonRuby who also hold Copyright:~
+** Processing line: ~ # - Dan Healy: https://github.com/danhealy~
+** Processing line: ~~
** Processing line: ~ module GTK~
** Processing line: ~ module Trace~
** Processing line: ~ IGNORED_METHODS = [~
@@ -141314,10 +151703,19 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ methods.reject { |m| m.start_with? "__trace_" }.reject { |m| IGNORED_METHODS.include? m }~
** Processing line: ~ end~
** Processing line: ~~
+** Processing line: ~ def self.trace_times_string~
+** Processing line: ~ str = []~
+** Processing line: ~ $trace_performance.sort_by {|method_name, times| -times[:avg] }.each do |method_name, times|~
+** Processing line: ~ str << "#{method_name}: #{times[:sum].round(2)}/#{times[:count]} #{times[:min]}ms min, #{times[:avg].round(2)}ms avg, #{times[:max]}ms max"~
+** Processing line: ~ end~
+** Processing line: ~ str.join("\n")~
+** Processing line: ~ end~
+** Processing line: ~~
** Processing line: ~ def self.flush_trace pad_with_newline = false~
** Processing line: ~ $trace_puts ||= []~
+** Processing line: ~ puts "(Trace info flushed!)"~
** Processing line: ~ if $trace_puts.length > 0~
-** Processing line: ~ text = $trace_puts.join("")~
+** Processing line: ~ text = $trace_puts.join("").strip + "\n" + self.trace_times_string + "\n"~
** Processing line: ~ if pad_with_newline~
** Processing line: ~ $gtk.append_file_root 'logs/trace.txt', "\n" + text.strip~
** Processing line: ~ else~
@@ -141332,6 +151730,15 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ $trace_history ||= []~
** Processing line: ~ $trace_enabled = true~
** Processing line: ~ $trace_call_depth ||=0~
+** Processing line: ~ $trace_performance = Hash.new {|h,k|~
+** Processing line: ~ h[k] = {~
+** Processing line: ~ min: 100000,~
+** Processing line: ~ max: 0,~
+** Processing line: ~ avg: 0,~
+** Processing line: ~ sum: 0,~
+** Processing line: ~ count: 0~
+** Processing line: ~ }~
+** Processing line: ~ }~
** Processing line: ~ flush_trace~
** Processing line: ~ instance = $top_level unless instance~
** Processing line: ~ return if Trace.traced_classes.include? instance.class~
@@ -141349,15 +151756,27 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ instance.__trace_call_depth__ += 1~
** Processing line: ~ $trace_call_depth = instance.__trace_call_depth__~
** Processing line: ~ parameters = "#{args}"[1..-2]~
+** Processing line: ~~
** Processing line: ~ $trace_puts << "\n #{tab_width}#{m}(#{parameters})"~
-** Processing line: ~ execution_time = Time.new.to_i~
+** Processing line: ~~
+** Processing line: ~ execution_time = Time.new~
+** Processing line: ~~
** Processing line: ~ $last_method_traced = trace_method_name~
** Processing line: ~ $trace_history << [m, parameters]~
+** Processing line: ~~
** Processing line: ~ result = send(trace_method_name, *args)~
-** Processing line: ~ completion_time = Time.new.to_i~
+** Processing line: ~~
+** Processing line: ~ class_m = "#{instance.class}##{m}"~
+** Processing line: ~ completion_time = ((Time.new - execution_time).to_f * 1000).round(2)~
+** Processing line: ~ $trace_performance[class_m][:min] = [$trace_performance[class_m][:min], completion_time].min~
+** Processing line: ~ $trace_performance[class_m][:max] = [$trace_performance[class_m][:max], completion_time].max~
+** Processing line: ~ $trace_performance[class_m][:count] += 1~
+** Processing line: ~ $trace_performance[class_m][:sum] += completion_time~
+** Processing line: ~ $trace_performance[class_m][:avg] = $trace_performance[class_m][:sum].fdiv($trace_performance[class_m][:count])~
+** Processing line: ~~
** Processing line: ~ instance.__trace_call_depth__ -= 1~
** Processing line: ~ instance.__trace_call_depth__ = instance.__trace_call_depth__.greater 0~
-** Processing line: ~ $trace_puts << "\n #{tab_width} success: #{m}"~
+** Processing line: ~ $trace_puts << "\n #{tab_width} #{completion_time > 10 ? '!!! ' : ''}#{completion_time}ms success: #{m}"~
** Processing line: ~ if instance.__trace_call_depth__ == 0~
** Processing line: ~ $trace_puts << "\n"~
** Processing line: ~ $trace_history.clear~
@@ -141383,4 +151802,34 @@ Follows is a source code listing for all files that have been open sourced. This
** Processing line: ~ end~
** Processing line: ~~
** Processing line: ~#+end_src~
+- PRE end detected.
+** Processing line: ~~
+** Processing line: ~~
+** Processing line: ~* wizards.rb~
+- H1 detected.
+- Determining if line is a header.
+- Line contains ~* ~... gsub-ing empty string
+- Formatting line: ~wizards.rb~
+- Line's tilde count is: 0
+- Line contains link marker: false
+** Processing line: ~~
+** Processing line: ~#+begin_src ruby~
+- PRE start detected.
+** Processing line: ~ # ./dragon/wizards.rb~
+** Processing line: ~ # Copyright 2019 DragonRuby LLC~
+** Processing line: ~ # MIT License~
+** Processing line: ~ # wizards.rb has been released under MIT (*only this file*).~
+** Processing line: ~~
+** Processing line: ~ module GTK~
+** Processing line: ~ class Wizards~
+** Processing line: ~ attr_accessor :ios, :itch~
+** Processing line: ~~
+** Processing line: ~ def initialize~
+** Processing line: ~ @ios = IOSWizard.new~
+** Processing line: ~ @itch = ItchWizard.new~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~ end~
+** Processing line: ~~
+** Processing line: ~#+end_src~
- PRE end detected. \ No newline at end of file