Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.216.28
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
lib /
google-cloud-sdk /
lib /
third_party /
lark /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2026-06-08 18:08
__pyinstaller
[ DIR ]
drwxr-xr-x
2026-06-08 18:08
grammars
[ DIR ]
drwxr-xr-x
2026-06-08 18:08
parsers
[ DIR ]
drwxr-xr-x
2026-06-08 18:08
tools
[ DIR ]
drwxr-xr-x
2026-06-08 18:08
LICENSE
1.03
KB
-rw-r--r--
1980-01-01 08:00
__init__.py
744
B
-rw-r--r--
1980-01-01 08:00
ast_utils.py
2.04
KB
-rw-r--r--
1980-01-01 08:00
common.py
2.83
KB
-rw-r--r--
1980-01-01 08:00
exceptions.py
10.68
KB
-rw-r--r--
1980-01-01 08:00
grammar.py
3.35
KB
-rw-r--r--
1980-01-01 08:00
indenter.py
3
KB
-rw-r--r--
1980-01-01 08:00
lark.py
27.09
KB
-rw-r--r--
1980-01-01 08:00
lexer.py
22.98
KB
-rw-r--r--
1980-01-01 08:00
load_grammar.py
52.23
KB
-rw-r--r--
1980-01-01 08:00
parse_tree_builder.py
13.78
KB
-rw-r--r--
1980-01-01 08:00
parser_frontends.py
9.82
KB
-rw-r--r--
1980-01-01 08:00
py.typed
0
B
-rw-r--r--
1980-01-01 08:00
reconstruct.py
3.63
KB
-rw-r--r--
1980-01-01 08:00
tree.py
8.04
KB
-rw-r--r--
1980-01-01 08:00
tree_matcher.py
5.86
KB
-rw-r--r--
1980-01-01 08:00
tree_templates.py
6
KB
-rw-r--r--
1980-01-01 08:00
utils.py
10.73
KB
-rw-r--r--
1980-01-01 08:00
visitors.py
20.6
KB
-rw-r--r--
1980-01-01 08:00
Save
Rename
"Provides Indentation services for languages with indentation similar to Python" from abc import ABC, abstractmethod from typing import List, Iterator from .exceptions import LarkError from .lark import PostLex from .lexer import Token ###{standalone class DedentError(LarkError): pass class Indenter(PostLex, ABC): paren_level: int indent_level: List[int] def __init__(self) -> None: self.paren_level = 0 self.indent_level = [0] assert self.tab_len > 0 def handle_NL(self, token: Token) -> Iterator[Token]: if self.paren_level > 0: return yield token indent_str = token.rsplit('\n', 1)[1] # Tabs and spaces indent = indent_str.count(' ') + indent_str.count('\t') * self.tab_len if indent > self.indent_level[-1]: self.indent_level.append(indent) yield Token.new_borrow_pos(self.INDENT_type, indent_str, token) else: while indent < self.indent_level[-1]: self.indent_level.pop() yield Token.new_borrow_pos(self.DEDENT_type, indent_str, token) if indent != self.indent_level[-1]: raise DedentError('Unexpected dedent to column %s. Expected dedent to %s' % (indent, self.indent_level[-1])) def _process(self, stream): for token in stream: if token.type == self.NL_type: yield from self.handle_NL(token) else: yield token if token.type in self.OPEN_PAREN_types: self.paren_level += 1 elif token.type in self.CLOSE_PAREN_types: self.paren_level -= 1 assert self.paren_level >= 0 while len(self.indent_level) > 1: self.indent_level.pop() yield Token(self.DEDENT_type, '') assert self.indent_level == [0], self.indent_level def process(self, stream): self.paren_level = 0 self.indent_level = [0] return self._process(stream) # XXX Hack for ContextualLexer. Maybe there's a more elegant solution? @property def always_accept(self): return (self.NL_type,) @property @abstractmethod def NL_type(self) -> str: raise NotImplementedError() @property @abstractmethod def OPEN_PAREN_types(self) -> List[str]: raise NotImplementedError() @property @abstractmethod def CLOSE_PAREN_types(self) -> List[str]: raise NotImplementedError() @property @abstractmethod def INDENT_type(self) -> str: raise NotImplementedError() @property @abstractmethod def DEDENT_type(self) -> str: raise NotImplementedError() @property @abstractmethod def tab_len(self) -> int: raise NotImplementedError() class PythonIndenter(Indenter): NL_type = '_NEWLINE' OPEN_PAREN_types = ['LPAR', 'LSQB', 'LBRACE'] CLOSE_PAREN_types = ['RPAR', 'RSQB', 'RBRACE'] INDENT_type = '_INDENT' DEDENT_type = '_DEDENT' tab_len = 8 ###}