mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-10-31 16:07:44 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| import re
 | |
| 
 | |
| from .tl_object import TLObject
 | |
| 
 | |
| 
 | |
| class TLParser:
 | |
|     """Class used to parse .tl files"""
 | |
| 
 | |
|     @staticmethod
 | |
|     def parse_file(file_path):
 | |
|         """This method yields TLObjects from a given .tl file"""
 | |
| 
 | |
|         with open(file_path, encoding='utf-8') as file:
 | |
|             # Start by assuming that the next found line won't be a function (and will hence be a type)
 | |
|             is_function = False
 | |
| 
 | |
|             # Read all the lines from the .tl file
 | |
|             for line in file:
 | |
|                 line = line.strip()
 | |
| 
 | |
|                 # Ensure that the line is not a comment
 | |
|                 if line and not line.startswith('//'):
 | |
| 
 | |
|                     # Check whether the line is a type change (types ⋄ functions) or not
 | |
|                     match = re.match('---(\w+)---', line)
 | |
|                     if match:
 | |
|                         following_types = match.group(1)
 | |
|                         is_function = following_types == 'functions'
 | |
| 
 | |
|                     else:
 | |
|                         yield TLObject.from_tl(line, is_function)
 | |
| 
 | |
|     @staticmethod
 | |
|     def find_layer(file_path):
 | |
|         """Finds the layer used on the specified scheme.tl file"""
 | |
|         layer_regex = re.compile(r'^//\s*LAYER\s*(\d+)$')
 | |
|         with open(file_path, encoding='utf-8') as file:
 | |
|             for line in file:
 | |
|                 match = layer_regex.match(line)
 | |
|                 if match:
 | |
|                     return int(match.group(1))
 |