mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	 f32d022147
			
		
	
	
		f32d022147
		
			
		
	
	
	
	
		
			
			Create the _static/ directory if it doesn't exist. Add also constants for the static directory and the JSON filename.
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| """
 | |
|     glossary_search.py
 | |
|     ~~~~~~~~~~~~~~~~
 | |
| 
 | |
|     Feature search results for glossary items prominently.
 | |
| 
 | |
|     :license: Python license.
 | |
| """
 | |
| import json
 | |
| import os.path
 | |
| from docutils.nodes import definition_list_item
 | |
| from sphinx.addnodes import glossary
 | |
| from sphinx.util import logging
 | |
| 
 | |
| 
 | |
| logger = logging.getLogger(__name__)
 | |
| STATIC_DIR = '_static'
 | |
| JSON = 'glossary.json'
 | |
| 
 | |
| 
 | |
| def process_glossary_nodes(app, doctree, fromdocname):
 | |
|     if app.builder.format != 'html':
 | |
|         return
 | |
| 
 | |
|     terms = {}
 | |
| 
 | |
|     for node in doctree.traverse(glossary):
 | |
|         for glossary_item in node.traverse(definition_list_item):
 | |
|             term = glossary_item[0].astext().lower()
 | |
|             definition = glossary_item[1]
 | |
| 
 | |
|             rendered = app.builder.render_partial(definition)
 | |
|             terms[term] = {
 | |
|                 'title': glossary_item[0].astext(),
 | |
|                 'body': rendered['html_body']
 | |
|             }
 | |
| 
 | |
|     if hasattr(app.env, 'glossary_terms'):
 | |
|         app.env.glossary_terms.update(terms)
 | |
|     else:
 | |
|         app.env.glossary_terms = terms
 | |
| 
 | |
| def on_build_finish(app, exc):
 | |
|     if not hasattr(app.env, 'glossary_terms'):
 | |
|         return
 | |
|     if not app.env.glossary_terms:
 | |
|         return
 | |
| 
 | |
|     logger.info(f'Writing {JSON}', color='green')
 | |
| 
 | |
|     dest_dir = os.path.join(app.outdir, STATIC_DIR)
 | |
|     os.makedirs(dest_dir, exist_ok=True)
 | |
| 
 | |
|     with open(os.path.join(dest_dir, JSON), 'w') as f:
 | |
|         json.dump(app.env.glossary_terms, f)
 | |
| 
 | |
| 
 | |
| def setup(app):
 | |
|     app.connect('doctree-resolved', process_glossary_nodes)
 | |
|     app.connect('build-finished', on_build_finish)
 | |
| 
 | |
|     return {'version': '0.1', 'parallel_read_safe': True}
 |