When viewing a source ".c" file, Trac 1.5.4 shows it as an image

48 views
Skip to first unread message

Dan

unread,
May 17, 2022, 4:42:31 PM5/17/22
to Trac Users
I'm using Trac 1.5.4.dev (trunk).

I just noticed that when viewing files from the repository, a .c file will show as an image, but a .h file will show properly.

This is the kind of HTML that shows up within the web page:

<div id="preview" class="searchable">
  <div class="image-file">
    <img alt="(file path)" src="/trac/(project)/export/(file path)">
  </div>
</div>

Interestingly, using the "c" processor will syntax highlight a code snippet in the wiki.

Any ideas on how to convince Trac that those files are C source files?  Does a mime type need to be specified?  It seems like that wasn't necessary in the past.

Thanks.

- Dan

Dan

unread,
May 17, 2022, 6:07:09 PM5/17/22
to Trac Users
FWIW, if I set the mime type to "text/x-csrc" it will highlight.

Also, although the .h file is shown, I think it's not highlighted.  I suppose if I set the mime type it would regain its mind.

I'll have to look deeper, I guess.

- Dan

Dan

unread,
May 17, 2022, 8:19:55 PM5/17/22
to Trac Users
It looks like this issue is due to pygments.lexers.get_all_lexers() having multiple mime types associated with this extension.

('C', ('c',), ('*.c', '*.h', '*.idc', '*.x[bp]m'), ('text/x-chdr', 'text/x-csrc', 'image/x-xbitmap', 'image/x-xpixmap'))

So, in mimeview.py, Mimeview.mime_map(), there are multiple assignments to self._mime_map[keyword] = mimetype

It will assign to the four items in the above list in turn.  However, self._mime_map will simply end up holding the last value.

I wonder if we should just use the first one we encounter, and ignore subsequent attempts to override the value.

I am using Ubuntu 22.  (pygments 2.11 or 2.12)

- Dan

Dan

unread,
May 17, 2022, 8:26:22 PM5/17/22
to Trac Users
Works for me, I guess.  At least in this case.

Index: api.py
===================================================================
--- api.py    (revision 17579)
+++ api.py    (working copy)
@@ -930,7 +930,8 @@
                     for mimetype, kwds in renderer.get_extra_mimetypes() or []:
                         self._mime_map[mimetype] = mimetype
                         for keyword in kwds:
-                            self._mime_map[keyword] = mimetype
+                            if not keyword in self._mime_map:
+                                self._mime_map[keyword] = mimetype
             # augment/override mime_map from trac.ini
             for mapping in self.config['mimeviewer'].getlist('mime_map'):
                 if ':' in mapping:

Dan

unread,
May 18, 2022, 9:36:35 AM5/18/22
to Trac Users
Or ... Adding "text/x-csrc:c" to the "mime_map" configuration list also works, but it seems like a software-development-oriented system shouldn't need to special-case common software source files.

- Dan

Jun Omae

unread,
May 19, 2022, 9:22:56 AM5/19/22
to trac-...@googlegroups.com
On Wed, May 18, 2022 at 10:35 AM Jun Omae <jun...@gmail.com> wrote:
>
> On Wed, May 18, 2022 at 9:20 AM Dan <dan....@digidescorp.com> wrote:
> >
> > It looks like this issue is due to pygments.lexers.get_all_lexers() having multiple mime types associated with this extension.
> >
> > ('C', ('c',), ('*.c', '*.h', '*.idc', '*.x[bp]m'), ('text/x-chdr', 'text/x-csrc', 'image/x-xbitmap', 'image/x-xpixmap'))
> >
> > So, in mimeview.py, Mimeview.mime_map(), there are multiple assignments to self._mime_map[keyword] = mimetype
> >
> > It will assign to the four items in the above list in turn. However, self._mime_map will simply end up holding the last value.
> >
> > I wonder if we should just use the first one we encounter, and ignore subsequent attempts to override the value.
> >
> > I am using Ubuntu 22. (pygments 2.11 or 2.12)
> >
> > - Dan
>
> Good catch! I just reproduced the issue with Pygments 2.12.0 instead of 2.10.0.
> Could you please create new ticket on https://trac.edgewall.org/newticket?

I just filed at https://trac.edgewall.org/ticket/13483.

--
Jun Omae <jun...@gmail.com> (大前 潤)

Dan

unread,
May 19, 2022, 9:29:31 AM5/19/22
to Trac Users
Thanks!

Interestingly I didn't see your first reply, and I'm still not sure where that one went.  But thanks again for going ahead with the ticket.

- Dan

Jun Omae

unread,
May 20, 2022, 10:47:49 AM5/20/22
to trac-...@googlegroups.com
On Wed, May 18, 2022 at 9:20 AM Dan <dan....@digidescorp.com> wrote:
>
> It looks like this issue is due to pygments.lexers.get_all_lexers() having multiple mime types associated with this extension.
>
> ('C', ('c',), ('*.c', '*.h', '*.idc', '*.x[bp]m'), ('text/x-chdr', 'text/x-csrc', 'image/x-xbitmap', 'image/x-xpixmap'))
>
> So, in mimeview.py, Mimeview.mime_map(), there are multiple assignments to self._mime_map[keyword] = mimetype
>
> It will assign to the four items in the above list in turn. However, self._mime_map will simply end up holding the last value.
>
> I wonder if we should just use the first one we encounter, and ignore subsequent attempts to override the value.
>
> I am using Ubuntu 22. (pygments 2.11 or 2.12)
>
> - Dan

Good catch! I just reproduced the issue with Pygments 2.12.0 instead of 2.10.0.
Could you please create new ticket on https://trac.edgewall.org/newticket?

Reply all
Reply to author
Forward
0 new messages