「数値を増減」の版間の差分

Masme (トーク | 投稿記録)
指数の数値を変更
Masme (トーク | 投稿記録)
マクロを改修
1行目: 1行目:
__NOTOC__
カーソル付近or選択範囲に半角数字列があれば 1 増やし/減らします。
カーソル付近or選択範囲に半角数字列があれば 1 増やし/減らします。


44行目: 45行目:
|<code><span style="border-left:2px solid; background:#bfdfff;">11.10e3</span></code>
|<code><span style="border-left:2px solid; background:#bfdfff;">11.10e3</span></code>
|}
|}
==更新履歴==
* 2014/06/19
** 非選択時、探索終了位置(bx)の算出方法を変更。
** 数値の増減処理を改修(繰り上げ・繰り下げの場合分けが不要に)。
* 2014/06/17
** 初版公開。


==数値を増やす (インクリメント)==
==数値を増やす (インクリメント)==
<source lang="javascript">
<source lang="javascript">
//■数値を増やす(インクリメント)
//■数値を増やす(インクリメント)
// 2014/06/17
// 2014/06/17-2014/06/19
//・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。
//・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。
57行目: 65行目:
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isSel = !sel.isEmpty; //範囲選択しているか?
var isSel = !sel.isEmpty; //範囲選択しているか?
if (!isSel) { //未選択時、文字を探索して範囲選択
if (!isSel) { //非選択時、文字を探索して範囲選択
   var meP = mePosLogical, meGL = 0;
   var meP = mePosLogical, meGL = 0;
   var px = sel.GetActivePointX(meP);
   var px = sel.GetActivePointX(meP);
63行目: 71行目:
   var ln = Document.GetLine(py,meGL);
   var ln = Document.GetLine(py,meGL);
   var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
   var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
   var bx = px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
   var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
   sel.SetActivePoint(meP,bx,py);
   sel.SetActivePoint(meP,bx,py);
   sel.SetAnchorPoint(meP,tx,py);
   sel.SetAnchorPoint(meP,tx,py);
70行目: 78行目:
var carry = 0; //文字数(桁)変動量
var carry = 0; //文字数(桁)変動量
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
   return (/9$/.test(s))?
   return s.replace(/([0-8]?)(9*)$/,function(s0,s1,s2){
  //◆繰り上がる場合
     if (!s1) carry++; //◆桁上がり
  s.replace(/([0-8]?)(9+)$/,function(s0,s1,s2){
     return (parseInt(s1||0)+1)+(new Array(s2.length+1)).join("0");
     if (!s1) carry++; //◆桁上がり
   });
     return (parseInt(s1||0)+1)+(new Array(s2.length+1)).join("0")}):
  //◆繰り上がらない場合
   s.replace(/[0-8]$/,function(s0){return parseInt(s0)+1});
});
});
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定
85行目: 90行目:
<source lang="javascript">
<source lang="javascript">
//■数値を減らす(デクリメント)
//■数値を減らす(デクリメント)
// 2014/06/17
// 2014/06/17-2014/06/19
//・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。
//・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。
94行目: 99行目:
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isSel = !sel.isEmpty; //範囲選択しているか?
var isSel = !sel.isEmpty; //範囲選択しているか?
if (!isSel) { //未選択時、文字を探索して範囲選択
if (!isSel) { //非選択時、文字を探索して範囲選択
   var meP = mePosLogical, meGL = 0;
   var meP = mePosLogical, meGL = 0;
   var px = sel.GetActivePointX(meP);
   var px = sel.GetActivePointX(meP);
100行目: 105行目:
   var ln = Document.GetLine(py,meGL);
   var ln = Document.GetLine(py,meGL);
   var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
   var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
   var bx = px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
   var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
   sel.SetActivePoint(meP,bx,py);
   sel.SetActivePoint(meP,bx,py);
   sel.SetAnchorPoint(meP,tx,py);
   sel.SetAnchorPoint(meP,tx,py);
107行目: 112行目:
var carry = 0; //文字数(桁)変動量
var carry = 0; //文字数(桁)変動量
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
   return (/0$/.test(s))?
   return s.replace(/([0-9]?)([1-9])(0*)$/,function(s0,s1,s2,s3){
  //◆繰り下がる場合
     if (!s1 && s2==1 && s3) {
  s.replace(/([0-9]?)([1-9])(0+)$/,function(s0,s1,s2,s3){
      carry--; s1=s2=""; //◆桁下がりする >100 → /1/00→ / /99→99
     if (!s1&&s2==1) {carry--; s1=s2="";} //◆桁下がりする >100 → /1/00→ / /99→99
     } else s2 = s2-1; //◆   しない >1100→1/1/00→1/0/99→1099
     else {s2 = s2-1;} //◆   しない >1100→1/1/00→1/0/99→1099
     return s1+s2+(new Array(s3.length+1)).join("9");
     return s1+s2+(new Array(s3.length+1)).join("9")}):
   });
   //◆繰り下がらない場合
  s.replace(/[1-9]$/,function(s0){return parseInt(s0)-1});
});
});
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定
122行目: 125行目:
==位取り対応==
==位取り対応==
<source lang="javascript">
<source lang="javascript">
   var bx = px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
   var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
 ↓
 ↓
   var bx = (px!=tx)? px: px + (ln.slice(px-1).match(/^[0-9]*/))[0].length;
   var bx = (px!=tx)? px: tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
</source>
</source>
* マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
* マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
スポンサーリンク