Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # // 05/07/2012
- # // 06/07/2012
- #-inject gen_scr_imported_ww 'MACL::Vectrix', '0x10000'
- #-inject gen_class_header 'MACL::Vectrix'
- module MACL
- class Vectrix
- module Constants
- # // Commands
- COMMAND_NULL = 0
- COMMAND_DRAW_PIXEL = 1
- COMMAND_DRAW_LINE = 2
- COMMAND_DRAW_BOX = 3
- COMMAND_FILL_PIXEL = 11
- COMMAND_FILL_LINE = 12
- COMMAND_FILL_BOX = 13
- # // Data Types
- DATA_TYPE_SYM = {
- #'(?:rgb|color):\((\d+[%]?(?:\s*\d+[%]?\s*){2,3})\)',
- :color => '(?:rgb|color):\(\d+%?\s+\d+%?\s+\d+%?(?:\s+\d+%?)?\)',
- :pos => '(?:pos|point):\(\d+%\s+\d+%\)',
- :rect => '(?:rect|box):\(\d+%\s+\d+%\s+\d+%\s+\d+%\)'
- }
- DATA_TYPE = DATA_TYPE_SYM.invert
- end
- module Parser
- REGEXP_TYPE = /(?<name>\S+):\((?<parameters>.*)\)/
- REGEXP_COLOR = /(?<red>\d+%?)\s+(?<green>\d+%?)\s+(?<blue>\d+%?)(?:\s+(?<alpha>\d+%?))?/
- REGEXP_POS = /(?<x>\d+(?:%))\s+(?<y>\d+(?:%))/i
- REGEXP_RECT = /(?<x>\d+(?:%))\s+(?<y>\d+(?:%))\s+(?<width>\d+(?:%))\s+(?<height>\d+(?:%))/i
- def self.str2ratem str,multiplier=1
- str = str.to_s unless str.is_a? String
- if str.end_with? ?%
- str.gsub('%','').to_i * multiplier
- else
- str.to_i
- end
- end
- TYPES = {
- ['rgb','color','rgba'] => proc do |s|
- mt = s.match REGEXP_COLOR
- mt ? [:red,:green,:blue,:alpha].collect do |sym| str2ratem(mt[sym]||'255',2.55) end : [0,0,0,0]
- end,
- ['pos','point'] => proc do |s|
- mt = s.match REGEXP_POS
- mt ? [mt[:x].to_i/100.0,mt[:y].to_i/100.0] : [0,0]
- end,
- ['rect','box'] => proc do |s|
- mt = s.match REGEXP_RECT
- mt ? [mt[:x].to_i/100.0,mt[:y].to_i/100.0,mt[:width].to_i/100.0,mt[:height].to_i/100.0] : [0,0,0,0]
- end
- }
- TYPES.enum2keys!
- def self.parse_str str
- mt = str.match REGEXP_TYPE
- name,parameters = mt[:name].downcase, mt[:parameters]
- DataType.new name,TYPES[name].call(parameters)
- end
- end
- include Constants
- DataType = Struct.new :symbol, :params
- @@blaz = MACL::Blaz.new
- # // draw_pixel: pos(0% 0%), color(255 255 255 255)
- # // fill_pixel: pos(0% 0%), color(255 255 255 255)
- # // draw_line: pos(0% 0%), pos(0% 0%), color(255 255 255 255)
- # // fill_line: pos(0% 0%), pos(0% 0%), color(255 255 255 255)
- # // draw_box: rect(0% 0% 0% 0%), color(255 255 255 255)
- # // fill_box: rect(0% 0% 0% 0%), color(255 255 255 255)
- dtsym = DATA_TYPE_SYM
- with_line = "%s[_ ]?line:\s*(?<pos1>#{dtsym[:pos]})\s*,\s*(?<pos2>#{dtsym[:pos]})\s*,\s*(?<color>#{dtsym[:color]})"
- with_box = "%s[_ ]?(?:box|rect):\s*(?<rect>#{dtsym[:rect]})\s*,\s*(?<color>#{dtsym[:color]})"
- with_pixel= "%s[_ ]?pixel:\s*(?<pos>#{dtsym[:pos]})\s*,\s*(?<color>#{dtsym[:color]})"
- @@blaz.add_command :draw_pixel, /#{'draw'+with_pixel}/i do
- [COMMAND_DRAW_PIXEL,Parser.parse_str(params[:pos]),Parser.parse_str(params[:color])]
- end
- @@blaz.add_command :fill_pixel, /#{'fill'+with_pixel}/i do
- [COMMAND_FILL_PIXEL,Parser.parse_str(params[:pos]),Parser.parse_str(params[:color])]
- end
- @@blaz.add_command :draw_line, /#{'draw'+with_line}/i do
- [COMMAND_DRAW_LINE,Parser.parse_str(params[:pos1]),Parser.parse_str(params[:pos2]),Parser.parse_str(params[:color])]
- end
- @@blaz.add_command :fill_line, /#{'fill'+with_line}/i do
- [COMMAND_FILL_LINE,Parser.parse_str(params[:pos1]),Parser.parse_str(params[:pos2]),Parser.parse_str(params[:color])]
- end
- @@blaz.add_command :draw_box, /#{'draw'+with_box}/i do
- [COMMAND_DRAW_BOX,Parser.parse_str(params[:rect]),Parser.parse_str(params[:color])]
- end
- @@blaz.add_command :fill_rect, /#{'fill'+with_box}/i do
- [COMMAND_FILL_BOX,Parser.parse_str(params[:rect]),Parser.parse_str(params[:color])]
- end
- def self.str2stack str
- commands = str.split(/[\n;]/)
- commands.collect do |s| @@blaz.exec_command s end
- end
- def initialize
- @stack = []
- end
- def to_bitmap width,height=nil
- bmp = width.is_a?(Bitmap) ? width : Bitmap.new(width,height)
- for ar in @stack
- process_command bmp, ar
- end
- bmp
- end
- def process_command bitmap,array
- command,params = array
- case command
- when COMMAND_NULL
- when COMMAND_DRAW_PIXEL
- when COMMAND_DRAW_LINE
- when COMMAND_DRAW_BOX
- when COMMAND_FILL_RECT
- when COMMAND_FILL_LINE
- end
- end
- end
- end
- #-inject gen_script_footer
Advertisement
Add Comment
Please, Sign In to add comment