Skip to content

Instantly share code, notes, and snippets.

@dittos
Created April 1, 2013 01:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dittos/5282788 to your computer and use it in GitHub Desktop.
Save dittos/5282788 to your computer and use it in GitHub Desktop.
크킄... 흑.화.한다.
var darken = (function() {
var re = { sub: function(regex, subst, s) { return s.replace(new RegExp(regex, 'gi'), subst); } };
var random = {
random: function() { return Math.random(); },
randint: function randint(e) { return Math.floor(random.random() * e); },
randrange: function randrange(s, e) { return s + random.randint(e - s); },
choice: function(seq) { return seq[random.randint(seq.length)]; }
};
String.prototype.strip = function() { return this.replace(/^\s*(.*?)\s*$/, '$1'); };
String.prototype.rstrip = function() { return this.replace(/^(.*?)\s*$/, '$1'); };
String.prototype.endswith = function(suffix) { return this.substring(this.length - suffix.length) === suffix; }
function len(seq) { return seq.length; }
function repeat(s, n) { var res = ''; for (var i = 0; i < n; i++) res += s; return res; }
function ord(s) { return s.charCodeAt(0); }
function cleanup(s) {
s = re.sub('\[(.*?)]|\\((.*?)\\)', ' ', s);
s = re.sub('[.\'~!?\-_,"()]|“|”|"|有|ㅋ|ㅎ|ㄷ|…', ' ', s);
s = re.sub('jpg$', ' ', s.rstrip());
s = re.sub('\s\s+', ' ', s);
return s.strip();
}
function getlasthangul(s) {
for (var i = s.length - 1; i >= 0; i--) {
var ch = s.charCodeAt(i);
if (0xAC00 <= ch && ch <= 0xD7A3)
return s.charAt(i);
}
return null;
}
function dark(s) {
s = cleanup(s);
var r = random.random;
var prefixes = ['크큭..', '크크큭..', '쿠쿡..', '어이어이...', '에엣?', '후우...', '이것은..', '훗..', '후후..', '이런이런..', '쳇..'];
var suffixes = ['웃음', '탕', '털썩', '어이', '이봐', '훗', '응?'];
var words = [];
var strong = 2 + len(words) / 2;
var ss = s.split(' ');
for (var i = 0; i < ss.length; i++) {
var word = ss[i];
var p = r();
if (strong && p < 0.33) {
var _word = word;
var josalist = ['있는', '에서', '으로', '은', '는', '이', '가', '을', '를', '의', '로', '와', '과'];
var suffix = '';
for (var j = 0; j < josalist.length; j++) {
var josa = josalist[j];
if (word.endswith(josa)) {
word = word.substring(word.length - josa.length);
suffix = josa;
break;
}
}
if (len(word) > 1) {
word = '「' + word + '」' + suffix;
strong -= 1;
} else {
word = _word;
}
} else if (p < 0.30) {
word = word.split('').join('.') + '.';
} else if (p < 0.75) {
word += repeat('.', random.randrange(2, 4));
}
words.push(word);
}
if (r() < 0.33)
words.unshift(random.choice(prefixes));
s = words.join(' ').strip();
if (r() < 0.25)
s = repeat('─', (2 * random.randrange(4))) + s;
if (r() < 0.33) {
var jongseong = false;
var ch = getlasthangul(s);
if (ch != null)
jongseong = (ord(ch) - 0xAC00) % 28 != 0;
var serifs = [
(jongseong ? '이' : '') + '로군' + repeat('.', (2 * random.randrange(2))) + '?',
(jongseong ? '이' : '') + '랄까..',
'인건가..?',
'일지도?',
'따위..',
'?',
'.!'
];
s += '..' + random.choice(serifs);
}
if (r() < 0.5) {
var paren = random.choice([['(', ')'], ['[', ']']]);
s += ' ' + paren[0] + random.choice(suffixes) + paren[1];
}
return s
}
function dark_text(s) {
var sep = '***';
var ss = s.replace(/[.?!]/g, sep).split(sep);
var sss = [];
for (var i = 0; i < ss.length; i++) {
if (ss[i].strip().length != 0)
sss.push(dark(ss[i]));
}
return sss.join(' ');
}
return {string: dark, text: dark_text};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment