-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
shuffle things a bit for orderliness.
- Loading branch information
1 parent
524ec2b
commit 7752dd6
Showing
16 changed files
with
186 additions
and
158 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
class Sketch < Valuable | ||
|
||
has_value :id | ||
has_value :klass | ||
has_value :height | ||
has_value :width | ||
has_value :baseProfile, :alias => :base_profile | ||
has_value :doctype | ||
|
||
def draw(canvas) | ||
raise NotImplementedError | ||
end | ||
|
||
def to_svg( ) | ||
svg_builder do |canvas| | ||
self.draw( canvas ) | ||
end.to_xml | ||
end | ||
|
||
def to_html | ||
svg_builder do |canvas| | ||
self.draw( canvas ) | ||
end.doc.root.to_s | ||
end | ||
|
||
def svg_attributes | ||
out = {} | ||
out[:height] = self.height if self.height | ||
out[:width] = self.width if self.width | ||
out[:doctype] = self.doctype if self.doctype | ||
out | ||
end | ||
|
||
def svg_builder | ||
Canvas.new( svg_attributes ).builder {|canvas| yield canvas} | ||
end | ||
|
||
end | ||
|
||
require 'sketch/base' | ||
require 'sketch/element' | ||
require 'sketch/canvas' | ||
|
||
require 'sketch/circle' | ||
require 'sketch/ellipse' | ||
require 'sketch/rect' | ||
require 'sketch/rectangle' | ||
require 'sketch/path' | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,39 +1,15 @@ | ||
module Sketch | ||
class Base < Valuable | ||
module Sketch::Base | ||
def svg_attributes | ||
out = {} | ||
|
||
has_value :id | ||
has_value :klass | ||
|
||
def to_svg( doc_atts = {} ) | ||
svg_builder(doc_atts) do |canvas| | ||
self.draw( canvas ) | ||
end.to_xml | ||
end | ||
|
||
def to_html( doc_atts = {} ) | ||
svg_builder(doc_atts) do |canvas| | ||
self.draw( canvas ) | ||
end.doc.root | ||
end | ||
|
||
def svg_attributes | ||
out = {} | ||
|
||
#svg is heavy in dashes. Ruby symbols can't handle them. | ||
attributes.each do |name, value| | ||
out[name.to_s.gsub('_', '-')] = value | ||
end | ||
|
||
out[:class] = out.delete(:klass) if out.has_key?(:klass) | ||
|
||
out | ||
#svg is heavy in dashes. Ruby symbols can't handle them. | ||
attributes.each do |name, value| | ||
out[name.to_s.gsub('_', '-')] = value | ||
end | ||
|
||
private | ||
out[:class] = out.delete(:klass) if out.has_key?(:klass) | ||
|
||
def svg_builder(atts) | ||
Canvas.new( atts ).builder {|canvas| yield canvas} | ||
end | ||
out | ||
end | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,43 @@ | ||
module Sketch | ||
class Canvas < Valuable | ||
|
||
has_value :doctype, :default => false | ||
has_value :inline, :default => false | ||
has_value :svg_version, :default => '1.1' | ||
has_value :namespace_bindings, :default => [:svg, :xlink, :events] | ||
|
||
has_value :width, :default => 500 | ||
has_value :height, :default => 300 | ||
|
||
def builder | ||
Nokogiri::XML::Builder.new do |document| | ||
render_doctype( document ) | ||
document.svg( svg_attributes ) {|svg| yield svg if block_given?} | ||
end | ||
end | ||
class Sketch::Canvas < Valuable | ||
include Sketch::Base | ||
|
||
has_value :version, :default => '1.1' | ||
has_value :height | ||
has_value :width | ||
has_value :doctype, :default => false | ||
|
||
def default_doctype | ||
['svg', "-//W3C//DTD SVG 1.0//EN", "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"] | ||
def namespace_bindings | ||
{ | ||
'xmlns' => 'http://www.w3.org/2000/svg', | ||
'xmlns:ev' => 'http://www.w3.org/2001/xml-events', | ||
'xmlns:xlink' => 'http://www.w3.org/1999/xlink' | ||
} | ||
end | ||
|
||
def builder | ||
Nokogiri::XML::Builder.new do |document| | ||
render_doctype( document ) | ||
document.svg( svg_attributes ) {|svg| yield svg if block_given?} | ||
end | ||
end | ||
|
||
def default_doctype | ||
['svg', "-//W3C//DTD SVG 1.0//EN", "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"] | ||
end | ||
|
||
def render_doctype( document ) | ||
self.doctype &&= self.default_doctype | ||
def render_doctype( document ) | ||
self.doctype &&= self.default_doctype | ||
|
||
if( self.doctype ) | ||
document.doc.create_internal_subset(*self.doctype) | ||
end | ||
end | ||
|
||
def svg_attributes | ||
{ | ||
'width' => width, | ||
'height' => height, | ||
'version' => svg_version, | ||
'xmlns' => 'http://www.w3.org/2000/svg', | ||
'xmlns:ev' => 'http://www.w3.org/2001/xml-events', | ||
'xmlns:xlink' => 'http://www.w3.org/1999/xlink', | ||
} | ||
if( self.doctype ) | ||
document.doc.create_internal_subset(*self.doctype) | ||
end | ||
|
||
end | ||
|
||
def svg_attributes | ||
atts = super | ||
atts.delete('doctype') | ||
atts.merge(namespace_bindings) | ||
end | ||
|
||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,14 @@ | ||
module Sketch | ||
class Circle < Base | ||
class Sketch::Circle < Sketch::Element | ||
|
||
has_value :cx | ||
has_value :cy | ||
has_value :r, :alias => :radius | ||
has_value :fill | ||
has_value :stroke | ||
has_value :stroke_width | ||
|
||
def draw(canvas) | ||
canvas.circle(:cx => self.cx, :cy => self.cy, :r => self.radius, :fill => self.fill, :stroke => self.stroke, 'stroke_width' => self.stroke_width) | ||
end | ||
has_value :cx | ||
has_value :cy | ||
has_value :r, :alias => :radius | ||
has_value :fill | ||
has_value :stroke | ||
has_value :stroke_width | ||
|
||
def draw(canvas) | ||
canvas.circle(:cx => self.cx, :cy => self.cy, :r => self.radius, :fill => self.fill, :stroke => self.stroke, 'stroke_width' => self.stroke_width) | ||
end | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
class Sketch::Element < Valuable | ||
include Sketch::Base | ||
|
||
has_value :id | ||
has_value :klass | ||
has_value :style | ||
|
||
def draw(canvas) | ||
canvas.send( self.svg_node, svg_attributes ) | ||
end | ||
|
||
def svg_node | ||
self.class.name.split('::').last.downcase | ||
end | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,13 @@ | ||
module Sketch | ||
class Ellipse < Base | ||
class Sketch::Ellipse < Sketch::Element | ||
|
||
has_value :cx | ||
has_value :cy | ||
has_value :rx | ||
has_value :ry | ||
has_value :radius | ||
has_value :fill | ||
has_value :stroke | ||
has_value :stroke_width | ||
|
||
def draw(canvas) | ||
canvas.ellipse( svg_attributes ) | ||
end | ||
|
||
end | ||
has_value :cx | ||
has_value :cy | ||
has_value :rx | ||
has_value :ry | ||
has_value :radius | ||
has_value :fill | ||
has_value :stroke | ||
has_value :stroke_width | ||
|
||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,17 @@ | ||
module Sketch | ||
class Path < Base | ||
class Sketch::Path < Sketch::Element | ||
|
||
has_value :fill, :default => 'none' | ||
has_value :stroke, :default => 'black' | ||
has_value :stroke_width, :default => 1 | ||
has_value :stroke_linecap | ||
has_value :d, :alias => 'commands', :default => [] | ||
has_value :fill | ||
has_value :stroke | ||
has_value :stroke_width | ||
has_value :stroke_linecap | ||
has_value :d, :alias => 'commands', :default => [] | ||
|
||
def draw(canvas) | ||
canvas.path(svg_attributes) | ||
end | ||
|
||
def svg_attributes | ||
super.merge(:d => self.commands.join(' ')) | ||
end | ||
|
||
def draw(canvas) | ||
canvas.path(svg_attributes) | ||
end | ||
|
||
def svg_attributes | ||
super.merge(:d => self.commands.join(' ')) | ||
end | ||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
class Sketch::Rect < Sketch::Element | ||
|
||
has_value :x | ||
has_value :y | ||
has_value :width | ||
has_value :height | ||
has_value :rx | ||
has_value :ry | ||
has_value :fill | ||
has_value :stroke | ||
has_value :stroke_width | ||
|
||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Sketch::Rectangle = Sketch::Rect |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
#prerequisites | ||
require 'rubygems' | ||
require 'test/unit' | ||
require 'mocha' | ||
require 'nokogiri' | ||
require 'valuable' | ||
|
||
$:.push File.expand_path("./../../lib", __FILE__) | ||
$:.push File.expand_path("./../../lib/sketch", __FILE__) | ||
|
||
require 'sketch' | ||
require 'sketch/canvas' | ||
require 'sketch/base' | ||
require 'sketch/element' | ||
|
Oops, something went wrong.