1
0
mirror of https://github.com/Tygs/0bin.git synced 2023-08-10 21:13:00 +03:00

Syntax coloration

This commit is contained in:
sam 2012-04-27 02:04:36 +07:00
parent d09e0feb1e
commit f91bcbf977
9 changed files with 125 additions and 168 deletions

View File

@ -126,25 +126,24 @@ class Paste(object):
# each worker. If the dir is not in cache, we check the FS, and
# if the dir is not in there, we create the dir
if head not in self.DIR_CACHE:
first_dir = self.build_path(head)
if not os.path.isdir(first_dir):
self.DIR_CACHE.add(head)
if not os.path.isdir(self.build_path(head)):
os.makedirs(self.build_path(head, tail))
self.DIR_CACHE.update((head, (head, tail)))
self.DIR_CACHE.add((head, tail))
elif (head, tail) not in self.DIR_CACHE:
path = self.build_path(head, tail)
if not os.path.isdir(path):
os.mkdir(path)
self.DIR_CACHE.add((head, tail))
elif (head, tail) not in self.DIR_CACHE:
path = self.build_path(head, tail)
self.DIR_CACHE.add((head, tail))
if not os.path.isdir(path):
os.mkdir(path)
try:
with open(self.path, 'w') as f:
f.write(unicode(self.expiration) + '\n')
f.write(self.content + '\n')
if self.comments:
f.write(comments)
except:
import ipdb; ipdb.set_trace()
with open(self.path, 'w') as f:
f.write(unicode(self.expiration) + '\n')
f.write(self.content + '\n')
if self.comments:
f.write(comments)
return self

View File

@ -61,6 +61,6 @@ def server_static(filename):
if __name__ == "__main__":
if settings.DEBUG:
debug(True)
run(app, host='localhost', port=8080, reloader=True)
run(app, host='localhost', port=8080, reloader=True, server="cherrypy")
else:
run(app, host='localhost', port=8080)
run(app, host='localhost', port=8080, server="cherrypy")

View File

@ -42,6 +42,10 @@ padding: 9px 0;
float:right;
}
#paste-content {
background-color:white;
}
select {
width: 135px;
}

84
static/css/vs.css Normal file
View File

