Class: Postsvg::Model::Operator
- Inherits:
-
Object
- Object
- Postsvg::Model::Operator
- 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 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, 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
-
.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/postsvg/model/operator.rb', line 31 def consumes @consumes end |
.produces ⇒ Object (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
44 |
# File 'lib/postsvg/model/operator.rb', line 44 def operator? = true |