mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-04 03:27:00 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 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>'
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
'''
 | 
						|
 | 
						|
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 tempfile import TemporaryDirectory
 | 
						|
 | 
						|
    from calibre.db.legacy import LibraryDatabase
 | 
						|
    from calibre.utils.ffml_processor import FFMLProcessor
 | 
						|
    from calibre.utils.formatter_functions import formatter_functions
 | 
						|
 | 
						|
    output = [PREAMBLE.format(language)]
 | 
						|
    a = output.append
 | 
						|
 | 
						|
    with TemporaryDirectory() as tdir:
 | 
						|
        db = LibraryDatabase(tdir) # needed to load formatter_funcs
 | 
						|
        ffml = FFMLProcessor()
 | 
						|
        all_funcs = formatter_functions().get_builtins()
 | 
						|
        categories = defaultdict(dict)
 | 
						|
        for name, func in all_funcs.items():
 | 
						|
            category = func.category
 | 
						|
            categories[category][name] = func
 | 
						|
        for cat_name in sorted(categories):
 | 
						|
            a(cat_name + '\n')
 | 
						|
            a(('-' * (4*len(cat_name))) + '\n\n')
 | 
						|
            for name in sorted(categories[cat_name]):
 | 
						|
                func = categories[cat_name][name]
 | 
						|
                a(f"\n\n.. _ff_{name}:\n\n{name}\n{'^'*len(name)}\n\n")
 | 
						|
                a(f'.. class:: {func.__class__.__name__}\n\n')
 | 
						|
                a(ffml.document_to_rst(func.doc, name))
 | 
						|
            a('\n\n')
 | 
						|
        db.close()
 | 
						|
        del db
 | 
						|
 | 
						|
    a(POSTAMBLE)
 | 
						|
    return ''.join(output)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    generate_template_language_help()
 |