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;
> +}
next prev parent 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).