pygments.rb 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. data/README.md +6 -1
  2. data/lexers +0 -0
  3. data/lib/pygments/version.rb +1 -1
  4. data/vendor/pygments-main/AUTHORS +15 -0
  5. data/vendor/pygments-main/CHANGES +28 -1
  6. data/vendor/pygments-main/LICENSE +1 -1
  7. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +121 -0
  8. data/vendor/pygments-main/pygments/cmdline.py +1 -1
  9. data/vendor/pygments-main/pygments/filters/__init__.py +0 -1
  10. data/vendor/pygments-main/pygments/formatters/_mapping.py +2 -2
  11. data/vendor/pygments-main/pygments/formatters/img.py +1 -1
  12. data/vendor/pygments-main/pygments/formatters/latex.py +8 -8
  13. data/vendor/pygments-main/pygments/formatters/other.py +0 -2
  14. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5413 -0
  15. data/vendor/pygments-main/pygments/lexers/_mapping.py +36 -11
  16. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +551 -0
  17. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +0 -1
  18. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +546 -0
  19. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  20. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +174 -0
  21. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -3
  22. data/vendor/pygments-main/pygments/lexers/agile.py +145 -33
  23. data/vendor/pygments-main/pygments/lexers/asm.py +2 -2
  24. data/vendor/pygments-main/pygments/lexers/compiled.py +328 -36
  25. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  26. data/vendor/pygments-main/pygments/lexers/dotnet.py +8 -14
  27. data/vendor/pygments-main/pygments/lexers/functional.py +773 -8
  28. data/vendor/pygments-main/pygments/lexers/jvm.py +184 -36
  29. data/vendor/pygments-main/pygments/lexers/math.py +349 -23
  30. data/vendor/pygments-main/pygments/lexers/other.py +315 -492
  31. data/vendor/pygments-main/pygments/lexers/parsers.py +83 -1
  32. data/vendor/pygments-main/pygments/lexers/shell.py +4 -1
  33. data/vendor/pygments-main/pygments/lexers/templates.py +112 -2
  34. data/vendor/pygments-main/pygments/lexers/text.py +52 -3
  35. data/vendor/pygments-main/pygments/lexers/web.py +382 -36
  36. data/vendor/pygments-main/pygments/unistring.py +35 -25
  37. data/vendor/pygments-main/pygments/util.py +45 -0
  38. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  39. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  40. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  41. data/vendor/pygments-main/tests/examplefiles/example.ceylon +33 -0
  42. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  43. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  44. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  45. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  46. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  47. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  48. data/vendor/pygments-main/tests/examplefiles/example.stan +97 -0
  49. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  50. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  51. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +123 -0
  52. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  53. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  54. data/vendor/pygments-main/tests/examplefiles/http_request_example +2 -1
  55. data/vendor/pygments-main/tests/examplefiles/http_response_example +4 -2
  56. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  57. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  58. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  59. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  60. data/vendor/pygments-main/tests/examplefiles/matlab_sample +5 -2
  61. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  62. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  63. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  64. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +743 -0
  65. data/vendor/pygments-main/tests/examplefiles/test.R +149 -115
  66. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  67. data/vendor/pygments-main/tests/test_basic_api.py +1 -1
  68. data/vendor/pygments-main/tests/test_util.py +18 -0
  69. metadata +34 -3
  70. data/vendor/pygments-main/REVISION +0 -1
