# Path: gears/processors/base.py
# class BaseProcessor(BaseAssetHandler):
#     """Base class for all asset processors. Subclass's :meth:`__call__` method
#     must change asset's :attr:`~gears.assets.Asset.processed_source` attribute.
#     """


import re
from .base import BaseProcessor


BLANK_RE = re.compile(r'\A\s*\Z', re.M)
SEMICOLON_RE = re.compile(r';\s*\Z', re.M)


def needs_semicolon(source):
    return (BLANK_RE.search(source) is None and
            SEMICOLON_RE.search(source) is None)



# Path: gears/processors/base.py
# class BaseProcessor(BaseAssetHandler):
#     """Base class for all asset processors. Subclass's :meth:`__call__` method
#     must change asset's :attr:`~gears.assets.Asset.processed_source` attribute.
#     """


# Path: gears/processors/semicolons.py
import re
from .base import BaseProcessor



BLANK_RE = re.compile(r'\A\s*\Z', re.M)
SEMICOLON_RE = re.compile(r';\s*\Z', re.M)


def needs_semicolon(source):
    return (BLANK_RE.search(source) is None and
            SEMICOLON_RE.search(source) is None)



class SemicolonsProcessor(BaseProcessor):