lib/libeagle/eagle.rb
require_relative "types"
module LibEagle
CLASS_NAMES = {
'eagle' => "Eagle",
'compatibility' => "Compatibility",
'note' => "Note",
'drawing' => "Drawing",
'library' => "Library",
'schematic' => "Schematic",
'board' => "Board",
'sheet' => "Sheet",
'package' => "Package",
'symbol' => "Symbol",
'deviceset' => "Deviceset",
'device' => "Device",
'bus' => "Bus",
'net' => "Net",
'segment' => "Segment",
'signal' => "Signal",
'variantdef' => "Variantdef",
'variant' => "Variant",
'gate' => "Gate",
'wire' => "Wire",
'dimension' => "Dimension",
'text' => "Text",
'circle' => "Circle",
'rectangle' => "Rectangle",
'frame' => "Frame",
'hole' => "Hole",
'pad' => "Pad",
'smd' => "Smd",
'element' => "Element",
'via' => "Via",
'polygon' => "Polygon",
'vertex' => "Vertex",
'pin' => "Pin",
'part' => "Part",
'instance' => "Instance",
'label' => "Label",
'junction' => "Junction",
'connect' => "Connect",
'technology' => "Technology",
'attribute' => "Attribute",
'pinref' => "Pinref",
'contactref' => "Contactref",
'variantdefs' => "Variantdefs",
'settings' => "Settings",
'sheets' => "Sheets",
'layers' => "Layers",
'packages' => "Packages",
'symbols' => "Symbols",
'devicesets' => "Devicesets",
'gates' => "Gates",
'devices' => "Devices",
'libraries' => "Libraries",
'connects' => "Connects",
'technologies' => "Technologies",
'attributes' => "Attributes",
'classes' => "Classes",
'parts' => "Parts",
'instances' => "Instances",
'errors' => "Errors",
'plain' => "Plain",
'autorouter' => "Autorouter",
'elements' => "Elements",
'signals' => "Signals",
'busses' => "Busses",
'nets' => "Nets",
'setting' => "Setting",
'designrules' => "Designrules",
'grid' => "Grid",
'layer' => "Layer",
'cclass' => "CClass",
'clearance' => "Clearance",
'description' => "Description",
'param' => "Param",
'pass' => "Pass",
'approved' => "Approved"}
#
# Drawing definitions
#
class Eagle < LibEagle::Base
root_element
object :compatibility
object :drawing
attribute :version, :required => true
end
class Compatibility < LibEagle::Base
object :note
end
class Note < LibEagle::Base
text_content
attribute :version, :required => true
attribute :severity, :required => true, :type => LibEagle::Types.Severity
end
class Drawing < LibEagle::Base
object :settings
object :grid
object :layers
object :library
object :schematic
object :board
end
class Library < LibEagle::Base
object :description
object :packages
object :symbols
object :devicesets
attribute :name
end
class Schematic < LibEagle::Base
object :description
object :libraries
object :attributes
object :variantdefs
object :classes
object :parts
object :sheets
object :errors
attribute :xreflabel
attribute :xrefpart
end
class Board < LibEagle::Base
object :description
object :plain
object :libraries
object :attributes
object :variantdefs
object :classes
object :designrules
object :autorouter
object :elements
object :signals
object :errors
end
#
# High Level Objects
#
class Sheet < LibEagle::Base
object :description
object :plain
object :instances
object :busses
object :nets
end
class Package < LibEagle::Base
object :description
object :wire
object :circle
object :frame
object :hole
object :pad
object :smd
object :text
object :rectangle
object :polygon
attribute :name, :required => true
end
class Symbol < LibEagle::Base
object :description
object :polygon
object :wire
object :text
object :pin
object :circle
object :rectangle
object :frame
attribute :name, :required => true
end
class Deviceset < LibEagle::Base
object :description
object :gates
object :devices
attribute :name, :required => true
attribute :prefix, :default => ""
attribute :uservalue, :default => "no", :type => LibEagle::Types.Bool
end
class Device < LibEagle::Base
object :connects
object :technologies
attribute :name, :default => ""
attribute :package
end
class Bus < LibEagle::Base
object :segment
attribute :name, :required => true
end
class Net < LibEagle::Base
object :segment
attribute :name, :required => true
attribute :class, :default => "0"
end
class Segment < LibEagle::Base
object :pinref
object :wire
object :junction
object :label
end
class Signal < LibEagle::Base
attribute :name, :required => true
attribute :class, :default => "0"
attribute :airwireshidden, :default => "no", :type => LibEagle::Types.Bool
object :contactref
object :polygon
object :wire
object :via
end
#
# Basic Objects
#
class Variantdef < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :current, :default => "no", :type => LibEagle::Types.Bool
end
class Variant < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :populate, :default => "yes", :type => LibEagle::Types.Bool
attribute :value
attribute :technology
end
class Gate < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :symbol, :required => true
attribute :x, :required => true
attribute :y, :required => true
attribute :addlevel, :default => "next", :type => LibEagle::Types.GateAddLevel
attribute :swaplevel, :default => 0
end
class Wire < LibEagle::Base
empty_element
attribute :x1, :required => true
attribute :y1, :required => true
attribute :x2, :required => true
attribute :y2, :required => true
attribute :width, :required => true
attribute :layer, :required => true
attribute :extent
attribute :style, :default => "continuous", :type => LibEagle::Types.WireStyle
attribute :curve, :default => "0"
attribute :cap, :default => "round", :type => LibEagle::Types.WireCap
end
class Dimension < LibEagle::Base
empty_element
attribute :x1, :required => true
attribute :y2, :required => true
attribute :x2, :required => true
attribute :y2, :required => true
attribute :x3, :required => true
attribute :y3, :required => true
attribute :layer, :required => true
attribute :dtype, :default => "continuous", :type => LibEagle::Types.DimensionType
end
class Text < LibEagle::Base
text_content
attribute :x, :required => true
attribute :y, :required => true
attribute :size, :required => true
attribute :layer, :required => true
attribute :font, :default => "proportional", :type => LibEagle::Types.TextFont
attribute :ratio, :default => "8"
attribute :rot, :default => "R0"
attribute :align, :default => "bottom-left", :type => LibEagle::Types.Align
attribute :distance, :default => "50"
end
class Circle < LibEagle::Base
empty_element
attribute :x, :required => true
attribute :y, :required => true
attribute :radius, :required => true
attribute :width, :required => true
attribute :layer, :required => true
end
class Rectangle < LibEagle::Base
empty_element
attribute :x1, :required => true
attribute :y1, :required => true
attribute :x2, :required => true
attribute :y2, :required => true
attribute :layer, :required => true
attribute :rot, :default => "R0"
end
class Frame < LibEagle::Base
empty_element
attribute :x1, :required => true
attribute :y2, :required => true
attribute :x2, :required => true
attribute :y2, :required => true
attribute :columns, :required => true
attribute :rows, :required => true
attribute :layer, :required => true
attribute :border_left, :default => "yes", :type => LibEagle::Types.Bool
attribute :border_top, :default => "yes", :type => LibEagle::Types.Bool
attribute :border_right, :default => "yes", :type => LibEagle::Types.Bool
attribute :border_bottom, :default => "yes", :type => LibEagle::Types.Bool
end
class Hole < LibEagle::Base
empty_element
attribute :x, :required => true
attribute :y, :required => true
attribute :drill, :required => true
end
class Pad < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :x, :required => true
attribute :y, :required => true
attribute :drill, :required => true
attribute :diameter, :default => "0"
attribute :shape, :default => "round", :type => LibEagle::Types.PadShape
attribute :rot, :default => "R0"
attribute :stop, :default => "yes", :type => LibEagle::Types.Bool
attribute :thermals, :default => "yes", :type => LibEagle::Types.Bool
attribute :first, :default => "no", :type => LibEagle::Types.Bool
end
class Smd < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :x, :required => true
attribute :y, :required => true
attribute :dx, :required => true
attribute :dy, :required => true
attribute :layer, :required => true
attribute :roundness, :default => "0"
attribute :rot, :default => "R0"
attribute :stop, :default => "yes", :type => LibEagle::Types.Bool
attribute :thermals, :default => "yes", :type => LibEagle::Types.Bool
attribute :cream, :default => "yes", :type => LibEagle::Types.Bool
end
class Element < LibEagle::Base
object :attribute
object :variant
attribute :name, :required => true
attribute :library, :required => true
attribute :package, :required => true
attribute :value, :required => true
attribute :x, :required => true
attribute :y, :required => true
attribute :locked, :default => "no", :type => LibEagle::Types.Bool
attribute :smashed, :default => "no", :type => LibEagle::Types.Bool
attribute :rot, :default => "R0"
end
class Via < LibEagle::Base
empty_element
attribute :x, :required => true
attribute :y, :required => true
attribute :extent, :required => true
attribute :drill, :required => true
attribute :diameter, :default => "0"
attribute :shape, :default => "round", :type => LibEagle::Types.ViaShape
attribute :alwaysstop, :default => "no", :type => LibEagle::Types.Bool
end
class Polygon < LibEagle::Base
object :vertex
attribute :width, :required => true
attribute :layer, :required => true
attribute :spacing
attribute :pour, :default => "solid", :type => LibEagle::Types.PolygonPour
attribute :isolate
attribute :orphans, :default => "no", :type => LibEagle::Types.Bool
attribute :thermals, :default => "yes", :type => LibEagle::Types.Bool
attribute :rank, :default => "0"
end
class Vertex < LibEagle::Base
empty_element
attribute :x, :required => true
attribute :y, :required => true
attribute :curve, :default => "0"
end
class Pin < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :x, :required => true
attribute :y, :required => true
attribute :visible, :default => "both", :type => LibEagle::Types.PinVisible
attribute :length, :default => "long", :type => LibEagle::Types.PinLength
attribute :direction, :default => "io", :type => LibEagle::Types.PinDirection
attribute :function, :default => "none", :type => LibEagle::Types.PinFunction
attribute :swaplevel, :default => "0"
attribute :rot, :default => "R0"
end
class Part < LibEagle::Base
empty_element
object :attribute
object :variant
attribute :name, :required => true
attribute :library, :required => true
attribute :deviceset, :required => true
attribute :device, :required => true
attribute :technology, :default => ""
attribute :value
end
class Instance < LibEagle::Base
empty_element
object :attribute
attribute :part, :required => true
attribute :gate, :required => true
attribute :x, :required => true
attribute :y, :required => true
attribute :smashed, :default => "no", :type => LibEagle::Types.Bool
attribute :rot, :default => "R0"
end
class Label < LibEagle::Base
empty_element
attribute :x, :required => true
attribute :y, :required => true
attribute :size, :required => true
attribute :layer, :required => true
attribute :font, :default => "proportional", :type => LibEagle::Types.TextFont
attribute :ratio, :default => "8"
attribute :rot, :default => "R0"
attribute :xref, :default => "no", :type => LibEagle::Types.Bool
end
class Junction < LibEagle::Base
empty_element
attribute :x, :required => true
attribute :y, :required => true
end
class Connect < LibEagle::Base
empty_element
attribute :gate, :required => true
attribute :pin, :required => true
attribute :pad, :required => true
attribute :route, :default => "all", :type => LibEagle::Types.ContactRoute
end
class Technology < LibEagle::Base
object :attribute
attribute :name, :required => true
end
class Attribute < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :value
attribute :x
attribute :y
attribute :size
attribute :layer
attribute :font, :type => LibEagle::Types.TextFont
attribute :ratio
attribute :rot, :default => "R0"
attribute :display, :default => "value", :type => LibEagle::Types.AttributeDisplay
attribute :constant, :default => "no", :type => LibEagle::Types.Bool
end
class Pinref < LibEagle::Base
empty_element
attribute :part, :required => true
attribute :gate, :required => true
attribute :pin, :required => true
end
class Contactref < LibEagle::Base
empty_element
attribute :element, :required => true
attribute :pad, :required => true
attribute :route, :default => "all", :type => LibEagle::Types.ContactRoute
attribute :routetag, :default => ""
end
#
# Object Lists
#
class Variantdefs < LibEagle::Base
object :variantdef
end
class Settings < LibEagle::Base
object :setting
end
class Sheets < LibEagle::Base
object :sheet
end
class Layers < LibEagle::Base
object :layer
end
class Packages < LibEagle::Base
object :package
end
class Symbols < LibEagle::Base
object :symbol
end
class Devicesets < LibEagle::Base
object :deviceset
end
class Gates < LibEagle::Base
object :gate
end
class Devices < LibEagle::Base
object :device
end
class Libraries < LibEagle::Base
object :library
end
class Connects < LibEagle::Base
object :connect
end
class Technologies < LibEagle::Base
object :technology
end
class Attributes < LibEagle::Base
object :attribute
end
class Classes < LibEagle::Base
object :class, :class => "CClass"
end
class Parts < LibEagle::Base
object :part
end
class Instances < LibEagle::Base
object :instance
end
class Errors < LibEagle::Base
object :error
end
class Plain < LibEagle::Base
object :polygon
object :wire
object :text
object :circle
object :rectangle
object :frame
object :hole
end
class Autorouter < LibEagle::Base
object :pass
end
class Elements < LibEagle::Base
object :element
end
class Signals < LibEagle::Base
object :signal
end
class Busses < LibEagle::Base
object :busse
end
class Nets < LibEagle::Base
object :net
end
#
# Miscellaneous Objects
#
class Setting < LibEagle::Base
empty_element
attribute :alwaysvectorfont, :type => LibEagle::Types.Bool
attribute :verticaltext, :type => LibEagle::Types.VerticalText
end
class Designrules < LibEagle::Base
object :description
object :param
attribute :name, :required => true
end
class Grid < LibEagle::Base
empty_element
attribute :distance
attribute :unitdist, :type => LibEagle::Types.GridUnit
attribute :unit, :type => LibEagle::Types.GridUnit
attribute :style, :default => "lines", :type => LibEagle::Types.GridStyle
attribute :multiple, :default => "0"
attribute :display, :default => "no", :type => LibEagle::Types.Bool
attribute :altdistance
attribute :altunitdist, :type => LibEagle::Types.GridUnit
attribute :altunit, :type => LibEagle::Types.GridUnit
end
class Layer < LibEagle::Base
empty_element
attribute :number, :required => true
attribute :name, :required => true
attribute :color, :required => true
attribute :fill, :required => true
attribute :visible, :default => "yes"
attribute :active, :default => "yes"
end
class CClass < LibEagle::Base
change_element_name "class"
object :clearance
attribute :number, :required => true
attribute :name, :required => true
attribute :width, :default => "0"
attribute :drill, :default => "0"
end
class Clearance < LibEagle::Base
empty_element
attribute :class, :required => true
attribute :value, :default => "0"
end
class Description < LibEagle::Base
text_content
attribute :language
end
class Param < LibEagle::Base
empty_element
attribute :name, :required => true
attribute :value, :required => true
end
class Pass < LibEagle::Base
object :param
attribute :name, :required => true
attribute :refer
attribute :active, :default => "yes"
end
class Approved < LibEagle::Base
empty_element
attribute :hash, :required => true
end
end