mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
autoindent
This commit is contained in:
parent
dad92bde26
commit
866c74c841
|
@ -287,108 +287,127 @@ function save_chk() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// get selection bounds, expanded to whole lines
|
// returns car/cdr (selection bounds) and n1/n2 (grown to full lines)
|
||||||
function linebounds(just_car) {
|
function linebounds(just_car) {
|
||||||
var car = dom_src.selectionStart;
|
var car = dom_src.selectionStart,
|
||||||
var cdr = dom_src.selectionEnd;
|
cdr = dom_src.selectionEnd;
|
||||||
|
|
||||||
console.log(car, cdr);
|
console.log(car, cdr);
|
||||||
|
|
||||||
if (just_car)
|
if (just_car)
|
||||||
cdr = car;
|
cdr = car;
|
||||||
|
|
||||||
var txt = dom_src.value;
|
var md = dom_src.value,
|
||||||
car = Math.max(car, 0);
|
n1 = Math.max(car, 0),
|
||||||
cdr = Math.min(cdr, txt.length - 1);
|
n2 = Math.min(cdr, md.length - 1);
|
||||||
|
|
||||||
if (car < cdr && txt[car] == '\n')
|
if (n1 < n2 && md[n1] == '\n')
|
||||||
car++;
|
n1++;
|
||||||
|
|
||||||
if (car < cdr && txt[cdr - 1] == '\n')
|
if (n1 < n2 && md[n2 - 1] == '\n')
|
||||||
cdr -= 2;
|
n2 -= 2;
|
||||||
|
|
||||||
car = txt.lastIndexOf('\n', car - 1) + 1;
|
n1 = md.lastIndexOf('\n', n1 - 1) + 1;
|
||||||
cdr = txt.indexOf('\n', cdr);
|
n2 = md.indexOf('\n', n2);
|
||||||
if (cdr < car)
|
if (n2 < n1)
|
||||||
cdr = txt.length;
|
n2 = md.length;
|
||||||
|
|
||||||
return [car, cdr];
|
return {
|
||||||
|
"car": car,
|
||||||
|
"cdr": cdr,
|
||||||
|
"n1": n1,
|
||||||
|
"n2": n2,
|
||||||
|
"md": md
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// returns [before,selection,after]
|
// linebounds + the three textranges
|
||||||
function getsel() {
|
function getsel() {
|
||||||
var lb = linebounds(false),
|
var s = linebounds(false);
|
||||||
txt = dom_src.value;
|
s.pre = s.md.substring(0, s.n1);
|
||||||
|
s.sel = s.md.substring(s.n1, s.n2);
|
||||||
return [
|
s.post = s.md.substring(s.n2);
|
||||||
txt.substring(0, lb[0]),
|
return s;
|
||||||
txt.substring(lb[0], lb[1]),
|
|
||||||
txt.substring(lb[1])
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// place modified getsel into markdown
|
// place modified getsel into markdown
|
||||||
function setsel(a, b, c) {
|
function setsel(s) {
|
||||||
dom_src.value = [a, b, c].join('');
|
if (s.car != s.cdr) {
|
||||||
dom_src.setSelectionRange(a.length, a.length + b.length);
|
s.car = s.pre.length;
|
||||||
dom_src.oninput();
|
s.cdr = s.pre.length + s.sel.length;
|
||||||
|
}
|
||||||
|
dom_src.value = [s.pre, s.sel, s.post].join('');
|
||||||
|
dom_src.setSelectionRange(s.car, s.cdr);
|
||||||
|
try {
|
||||||
|
dom_src.oninput();
|
||||||
|
}
|
||||||
|
catch (ex) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// indent/dedent
|
// indent/dedent
|
||||||
function md_indent(dedent) {
|
function md_indent(dedent) {
|
||||||
var r = getsel(),
|
var s = getsel(),
|
||||||
pre = r[0],
|
sel0 = s.sel;
|
||||||
sel = r[1],
|
|
||||||
post = r[2];
|
|
||||||
|
|
||||||
if (dedent)
|
if (dedent)
|
||||||
sel = sel.replace(/^ /, "").replace(/\n /g, "\n");
|
s.sel = s.sel.replace(/^ /, "").replace(/\n /g, "\n");
|
||||||
else
|
else
|
||||||
sel = ' ' + sel.replace(/\n/g, '\n ');
|
s.sel = ' ' + s.sel.replace(/\n/g, '\n ');
|
||||||
|
|
||||||
setsel(pre, sel, post);
|
if (s.car == s.cdr)
|
||||||
|
s.car = s.cdr += s.sel.length - sel0.length;
|
||||||
|
|
||||||
|
setsel(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// header
|
// header
|
||||||
function md_header(dedent) {
|
function md_header(dedent) {
|
||||||
var r = getsel(),
|
var s = getsel(),
|
||||||
pre = r[0],
|
sel0 = s.sel;
|
||||||
sel = r[1],
|
|
||||||
post = r[2];
|
|
||||||
|
|
||||||
if (dedent)
|
if (dedent)
|
||||||
sel = sel.replace(/^#/, "").replace(/^ +/, "");
|
s.sel = s.sel.replace(/^#/, "").replace(/^ +/, "");
|
||||||
else
|
else
|
||||||
sel = sel.replace(/^(#*) ?/, "#$1 ");
|
s.sel = s.sel.replace(/^(#*) ?/, "#$1 ");
|
||||||
|
|
||||||
setsel(pre, sel, post);
|
if (s.car == s.cdr)
|
||||||
|
s.car = s.cdr += s.sel.length - sel0.length;
|
||||||
|
|
||||||
|
setsel(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// smart-home
|
// smart-home
|
||||||
function md_home(shift) {
|
function md_home(shift) {
|
||||||
var car = dom_src.selectionStart,
|
var s = linebounds(!shift),
|
||||||
sb = linebounds(true),
|
ln = s.md.substring(s.n1, s.n2),
|
||||||
n1 = sb[0],
|
m = /^[ \t#>+-]*(\* )?([0-9]+\. +)?/.exec(ln),
|
||||||
n2 = sb[1];
|
home = s.n1 + m[0].length,
|
||||||
|
car = (s.car == home) ? s.n1 : home,
|
||||||
|
cdr = shift ? s.cdr : car;
|
||||||
|
|
||||||
var ln = dom_src.value.substring(n1, n2);
|
|
||||||
var m = /^[ \t#>*_~`+-]*([0-9]+\. +)?/.exec(ln);
|
|
||||||
if (!m)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
var home = n1 + m[0].length;
|
|
||||||
car = (car == home) ? n1 : home;
|
|
||||||
|
|
||||||
var cdr = shift ? dom_src.selectionEnd : car;
|
|
||||||
if (car > cdr)
|
if (car > cdr)
|
||||||
car = [cdr, cdr = car][0];
|
car = [cdr, cdr = car][0];
|
||||||
|
|
||||||
dom_src.setSelectionRange(car, cdr);
|
dom_src.setSelectionRange(car, cdr);
|
||||||
return false;
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// autoindent
|
||||||
|
function md_newline() {
|
||||||
|
var s = linebounds(true),
|
||||||
|
ln = s.md.substring(s.n1, s.n2),
|
||||||
|
m = /^[ \t#>+-]*(\* )?([0-9]+\. +)?/.exec(ln);
|
||||||
|
|
||||||
|
s.pre = s.md.substring(0, s.car) + '\n' + m[0];
|
||||||
|
s.sel = '';
|
||||||
|
s.post = s.md.substring(s.car);
|
||||||
|
s.car = s.cdr = s.pre.length;
|
||||||
|
setsel(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -413,7 +432,12 @@ function md_home(shift) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!ctrl && (ev.code == "Home" || kc == 36)) {
|
if (!ctrl && (ev.code == "Home" || kc == 36)) {
|
||||||
return md_home(ev.shiftKey);
|
md_home(ev.shiftKey);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!ctrl && !ev.shiftKey && (ev.code == "Enter" || kc == 13)) {
|
||||||
|
md_newline();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,11 @@ while [ ! -z "$1" ]; do
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
|
|
||||||
|
tmv() {
|
||||||
|
touch -r "$1" t
|
||||||
|
mv t "$1"
|
||||||
|
}
|
||||||
|
|
||||||
rm -rf sfx/*
|
rm -rf sfx/*
|
||||||
mkdir -p sfx build
|
mkdir -p sfx build
|
||||||
cd sfx
|
cd sfx
|
||||||
|
@ -102,17 +107,27 @@ rm -f copyparty/web/deps/*.full.*
|
||||||
|
|
||||||
# it's fine dw
|
# it's fine dw
|
||||||
grep -lE '\.full\.(js|css)' copyparty/web/* |
|
grep -lE '\.full\.(js|css)' copyparty/web/* |
|
||||||
while IFS= read -r x; do sed -ri 's/\.full\.(js|css)/.\1/g' "$x"; done
|
while IFS= read -r x; do
|
||||||
|
sed -r 's/\.full\.(js|css)/.\1/g' <"$x" >t
|
||||||
|
tmv "$x"
|
||||||
|
done
|
||||||
|
|
||||||
[ $no_ogv ] &&
|
[ $no_ogv ] &&
|
||||||
rm -rf copyparty/web/deps/{dynamicaudio,ogv}*
|
rm -rf copyparty/web/deps/{dynamicaudio,ogv}*
|
||||||
|
|
||||||
[ $no_cm ] && {
|
[ $no_cm ] && {
|
||||||
rm -rf copyparty/web/mde.* copyparty/web/deps/easymde*
|
rm -rf copyparty/web/mde.* copyparty/web/deps/easymde*
|
||||||
sed -ri '/edit2">edit \(fancy/d' copyparty/web/md.html
|
|
||||||
echo h > copyparty/web/mde.html
|
echo h > copyparty/web/mde.html
|
||||||
|
f=copyparty/web/md.html
|
||||||
|
sed -r '/edit2">edit \(fancy/d' <$f >t && tmv "$f"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# up2k goes from 28k to 22k laff
|
||||||
|
for f in copyparty/web/*.js; do
|
||||||
|
unexpand.exe -t 4 --first-only <"$f" >t
|
||||||
|
tmv "$f"
|
||||||
|
done
|
||||||
|
|
||||||
echo creating tar
|
echo creating tar
|
||||||
args=(--owner=1000 --group=1000)
|
args=(--owner=1000 --group=1000)
|
||||||
[ "$OSTYPE" = msys ] &&
|
[ "$OSTYPE" = msys ] &&
|
||||||
|
@ -141,20 +156,3 @@ chmod 755 $sfx_out.*
|
||||||
printf "done:\n"
|
printf "done:\n"
|
||||||
printf " %s\n" "$(realpath $sfx_out)."{sh,py}
|
printf " %s\n" "$(realpath $sfx_out)."{sh,py}
|
||||||
# rm -rf *
|
# rm -rf *
|
||||||
|
|
||||||
# -rw-r--r-- 1 ed ed 811271 May 5 14:35 tar.bz2
|
|
||||||
# -rw-r--r-- 1 ed ed 732016 May 5 14:35 tar.xz
|
|
||||||
|
|
||||||
# -rwxr-xr-x 1 ed ed 830425 May 5 14:35 copyparty-sfx.py*
|
|
||||||
# -rwxr-xr-x 1 ed ed 734088 May 5 14:35 copyparty-sfx.sh*
|
|
||||||
|
|
||||||
# -rwxr-xr-x 1 ed ed 799690 May 5 14:45 copyparty-sfx.py*
|
|
||||||
# -rwxr-xr-x 1 ed ed 735004 May 5 14:45 copyparty-sfx.sh*
|
|
||||||
|
|
||||||
# time pigz -11 -J 34 -I 5730 < tar > tar.gz.5730
|
|
||||||
# real 8m50.622s
|
|
||||||
# user 33m9.821s
|
|
||||||
# -rw-r--r-- 1 ed ed 1136640 May 5 14:50 tar
|
|
||||||
# -rw-r--r-- 1 ed ed 296334 May 5 14:50 tar.bz2
|
|
||||||
# -rw-r--r-- 1 ed ed 324705 May 5 15:01 tar.gz.5730
|
|
||||||
# -rw-r--r-- 1 ed ed 257208 May 5 14:50 tar.xz
|
|
||||||
|
|
Loading…
Reference in a new issue