cog icon indicating copy to clipboard operation
cog copied to clipboard

Make [[[end]]] optional to allow inline templating

Open tw39124-1 opened this issue 5 years ago • 2 comments

Firstly, thanks for Cog, it is such a great way to generate files against a template using Python.

However, the major downside of the current implementation (for me at least) is that it is line-based. There doesn't appear to be a way to do inline templating. For example, let's say I want to generate a Doxygen C source file header:

[[[cog import cog ]]] [[[end]]]
/**
 * @file [[[cog cog.out(filename) ]]] [[[end]]]
 * @copyright Copyright (c) [[[ cog.out(current_year + " " + company_name) ]]] [[[end]]]
 * @author [[[cog cog.out(file_author) ]]] [[[end]]]
 */

However, the Cog source code mandates that the [[[end]]] tag is present, and is on a different line to the Python code block, which prevents this rather useful ability. If the -d option is used to delete the source code and the [[[end]]] tag was optional, I could just do:

/**
 * @file [[[cog cog.out(filename) ]]]
 * @copyright Copyright (c) [[[ cog.out(current_year + " " + company_name) ]]]
 * @author [[[cog cog.out(file_author) ]]]
 */

which would get transformed rather neatly into:

/**
 * @file my_first_file.h
 * @copyright Copyright (c) 2020 AcmeCorp
 * @author Joe Bloggs
 */

This is kinda similar to how PHP works inline with HTML, and would be a really useful feature IMO.

tw39124-1 avatar Mar 30 '20 16:03 tw39124-1

Yes, I guess its not that nice, but you can still do like so (dont think it compiles but you get the idea ...)

/**
[[[cog import cog 
 filename = FILENAME
company_name = COMPANY_NAME 
]]]
 * print (f'@file{FILENAME})
 * print (f'@file{COMPANY_NAME})* 
 */ [[[end]]]

kiteloopdesign avatar Mar 25 '21 15:03 kiteloopdesign