@@ -0,0 +1,4 @@
1
+ declare xyz true
2
+ declare s "some string"
3
+ i = 2
4
+ f = 0.2
@@ -0,0 +1,97 @@
1
+ /*
2
+ A file for testing Stan syntax highlighting.
3
+
4
+ It is not a real model and will not compile
5
+ */
6
+ # also a comment
7
+ // also a comment
8
+ data {
9
+ // valid name
10
+ int abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_abc;
11
+ // all types should be highlighed
12
+ int a3;
13
+ real foo[2];
14
+ vector[3] bar;
15
+ row_vector[3] baz;
16
+ matrix[3,3] qux;
17
+ simplex[3] quux;
18
+ ordered[3] corge;
19
+ positive_ordered[3] wibble;
20
+ corr_matrix[3] grault;
21
+ cov_matrix[3] garply;
22
+
23
+ real<lower=-1,upper=1> foo1;
24
+ real<lower=0> foo2;
25
+ real<upper=0> foo3;
26
+
27
+ // bad names
28
+ // includes .
29
+ // real foo.;
30
+ // beings with number
31
+ //real 0foo;
32
+ // begins with _
33
+ //real _foo;
34
+ }
35
+ transformed data {
36
+ real xyzzy;
37
+ int thud;
38
+ row_vector grault2;
39
+ matrix qux2;
40
+
41
+ // all floating point literals should be recognized
42
+ // all operators should be recognized
43
+ // paren should be recognized;
44
+ xyzzy <- 1234.5687 + .123 - (2.7e3 / 2E-5 * 135e-5);
45
+ // integer literal
46
+ thud <- -12309865;
47
+ // ./ and .* should be recognized as operators
48
+ grault2 <- grault .* garply ./ garply;
49
+ // ' and \ should be regognized as operators
50
+ qux2 <- qux' \ bar;
51
+
52
+ }
53
+ parameters {
54
+ real fred;
55
+ real plugh;
56
+
57
+ }
58
+ transformed parameters {
59
+ }
60
+ model {
61
+ // ~, <- are operators,
62
+ // T may be be recognized
63
+ // normal is a function
64
+ fred ~ normal(0, 1) T(-0.5, 0.5);
65
+ // interior block
66
+ {
67
+ real tmp;
68
+ // for, in should be highlighted
69
+ for (i in 1:10) {
70
+ tmp <- tmp + 0.1;
71
+ }
72
+ }
73
+ // lp__ should be highlighted
74
+ // normal_log as a function
75
+ lp__ <- lp__ + normal_log(plugh, 0, 1);
76
+
77
+ // print statement and string literal
78
+ print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: ");
79
+ print("Hello, world!");
80
+ print("");
81
+
82
+ }
83
+ generated quantities {
84
+ real bar1;
85
+ bar1 <- foo + 1;
86
+ }
87
+
88
+ ## Baddness
89
+ //foo <- 2.0;
90
+ //foo ~ normal(0, 1);
91
+ //not_a_block {
92
+ //}
93
+
94
+ /*
95
+ what happens with this?
96
+ */
97
+ // */
@@ -0,0 +1,34 @@
1
+ package beer
2
+
3
+ import static extension beer.BottleSupport.*
4
+ import org.junit.Test
5
+
6
+ class BottleSong {
7
+
8
+ @Test
9
+ def void singIt() {
10
+ println(singTheSong(99))
11
+ }
12
+
13
+ def singTheSong(int all) '''
14
+ �FOR i : all .. 1�
15
+ �i.Bottles� of beer on the wall, �i.bottles� of beer.
16
+ Take one down and pass it around, �(i - 1).bottles� of beer on the wall.
17
+
18
+ �ENDFOR�
19
+ No more bottles of beer on the wall, no more bottles of beer.
20
+ Go to the store and buy some more, �all.bottles� of beer on the wall.
21
+ '''
22
+
23
+ def private java.lang.String bottles(int i) {
24
+ switch i {
25
+ case 0 : 'no more bottles'
26
+ case 1 : 'one bottle'
27
+ default : '''�i� bottles'''
28
+ }.toString
29
+ }
30
+
31
+ def String Bottles(int i) {
32
+ bottles(i).toFirstUpper
33
+ }
34
+ }
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/mscgen -Tpng
2
+ #
3
+ # testinput2.msc : Sample msc input file with URLs
4
+ #
5
+ # This file is PUBLIC DOMAIN and may be freely reproduced, distributed,
6
+ # transmitted, used, modified, built upon, or otherwise exploited by
7
+ # anyone for any purpose, commercial or non-commercial, and in any way,
8
+ # including by methods that have not yet been invented or conceived.
9
+ #
10
+ # This file is provided "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
11
+ # EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
12
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13
+ #
14
+
15
+ # Note: This is from mscgen-0.20
16
+
17
+ msc {
18
+
19
+ A,B;
20
+
21
+ --- [label="Start", ID="1"];
22
+
23
+ A->B [label="signal"];
24
+ A<-B [label="signal"];
25
+
26
+
27
+ A=>B [label="method"];
28
+ A<=B [label="method"];
29
+
30
+ A>>B [label="return"];
31
+ A<<B [label="return"];
32
+
33
+ A=>>B [label="call-back"];
34
+ A<<=B [label="call-back", URL="www.google.com"];
35
+
36
+ A x- B [label="loss"];
37
+ A -x B [label="loss"];
38
+
39
+ --- [label="Left arcs", ID="2", IDURL="www.google.co.uk"];
40
+
41
+ A->A [label="signal"];
42
+ A<-A [label="signal"];
43
+
44
+
45
+ A=>A [label="method"];
46
+ A<=A [label="method"];
47
+
48
+ A>>A [label="return"];
49
+ A<<A [label="return"];
50
+
51
+ A=>>A [label="call-back"];
52
+ A<<=A [label="call-back", URL="www.google.com", ID="3"];
53
+
54
+ A x- A [label="loss"];
55
+ A -x A [label="loss"];
56
+
57
+ --- [label="Right arcs"];
58
+
59
+ B->B [label="signal"];
60
+ B<-B [label="signal"];
61
+
62
+
63
+ B=>B [label="method"];
64
+ B<=B [label="method"];
65
+
66
+ B>>B [label="return"];
67
+ B<<B [label="return"];
68
+
69
+ B=>>B [label="call-back", ID="4"];
70
+ B<<=B [label="call-back", URL="www.google.com"];
71
+
72
+ B x- B [label="loss"];
73
+ B -x B [label="loss"];
74
+
75
+ --- [label="End of arcs", URL="www.google.com"];
76
+
77
+
78
+ ... [label="Some time passes", URL="www.google.com"];
79
+ }
@@ -0,0 +1,123 @@
1
+ /* This is an example in the Koka Language of the Garcia-Wachs algorithm */
2
+ module garcia-wachs
3
+
4
+ public fun main()
5
+ {
6
+ test().print
7
+ }
8
+
9
+ //----------------------------------------------------
10
+ // Trees
11
+ //----------------------------------------------------
12
+ public type tree<a> {
13
+ con Leaf(value :a)
14
+ con Node(left :tree<a>, right :tree<a>)
15
+ }
16
+
17
+ fun show( t : tree<char> ) : string
18
+ {
19
+ match(t) {
20
+ Leaf(c) -> Core.show(c)
21
+ Node(l,r) -> "Node(" + show(l) + "," + show(r) + ")"
22
+ }
23
+ }
24
+
25
+
26
+ //----------------------------------------------------
27
+ // Non empty lists
28
+ //----------------------------------------------------
29
+ public type list1<a> {
30
+ Cons1( head : a, tail : list<a> )
31
+ }
32
+
33
+
34
+ fun map( xs, f ) {
35
+ val Cons1(y,ys) = xs
36
+ return Cons1(f(y), Core.map(ys,f))
37
+ }
38
+
39
+ fun zip( xs :list1<a>, ys :list1<b> ) : list1<(a,b)> {
40
+ Cons1( (xs.head, ys.head), zip(xs.tail, ys.tail))
41
+ }
42
+
43
+
44
+
45
+ //----------------------------------------------------
46
+ // Phase 1
47
+ //----------------------------------------------------
48
+
49
+ fun insert( after : list<(tree<a>,int)>, t : (tree<a>,int), before : list<(tree<a>,int)> ) : div tree<a>
50
+ {
51
+ match(before) {
52
+ Nil -> extract( [], Cons1(t,after) )
53
+ Cons(x,xs) -> {
54
+ if (x.snd < t.snd) then return insert( Cons(x,after), t, xs )
55
+ match(xs) {
56
+ Nil -> extract( [], Cons1(x,Cons(t,after)) )
57
+ Cons(y,ys) -> extract( ys, Cons1(y,Cons(x,Cons(t,after))) )
58
+ }
59
+ }
60
+ }
61
+ }
62
+
63
+ fun extract( before : list<(tree<a>,int)>, after : list1<(tree<a>,int)> ) : div tree<a>
64
+ {
65
+ val Cons1((t1,w1) as x, xs ) = after
66
+ match(xs) {
67
+ Nil -> t1
68
+ Cons((t2,w2) as y, ys) -> match(ys) {
69
+ Nil -> insert( [], (Node(t1,t2), w1+w2), before )
70
+ Cons((_,w3),_zs) ->
71
+ if (w1 <= w3)
72
+ then insert(ys, (Node(t1,t2), w1+w2), before)
73
+ else extract(Cons(x,before), Cons1(y,ys))
74
+ }
75
+ }
76
+ }
77
+
78
+
79
+
80
+ fun balance( xs : list1<(tree<a>,int)> ) : div tree<a>
81
+ {
82
+ extract( [], xs )
83
+ }
84
+
85
+ fun mark( depth :int, t :tree<(a,ref<h,int>)> ) : <write<h>> ()
86
+ {
87
+ match(t) {
88
+ Leaf((_,d)) -> d := depth
89
+ Node(l,r) -> { mark(depth+1,l); mark(depth+1,r) }
90
+ }
91
+ }
92
+
93
+
94
+ fun build( depth :int, xs :list1<(a,ref<h,int>)> ) : <read<h>,div> (tree<a>,list<(a,ref<h,int>)>)
95
+ {
96
+ if (!xs.head.snd == depth) return (Leaf(xs.head.fst), xs.tail)
97
+
98
+ l = build(depth+1, xs)
99
+ match(l.snd) {
100
+ Nil -> (l.fst, Nil)
101
+ Cons(y,ys) -> {
102
+ r = build(depth+1, Cons1(y,ys))
103
+ (Node(l.fst,r.fst), r.snd)
104
+ }
105
+ }
106
+ }
107
+
108
+ public fun test() {
109
+ wlist = Cons1(('a',3), [('b',2),('c',1),('d',4),('e',5)])
110
+ tree = wlist.garciawachs()
111
+ tree.show()
112
+ }
113
+
114
+ public fun garciawachs( xs : list1<(a,int)> ) : div tree<a>
115
+ {
116
+ refs = xs.map(fst).map( fun(x) { (x, ref(0)) } )
117
+ wleafs = zip( refs.map(Leaf), xs.map(snd) )
118
+
119
+ tree = balance(wleafs)
120
+ mark(0,tree)
121
+ build(0,refs).fst
122
+ }
123
+
@@ -0,0 +1,40 @@
1
+ # To Recreate:
2
+ #
3
+ # echo -e 'class hello {\n public static void main(String[] args) {\n
4
+ # System.out.println("hi");\n }\n}\n' > hello.java
5
+ # javac -target 1.4 -source 1.4 hello.java
6
+ # dx --dex --output=hello.dex hello.class
7
+ # baksmali hello.dex
8
+ # cat out/hello.smali
9
+
10
+ .class Lhello;
11
+ .super Ljava/lang/Object;
12
+ .source "hello.java"
13
+
14
+
15
+ # direct methods
16
+ .method constructor <init>()V
17
+ .registers 1
18
+
19
+ .prologue
20
+ .line 1
21
+ invoke-direct {p0}, Ljava/lang/Object;-><init>()V
22
+
23
+ return-void
24
+ .end method
25
+
26
+ .method public static main([Ljava/lang/String;)V
27
+ .registers 3
28
+ .parameter
29
+
30
+ .prologue
31
+ .line 3
32
+ sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
33
+
34
+ const-string v1, "hi"
35
+
36
+ invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
37
+
38
+ .line 4
39
+ return-void
40
+ .end method
@@ -0,0 +1,9 @@
1
+ #include <sourcemod>
2
+
3
+ // Single line comment
4
+ /* Multi line
5
+ comment */
6
+
7
+ public OnPluginStart() {
8
+ PrintToServer("Hello.");
9
+ }
@@ -3,7 +3,8 @@ Host: pygments.org
3
3
  Connection: keep-alivk
4
4
  Cache-Control: max-age=0
5
5
  Origin: http://pygments.org
6
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
6
+ User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2)
7
+ AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
7
8
  Content-Type: application/x-www-form-urlencoded
