Advertisement
mufuuuu

[Mery] タイムスタンプの秒数を減らす(デクリメント)

Aug 9th, 2019
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // YouTube - タイムスタンプの秒数を減らす(デクリメント)
  2. // 2019/08/06
  3. //・カーソル付近or選択範囲のタイムスタンプの秒数を 1 減らす。
  4. // このマクロはMeryWiki「数値を増減」マクロの改変です
  5. // https://www.haijin-boys.com/wiki/%E6%95%B0%E5%80%A4%E3%82%92%E5%A2%97%E6%B8%9B
  6.  
  7. var offset = -1; //増減する値
  8.  
  9. var Sel = Document.Selection;
  10. var gap = Document.Text.length;
  11. var anp = Sel.GetAnchorPos();
  12. var acp = Sel.GetActivePos();
  13. var isAcp = (acp<anp); //範囲終点(カーソル)が前方にあるか?
  14. var isSel = !Sel.IsEmpty;
  15. if (Sel.IsEmpty) { //非選択時、文字を探索して範囲選択
  16.   var px = Sel.GetActivePointX(mePosLogical);
  17.   var py = Sel.GetActivePointY(mePosLogical);
  18.   var ln = Document.GetLine(py,0);
  19.   var tx = 1 + ln.slice(0,px-1).match(/[0-9:]*$/).index;
  20.   var bx = tx + ln.slice(tx-1).match(/[0-9:]*/)[0].length;
  21.   Sel.SetActivePoint(mePosLogical,bx,py);
  22.   Sel.SetAnchorPoint(mePosLogical,tx,py);
  23.   isAcp = (px===tx); //カーソルが数値の左端(前方)にあるか?
  24. }
  25.  
  26. Sel.Text = Sel.Text.replace(/(?:(\d+)\:)?([0-5]?\d)\:([0-5]\d)(?!\d|\:)/g,function($0,h,m,s){
  27.   if(!h) h = 0;
  28.   var time = parseInt(h) * 3600 + parseInt(m) * 60 + parseInt(s);
  29.   time = Math.max(0,time + offset);
  30.   h = Math.floor(time / 3600);
  31.   m = Math.floor((time / 60) % 60);
  32.   s = time % 60;
  33.   var formattedTime = (h > 0) ? h + ':' + zeroPadding(m) + ':' + zeroPadding(s) : zeroPadding(m) + ':' + zeroPadding(s);
  34.   return formattedTime;
  35.   function zeroPadding(num){return (Array(2).join('0') + num).slice(-2);}
  36. });
  37.  
  38. gap = Document.Text.length - gap; //文字数変化量
  39. Sel.SetAnchorPos(anp+(isAcp? gap : 0));
  40. Sel.SetActivePos(acp+(isAcp? 0 : gap), isSel);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement