Class: Postsvg::Model::Operator

Inherits:
Object
  • Object
show all
Defined in:
lib/postsvg/model/operator.rb

Overview

Common base for every PS operator. Subclasses live under Model::Operators::* grouped by PLRM chapter.

Each operator declares:

  • keyword (the PS source token, e.g. "moveto")
  • typed operand fields via attr_reader
  • self.from_operands(stack) that pops operands and returns a new frozen instance
  • self.visit_name (defaults to the keyword)
  • self.consumes / self.produces (stack-arity, for parser placeholders)

The visitor calls operator.accept(visitor, ctx) which routes to visitor.visit_<visit_name>(operator, ctx) via public_send.

Direct Known Subclasses

InvokeProcedure, Postsvg::Model::Operators::Arithmetic::Abs, Postsvg::Model::Operators::Arithmetic::Add, Postsvg::Model::Operators::Arithmetic::Atan, Postsvg::Model::Operators::Arithmetic::Ceiling, Postsvg::Model::Operators::Arithmetic::Cos, Postsvg::Model::Operators::Arithmetic::Div, Postsvg::Model::Operators::Arithmetic::Exp, Postsvg::Model::Operators::Arithmetic::Floor, Postsvg::Model::Operators::Arithmetic::Idiv, Postsvg::Model::Operators::Arithmetic::Ln, Postsvg::Model::Operators::Arithmetic::Log, Postsvg::Model::Operators::Arithmetic::Mod, Postsvg::Model::Operators::Arithmetic::Mul, Postsvg::Model::Operators::Arithmetic::Neg, Postsvg::Model::Operators::Arithmetic::Round, Postsvg::Model::Operators::Arithmetic::Sin, Postsvg::Model::Operators::Arithmetic::Sqrt, Postsvg::Model::Operators::Arithmetic::Sub, Postsvg::Model::Operators::Arithmetic::Truncate, Postsvg::Model::Operators::Boolean::And, Postsvg::Model::Operators::Boolean::Bitshift, Postsvg::Model::Operators::Boolean::Eq, Postsvg::Model::Operators::Boolean::False, Postsvg::Model::Operators::Boolean::Ge, Postsvg::Model::Operators::Boolean::Gt, Postsvg::Model::Operators::Boolean::Le, Postsvg::Model::Operators::Boolean::Lt, Postsvg::Model::Operators::Boolean::Ne, Postsvg::Model::Operators::Boolean::Not, Postsvg::Model::Operators::Boolean::Or, Postsvg::Model::Operators::Boolean::True, Postsvg::Model::Operators::Boolean::Xor, Postsvg::Model::Operators::Color::Setcmykcolor, Postsvg::Model::Operators::Color::Setgray, Postsvg::Model::Operators::Color::Sethsbcolor, Postsvg::Model::Operators::Color::Setrgbcolor, Postsvg::Model::Operators::Container::Anchorsearch, Postsvg::Model::Operators::Container::Astore, Postsvg::Model::Operators::Container::Cvs, Postsvg::Model::Operators::Container::Forall, Postsvg::Model::Operators::Container::Get, Postsvg::Model::Operators::Container::Getinterval, Postsvg::Model::Operators::Container::Length, Postsvg::Model::Operators::Container::Put, Postsvg::Model::Operators::Container::Putinterval, Postsvg::Model::Operators::Container::Search, Postsvg::Model::Operators::Container::String, Postsvg::Model::Operators::Container::Token, Postsvg::Model::Operators::ControlFlow::Exec, Postsvg::Model::Operators::ControlFlow::Exit, Postsvg::Model::Operators::ControlFlow::For, Postsvg::Model::Operators::ControlFlow::If, Postsvg::Model::Operators::ControlFlow::Ifelse, Postsvg::Model::Operators::ControlFlow::Loop, Postsvg::Model::Operators::ControlFlow::Quit, Postsvg::Model::Operators::ControlFlow::Repeat, Postsvg::Model::Operators::ControlFlow::Stopped, Postsvg::Model::Operators::Device::Copypage, Postsvg::Model::Operators::Device::Nulldevice, Postsvg::Model::Operators::Device::Showpage, Postsvg::Model::Operators::Dictionary::Begin, Postsvg::Model::Operators::Dictionary::Countdictstack, Postsvg::Model::Operators::Dictionary::Currentdict, Postsvg::Model::Operators::Dictionary::Def, Postsvg::Model::Operators::Dictionary::Dict, Postsvg::Model::Operators::Dictionary::Dictstack, Postsvg::Model::Operators::Dictionary::End, Postsvg::Model::Operators::Dictionary::Known, Postsvg::Model::Operators::Dictionary::Load, Postsvg::Model::Operators::Dictionary::Maxlength, Postsvg::Model::Operators::Dictionary::Store, Postsvg::Model::Operators::Font::Charpath, Postsvg::Model::Operators::Font::Findfont, Postsvg::Model::Operators::Font::Scalefont, Postsvg::Model::Operators::Font::Setfont, Postsvg::Model::Operators::Font::Show, Postsvg::Model::Operators::Font::Stringwidth, Postsvg::Model::Operators::Font::Xyshow, Postsvg::Model::Operators::GraphicsState::Grestore, Postsvg::Model::Operators::GraphicsState::Grestoreall, Postsvg::Model::Operators::GraphicsState::Gsave, Postsvg::Model::Operators::GraphicsState::Setdash, Postsvg::Model::Operators::GraphicsState::Setlinecap, Postsvg::Model::Operators::GraphicsState::Setlinejoin, Postsvg::Model::Operators::GraphicsState::Setlinewidth, Postsvg::Model::Operators::GraphicsState::Setmiterlimit, Postsvg::Model::Operators::Painting::Clip, Postsvg::Model::Operators::Painting::Eoclip, Postsvg::Model::Operators::Painting::Eofill, Postsvg::Model::Operators::Painting::Fill, Postsvg::Model::Operators::Painting::Stroke, Postsvg::Model::Operators::Path::Arc, Postsvg::Model::Operators::Path::Arcn, Postsvg::Model::Operators::Path::Closepath, Postsvg::Model::Operators::Path::Currentpoint, Postsvg::Model::Operators::Path::Curveto, Postsvg::Model::Operators::Path::Lineto, Postsvg::Model::Operators::Path::Moveto, Postsvg::Model::Operators::Path::Newpath, Postsvg::Model::Operators::Path::Rcurveto, Postsvg::Model::Operators::Path::Rlineto, Postsvg::Model::Operators::Path::Rmoveto, Postsvg::Model::Operators::Stack::Clear, Postsvg::Model::Operators::Stack::Count, Postsvg::Model::Operators::Stack::Dup, Postsvg::Model::Operators::Stack::Exch, Postsvg::Model::Operators::Stack::Index, Postsvg::Model::Operators::Stack::Pop, Postsvg::Model::Operators::Stack::Roll, Postsvg::Model::Operators::Transformations::Concat, Postsvg::Model::Operators::Transformations::Currentmatrix, Postsvg::Model::Operators::Transformations::Dtransform, Postsvg::Model::Operators::Transformations::Idtransform, Postsvg::Model::Operators::Transformations::Itransform, Postsvg::Model::Operators::Transformations::Matrix, Postsvg::Model::Operators::Transformations::Rotate, Postsvg::Model::Operators::Transformations::Scale, Postsvg::Model::Operators::Transformations::Setmatrix, Postsvg::Model::Operators::Transformations::Transform, Postsvg::Model::Operators::Transformations::Translate, UnknownOperator

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.consumesObject (readonly)