8
9
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
9
10
  Referer: http://pygments.org/
@@ -18,8 +18,10 @@ Expires: Tue, 31 Mar 1981 05:00:00 GMT
18
18
  Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
19
19
  X-MID: a55f21733bc52bb11d1fc58f9b51b4974fbb8f83
20
20
  X-RateLimit-Reset: 1323738416
21
- Set-Cookie: k=10.34.234.116.1323735104238974; path=/; expires=Tue, 20-Dec-11 00:11:44 GMT; domain=.twitter.com
22
- Set-Cookie: guest_id=v1%3A13237351042425496; domain=.twitter.com; path=/; expires=Thu, 12-Dec-2013 12:11:44 GMT
21
+ Set-Cookie: k=10.34.234.116.1323735104238974; path=/;
22
+ expires=Tue, 20-Dec-11 00:11:44 GMT; domain=.twitter.com
23
+ Set-Cookie: guest_id=v1%3A13237351042425496; domain=.twitter.com; path=/;
24
+ expires=Thu, 12-Dec-2013 12:11:44 GMT
23
25
  Set-Cookie: _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCPS6wjQ0AToHaWQiJTFiMTlhY2E1ZjczYThk%250ANDUwMWQxNjMwZGU2YTQ1ODBhIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--6b502f30a083e8a41a64f10930e142ea362b1561; domain=.twitter.com; path=/; HttpOnly
