-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
286 lines (234 loc) · 26 KB
/
index.html
File metadata and controls
286 lines (234 loc) · 26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Typographer: Convert Spaces to nbsp</title>
<script type="text/javascript" src="./deps/js/zepto.min.js"></script><!-- like simplified jquery -->
<script type="text/javascript">
let fileDisplayArea = null;
let pauseR = false;
let whiteListWords = [].concat( // unimplemented
// 'aboard about above across after against along amid among anti around as at before behind below beneath beside besides between beyond but by concerning considering despite down during except excepting excluding following for from in inside into like minus near of off on onto opposite outside over past per plus regarding round save since than through to toward towards under underneath unlike until up upon versus via with within without'.split(' '),
// ['concerning', 'considering', 'excepting', 'excluding', 'following', 'opposite', 'regarding', 'underneath', 'nevertheless'], // >= 8
// ['against', 'beneath', 'besides', 'between', 'despite', 'outside', 'through', 'towards', 'whereas', 'without', 'whether', 'neither'], // 7
// ['aboard', 'across', 'around', 'before', 'behind', 'beside', 'beyond', 'during', 'except', 'inside', 'toward', 'either', 'unlike', 'unless', 'versus', 'within'], // 6
// ['about', 'above', 'after', 'along', 'among', 'below', 'minus', 'round', 'since', 'under', 'until', 'while'], // 5
// ['amid', 'anti', 'down', 'from', 'into', 'like', 'near', 'onto', 'over', 'only', 'past', 'plus', 'save' 'upon', 'with', 'that', 'than', 'then', 'also', 'till'], // 4
// ['but', 'for', 'off', 'per', 'via', 'yet', 'not', 'how', 'nor', 'and'], // 3
// ['as', 'at', 'an', 'by', 'in', 'of', 'on', 'to', 'up', 'if', 'as', 'or'], // 2
// ['a']
);
let blackListWords = [].concat(
'that which who whose whom where when this that these those who what why where when whatever anything anybody anyone something somebody someone nothing nobody none one'.split(' '), // pronones 0
'i you he she it its we they me him her us them you mine ours yours hers his theirs my our your her his their myself yourself herself himself itself ourselves yourselves themselves all another any anybody anyone anything both each either everybody everyone everything few many most neither nobody none nothing one other others several some somebody someone something such that these this those thou thee thy thine ye what whatever which whichever who whoever whom whomever whose'.split(' '), // pronones 1
'be am is are was been were being do does did done go goes went gone gone can could have has had may might up ta pi ok ip id od lu ko ba ax'.split(' '), // modal 2
'make made lose lost mean meant see saw seen say said come came know knew known get got gotten gets give gave given become became find found think thought abide abode abided alight alit alighted arise arose arisen awake awoke awoken bear bore born borne bears beat beaten beats begin began begun begins bend bent bet bid bade bidden bids bind bound binds bite bit bitten build built builds burn burnt burned burns buy bought buys catch caught come came comes cost costs cut cuts drink drank drunk catches choose chose chosen eat ate eaten eats fall fell fallen falls fight fought fights hide hid hidden hides keep kept keeps put puts run ran runs write wrote written writes fly flew flown flies'.split(' '), // irregular 3
'ab ax ad ai al aa ar ac ay au ba bm cm cl cc cv cd do db dc dj dl dm dg en el er ew eq ev ey fa ft fm fo go gm gp hi he hm ho hr hg hl id iv io iq jo ko ki km kg kc kw kt kb kv lb lp lx lm lu mi mo ma mm mu me mg ml ms mv md nu nm ng nb ox os ok op od oo pa pi pe pm pr ps pc ph qi re rn rv ra sr te tb tv up ut ur uv vd wo xi xc xu yu ys za'.split(' '), // Nouns 2
'act aid ask ape all age alp ace are ail asp ale ark ash auk aim arm ant awe ado add air arc awl alb awn art axe amp avo ani aba ala adz aga bot bed boy bar bye bun bug bay bad boa bee baa bit ban box bus beg bin buy bey big bud bog bag bet bob bib bum bat bid bur bow bod biz boo con cox cat cay cop cup cab caw cud coo cow cot cue can car cry cur col cap cub cut cad cam cod cob cog chi cos cum cwm cps cwt cal cor cit cid dew duo dad den dry dip die dye dig due dag dab dun doe dug dam dog day din don dub dot dud deb doc daw dak dal dit das doh dol dah dox dis del ebb era eon eve eye emu ewe elk ell eel erg elm egg end elf ego ear eta eld eft ern est ens eke esp emf ers eme erf een edh ekg ewt erm ecg eos fur far few fig fog fez fun fox fad fop fey fan fib fen fry fly fit fag fat fay fix fin fir fob fee foe flu fax fug fet faq fid foy fra fub gut gob gen get gad god gig gag gay gem gap gum gar gnu gyp guy gab gin gee gas git gun gel gym goo gal gip gib gat goy gam goa gie gue ged gps hip hat ham haw hop hie hue hap hag hen hug hod hit hoe hew hog hem hep hay hum hut hub hob haj hex hin hun hoy hao hyp hye hah hiv hmo hud ism ice ink ilk ill inn ion ire ivy imp ick iou irs ing ide ira icu ied ipo inc ind ile irp jet jut jot joy jab jag jug jaw jib jay job jig jar jam jog jak jap jew jnd joe jin jan jeg jah jub kit keg key kid kin kip ken kob kat kea kor khi kos kph ket kex kaw kam khz kra kan lid lot lea leg lie lye lop lip lap lug lob lat law lag lam let lac lux lee lax loo lab lay log lad low lav lox led lit lei ley lek lev lah leu mat map mid mar may mud mow mot mum man mop men mag mew mob moo mug mix mac maw mad max meg mod mom mil moa mho mem mol mam med mus min mph mun now nip nab nut nob nub nit nil nib nag net nay nap nun nod nix neb nog nim nan noy nef nep nye nom nur ney nup oat orb ore ode old ohm owl oil obi oaf oak oar one olm oca oka orc ola oes orf ort ora ord oke oss oad ost oul oby ojo olf ook ork pic pud pro pun pal pig pox par pan pap pin pad pip pod pay pas pot pen pug poi pet pie pit pix pyx paw pus pee ply pew pry pat pea put peg pop qat qed que rum rib rim row rag rye rap rod rat roe rue rub rob rig ram ray run rot red rep rut raw rug rip rem rho rad ref rev roc rya res ran rpm raj rex sot say sol sen sea sou sip sap sew sod sum sex six sob sty spy sis saw sow sub sag sin set shy spa sac sax see sop ski sky son sup sir soy sun tit toy tat tar tie tot tip tin tub tan tee tow tun tax tag try ton tab tic tau tap tug tor toe top two ten tea tut tom tad tux tam tum taw tod use urn ump ufo uke ure uva ule url van vim vat vie vow var veg vet vox vas vig vhf vlf vis vip voe vcr vdu vae vap wet war wig win wag wan wax web wed won why wit wee way wad woe wog wok wop wen wow wiz wye waw wpm wap wae wem wey www wex wmd wah xor xat xer xuv yea yap yew yak yen yam yaw yin yes yid yip yob yug yle yux zoo zip zed zit zap zig zax zee zag zep zea zif'.split(' '), // Nouns 3
'act aid ask ape age ace ail ash aim arm awe add air arc apt art axe aah adz aby ake bed boy bar bug bay baa bit ban box bus beg bin buy big bud bog bag bet bob bib bum bat bid bur bow boo bop bam bub buz con cox cat cop cup cab caw coo cow cue can cry cap cub cut coy cod cob cog cun dew dim den dry dip die dye dig due dag dab dun dam dog din don dub dot daw dit dox dis dod dap dup dib dop dor dow ebb err eye egg end eat elf ear eff eld ern ere eke eek ean fur fig fog fun fox fey fan fib fry fly fit fag fat fay fix fin fob fee foe fax fed fum fet ftp fub gut gob gen get gad god gig gag gem gap gum gar gyp guy gab gin gee gas gun gel gip gib gat gam gie gan gye gyn hip hat ham haw hop hie hue hap hag hug hot hit hoe hew hog hem hay hum hob hex han hyp hye hox ice ink irk inn imp ick jet jut jot joy jab jag jug jaw jib job jig jar jam jog jew jee kit key kid kip ken kon kaw kep kan lot leg lie lop lip lap lug lob lat law lag lam let lux lee lax loo lab lay log low lit ley lib lin lig lol mat map mar may mud mow mot man mop mew mob moo mug mix mad mux moe mue nip nab nut nub nil nib nag net new nay nap nod nix nog nim noy orb out owe owl oil own oar one opt ooh ope oop orn pun pal pig pox par pan pap pin pad pip pod pay pot pen pug pet pie pit pix pyx paw pee ply pew pry pat put peg pop pup pep pur pue rib rim row rag rap rat rue rub rob rig ram ray run rot red rut rug rid rip rev ret ren rud ree sot say sic sue sip sap sew sod sum sex sob sty spy saw sow sly sub sag sin set shy see sop ski sky sup sad sun sit sig sle toy tat tar tie tot tip tin tub tan tee tow tun tax tag try tap tug toe top tea tut tog taw tod tup tsk ted tye tew tas tol use urn ure vex van vat vie vow vet wet war wig win wag wry wan wax web wed won wit wee way wad woo wow was wap wis wem wey wex wol yap yew yak yen yaw yip yex yot yox yux zip zap'.split(' '), // Verbs 3
'-- ++ && || ( ) [ ] < > { } . , : ; ! ?'.split(' '),
'ад аж аз аи ай ан ар ас еж ер ил ка ли мм ом се уд уж ук ум ус це че ща щи эм эр эф эх юг юз юр юс ют яд яз як ял ям яр яс'.split(' '), // Существительные 2
'аба абы ага агу азу азы аил аир акр акт али аль ант ара асс ату аул аут ахи баз бай бак бал бар бас бах баш бег бей бек бел бес бит бич боб бог бой бок бон бор бот бош буж буй бук бум бур бут бух бык быт бэр важ вал вар век вес виг вид вир вис вод воз вой вол вон вор вуз вша выя вяз гад газ гай гак гам гей ген гид гик гит год гой гол гон гот гуд гуж гук гул дар дед дек дер див дно дог дож -де -ка'.split(' '), // Существительные 3
'док дол дом дон дот дуб дух душ дым еда ежа ель ера ерш еры ерь жар жид жим жир жок жом жор жох жук зав зад зал зам зги зев зет зиг зло зоб зов зуб зуд зуй зык ива иго иды икс имя инк иол ион иск йог йод йот кал кап кат кеб кед кий кик кил кит код кок кол ком кон кот кош куб кум кун кур кус кут куш лаг лад лаж лаз лай лак лал лан лар лев лед леи лей лек лен лес лет лещ лея лик лис лиф лоб лов лог лом лот лох луб луг лук луч люб люд люк ляд лях маг маз май мак мат мах мга мед меж мел мех меч миг мим мир миф мол мор мот мох муж мул мыс мыт мэр мяч нар неф низ нож нок ном нос нут нэп нюх ода одр око опт орс орт оса ост ось охи очи паж паз пай пак пал пан пар пас пат пах пек пес пик пим пир пол поп пот при пря пуд пук пул пуп пуф пух пыж пыл пэр раб рад раж раз рай рак рев рез рей рея ржа рис риф ров рог род рой рок рол ром рот рык рым рюш ряд ряж сад саж саз сак сан сап сев сем сет сиг сип сок сом сон сор сот соя суд сук суп сын сыр сыч сэр таз таи тал тат тем тес тик тип тир тис тиф тля той ток тол том тон топ тор туз тук тун тур тут туф туш туя тыл тын тюк тяж увы уда уже уза узы унт усы уха ухо уши уют фаг фай фал фас фат фен фес фея фок фол фон фот фри фря фук фут хаз хай хам хан хек хер хна хны ход хон хор хук цеж цеп цех цуг цук чад чай чал чан час чек чес чет чех чиж чий чик чин чих чон чох чуб чум шаг шар шах шед шеф шея шик шип шиш шов шок шум шут щип щит щуп щур эль эму эра эрг эре эрл эст эфа эхо юит юла юра юрт явь яга язь яма ямб ярд ярл ярь ять'.split(' '), // Существительные 4
'бай бей бит вис вой вша вяз гну для ежа зря лай лей мел мой мыт пал пас пах пек при пух рей рея ржа рой сев сей сип сяк таи тля три хай чай'.split(' '), // Глаголы 5
'бел бит бур гол зло лев мыт пал пол раж сыр тал уже чал'.split(' '), // Прилагательные
'я ты он оно она мы вы они'.split(' '), // Личные местоимения
'себя себе собой собою'.split(' '), // Возвратное
'мой твой ваш наш свой его ее их'.split(' '), // Притяжательные
'то это тот этот такой таков столько'.split(' '), // Указательные
'весь всякий сам самый каждый любой иной другой'.split(' '), // Определительные
'кто что какой каков чей сколько'.split(' '), // Вопросительные и Относительные
'никто ничто некого нечего никакой ничей нисколько'.split(' '), // Отрицательные
'кто-то кое-кто кто-нибудь кто-либо что-то кое-что что-нибудь что-либо какой-то какой-либо какой-нибудь некто нечто некоторый некий'.split(' '), // Неопределенные
'мне тебе нем нём ней нас вас них'.split(' '),
'меня тебя его её его него неё нее него нас вас их них'.split(' '),
'мне тебе ему нему ей ней нам вам им'.split(' '),
'мной мною тобой тобою'.split(' '),
'им ним ею нею нами вами ими ними'.split(' '),
'мое твое наше ваше свое'.split(' '),
'моя твоя наша ваша своя'.split(' '),
'мои твои наши ваши свои'.split(' '),
'моего твоего нашего вашего своего моей твоей нашей вашей своей моих твоих наших ваших своих'.split(' '),
'моему твоему нашему вашему своему моей твоей нашей вашей своей моим твоим нашим вашим своим'.split(' '),
'моим твоим нашим вашим своим моей твоей нашей вашей своей моими твоими нашими вашими своими'.split(' '),
'моем твоем нашем вашем своем моей твоей нашей вашей своей моих твоих наших ваших своих'.split(' '),
'чей какой который чье какое которое чья какая которая чьи какие которые кто что сколько'.split(' '),
'чьего какого которого чьей какой которой чьих каких которых кого чего скольких'.split(' '),
'чьему чьёму какому которому чьей какой которой чьим каким которым кому чему скольким'.split(' '),
'каким которым чьей какой которой чьими какими которыми кем чем сколькими'.split(' '),
'чьем чьём каком котором чьей какой которой чьих каких которых ком чем чём скольких'.split(' '),
'кое-кто кто-либо кое-что что-то кто-нибудь что-нибудь'.split(' '),
'кого кого-либо кое-чего чего-то кого-нибудь чего-нибудь'.split(' '),
'кое-кому кому-либо кое-чему чему-то кому-нибудь чему-нибудь'.split(' '),
'кое-кого кого-либо кое-что что-то что-либо чего-либо кого-нибудь чего-нибудь'.split(' '),
'кем кем-либо чем чем-то чем-либо кем-нибудь чем-нибудь'.split(' '),
'ком ком-либо кое чем чем-то чём чём-то'.split(' '),
'весь сам любой другой все само любое другое вся сама любая другая все сами любые другие'.split(' '),
'этот тот такой таков это то такое таково эта та такая такова эти те такие таковы свои столько'.split(' '),
);
function displayFile () {
var fileInput = $('#fileInput')[0];
fileDisplayArea = $('#fileDisplayArea')[0];
var file = fileInput.files[0];
var reader = new FileReader();
reader.onload = function(e) {
fileDisplayArea.innerHTML = '';
fileDisplayArea.value = e.target.result;
fileInput.value = fileInput.defaultValue;
convertSpaces();
}
reader.readAsText(file);
}
function convertSpaces () {
if (pauseR) {
return;
}
fileDisplayArea = $('#fileDisplayArea')[0];
var text = fileDisplayArea.value;
if (!text || !text.trim || !text.trim().length) {
console.warn('No input text!');
return;
}
var textArr = (text.trim().replaceAll('\t', ' ').replaceAll('\r', '\n').replaceAll('\n', ' \n ').replaceAll('&', '&').replaceAll(' ', ' ').replaceAll('<br>', '\n').replaceAll('<br/>', '\n').replaceAll('<BR>', '\n').replaceAll('<BR/>', '\n')/*.replace(/ +/g, ' ')*/).split(' ');
///textArr = textArr.filter(function (e) { return !!e; });
//console.log(textArr);
if (!!$('#blackListWords')[0].value && ('' + $('#blackListWords')[0].value).indexOf(',') < 0) {
$('#blackListWords')[0].value = ('' + $('#blackListWords')[0].value).replaceAll('\t', ' ').replaceAll(' ', ',');
}
if (!$('#blackListWords')[0].value || !('' + $('#blackListWords')[0].value).trim()) {
$('#blackListWords')[0].value = 'get,put,can,could,go,gone,do,did,done,ask,age,bit,box,гну,вой,лай,лей,ом,ком,дом,еж,ёж';
alert('black list (empty) updated to: ' + $('#blackListWords')[0].value);
}
let wasLineBreak = false;
var textNewArr;
textNewArr = textArr.map(function (e, i) {
if (!e || !e.trim || !e.trim().length || e.indexOf('\n') >= 0 || e.endsWith(',') || e.endsWith('.') || e.endsWith('!') || e.endsWith('?') || e.endsWith(':') || e.endsWith(';')) {
wasLineBreak = true;
} else {
wasLineBreak = false;
}
if (!wasLineBreak && (e.length <= ($('#prepositionWorldLen')[0].value || 3) && ($('#blackListWords')[0].value.split(',').map(function (e) {return (!!e) ? e.trim() : ''}).filter(function () {return !!e})).indexOf(e.toLowerCase()) < 0) && (''+e) != (''+(+e))) { // main condition
e = e + ' ';
//console.log(e);
} else if (wasLineBreak && !!e && !!e.trim && e.length >= 2 && ' ' === e[e.length - 2] && (e.endsWith(',') || e.endsWith('.') || e.endsWith('!') || e.endsWith('?') || e.endsWith(':') || e.endsWith(';'))) {
e = e.substring(0, e.length - 1) + ' ' + e.substring(e.length - 1);
}
return e;
});
//console.log('textNewArr: ', textNewArr);
var convertedText = textNewArr.join(' ').replace(/ \n /g, '\n').replace(/[&][n][b][s][p][;][ ]/g, ' ');
convertedText = convertedText.replaceAll('\n', !!document.getElementById('brInsteadN').checked ? '<br/>' : '\n');
fileDisplayArea.innerHTML = '';
fileDisplayArea.value = convertedText;
displayAfterConvert();
navigator.clipboard.writeText(convertedText);
$('#fileDisplayArea')[0].placeholder = 'RESULT ALREADY IN CLIPBOARD (BUFFERED)';
}
function displayAfterConvert () {
if (pauseR) {
return;
}
if (!!document.getElementById('output')) {
document.getElementById('output').outerHTML = '';
}
document.body.insertAdjacentHTML('beforeend', '<div id="output" style="width: 50%; height: auto;">' + (document.getElementById('fileDisplayArea').value.replace(/[&][a][m][p][;][n][b][s][p][;]/g, '\u00A0').replaceAll('\u00A0', ' ').replaceAll(' ', '\u00A0').replaceAll('\n', '<br/>')) + '</div>');
console.log(2);
}
function selectElementContents (el) {
var range;
if (window.getSelection && document.createRange) {
range = document.createRange();
var sel = window.getSelection();
range.selectNodeContents(el);
sel.removeAllRanges();
sel.addRange(range);
} else if (document.body && document.body.createTextRange) {
range = document.body.createTextRange();
range.moveToElementText(el);
range.select();
}
}
document.addEventListener('keydown', function (e) {
if ((e.ctrlKey || e.metaKey) && (e.key === 'a' || e.key === 'A' || String.fromCharCode(e.which || e.keyCode).toLowerCase() === 'a')) {
if (!e.target.placeholder) {
return;
}
e.preventDefault();
console.log('CTRL + A');
e.target.select(); //selectElementContents(e.target);
pauseR = true;
//setTimeout(function () {
var ke1 = document.createEvent("Events");
ke1.initEvent("keydown", true, true);
ke1.keyCode = ke1.which = 8; // Backspace
e.target.dispatchEvent(ke1);
var ke2 = document.createEvent("Events");
ke2.initEvent("keyup", true, true);
ke2.keyCode = ke2.which = 8; // Backspace
e.target.dispatchEvent(ke2);
//}, 5000);
} else if (8 === +e.keyCode && pauseR) { // Backspace
e.preventDefault();
console.log(e.keyCode);
pauseR = true;
if (window.getSelection) {
if (window.getSelection().toString() != '') {
window.getSelection().deleteFromDocument();
document.getElementById('fileDisplayArea').innerHTML = ''; document.getElementById('fileDisplayArea').value = '';
}
if (window.getSelection().empty) { // Chrome
window.getSelection().empty();
} else if (window.getSelection().removeAllRanges) { // Firefox
window.getSelection().removeAllRanges();
}
} else if (document.selection) { // IE?
document.selection.deleteFromDocument(); //
document.getElementById('fileDisplayArea').innerHTML = ''; document.getElementById('fileDisplayArea').value = '';
document.selection.empty();
}
document.getElementById('fileDisplayArea').blur();
setTimeout(function() {
fileDisplayArea = $('#fileDisplayArea')[0];
fileDisplayArea.parentElement.focus();
fileDisplayArea.focus();
pauseR = false;
}, 10);
}
setTimeout(function() {
pauseR = false;
}, 20);
});
$(document).ready(function () {
$('#blackListWords')[0].value = (blackListWords.join(','));
});
let wasStarted = false;
setTimeout(function update () {
if (wasStarted) {
return;
}
wasStarted = true;
try {
convertSpaces();
} catch (e) {
} finally {
wasStarted = false;
}
}, 100);
</script>
</head>
<body>
<h1 style="color: lightgrey;">Typographer: Convert Spaces to nbsp</h1>
<input type="number" id="prepositionWorldLen" value="3" style="width: 30px;" onchange="$('#fileDisplayArea')[0].innerHTML = ''; $('#fileDisplayArea')[0].value = '';" />
<label for="prepositionWorldLen" title="Длина предлога (максимальная)">Preposition world length (maximum)</label>
<input type="checkbox" id="brInsteadN" style="width: 30px;" onchange="convertSpaces();" />
<label for="brInsteadN">Use html BR instead N (new line)</label><br/>
<input type="text" id="blackListWords" />
<label for="blackListWords">Comma-separated black list (excluded)</label><br/>
<input type="file" id="fileInput" onchange="displayFile()" style="display:none;">
<label for="fileInput" style="cursor: pointer;"><h3>📁 [Press here]▭ Open file or paste text</h3></label>
<!-- У леса на опушке жила Зима в избушке. Она снежки солила в березовой кадушке, Она сучила пряжу, она ткала холсты Ковала ледяные да над реками мосты. Припев: Потолок ледяной, дверь скрипучая, За шершавой стеной тьма колючая. Как шагнешь за порог - всюду иней, А из окон парок синий-синий. Ходила на охоту, ковала серебро, Сажала тонкий месяц в хрустальное ведро. Деревьям шубы шила, торила санный путь, А после в лес спешила, чтоб в избушке отдохнуть. Припев: Потолок ледяной, дверь скрипучая, За шершавой стеной тьма колючая. Как шагнешь за порог - всюду иней, А из окон парок синий-синий. -->
<textarea id="fileDisplayArea" autofocus placeholder="" rows="10" cols="50" onchange="convertSpaces();"></textarea>
<button onclick="convertSpaces();">Convert and Copy</button>
<div id="output" style="width: 50%; height: auto;"></div>
</body>
</html>