annotate hgext/win32text.py @ 1411:e2ba788545bf

hgweb: make viewing of non-text work in hgweb We use mimetypes.guess_type to guess file types and util.binary to determine whether a file is displayable as text. This lets us display displayable text files in our normal source view. Files that appear to be binary will be displayed as something like "(binary:image/gif)". Clicking on raw view will send the raw file with an appropriate MIME type. Thus things like GIFs will now be viewable inside hgweb without making a mess. Further, things like postscript files that are text should show source in the normal view and a browser can launch a postscript viewer for the raw view.
author Matt Mackall <mpm@selenic.com>
date Tue, 18 Oct 2005 23:50:55 -0700
parents e58b1c9a0dec
children 30762680fcd2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1297
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
1 import mercurial.util
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
2
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
3 def dumbdecode(s, cmd):
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
4 return s.replace('\n', '\r\n')
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
5
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
6 def dumbencode(s, cmd):
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
7 return s.replace('\r\n', '\n')
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
8
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
9 def clevertest(s, cmd):
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
10 if '\0' in s: return False
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
11 return True
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
12
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
13 def cleverdecode(s, cmd):
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
14 if clevertest(s, cmd):
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
15 return dumbdecode(s, cmd)
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
16 return s
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
17
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
18 def cleverencode(s, cmd):
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
19 if clevertest(s, cmd):
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
20 return dumbencode(s, cmd)
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
21 return s
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
22
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
23 mercurial.util.filtertable.update({
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
24 'dumbdecode:': dumbdecode,
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
25 'dumbencode:': dumbencode,
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
26 'cleverdecode:': cleverdecode,
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
27 'cleverencode:': cleverencode,
496074e0a38b Add win32text extension module.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
28 })