mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-10-30 18:22:25 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
 | |
| 
 | |
| 
 | |
| __license__   = 'GPL v3'
 | |
| __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
 | |
| 
 | |
| import re
 | |
| from collections import defaultdict
 | |
| 
 | |
| PREAMBLE = '''\
 | |
| .. _templaterefcalibre-{}:
 | |
| 
 | |
| Reference for all built-in template language functions
 | |
| ========================================================
 | |
| 
 | |
| Here, we document all the built-in functions available in the calibre template
 | |
| language. Every function is implemented as a class in python and you can click
 | |
| the source links to see the source code, in case the documentation is
 | |
| insufficient. The functions are arranged in logical groups by type.
 | |
| 
 | |
| .. contents::
 | |
|     :depth: 2
 | |
|     :local:
 | |
| 
 | |
| .. module:: calibre.utils.formatter_functions
 | |
| 
 | |
| '''
 | |
| 
 | |
| CATEGORY_TEMPLATE = '''\
 | |
| {category}
 | |
| {dashes}
 | |
| 
 | |
| '''
 | |
| 
 | |
| FUNCTION_TEMPLATE = '''\
 | |
| {fs}
 | |
| {hats}
 | |
| 
 | |
| .. autoclass:: {cn}
 | |
| 
 | |
| '''
 | |
| 
 | |
| POSTAMBLE = '''\
 | |
| 
 | |
| API of the Metadata objects
 | |
| ----------------------------
 | |
| 
 | |
| The python implementation of the template functions is passed in a Metadata
 | |
| object. Knowing it's API is useful if you want to define your own template
 | |
| functions.
 | |
| 
 | |
| .. module:: calibre.ebooks.metadata.book.base
 | |
| 
 | |
| .. autoclass:: Metadata
 | |
|    :members:
 | |
|    :member-order: bysource
 | |
| 
 | |
| .. data:: STANDARD_METADATA_FIELDS
 | |
| 
 | |
|     The set of standard metadata fields.
 | |
| 
 | |
| .. literalinclude:: ../../../src/calibre/ebooks/metadata/book/__init__.py
 | |
|    :lines: 7-
 | |
| '''
 | |
| 
 | |
| 
 | |
| def generate_template_language_help(language):
 | |
|     from calibre.utils.formatter_functions import formatter_functions
 | |
|     pat = re.compile(r'\)`{0,2}\s*-{1,2}')
 | |
| 
 | |
|     funcs = defaultdict(dict)
 | |
| 
 | |
|     for func in formatter_functions().get_builtins().values():
 | |
|         class_name = func.__class__.__name__
 | |
|         func_sig = getattr(func, 'doc')
 | |
|         m = pat.search(func_sig)
 | |
|         if m is None:
 | |
|             print ('No signature for template function ', class_name)
 | |
|             continue
 | |
|         func_sig = func_sig[:m.start()+1].strip('`')
 | |
|         func_cat = getattr(func, 'category')
 | |
|         funcs[func_cat][func_sig] = class_name
 | |
| 
 | |
|     output = PREAMBLE.format(language)
 | |
|     cats = sorted(funcs.keys())
 | |
|     for cat in cats:
 | |
|         output += CATEGORY_TEMPLATE.format(category=cat, dashes='-'*len(cat))
 | |
|         entries = [k for k in sorted(funcs[cat].keys())]
 | |
|         for entry in entries:
 | |
|             output += FUNCTION_TEMPLATE.format(fs=entry, cn=funcs[cat][entry],
 | |
|                                                hats='^'*len(entry))
 | |
| 
 | |
|     output += POSTAMBLE
 | |
|     return output
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     generate_template_language_help()
 |