2008-03-22 22:16:30 +03:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
"$TESTDIR/hghave" pygments || exit 80
|
|
|
|
|
|
|
|
cat <<EOF >> $HGRCPATH
|
|
|
|
[extensions]
|
2009-12-23 20:46:48 +03:00
|
|
|
highlight =
|
2008-04-05 23:29:02 +04:00
|
|
|
[web]
|
|
|
|
pygments_style = friendly
|
2008-03-22 22:16:30 +03:00
|
|
|
EOF
|
|
|
|
|
|
|
|
hg init test
|
|
|
|
cd test
|
2009-05-17 23:47:24 +04:00
|
|
|
# create random Python file to exercise Pygments
|
|
|
|
cat <<EOF > primes.py
|
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
"""Fun with generators. Corresponding Haskell implementation:
|
|
|
|
|
|
|
|
primes = 2 : sieve [3, 5..]
|
|
|
|
where sieve (p:ns) = p : sieve [n | n <- ns, mod n p /= 0]
|
|
|
|
"""
|
|
|
|
|
|
|
|
from itertools import dropwhile, ifilter, islice, count, chain
|
|
|
|
|
|
|
|
def primes():
|
|
|
|
"""Generate all primes."""
|
|
|
|
def sieve(ns):
|
|
|
|
p = ns.next()
|
|
|
|
# It is important to yield *here* in order to stop the
|
|
|
|
# infinite recursion.
|
|
|
|
yield p
|
|
|
|
ns = ifilter(lambda n: n % p != 0, ns)
|
|
|
|
for n in sieve(ns):
|
|
|
|
yield n
|
|
|
|
|
|
|
|
odds = ifilter(lambda i: i % 2 == 1, count())
|
|
|
|
return chain([2], sieve(dropwhile(lambda n: n < 3, odds)))
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
import sys
|
|
|
|
try:
|
|
|
|
n = int(sys.argv[1])
|
|
|
|
except (ValueError, IndexError):
|
|
|
|
n = 10
|
|
|
|
p = primes()
|
|
|
|
print "The first %d primes: %s" % (n, list(islice(p, n)))
|
|
|
|
EOF
|
2008-10-17 14:12:33 +04:00
|
|
|
|
2008-03-22 22:16:30 +03:00
|
|
|
hg ci -Ama
|
|
|
|
|
|
|
|
echo % hg serve
|
|
|
|
hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
|
|
|
|
cat hg.pid >> $DAEMON_PIDS
|
|
|
|
|
2008-09-05 12:39:57 +04:00
|
|
|
echo % hgweb filerevision, html
|
2009-05-17 23:47:24 +04:00
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/primes.py') \
|
2009-04-19 16:27:03 +04:00
|
|
|
| sed "s/class=\"k\"/class=\"kn\"/g" | sed "s/class=\"mf\"/class=\"mi\"/g"
|
2008-03-22 22:16:30 +03:00
|
|
|
|
2008-09-05 12:39:57 +04:00
|
|
|
echo % hgweb fileannotate, html
|
2009-05-17 23:47:24 +04:00
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/primes.py') \
|
2009-04-19 16:27:03 +04:00
|
|
|
| sed "s/class=\"k\"/class=\"kn\"/g" | sed "s/class=\"mi\"/class=\"mf\"/g"
|
2008-03-22 22:16:30 +03:00
|
|
|
|
2008-09-05 12:39:57 +04:00
|
|
|
echo % hgweb fileannotate, raw
|
2009-05-17 23:47:24 +04:00
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/primes.py?style=raw') \
|
2008-09-05 12:39:57 +04:00
|
|
|
| sed "s/test@//" > a
|
|
|
|
|
|
|
|
echo "200 Script output follows" > b
|
|
|
|
echo "" >> b
|
|
|
|
echo "" >> b
|
2009-05-17 23:47:24 +04:00
|
|
|
hg annotate "primes.py" >> b
|
2008-09-05 12:39:57 +04:00
|
|
|
echo "" >> b
|
|
|
|
echo "" >> b
|
|
|
|
echo "" >> b
|
|
|
|
echo "" >> b
|
|
|
|
|
|
|
|
diff -u b a
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo % hgweb filerevision, raw
|
2009-05-17 23:47:24 +04:00
|
|
|
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/primes.py?style=raw') \
|
2008-09-05 12:39:57 +04:00
|
|
|
> a
|
|
|
|
|
|
|
|
echo "200 Script output follows" > b
|
|
|
|
echo "" >> b
|
2009-05-17 23:47:24 +04:00
|
|
|
hg cat primes.py >> b
|
2008-09-05 12:39:57 +04:00
|
|
|
|
|
|
|
diff -u b a
|
|
|
|
|
|
|
|
echo
|
2008-04-05 23:29:02 +04:00
|
|
|
echo % hgweb highlightcss friendly
|
2008-08-07 02:08:18 +04:00
|
|
|
"$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
|
|
|
|
head -n 4 out
|
|
|
|
rm out
|
2008-04-05 23:29:02 +04:00
|
|
|
|
|
|
|
echo % errors encountered
|
|
|
|
cat errors.log
|
2009-01-12 11:57:52 +03:00
|
|
|
"$TESTDIR/killdaemons.py"
|
2008-04-05 23:29:02 +04:00
|
|
|
|
|
|
|
# Change the pygments style
|
|
|
|
cat > .hg/hgrc <<EOF
|
|
|
|
[web]
|
|
|
|
pygments_style = fruity
|
|
|
|
EOF
|
|
|
|
|
|
|
|
echo % hg serve again
|
|
|
|
hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
|
|
|
|
cat hg.pid >> $DAEMON_PIDS
|
|
|
|
|
|
|
|
echo % hgweb highlightcss fruity
|
2008-08-07 02:08:18 +04:00
|
|
|
"$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
|
|
|
|
head -n 4 out
|
|
|
|
rm out
|
2008-04-05 23:29:02 +04:00
|
|
|
|
2008-03-22 22:16:30 +03:00
|
|
|
echo % errors encountered
|
|
|
|
cat errors.log
|
highlight: fixes garbled text in non-UTF-8 environment
This patch treats all files inside repository as encoded by
locale's encoding when pygmentize.
We can assume that most files are written in locale's encoding,
but current implementation treats them as UTF-8.
So there's no way to specify the encoding of files.
Current implementation, e2f3244d5179 (issue1341):
1. Convert original `text`, which is treated as UTF-8, to locale's encoding.
`encoding.tolocal()` is the method to convert from internal UTF-8 to local.
If original `text` is not UTF-8, e.g. Japanese EUC-JP, some characters
become garbled here.
2. pygmentize, with no UnicodeDecodeError.
This patch:
1. Convert original `text`, which is treated as locale's encoding, to unicode.
Pygments prefers unicode object than raw str. [1]_
If original `text` is not encoded by locale's encoding, some characters
become garbled here.
2. pygmentize, also with no UnicodeDecodeError :)
3. Convert unicode back to raw str, which is encoded by locale's.
.. [1] http://pygments.org/docs/unicode/
2009-08-29 10:24:15 +04:00
|
|
|
|
|
|
|
cd ..
|
|
|
|
hg init eucjp
|
|
|
|
cd eucjp
|
|
|
|
|
2010-01-06 21:03:33 +03:00
|
|
|
python -c 'print("\265\376")' >> eucjp.txt # Japanese kanji "Kyo"
|
highlight: fixes garbled text in non-UTF-8 environment
This patch treats all files inside repository as encoded by
locale's encoding when pygmentize.
We can assume that most files are written in locale's encoding,
but current implementation treats them as UTF-8.
So there's no way to specify the encoding of files.
Current implementation, e2f3244d5179 (issue1341):
1. Convert original `text`, which is treated as UTF-8, to locale's encoding.
`encoding.tolocal()` is the method to convert from internal UTF-8 to local.
If original `text` is not UTF-8, e.g. Japanese EUC-JP, some characters
become garbled here.
2. pygmentize, with no UnicodeDecodeError.
This patch:
1. Convert original `text`, which is treated as locale's encoding, to unicode.
Pygments prefers unicode object than raw str. [1]_
If original `text` is not encoded by locale's encoding, some characters
become garbled here.
2. pygmentize, also with no UnicodeDecodeError :)
3. Convert unicode back to raw str, which is encoded by locale's.
.. [1] http://pygments.org/docs/unicode/
2009-08-29 10:24:15 +04:00
|
|
|
|
|
|
|
hg ci -Ama
|
|
|
|
|
|
|
|
hgserveget () {
|
|
|
|
"$TESTDIR/killdaemons.py"
|
|
|
|
echo % HGENCODING="$1" hg serve
|
|
|
|
HGENCODING="$1" hg serve -p $HGPORT -d -n test --pid-file=hg.pid -E errors.log
|
|
|
|
cat hg.pid >> $DAEMON_PIDS
|
|
|
|
|
|
|
|
echo % hgweb filerevision, html
|
|
|
|
"$TESTDIR/get-with-headers.py" localhost:$HGPORT "/file/tip/$2" \
|
|
|
|
| grep '<div class="parity0 source">' | $TESTDIR/printrepr.py
|
|
|
|
echo % errors encountered
|
|
|
|
cat errors.log
|
|
|
|
}
|
|
|
|
|
|
|
|
hgserveget euc-jp eucjp.txt
|
|
|
|
hgserveget utf-8 eucjp.txt
|
|
|
|
hgserveget us-ascii eucjp.txt
|