Class: Postscript::Model::Operator

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

def consumes
  @consumes
end

.producesObject (readonly)

Returns the value of attribute produces.



31
32
33
# File 'lib/postscript/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/postscript/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/postscript/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/postscript/model/operator.rb', line 40

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

#operator?Boolean

Returns:

  • (Boolean)


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

def operator? = true