Class: Postscript::Model::Operator
- Inherits:
-
Object
- Object
- Postscript::Model::Operator
- 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 instanceself.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
-
.consumes ⇒ Object
readonly
Returns the value of attribute consumes.
-
.produces ⇒ Object
readonly
Returns the value of attribute produces.
Class Method Summary collapse
-
.from_operands(_stack) ⇒ Object
Default: a no-op factory that pops nothing.
-
.register_as(keyword, consumes: 0, produces: 0) ⇒ Object
Register this class under
keywordin the global Registry.
Instance Method Summary collapse
Class Attribute Details
.consumes ⇒ Object (readonly)
Returns the value of attribute consumes.
31 32 33 |
# File 'lib/postscript/model/operator.rb', line 31 def consumes @consumes end |
.produces ⇒ Object (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
44 |
# File 'lib/postscript/model/operator.rb', line 44 def operator? = true |