Compare commits
	
		
			3 commits
		
	
	
		
			9ab587d399
			...
			5378899b2e
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5378899b2e | |||
| a4e8df08e8 | |||
| 8deac7103c | 
					 1 changed files with 23 additions and 5 deletions
				
			
		|  | @ -88,6 +88,11 @@ IRRELEVANT_PDF_BLOCK_REGEX = re.compile(r'\bTCPDF\b', re.I) | |||
| MULTIPART_RAR_HEAD_REGEX = re.compile(r'^(.+)\.part0*1\.exe$', re.I) | ||||
| MULTIPART_RAR_TAIL_REGEX = re.compile(r'^(.+)\.part0*([^1]|[^0].+)\.rar$', re.I) | ||||
| 
 | ||||
| debug_mode = False | ||||
| def debug(s): | ||||
|     if debug_mode: | ||||
|         print(s) | ||||
| 
 | ||||
| def open_zipfile_with_encoding(path): | ||||
|     for enc in ["utf-8", "shift-jis", "shift-jisx0213"]: | ||||
|         try: | ||||
|  | @ -720,6 +725,8 @@ def unique_hierarchical_prefix_numbering(entries, start_point=0): | |||
|     if len(entries) == 1 and not NUMBER_REGEX.search(nname(entries[0])): | ||||
|         return {None: entries} | ||||
| 
 | ||||
|     debug(f'Finding unique hierarchical prefix ordering from start point {start_point} for {entries}') | ||||
| 
 | ||||
|     longest_entry = max(entries, key=lambda e: len(nname(e))) | ||||
|     matches = reversed(list(NUMBER_REGEX.finditer(nname(longest_entry)))) | ||||
|     for m in matches: | ||||
|  | @ -727,6 +734,7 @@ def unique_hierarchical_prefix_numbering(entries, start_point=0): | |||
|         if pos < start_point: | ||||
|             return None | ||||
|         prefix = nname(longest_entry)[:pos] | ||||
|         debug(f'Checking prefix {prefix}') | ||||
|         if all(nname(e).startswith(prefix) or prefix.startswith(nfc(e.stem)) for e in entries): | ||||
|             numbering = {} | ||||
|             for e in entries: | ||||
|  | @ -743,6 +751,7 @@ def unique_hierarchical_prefix_numbering(entries, start_point=0): | |||
|             for idx in indices: | ||||
|                 if len(numbering[idx]) > 1: | ||||
|                     ents_idx = numbering.pop(idx) | ||||
|                     debug(f'Index {idx} has multiple entries') | ||||
|                     longest = max(ents_idx, key=lambda e: len(nname(e))) | ||||
|                     next_layer_start = pos + NUMBER_REGEX.match(nname(longest)[pos:]).end() | ||||
|                     sub_numbering = unique_hierarchical_prefix_numbering(ents_idx, start_point=next_layer_start) or alphabetic_numbering(ents_idx, next_layer_start) | ||||
|  | @ -756,22 +765,22 @@ def unique_hierarchical_prefix_numbering(entries, start_point=0): | |||
|     return None | ||||
| 
 | ||||
| def alphabetic_numbering(entries, start_point): | ||||
|     debug(f'Finding alphabetic numbering from start point {start_point} for {entries}') | ||||
|     alphabetized = {} | ||||
|     for entry in entries: | ||||
|         ending = nfc(entry.stem)[start_point:].strip(' -_()') | ||||
|         debug(f'{entry} has ending {ending}') | ||||
|         if len(ending) > 1: | ||||
|             debug('Ending is more than one character, giving up') | ||||
|             return None | ||||
|         index = 0 if ending == '' else ord(ending.lower()) - ord('a') + 1 | ||||
|         if index < 0 or index > 26: | ||||
|             debug('Ending is not a letter, giving up') | ||||
|             return None | ||||
|         if (index,) in alphabetized: | ||||
|             debug(f'Index value {index} is already present, giving up') | ||||
|             return None | ||||
|         alphabetized[(index,)] = [entry] | ||||
|     indices = list(alphabetized.keys()) | ||||
|     indices.sort() | ||||
|     for i in range(1, len(indices)): | ||||
|         if indices[i][0] - indices[i-1][0] != 1: | ||||
|             return None | ||||
|     return alphabetized | ||||
| 
 | ||||
| def check_extension(path, exts): | ||||
|  | @ -1128,6 +1137,11 @@ argparser.add_argument( | |||
|     default=Path(os.getenv('DLIBRARY_DIR', './dlibrary')), | ||||
|     help='directory to store dlibrary content and metadata to (default: $DLIBRARY_DIR or ./dlibrary)', | ||||
| ) | ||||
| argparser.add_argument( | ||||
|     '-D', '--debug', | ||||
|     action='store_true', | ||||
|     help='print out debugging info', | ||||
| ) | ||||
| argparser.add_argument( | ||||
|     '-l', '--locale', | ||||
|     type=str, | ||||
|  | @ -1277,6 +1291,10 @@ parser_generate.set_defaults(func=generate) | |||
| 
 | ||||
| def main(): | ||||
|     args = argparser.parse_args() | ||||
| 
 | ||||
|     global debug_mode | ||||
|     debug_mode = args.debug | ||||
| 
 | ||||
|     args.func(args) | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue