List for cgit developers and users
 help / color / mirror / Atom feed
From: john at keeping.me.uk (John Keeping)
Subject: [PATCH v3 05/17] Parse render filters from the config
Date: Tue, 19 Jun 2018 22:37:48 +0100	[thread overview]
Message-ID: <20180619213748.GZ1922@john.keeping.me.uk> (raw)
In-Reply-To: <152939891186.4492.5091929061132986076.stgit@mail.warmcat.com>

On Tue, Jun 19, 2018 at 05:01:51PM +0800, Andy Green wrote:
> From: John Keeping <john at keeping.me.uk>
> 
> Render filters will be used to present rendered content in the tree
> view, for example to display Markdown source rendered as HTML.
> 
> We will add support for using these from the tree view in the following
> commits.
> 
> AG: adapted so render.= can be used to specify the filter for files
> without any suffix
> 
> Signed-off-by: John Keeping <john at keeping.me.uk>
> Signed-off-by: Andy Green <andy at warmcat.com>

For your change,

Reviewed-by: John Keeping <john at keeping.me.uk>

> ---
>  cgit.c       |   19 +++++++++++++++++--
>  cgit.h       |    4 +++-
>  cgitrc.5.txt |   19 +++++++++++++++++++
>  filter.c     |    1 +
>  shared.c     |   19 +++++++++++++++++++
>  5 files changed, 59 insertions(+), 3 deletions(-)
> 
> diff --git a/cgit.c b/cgit.c
> index 0c9f3e9..e0e94d5 100644
> --- a/cgit.c
> +++ b/cgit.c
> @@ -27,6 +27,18 @@ static void add_mimetype(const char *name, const char *value)
>  	item->util = xstrdup(value);
>  }
>  
> +static void add_render_filter(const char *name, const char *cmd)
> +{
> +	struct string_list_item *item;
> +	struct cgit_filter *filter = cgit_new_filter(cmd, RENDER);
> +
> +	if (!filter)
> +		return;
> +
> +	item = string_list_insert(&ctx.cfg.render_filters, name);
> +	item->util = filter;
> +}
> +
>  static void process_cached_repolist(const char *path);
>  
>  static void repo_config(struct cgit_repo *repo, const char *name, const char *value)
> @@ -281,8 +293,10 @@ static void config_cb(const char *name, const char *value)
>  			ctx.cfg.branch_sort = 1;
>  		if (!strcmp(value, "name"))
>  			ctx.cfg.branch_sort = 0;
> -	} else if (skip_prefix(name, "mimetype.", &arg))
> -		add_mimetype(arg, value);
> +	} else if (starts_with(name, "mimetype."))
> +		add_mimetype(name + 9, value);
> +	else if (starts_with(name, "render."))
> +		add_render_filter(name + 7, value);
>  	else if (!strcmp(name, "include"))
>  		parse_configfile(expand_macros(value), config_cb);
>  }
> @@ -415,6 +429,7 @@ static void prepare_context(void)
>  	ctx.page.expires = ctx.page.modified;
>  	ctx.page.etag = NULL;
>  	string_list_init(&ctx.cfg.mimetypes, 1);
> +	string_list_init(&ctx.cfg.render_filters, 1);
>  	if (ctx.env.script_name)
>  		ctx.cfg.script_name = xstrdup(ctx.env.script_name);
>  	if (ctx.env.query_string)
> diff --git a/cgit.h b/cgit.h
> index 6feca68..3149946 100644
> --- a/cgit.h
> +++ b/cgit.h
> @@ -57,7 +57,7 @@ typedef enum {
>  } diff_type;
>  
>  typedef enum {
> -	ABOUT, COMMIT, SOURCE, EMAIL, AUTH, OWNER
> +	ABOUT, COMMIT, SOURCE, EMAIL, AUTH, OWNER, RENDER
>  } filter_type;
>  
>  struct cgit_filter {
> @@ -261,6 +261,7 @@ struct cgit_config {
>  	int branch_sort;
>  	int commit_sort;
>  	struct string_list mimetypes;
> +	struct string_list render_filters;
>  	struct cgit_filter *about_filter;
>  	struct cgit_filter *commit_filter;
>  	struct cgit_filter *source_filter;
> @@ -391,5 +392,6 @@ extern int readfile(const char *path, char **buf, size_t *size);
>  extern char *expand_macros(const char *txt);
>  
>  extern char *get_mimetype_for_filename(const char *filename);
> +extern struct cgit_filter *get_render_for_filename(const char *filename);
>  
>  #endif /* CGIT_H */
> diff --git a/cgitrc.5.txt b/cgitrc.5.txt
> index f6f6502..34b6186 100644
> --- a/cgitrc.5.txt
> +++ b/cgitrc.5.txt
> @@ -342,6 +342,18 @@ renamelimit::
>  	 "-1" uses the compiletime value in git (for further info, look at
>  	  `man git-diff`). Default value: "-1".
>  
> +render.<ext>::
> +	Specifies a command which will be invoked to render files with the
> +	extension `.<ext>`. The command will get the blob content on its STDIN
> +	and the name of the blob as its only command line argument. The STDOUT
> +	from the command will be included verbatim in the page content. If no
> +	render filter is available for a given file extension but the mimetype
> +	is specified then the content will be included as an iframe, otherwise
> +	the normal source rendering will be used.  Note <ext> may be empty, in
> +	which case the render filter is used on files with no suffix.
> ++
> +Default value: none. See also: "FILTER API".
> +
>  repository-sort::
>  	The way in which repositories in each section are sorted. Valid values
>  	are "name" for sorting by the repo name or "age" for sorting by the
> @@ -705,6 +717,13 @@ owner filter::
>  	standard input and the filter is expected to write to standard
>  	output.  The output is included in the Owner column.
>  
> +render filter::
> +	This filter is given a single parameter: the filename of the source
> +	file to render. The filter can use the filename to determine (for
> +	example) the syntax highlighting mode. The contents of the file that
> +	is to be rendered is available on standard input and the rendered
> +	content is expected on standard output.
> +
>  source filter::
>  	This filter is given a single parameter: the filename of the source
>  	file to filter. The filter can use the filename to determine (for
> diff --git a/filter.c b/filter.c
> index 70f5b74..4ae4aaa 100644
> --- a/filter.c
> +++ b/filter.c
> @@ -434,6 +434,7 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
>  
>  		case SOURCE:
>  		case ABOUT:
> +		case RENDER:
>  			argument_count = 1;
>  			break;
>  
> diff --git a/shared.c b/shared.c
> index d7c7636..665f8ed 100644
> --- a/shared.c
> +++ b/shared.c
> @@ -574,3 +574,22 @@ char *get_mimetype_for_filename(const char *filename)
>  	fclose(file);
>  	return NULL;
>  }
> +
> +struct cgit_filter *get_render_for_filename(const char *filename)
> +{
> +	char *ext;
> +	struct string_list_item *item;
> +
> +	if (!filename)
> +		return NULL;
> +
> +	ext = strrchr(filename, '.');
> +	if (!ext)
> +		ext = ".";
> +	++ext;

It took me a minute to realise that this wasn't looking for "render..",
is the following clearer?

	if (!ext)
		ext = "";
	else
		++ext;

> +	item = string_list_lookup(&ctx.cfg.render_filters, ext);
> +	if (item)
> +		return item->util;
> +
> +	return NULL;
> +}


  reply	other threads:[~2018-06-19 21:37 UTC|newest]

Thread overview: 140+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-11  7:08 Rendering of README.md inline with inner tree view dirs andy
2018-06-11  7:31 ` list
2018-06-11  7:38   ` andy
2018-06-11  7:53     ` list
2018-06-11  8:05       ` andy
2018-06-11 15:38         ` john
2018-06-12  5:53           ` andy
2018-06-12  8:35             ` list
2018-06-12  9:24               ` john
2018-06-12  9:27                 ` andy
2018-06-12 12:07                   ` john
2018-06-12  9:31             ` john
2018-06-13  1:47               ` andy
2018-06-13  2:01                 ` [PATCH 00/11] Render READMEs inline in tree view andy
2018-06-13  2:01                   ` [PATCH 01/11] Use string list strdup_strings for mimetypes andy
2018-06-13  2:01                   ` [PATCH 02/11] Add source page andy
2018-06-13  2:01                   ` [PATCH 03/11] Parse render filters from the config andy
2018-06-13  2:01                   ` [PATCH 04/11] ui-tree: split out buffer printing andy
2018-06-13  2:01                   ` [PATCH 05/11] ui-tree: use render fileters to display content andy
2018-06-16 14:26                     ` john
2018-06-16 23:16                       ` andy
2018-06-13  2:02                   ` [PATCH 06/11] ui-tree: free read_sha1_file() buffer after use andy
2018-06-16 14:24                     ` john
2018-06-13  2:02                   ` [PATCH 07/11] ui-blame: " andy
2018-06-16 14:23                     ` john
2018-06-16 23:17                       ` andy
2018-06-13  2:02                   ` [PATCH 08/11] ui-tree: print_object: add is_inline param andy
2018-06-16 14:38                     ` john
2018-06-13  2:02                   ` [PATCH 09/11] ui-tree: ls_tail: add walk table param andy
2018-06-16 14:38                     ` john
2018-06-13  2:02                   ` [PATCH 10/11] config: add tree-readme list andy
2018-06-16 14:44                     ` john
2018-06-13  2:02                   ` [PATCH 11/11] ui-tree: render any matching README file in tree view andy
2018-06-16 14:58                     ` john
2018-06-14  3:47                   ` [PATCH 00/11] Render READMEs inline " andy
2018-06-16 14:17                     ` john
2018-06-19  9:01                   ` [PATCH v3 00/17] " andy
2018-06-19  9:01                     ` [PATCH v3 01/17] manpage: fix sorting order andy
2018-06-19 21:35                       ` john
2018-06-19  9:01                     ` [PATCH v3 02/17] blame: css: make blame highlight div absolute and at parent top andy
2018-06-19  9:01                     ` [PATCH v3 03/17] Use string list strdup_strings for mimetypes andy
2018-06-19  9:01                     ` [PATCH v3 04/17] Add source page andy
2018-06-19  9:01                     ` [PATCH v3 05/17] Parse render filters from the config andy
2018-06-19 21:37                       ` john [this message]
2018-06-19  9:01                     ` [PATCH v3 06/17] ui-tree: split out buffer printing andy
2018-06-19  9:02                     ` [PATCH v3 07/17] ui-tree: use render filters to display content andy
2018-06-19  9:02                     ` [PATCH v3 08/17] ui-blame: free read_sha1_file() buffer after use andy
2018-06-19 21:46                       ` john
2018-06-19  9:02                     ` [PATCH v3 09/17] ui-tree: ls_tail: add walk table param andy
2018-06-19  9:02                     ` [PATCH v3 10/17] config: add global inline-readme list andy
2018-06-19  9:02                     ` [PATCH v3 11/17] config: add repo " andy
2018-06-19  9:02                     ` [PATCH v3 12/17] ui-tree: render any matching README file in tree view andy
2018-06-19 21:49                       ` john
2018-06-20  0:00                         ` andy
2018-06-19  9:02                     ` [PATCH v3 13/17] md2html: add asset mapping andy
2018-06-19  9:02                     ` [PATCH v3 14/17] md2html-add-asset-postfix-arg andy
2018-06-19  9:02                     ` [PATCH v3 15/17] ui-shared: deduplicate some code in repolink andy
2018-06-19 21:48                       ` john
2018-06-19  9:02                     ` [PATCH v3 16/17] ui-shared: add helper for generating non-urlencoded links andy
2018-06-19 21:55                       ` john
2018-06-20  0:07                         ` andy
2018-06-19  9:02                     ` [PATCH v3 17/17] render: adapt for providing extra filter args for plain andy
2018-06-19 21:56                       ` john
2018-06-20 10:11                   ` [PATCH v4 00/16] Render READMEs inline in tree view andy
2018-06-20 10:12                     ` [PATCH v4 01/16] manpage: fix sorting order andy
2018-06-27 17:27                       ` Jason
2018-06-20 10:12                     ` [PATCH v4 02/16] Use string list strdup_strings for mimetypes andy
2018-06-27 17:28                       ` Jason
2018-06-20 10:12                     ` [PATCH v4 03/16] Add source page andy
2018-06-20 10:12                     ` [PATCH v4 04/16] Parse render filters from the config andy
2018-06-20 10:12                     ` [PATCH v4 05/16] ui-tree: split out buffer printing andy
2018-06-20 10:12                     ` [PATCH v4 06/16] ui-tree: use render filters to display content andy
2018-06-20 10:12                     ` [PATCH v4 07/16] ui-tree: ls_tail: add walk table param andy
2018-06-20 10:12                     ` [PATCH v4 08/16] config: add global inline-readme list andy
2018-06-20 10:12                     ` [PATCH v4 09/16] config: add repo " andy
2018-06-20 10:12                     ` [PATCH v4 10/16] ui-tree: render any matching README file in tree view andy
2018-06-20 10:12                     ` [PATCH v4 11/16] md2html: add asset mapping andy
2018-06-27 17:32                       ` Jason
2018-06-27 20:00                         ` john
2018-06-20 10:12                     ` [PATCH v4 12/16] md2html: add asset postfix arg andy
2018-06-20 10:13                     ` [PATCH v4 13/16] ui-shared: deduplicate some code in repolink andy
2018-06-27 17:29                       ` Jason
2018-06-27 17:50                         ` Jason
2018-06-20 10:13                     ` [PATCH v4 14/16] ui-shared: add helper for generating non-urlencoded links andy
2018-06-20 10:13                     ` [PATCH v4 15/16] render: adapt for providing extra filter args for plain andy
2018-06-20 10:41                       ` andy
2018-06-20 10:13                     ` [PATCH v4 16/16] md2html: change css name to not conflict with highlight andy
2018-06-27 17:37                       ` Jason
2018-06-27 21:58                         ` andy
2018-06-28  8:32                           ` john
2018-06-23 11:04                     ` [PATCH v4 00/16] Render READMEs inline in tree view john
2018-06-23 11:10                       ` andy
2018-06-27 17:18                     ` Jason
2018-06-27 17:26                       ` Fancier Source view [Was: Re: [PATCH v4 00/16] Render READMEs inline in tree view] Jason
2018-06-27 20:05                         ` john
2018-06-27 19:51                       ` [PATCH v4 00/16] Render READMEs inline in tree view john
2018-06-27 22:48                         ` andy
2018-06-27 23:22                         ` Jason
2018-06-28  8:28                           ` john
2018-07-03 19:34                             ` Jason
2018-07-03 19:53                               ` john
2018-07-03 19:58                                 ` Jason
2018-06-27 22:36                       ` andy
2018-06-27 22:46                         ` Jason
2018-06-27 23:08                           ` andy
2018-06-16 14:12                 ` Rendering of README.md inline with inner tree view dirs john
2018-06-16 17:35                   ` john
2018-06-18  2:22                     ` andy
2018-06-18  2:56               ` [PATCH v2 00/15] Render READMEs inline in tree view andy
2018-06-18  2:57                 ` [PATCH v2 01/15] manpage: fix sorting order andy
2018-06-18  2:57                 ` [PATCH v2 02/15] gcc8.1: fix strncat warning andy
2018-07-03 23:45                   ` Jason
2018-07-03 23:47                     ` andy
2018-07-03 23:50                       ` Jason
2018-06-18  2:57                 ` [PATCH v2 03/15] Use string list strdup_strings for mimetypes andy
2018-06-18  2:57                 ` [PATCH v2 04/15] Add source page andy
2018-06-18 19:08                   ` john
2018-06-18 19:27                     ` andy
2018-06-18  2:57                 ` [PATCH v2 05/15] Parse render filters from the config andy
2018-06-18  2:57                 ` [PATCH v2 06/15] ui-tree: split out buffer printing andy
2018-06-18  2:57                 ` [PATCH v2 07/15] ui-tree: use render filters to display content andy
2018-06-18  2:57                 ` [PATCH v2 08/15] ui-blame: free read_sha1_file() buffer after use andy
2018-06-18  2:58                 ` [PATCH v2 09/15] ui-tree: ls_tail: add walk table param andy
2018-06-18  2:58                 ` [PATCH v2 10/15] config: add global inline-readme list andy
2018-06-18 19:32                   ` john
2018-06-18  2:58                 ` [PATCH v2 11/15] config: add repo " andy
2018-06-18 19:30                   ` john
2018-06-18  2:58                 ` [PATCH v2 12/15] ui-tree: render any matching README file in tree view andy
2018-06-18 19:36                   ` john
2018-06-19  1:55                     ` andy
2018-06-19  8:31                       ` john
2018-06-19  8:38                         ` andy
2018-06-18  2:58                 ` [PATCH v2 13/15] md2html: add asset mapping andy
2018-06-18  2:58                 ` [PATCH v2 14/15] md2html-add-asset-postfix-arg andy
2018-06-18 19:21                   ` john
2018-06-19  3:55                     ` andy
2018-06-19  8:34                       ` john
2018-06-18  2:58                 ` [PATCH v2 15/15] render: adapt for providing extra filter args for plain andy
2018-06-18 19:25                   ` john
2018-06-19  3:34                     ` andy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180619213748.GZ1922@john.keeping.me.uk \
    --to=cgit@lists.zx2c4.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).