Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
<html>
2
	<head>
3
		<title>Compress colors</title>
4
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
		<style type="text/css">
6
			@import "../../../dojo/resources/dojo.css";
7
			@import "../../../dijit/tests/css/dijitTests.css";
8
 
9
			.pane { margin-top: 2em; }
10
		</style>
11
		<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script>
12
		<script type="text/javascript">
13
			dojo.require("dojox.encoding.tests.colors");
14
			dojo.require("dojox.encoding.easy64");
15
			dojo.require("dojox.encoding.bits");
16
			dojo.require("dojox.encoding.splay");
17
			dojo.require("dojox.encoding.lzw");
18
 
19
			var dc = dojox.encoding, colors = dc.tests.colors;
20
 
21
			var run = function(){
22
				var empty = {}, names = [];
23
				for(var i in colors){
24
					if(i in empty){ continue; }
25
					names.push(i);
26
				}
27
				names.sort();
28
				var output = new dc.bits.OutputStream(), result = [];
29
				// encode names
30
				var s = names.join("{"), encoder = new dc.lzw.Encoder(27);
31
				result.push("<div>Input is " + s.length + " bytes long.</div>");
32
				result.push("<div>Input: " + s + ".</div>");
33
				for(var i = 0; i < s.length; ++i){
34
					var v = s.charCodeAt(i) - 97;
35
					if(v < 0 || v > 26) console.debug("error!", v);
36
					encoder.encode(v, output);
37
				}
38
				encoder.flush(output);
39
				var w = output.getWidth();
40
				result.push("<div>Output is " + Math.ceil(w / 8) + " bytes (" + w + " bits) long.</div>");
41
				var buf = output.getBuffer();
42
				{
43
					var input = new dc.bits.InputStream(buf, buf.length * 8), decoder = new dc.lzw.Decoder(27);
44
					var t = [];
45
					for(var w = 0; w < s.length;){
46
						var v = decoder.decode(input);
47
						t.push(v);
48
						w += v.length;
49
					}
50
					t = t.join("");
51
					var p = [];
52
					for(var i = 0; i < t.length; ++i){
53
						p.push(String.fromCharCode(t.charCodeAt(i) + 97));
54
					}
55
					p = p.join("");
56
					result.push("<div>Control: " + p + ".</div>");
57
				}
58
				while(buf.length % 3){ buf.push(0); }
59
				var e64 = dc.easy64.encode(buf);
60
				result.push("<div>Encoded output is " + e64.length + " bytes.</div>");
61
				result.push("<div><textarea>" + e64 + "</textarea></div>");
62
				// test
63
				{
64
					var buf = dc.easy64.decode(e64);
65
					var input = new dc.bits.InputStream(buf, buf.length * 8), decoder = new dc.lzw.Decoder(27);
66
					var t = [];
67
					for(var w = 0; w < s.length;){
68
						var v = decoder.decode(input);
69
						t.push(v);
70
						w += v.length;
71
					}
72
					t = t.join("");
73
					var p = [];
74
					for(var i = 0; i < t.length; ++i){
75
						p.push(String.fromCharCode(t.charCodeAt(i) + 97));
76
					}
77
					p = p.join("");
78
					result.push("<div>Control: " + p + ".</div>");
79
				}
80
				// encode values
81
				buf = [];
82
				for(var i = 0; i < names.length; ++i){
83
					var c = colors[names[i]];
84
					buf.push(c[0], c[1], c[2]);
85
				}
86
				result.push("<div>Output is " + buf.length + " bytes long.</div>");
87
				while(buf.length % 4){ buf.push(0); }
88
				e64 = dc.easy64.encode(buf);
89
				result.push("<div>Encoded output is " + e64.length + " bytes.</div>");
90
				result.push("<div><textarea>" + e64 + "</textarea></div>");
91
				dojo.byId("status").innerHTML = result.join("\n");
92
			};
93
 
94
			dojo.addOnLoad(function(){
95
				dojo.connect(dojo.byId("run"), "onclick", run);
96
			});
97
		</script>
98
	</head>
99
	<body>
100
		<h1>Compress colors</h1>
101
		<p><button id="run">Run</button></p>
102
		<div id="status" class="pane"><em>No status yet.</em></div>
103
	</body>
104
</html>