Skip to content

Commit

Permalink
Rename IHooks to Parser2HooksBase
Browse files Browse the repository at this point in the history
  • Loading branch information
Argmaster committed Jan 23, 2024
1 parent 940c61c commit b5ee489
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 84 deletions.
18 changes: 9 additions & 9 deletions docs/gerber/introspection/0_usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
Since release 2.2.0 PyGerber offers interface designed for Gerber code introspection
based on `Parser2` class and
[visitor pattern](https://refactoring.guru/design-patterns/visitor). API is build around
`IHooks` class from `pygerber.gerberx3.parser2.ihooks` module and descendant classes
passed to `Parser2` class. `Parser2` visits all tokens in Gerber AST created by
`Tokenizer` and invokes particular hooks from provided hooks class. `IHooks` itself
doesn't implement any Gerber specific behaviors. It is just a collection of classes with
empty hook methods which can be used to implement behaviors explained in
`Parser2HooksBase` class from `pygerber.gerberx3.parser2.ihooks` module and descendant
classes passed to `Parser2` class. `Parser2` visits all tokens in Gerber AST created by
`Tokenizer` and invokes particular hooks from provided hooks class. `Parser2HooksBase`
itself doesn't implement any Gerber specific behaviors. It is just a collection of
classes with empty hook methods which can be used to implement behaviors explained in
[The Gerber Format Specification](https://www.ucamco.com/files/downloads/file_en/456/gerber-layer-format-specification-revision-2023-08_en.pdf#page=71).
PyGerber provides such implementation in form of `Parser2Hooks` class, available in
`pygerber.gerberx3.parser2.parser2` module.
Expand Down Expand Up @@ -88,10 +88,10 @@ is considered a comment, including leading spaces.
## Mixed inheritance

By default `Parser2` is using `Parser2Hooks`, however, for some use cases it may be more
beneficial to use `IHooks` class to reduce time required to traverse single Gerber file.
This is the case when one needs only selected Gerber features, eg. attribute support. In
such case, you can create new `IHooks` derived class and for some hook classes inherit
from `Parser2Hooks` nested classes.
beneficial to use `Parser2HooksBase` class to reduce time required to traverse single
Gerber file. This is the case when one needs only selected Gerber features, eg.
attribute support. In such case, you can create new `Parser2HooksBase` derived class and
for some hook classes inherit from `Parser2Hooks` nested classes.

For example let's assume we want to extract attributes of all apertures in Gerber file.
To do it we need a working attribute cumulation logic, but at the same time let's try to
Expand Down
2 changes: 1 addition & 1 deletion docs/gerber/introspection/1_ihooks_reference.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# IHooks Reference
# Parser2HooksBase Reference

::: pygerber.gerberx3.parser2.ihooks
8 changes: 4 additions & 4 deletions src/pygerber/gerberx3/parser2/context2.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
SkipTokenInterrupt,
StepAndRepeatNotInitializedError,
)
from pygerber.gerberx3.parser2.ihooks import IHooks
from pygerber.gerberx3.parser2.macro2.expressions2.binary2 import (
Addition2,
Division2,
Expand All @@ -38,6 +37,7 @@
from pygerber.gerberx3.parser2.macro2.macro2 import ApertureMacro2
from pygerber.gerberx3.parser2.macro2.statement_buffer2 import StatementBuffer2
from pygerber.gerberx3.parser2.parser2hooks import Parser2Hooks
from pygerber.gerberx3.parser2.parser2hooks_base import Parser2HooksBase
from pygerber.gerberx3.parser2.state2 import State2
from pygerber.gerberx3.state_enums import AxisCorrespondence
from pygerber.gerberx3.tokenizer.aperture_id import ApertureID
Expand Down Expand Up @@ -79,7 +79,7 @@ def __init__(self, options: Parser2ContextOptions | None = None) -> None:
self.macro_statement_buffer: Optional[StatementBuffer2] = None
self.macro_eval_buffer: Optional[CommandBuffer2] = None
self.macro_variable_buffer: dict[str, Decimal] = {}
self.hooks: IHooks = (
self.hooks: Parser2HooksBase = (
Parser2Hooks() if self.options.hooks is None else self.options.hooks
)
self.current_token: Optional[Token] = None
Expand Down Expand Up @@ -231,7 +231,7 @@ def halt_parser(self) -> NoReturn:
"""Halt parsing process."""
raise ExitParsingProcess2Interrupt

def get_hooks(self) -> IHooks:
def get_hooks(self) -> Parser2HooksBase:
"""Get hooks object."""
return self.hooks

Expand Down Expand Up @@ -584,4 +584,4 @@ class Parser2ContextOptions(FrozenGeneralModel):
] = Field(
default=None,
)
hooks: Optional[IHooks] = Field(default=None)
hooks: Optional[Parser2HooksBase] = Field(default=None)
4 changes: 2 additions & 2 deletions src/pygerber/gerberx3/parser2/parser2.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
Parser2Error,
SkipTokenInterrupt,
)
from pygerber.gerberx3.parser2.ihooks import IHooks
from pygerber.gerberx3.parser2.parser2hooks_base import Parser2HooksBase
from pygerber.gerberx3.tokenizer.tokens.bases.token import Token
from pygerber.gerberx3.tokenizer.tokens.groups.ast import AST

Expand Down Expand Up @@ -119,7 +119,7 @@ def _token_try_visit_except(self, token: Token) -> None:
else:
self.get_hooks().on_other_error(self.context, e)

def get_hooks(self) -> IHooks:
def get_hooks(self) -> Parser2HooksBase:
"""Get hooks object."""
return self.context.get_hooks()

Expand Down
Loading

0 comments on commit b5ee489

Please sign in to comment.