class Graphed::Looper

Public Class Methods

automata(image) click to toggle source

Good for debugging

# File lib/graphed/looper.rb, line 78
def self.automata(image)
  image = execute_command('I 15 10', image)
  image = execute_command('V 3 3 9 x', image)
  image = execute_command('V 7 3 9 x', image)
  image = execute_command('H 3 7 3 x', image)
  image = execute_command('H 3 7 7 x', image)
  image = execute_command('S', image)
end
execute_command(command, image) click to toggle source

Processing commands with regex

# File lib/graphed/looper.rb, line 8
def self.execute_command(command, image)
  case command
    when /^I (\d+) (\d+)/
      m = $1.to_i
      n = $2.to_i
      image = ImageEditor.new(m, n)
    when /^help/
      help
    else
      unless image[0].nil? #Following commands valid only if object is created.
        case command
          when /^C/
            image = ImageEditor.new(image.cols, image.rows)
          when /^L (\d+) (\d+) (.+$)/
            x = $1.to_i
            y = $2.to_i
            c = $3
            image.valid_on?(x,y) ? image.L(x, y, c) : puts("Sorry, wrong parameters.")
          when /^V (\d+) (\d+) (\d+) (.+$)/
            x = $1.to_i
            y1 = $2.to_i
            y2 = $3.to_i
            c = $4
            (y1<=y2) && image.valid_on?(x, y1) && image.valid_on?(x, y2) ? image.V(x, y1, y2, c) : puts("Sorry, wrong parameters.")
          when /^H (\d+) (\d+) (\d+) (.+$)/
            x1 = $1.to_i
            x2 = $2.to_i
            y = $3.to_i
            c = $4
            (x1<=x2) && image.valid_on?(x1, y) && image.valid_on?(x2,y) ? image.H(x1, x2, y, c) : puts("Sorry, wrong parameters.")
          when /^F (\d+) (\d+) (.+$)/
            x = $1.to_i
            y = $2.to_i
            c = $3
            image.valid_on?(x, y) ? image.F(x, y, c) : puts("Sorry, wrong parameters.")
          when /^S/
            image.S
        else
            puts "Sorry, try again. Type 'help' to see all commands."
        end
      else
        puts "Tip: create an image first with 'I'. Example: I 9 7"
      end
  end
  image
rescue
  puts "Exception: Sorry, something happened, please try again."
  return image
end
help() click to toggle source

Help message and instruction

# File lib/graphed/looper.rb, line 59
    def self.help
      print <<-EOF
This program simulates a simple interactive graphical editor.

Available commands:
I M N       Create a new MxN image with all pixels coloured white(O).
C           Clears the table, setting all pixels to white (O).
L X Y C     Colours the pixel (X,Y) with colour C.
V X Y1 Y2 C Draw a vertical segment of colour C in column X between rows Y1 and Y2 (inclusive).
H X1 X2 Y C Draw a horizontal segment of colour C in row Y between columns X1 and X2 (inclusive).
F X Y C     Fill the region R with the colour C. R is defined as: Pixel (X,Y) belongs to R. Any other pixel which is the same colour as (X,Y) and shares a common side with any pixel in R also belongs to this region.
S           Show the contents of the current image
X           Terminate the session
help        Show this help

      EOF
    end
main() click to toggle source

Main entry point

# File lib/graphed/looper.rb, line 88
def self.main
  help #Show help message
  image = []
  #image = automata(image)
  loop do
    line = Readline::readline('GraphEd> ')
    exit if line.nil? || line == 'X'
    Readline::HISTORY.push(line)
    image = execute_command(line, image)
  end
end