24
26
  Vary: Accept-Encoding
25
27
  Server: tfe
@@ -0,0 +1,71 @@
1
+ re = import!
2
+ sys = import!
3
+
4
+
5
+ # IPv6address = hexpart [ ":" IPv4address ]
6
+ # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
7
+ # hexpart = [ hexseq ] [ "::" [ hexseq ] ]
8
+ # hexseq = hex4 *( ":" hex4)
9
+ # hex4 = 1*4HEXDIG
10
+ hexpart = r'({0}|)(?:::({0}|)|)'.format r'(?:[\da-f]{1,4})(?::[\da-f]{1,4})*'
11
+ addrv4 = r'(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})'
12
+ addrv6 = re.compile $ r'(?i)(?:{})(?::{})?$'.format hexpart addrv4
13
+
14
+
15
+ # Parse a base-N number given a list of its digits.
16
+ #
17
+ # :param q: the number of digits in that numeral system
18
+ #
19
+ # :param digits: an iterable of integers in range [0..q]
20
+ #
21
+ # :return: a decimal integer
22
+ #
23
+ base_n = (q digits) -> foldl (x y) -> (x * q + y) 0 digits
24
+
25
+
26
+ # Parse a sequence of hexadecimal numbers
27
+ #
28
+ # :param q: a string of colon-separated base-16 integers
29
+ #
30
+ # :return: an iterable of Python ints
31
+ #
32
+ unhex = q -> q and map p -> (int p 16) (q.split ':')
33
+
34
+
35
+ # Parse an IPv6 address as specified in RFC 4291.
36
+ #
37
+ # :param address: a string, obviously.
38
+ #
39
+ # :return: an integer which, written in binary form, points to the same node.
40
+ #
41
+ inet_pton6 = address ->
42
+ raise $ ValueError 'not a valid IPv6 address' unless match = addrv6.match address
43
+ start, end, *ipv4 = match.groups!
44
+
45
+ is_ipv4 = not $ None in ipv4
46
+ shift = (7 - start.count ':' - 2 * is_ipv4) * 16
47
+
48
+ raise $ ValueError 'not a valid IPv6 address' if (end is None and shift) or shift < 0
49
+ hexaddr = (base_n 0x10000 (unhex start) << shift) + base_n 0x10000 (unhex $ end or '')
50
+ hexaddr unless is_ipv4 else (hexaddr << 32) + base_n 0x100 (map int ipv4)
51
+
52
+
53
+ inet6_type = q -> switch
54
+ not q = 'unspecified'
55
+ q == 1 = 'loopback'
56
+ (q >> 32) == 0x000000000000ffff = 'IPv4-mapped'
57
+ (q >> 64) == 0xfe80000000000000 = 'link-local'
58
+ (q >> 120) != 0x00000000000000ff = 'general unicast'
59
+ (q >> 112) % (1 << 4) == 0x0000000000000000 = 'multicast w/ reserved scope value'
60
+ (q >> 112) % (1 << 4) == 0x000000000000000f = 'multicast w/ reserved scope value'
61
+ (q >> 112) % (1 << 4) == 0x0000000000000001 = 'interface-local multicast'
62
+ (q >> 112) % (1 << 4) == 0x0000000000000004 = 'admin-local multicast'
63
+ (q >> 112) % (1 << 4) == 0x0000000000000005 = 'site-local multicast'
64
+ (q >> 112) % (1 << 4) == 0x0000000000000008 = 'organization-local multicast'
65
+ (q >> 112) % (1 << 4) == 0x000000000000000e = 'global multicast'
66
+ (q >> 112) % (1 << 4) != 0x0000000000000002 = 'multicast w/ unknown scope value'
67
+ (q >> 24) % (1 << 112) == 0x00000000000001ff = 'solicited-node multicast'
68
+ True = 'link-local multicast'
69
+
70
+
71
+ print $ (x -> (inet6_type x, hex x)) $ inet_pton6 $ sys.stdin.read!.strip!