@ -0,0 +1,84 @@
/*
Visual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name>
*/
pre code {
display: block; padding: 0.5em;
}
pre .comment,
pre .annotation,
pre .template_comment,
pre .diff .header,
pre .chunk,
pre .apache .cbracket {
color: rgb(0, 128, 0);
}
pre .keyword,
pre .id,
pre .title,
pre .built_in,
pre .aggregate,
pre .smalltalk .class,
pre .winutils,
pre .bash .variable,
pre .tex .command {
color: rgb(0, 0, 255);
}
pre .string,
pre .title,
pre .parent,
pre .tag .value,
pre .rules .value,
pre .rules .value .number,
pre .ruby .symbol,
pre .ruby .symbol .string,
pre .ruby .symbol .keyword,
pre .ruby .symbol .keymethods,
pre .instancevar,
pre .aggregate,
pre .template_tag,
pre .django .variable,
pre .addition,
pre .flow,
pre .stream,
pre .apache .tag,
pre .date,
pre .tex .formula {
color: rgb(163, 21, 21);
}
pre .ruby .string,
pre .decorator,
pre .filter .argument,
pre .localvars,
pre .array,
pre .attr_selector,
pre .pseudo,
pre .pi,
pre .doctype,
pre .deletion,
pre .envvar,
pre .shebang,
pre .preprocessor,
pre .userType,
pre .apache .sqbracket,
pre .nginx .built_in,
pre .tex .special,
pre .input_number {
color: rgb(43, 145, 175);
}
pre .phpdoc,
pre .javadoc,
pre .xmlDocTag {
color: rgb(128, 128, 128);
}
pre .vhdl .type { font-weight: bold; }
pre .vhdl .string { color: #666666; }
pre .vhdl .literal { color: rgb(163, 21, 21); }

View File

@ -1,30 +1,19 @@
;
// Start random number generator seeding ASAP
sjcl.random.startCollectors();
var zerobin = function() {
that = {};
that.base64 = {
decode: function(content) {
return sjcl.codec.utf8String.fromBits(sjcl.codec.base64.toBits(content));
},
encode: function(content) {
return sjcl.codec.base64.fromBits(sjcl.codec.utf8String.toBits(content));
}
};
that.encrypt = function(key, content) {
var encrypted = sjcl.encrypt(key, content);
return lzw.compress(encrypted);
};
that.decrypt = function(key, content) {
var uncompressed = lzw.decompress(content)
return sjcl.decrypt(key, uncompressed);
};
that.make_key = function() {
var zerobin = {
encrypt: function(key, content) {
return sjcl.encrypt(key, lzw.compress(content));
},
decrypt: function(key, content) {
return lzw.decompress(sjcl.decrypt(key, content));
},
make_key: function() {
return sjcl.codec.base64.fromBits(sjcl.random.randomWords(8, 0), 0);
};
return that;
}();
}
};
$(function(){
@ -43,7 +32,6 @@ $('button[type=submit]').click(function(e){
alert('Paste could not be saved. Please try again later.');
})
.success(function(data) {
alert('success');
window.location = '/paste/' + data + '#' + key;
});
}
@ -55,6 +43,7 @@ var key = window.location.hash.substring(1);
if (content && key) {
try {
$('#paste-content').text(zerobin.decrypt(key, content));
hljs.highlightBlock($('#paste-content')[0]);
} catch(err) {
alert('Could not decrypt data (Wrong key ?)');
}

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,6 @@
// Note: modifed to javascript from orginal as2 found below
// basically identical actual to as2
//
//
// http://www.razorberry.com/blog/archives/2004/08/22/lzw-compression-methods-in-as2/
//
// A class for LZW compression modified from code posted at the following URL's
@ -110,127 +109,3 @@ var lzw = {
}
}
// LZW-compress a string
function lzw_encode(s) {
var dict = {};
var data = (s + "").split("");
var out = [];
var currChar;
var phrase = data[0];
var code = 256;
for (var i=1; i<data.length; i++) {
currChar=data[i];
if (dict[phrase + currChar] != null) {
phrase += currChar;
}
else {
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
dict[phrase + currChar] = code;
code++;
phrase=currChar;
}
}
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
for (var i=0; i<out.length; i++) {
out[i] = String.fromCharCode(out[i]);
}
return out.join("");
}
// Decompress an LZW-encoded string
function lzw_decode(s) {
var dict = {};
var data = (s + "").split("");
var currChar = data[0];
var oldPhrase = currChar;
var out = [currChar];
var code = 256;
var phrase;
for (var i=1; i<data.length; i++) {
var currCode = data[i].charCodeAt(0);
if (currCode < 256) {
phrase = data[i];
}
else {
phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
}
out.push(phrase);
currChar = phrase.charAt(0);
dict[code] = oldPhrase + currChar;
code++;
oldPhrase = phrase;
}
return out.join("");
}
/* utf.js - UTF-8 <=> UTF-16 convertion
*
* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
* Version: 1.0
* LastModified: Dec 25 1999
* This library is free. You can redistribute it and/or modify it.
*/
/*
* Interfaces:
* utf8 = utf16to8(utf16);
* utf16 = utf16to8(utf8);
*/
function utf16to8(str) {
var out, i, len, c;
out = "";
len = str.length;
for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c >= 0x0001) && (c <= 0x007F)) {
out += str.charAt(i);
} else if (c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
} else {
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
}
}
return out;
}
function utf8to16(str) {
var out, i, len, c;
var char2, char3;
out = "";
len = str.length;
i = 0;
while(i < len) {
c = str.charCodeAt(i++);
switch(c >> 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += str.charAt(i-1);
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = str.charCodeAt(i++);
char3 = str.charCodeAt(i++);
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break;
}
}
return out;
}

View File

@ -9,6 +9,7 @@
pastebin with a burn after reading feature">
<link rel="shortcut icon" href="/static/ico/favicon.ico">
<link href="/static/css/vs.css" rel="stylesheet" />
<link href="/static/css/bootstrap.css" rel="stylesheet">
<link href="/static/css/style.css" rel="stylesheet">
@ -85,7 +86,7 @@
</div><!--/.fluid-container-->
<script src="/static/js/lzw.js"></script>
<script src="/static/js/highlight.pack.js"></script>
<!--
<script src="/static/js/jquery.js"></script>
<script src="/static/js/bootstrap-transition.js"></script>

View File

@ -8,9 +8,13 @@
<p>
<p>
<pre id="paste-content">
<pre id="paste-content" class="prettyprint">
<code>
{{ paste.content }}
</code>
</pre>
</p>
<p class="paste-option btn-group">