Returns the value of attribute consumes.



31
32
33
# File 'lib/postsvg/model/operator.rb', line 31

def consumes
  @consumes
end

.producesObject (readonly)

Returns the value of attribute produces.



31
32
33
# File 'lib/postsvg/model/operator.rb', line 31

def produces
  @produces
end

Class Method Details

.from_operands(_stack) ⇒ Object

Default: a no-op factory that pops nothing. Subclasses override to consume operands off the parse stack.



35
36
37
# File 'lib/postsvg/model/operator.rb', line 35

def from_operands(_stack)
  new
end

.register_as(keyword, consumes: 0, produces: 0) ⇒ Object

Register this class under keyword in the global Registry. Called at the bottom of each subclass definition.



23
24
25
26
27
28
29
# File 'lib/postsvg/model/operator.rb', line 23

def register_as(keyword, consumes: 0, produces: 0)
  Operators.register(keyword, self)
  define_method(:keyword) { keyword }
  define_method(:visit_name) { keyword }
  @consumes = consumes
  @produces = produces
end

Instance Method Details

#accept(visitor, ctx) ⇒ Object



40
41
42
# File 'lib/postsvg/model/operator.rb', line 40

def accept(visitor, ctx)
  visitor.dispatch(:"visit_#{visit_name}", self, ctx)
end

#operator?Boolean

Returns:

  • (Boolean)


44
# File 'lib/postsvg/model/operator.rb', line 44

def operator? = true