sakai-memoru
11/15/2019 - 3:53 AM

lock Sakura Macro::insert_memoLineWithTemplate.jse

insert_memoLineWithTemplate.jse

  • 最終行に、簡易テンプレートで作成したlineを挿入する。

  • 簡易テンプレート機能は、以下のような仕様。

    • herestrings関数のコメント「/*」と「*/」の間にテンプレートを記述。改行コードは、CRLFを想定。
    • 置換したい文字列(key)とその値(value)を、jsonオブジェクトとして渡す。
    • 簡易テンプレートでは、keyを、「{{」と「}}」で囲む。
  • 下記のScriptは、下のような文字列を挿入する。

## memo : 19/11/15 (Fri) 13:00 :

- 


(function(){

///////////////////////////////////////
// here-string CRLF
//  ↓↓↓↓↓↓↓↓↓
var herestrings = function(){
/*

## memo : {{date_str}} ({{day_str}}) {{time_str}} :

- {{clip_text}}

*/
}
function replace_all(string, target, replacement) {
  var result = "";
  var offset = 0;
  var target_length = target.length;
  if (target_length === 0) {
    for (var i = 0, c = string.length; i < c; i++) {
      result += string[i];
      result += replacement;
    }
    if (result.length)
      return result.substr(0, result.length - replacement.length);
    return result;
  }
  do {
    var i = string.indexOf(target, offset);
    if (i === -1) {
      result += string.substring(offset);
      return result;
    }
    result += string.substring(offset, i);
    result += replacement;
    offset = i + target_length;
  } while (true);
}

function get_template(sep){
  sep = sep || '\r\n';
  var template = herestrings.toString().split(sep).slice(2,-2).join(sep);
  return template;
}

function merge_map(template, map_){
  for(key_ in map_){
    if(map_.hasOwnProperty(key_)){
      var value_ = map_[key_];
      template = replace_all(template, '{{' + key_ + '}}', value_);
    }
  };
  return template;
}

function get_todayString(sep){
  if(typeof(sep) === 'undefined') sep='/';
  var dtm = new Date();
  return [
    ('' + dtm.getFullYear()).slice(-2),
    ('0' + (dtm.getMonth() +1)).slice(-2),
    ('0' + dtm.getDate()).slice(-2)
  ].join(sep);
}

function get_nowTimeString(sep){
  if(typeof(sep) === 'undefined') sep=':';
  var dtm = new Date();
  return [
    ('0' + dtm.getHours()).slice(-2),
    ('0' + dtm.getMinutes()).slice(-2)
  ].join(sep);
}

function get_todayDayString(){
  if(typeof(num) === 'undefined') num=3;
  var aryDay = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
  var dtm = new Date();
  var dw = dtm.getDay();
  var ret = aryDay[dw];
  if(num !== 0){
    ret = ret.substr(0, num);
  }
  return ret;
}

function doProcess(){
  // merge template
  var template = get_template();
  
  var map_ = {
    'date_str' : get_todayString('/'),
    'day_str' : get_todayDayString(),
    'time_str' : get_nowTimeString(':'),
    //clip_text : Editor.GetClipboard(0),
    'clip_text' : ''
  };
  var merged_template = merge_map(template,map_);
  
  // screen operation
  Editor.GoFileEnd(0);
  Editor.InsText(merged_template);
  Editor.Left(0);
}

// -------------- entry point
if(typeof(Editor) !== 'undefined'){
  doProcess();
} else {
  if(typeof(WScript) !== 'undefined'){
    WScript.Echo('This script is for sakura macro.');
  } else {
    console.log('This script is for sakura macro.');
  }
}

}())