mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-11-04 09:57:29 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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))
 |