Source code for pygerber.parser.parser

# -*- coding: utf-8 -*-
from __future__ import annotations

from abc import ABC, abstractmethod
from typing import Deque

from pygerber.mathclasses import BoundingBox
from pygerber.renderer import Renderer
from pygerber.renderer.apertureset import ApertureSet
from pygerber.tokenizer import Tokenizer
from pygerber.tokens.token import Token


[docs]class AbstractParser(ABC): tokenizer: Tokenizer apertureSet: ApertureSet __is_bound: bool def __init__(self, ignore_deprecated: bool = True) -> None: self.tokenizer = Tokenizer(ignore_deprecated) self.renderer = Renderer(self.apertureSet) self.__is_bound = False
[docs] def parse_file(self, file_path: str): with open(file_path) as file: source_string = file.read() self.parse(source_string, file_path)
[docs] def parse(self, source_string: str, file_path: str = "<string>"): if self.__is_bound: raise RuntimeError( "Gerber parser is not allowed to be used to parse multiple sources." ) token_stack = self.tokenizer.tokenize(source_string, file_path) bbox = self.renderer.total_bounding_box(token_stack) self._pre_render(bbox) self._render(token_stack) self.__is_bound = True
def _pre_render(self, bbox: BoundingBox): pass @abstractmethod def _render(self, token_stack: Deque[Token]): pass
[docs] @abstractmethod def save(self, file_path: str, format: str = None) -> None: pass