rpgmaker-linux/nwjs/packagefiles/tyranobuilder/tyranoeng/tyrano/doc.js

320 lines
12 KiB
JavaScript
Raw Normal View History

2024-07-01 20:46:51 +03:00
function object(o) {
var f = object.f, i, len, n, prop;
f.prototype = o;
n = new f;
for (i=1, len=arguments.length; i<len; ++i)
for (prop in arguments[i])
n[prop] = arguments[i][prop];
return n;
}
object.f = function(){};
var tyrano ={};
tyrano.plugin ={};
tyrano.plugin.kag ={};
(function($){
$.generateHtml = function() {
var html="";
var master_tag ={};
var map_doc = {};
// タグの種類を確定させる
for(var order_type in tyrano.plugin.kag.tag){
master_tag[order_type] = object(tyrano.plugin.kag.tag[order_type]);
}
console.log(master_tag);
//テキストを読み込み。スクリプトから、オブジェクト構造解析
//同じディレクトリにある、KAG関連のデータを読み込み
var array_script = ["kag.tag.js","kag.tag_audio.js","kag.tag_ext.js","kag.tag_system.js","kag.tag_camera.js"];
var script_num = array_script.length;
var loading_num = 0;
for(var i=0;i<array_script.length;i++){
$.loadText("./tyrano/plugins/kag/"+array_script[i],function(text_str){
var flag_tag = ""; //タグ解析中の場合
var flag_param =""; //パラメータ名
var tmp_str ="";
var array_str = text_str.split("\n");
for(var i=0; i< array_str.length;i++){
var line_str = $.trim(array_str[i]);
//タグ解析中は改行もつかう
if (line_str !="" || flag_tag !=""){
if(line_str ==="#[end]"){
//終了時点で登録すべきデータが残っていた場合は入れておく
map_doc[flag_tag][flag_param] = tmp_str;
flag_tag ="";
flag_param ="";
}
else if(flag_tag!=""){
if(line_str.substr(0,1)==":"){
if(tmp_str!=""){
if(flag_param!=""){
map_doc[flag_tag][flag_param] = tmp_str;
}
}
flag_param ="";
flag_param = line_str.substr(1,line_str.length);
//すでに登録済みのデータがあれば、それを格納する
map_doc[flag_tag][flag_param] = "";
tmp_str ="";
}else {
if(flag_param != "param" && flag_param != "title"){
tmp_str +=line_str+"\n";
}else{
tmp_str +=line_str;
}
}
//タグ読み込み開始
}else if(line_str.substr(0,2)==="#["){
var tag_name = line_str.replace("#[","");
tag_name = tag_name.replace("]","");
tag_name = $.trim(tag_name);
flag_tag = tag_name;
flag_param ="";
map_doc[flag_tag] = {};
}
}
}
console.log(map_doc);
//macdoc を 解析して、HTMLを作成
loading_num++;
if(loading_num == script_num){
$.putHtml(map_doc,master_tag);
}
});// ローディング
}
return html;
};
$.putHtml = function (map_doc,master_tag){
//タグのグルーピングで左部分作成
var group_map = {};
var ghtml = "";
for(key in map_doc){
var obj = map_doc[key];
if(group_map[obj.group]){
}else{
group_map[obj.group] ={};
}
group_map[obj.group][key] = obj;
}
var num_index = 0;
//グループをつくる
for(key in group_map){
ghtml+='<li class="list-group-item list-toggle">';
ghtml +='<a data-toggle="collapse" data-parent="#sidebar-nav-1" href="#nav_'+num_index+'" class="collapsed" aria-expanded="false">'+key+'</a>';
var tmp = group_map[key];
ghtml += '<ul id="nav_'+num_index+'" class="collapse" aria-expanded="false" style="height: 0px;">';
for (key2 in tmp){
var obj = tmp[key2];
//ghtml +='<div style="padding:2px"><a href="#'+key2+'">['+key2+'] <span style="font-style:italic;color:gray">('+obj.title+')</span></a></div>';
ghtml +='<li><a href="#'+key2+'"> ['+key2+'] '+obj.title+'</a></li>';
}
ghtml +="</ul>";
ghtml +="</li>";
num_index++;
}
$(".area_group").html(ghtml);
var j_root = $("<div></div>");
for(key in map_doc){
var obj = map_doc[key];
console.log(obj.exp.split("\n"));
var html =''
+'<div class="news-v3 bg-color-white margin-bottom-20">'
+'<div class="news-v3-in"><a name="'+key+'"></a>'
+'<h3 style="color:#a10f2b">['+key+'] '+obj.title+'</h3>'
+'<ul class="list-inline posted-info"><li>'+obj.group+'</li></ul>'
+'<p>'+$.br($.escapeHTML(obj.exp))+'</p>'
+'<table class="table table-bordered">'
+'<thead style="background-color:pink"><tr><th>パラメータ</th><th>必須</th><th>解説</th></tr></thead>'
+'<tbody>';
//繰り返し
var param_str = obj.param;
var array_param = obj.param.split(",");
console.log("==== array_param =====");
console.log(array_param);
for(var k=0;k<array_param.length;k++){
if(array_param[k]==""){
html+='<tr ><td colspan="3">指定できるパラメータはありません</td></tr>';
}else{
var tmp_array = array_param[k].split("=");
var param_name = $.trim(tmp_array[0]);
var param_value =$.trim(tmp_array[1]);
var vital = "×";
if(master_tag[key]!=null && master_tag[key]["vital"]!=null){
var array_vital = master_tag[key]["vital"];
for(var j=0;j<array_vital.length;j++){
if(master_tag[key].vital[j]==param_name){
vital ="◯";
break;
}
}
}
html+=' <tr>'
+' <td>'+param_name+'</td>'
+' <td>'+vital+'</td>'
+' <td>'+param_value+'</td>'
+' </tr>';
}
}//end for loop
html +='</tbody></table>';
if(obj.sample!=""){
html+=''
+'<ul class="list-inline posted-info"><li>サンプルコード</li></ul>'
+'<code><br />'
+$.br($.escapeHTML(obj.sample))
+'<br /></code>'
+'';
}
html +="</div></div>";
html +='<div class="clearfix "><hr style="margin:0"></div>';
//htmlをぶち込みます
j_root.append($(html));
}// end map_doc loop
$(".area_ref").empty();
//基本説明部分n
var basic_exp = ''
+' <div class="alert alert-success fade in margin-bottom-20">'
+'<h4>基本</h4>'
+'<p>'
+' [ ] で囲まれた部分がタグになります。 <br/ >'
+' @で始まる行も、タグとして認識しますが、1行で記述しなければなりません<br/ >'
+' ;(セミコロン)で始まる行はコメントとして扱われます。<br/ >'
+' 複数行にわたってコメントにする場合は、/* からはじめて */ で 閉じることでコメントになります。 <br/ >'
+' すべてのタグにcond属性があります。JS式を記述して、その結果が真の場合のみタグが実行されます<br/ >'
+' _(半角アンダーバー)で始まる行は、文章の前に空白を挿入することができます。<br />'
+' '
+' </p> '
+''
+'</div>';
$(".area_ref").append(basic_exp);
$(".area_ref").append(j_root);
$("#src_html").val($(".area_main").html());
var js_auto_complete = "";
for(key in master_tag ){
js_auto_complete += '"'+key+'",\n';
}
console.log(master_tag);
$("#auto_complete_tag").val(js_auto_complete);
};
})(jQuery);