秀丸エディタ で「HTMLタグを隠す」No.08361
Lizu01 さん 16/09/30 13:46
 
秀丸メールにある「HTMLタグを隠す」機能を秀丸エディタで行う事は可能でしょうか。

一連の流れとしては下記のような事を考えています。

HTMLタグ付きの文字列  ※これが元データです。

HTMLタグを隠す

秀丸マクロで文字列加工

HTMLタグを戻す


秀丸マクロでHTMLタグ付いた場合の条件式を付ければ早いのかもしれないですが、な
にぶんマクロも複雑な作りになっているので上記の方法で対応したいと思います。

どうぞよろしくお願いいたします。


[ ]
RE:08361 秀丸エディタ で「HTMLタグを隠No.08364
秀まるお2 さん 16/09/30 15:46
 
 作戦として、タグを、例えば

    <a href="aaa">aaa
    <img src="bbb">bbb

 となってる内容を、

    <tag1>aaa
    <tag2>bbb

 のように置換した上で、tag1、tag2とかの内容を、別のファイルに、例えば

  tag1=<a href="aaa">
  tag2=<img src="bbb">

 みたいな感じで保存して分離するマクロを作成し、さらに、それを元に戻す
マクロも作るとかって作戦なら実現可能な気がしますけど。

 そういう作戦どうでしょうか。

 例えば

 index.html

 ってファイルから、タグを<tag1>とかに置換しつつ分離した、

 index.html.notag
 index.html.tag

 って2つのファイルを生成するマクロと、その2つのファイルからindex.html
ファイルを生成するマクロも作るとか・・・・。必要そうなら僕の方で作ってみ
てもいいです。

[ ]
RE:08364 秀丸エディタ で「HTMLタグを隠No.08368
Lizu01 さん 16/09/30 18:09
 
> 作戦として、タグを、例えば
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>てもいいです。

素晴らしい作戦だと思います。
タグを分離できるのであれば、是非お願いしたいです。


[ ]
RE:08368 秀丸エディタ で「HTMLタグを隠No.08389
秀まるお2 さん 16/10/03 18:51
 
マクロですが、「xxxx.html」ファイルを開いて実行すると、「xxxx.html.tag」って
ファイルにタグを追い出すようにしました。

追い出された状態で実行すると、元に戻します。

追い出すタグは、  <a href="...">とか、<img src="...">みたいに何らかのパラ
メータ(href=とかsrc=とか)が付いたやつだけにしました。

 そんな感じのマクロにしましたが、使ってみると、いまいちのような感じです。

 一回試してみて欲しいです。
--------------------------------------------------------------
HtmlTagOut.mac
--------------------------------------------------------------
// HtmlTagSplit.mac
// 2016.10.03 by 斉藤秀夫
//
// HTML形式ファイルの中のタグを分離するマクロ。
//
// XXXX.html <--> XXXX.html.notag + XXXX.html.tag
//
// <a href="....">  のようなタグを、   <tag1>  のようなのに分離する。
// <a href="...">xxxx</a>  は、        <tag1>xxxx</tag1> にする?
// <head>〜</head>
// <script>〜</script> は、それ全体を、  <tag1>とかに変換する。
//
//「.tag」ファイルでは、  tag1=<a href="...."> みたいにする。
//                        tag2=<script ..>〜</script>みたいにするけど、改行
はどうするか・・・
//

    setcompatiblemode 0x20000;  //検索条件をマクロ終了後に自動で戻す。
    setcompatiblemode 0x200;        //検索でヒットした文字列を範囲選択する。

    if( basename == "" ) {
        message "ファイル名がありません。ファイル名無しだとマクロ実行できま
せん。";
        endmacro;
    }
    $tagfile = basename + ".tag";
    #x = x; #y = y;
    gofiletop;
    searchdown2 "<(?!tag[0-9]+)[a-z]+\\s[^>]+?>", regular, nocasesense;
    if( result != 0 ) {
        //タグを追い出す
        goto Label_TagOut;
    } else {
        searchdown2 "<tag[0-9]+>", regular, casesense;
        if( result == 0 ) {
            //
            message "このファイルは変換の必要はありません。";
            endmacro;
        }
        $mode = "in";
        if( !existfile($tagfile) ) {
            message $tagfile + "ファイルが存在しないので、タグの復元が出来ま
せん。";
            endmacro;
        }
        goto Label_TagIn;
    }
   
    endmacro;


//htmlタグを.tagファイルに追い出す。
Label_TagOut:
    question "現在のHTMLファイルにある長いタグを、" + $tagfile + "に追い出し
ます。";
    if( result != yes ) {
        endmacro;
    }
    if( updated ) {
        question "このファイルは更新されてます。保存してから続行しますか?";
        if( result == yes ) {
            save;
        } else {
            message "マクロを中断します。";
            endmacro;
        }
    }
    #htmlfile = hidemaruhandle(0);
    newfile;
    changename $tagfile;
    #tagfile = hidemaruhandle(0);
    setactivehidemaru #htmlfile;
    #tagnumber = 1;                     // "tag1"からスタート。
    gofiletop;
    while(1) {
        searchdown2 "<(?!tag[0-9]+)[a-z]+\\s[^>]+?>", regular, nocasesense;
        if( result == 0 ) {
            break;
        }
        $s = gettext( seltopx, seltopy, selendx, selendy, 1 );
        delete;
        setactivehidemaru #tagfile;
        gofileend;
        insertfix "tag" + str(#tagnumber) + "=" + $s;
        beginsel;
        gofileend;
        replaceallfast "\\n", "\\x01", regular, casesense, inselect;
        gofileend;
        insert "\n";
        setactivehidemaru #htmlfile;
        insert "<tag" + str(#tagnumber) + ">";
        #tagnumber = #tagnumber + 1;
    }
    gofiletop;
    if( #tagnumber == 1 ) {
        closehidemaruforced #tagfile;
        deletefile $tagfile;
        message "タグが1つも見つかりませんでした。";
    } else {
        setactivehidemaru #tagfile;
        save;
        setactivehidemaru #htmlfile;
        save;
        closehidemaruforced #tagfile;
        message str(#tagnumber - 1) + "個のタグを追い出しました。";
    }

    endmacro;
    endmacro;
    endmacro;
    endmacro;
    endmacro;



//tagファイルからタグを読み込む。成功したら.tagファイルは削除する。
Label_TagIn:
    question $tagfile + "に追い出したタグを元に戻します。";
    if( result != yes ) {
        endmacro;
    }
    #htmlfile = hidemaruhandle(0);
    openfile $tagfile;
    if( result == 0 ) {
        message $tagfile + " のオープンに失敗しました。マクロを中断します。";
        endmacro;
    }
    #tagfile = hidemaruhandle(0);
    setactivehidemaru #htmlfile;
    gofiletop;
    #convcount = 0;
    while(1) {
        searchdown2 "<tag[0-9]+>", regular, nocasesense;
        if( result == 0 ) {
            break;
        }
        $num = gettext( seltopx + 4, seltopy, selendx - 1, selendy, 1 );
        #num = val($num);
        if( #num < 1 ) {
            //おかしい
            message "タグの番号がおかしいです。マクロを中断します。";
            endmacro;
        }
        setactivehidemaru #tagfile;
        gofiletop;
        searchdown2 "(?<=^tag" + $num + "=).+$", regular, casesense;
        if( !result ) {
            message "(?<=^tag" + $num + "=).+$";
            message ".tagファイルから目的のタグが見つかりません。見つからな
いタグはスキップします。";
            setactivehidemaru #htmlfile;
            moveto selendx, selendy;
        } else {
            $s = gettext( seltopx, seltopy, selendx, selendy, 1 );
            setactivehidemaru #htmlfile;
            delete;
            insert $s;
            #convcount = #convcount + 1;
        }
    }
    setactivehidemaru #htmlfile;
    if( #convcount == 0 ) {
        message "変換したタグは1つもありませんでした。";
        endmacro;
    }
    replaceallfast "\\x01", "\\n", regular, casesense, inselect;
    save;
    setactivehidemaru #htmlfile;
    closehidemaruforced #tagfile;
    deletefile $tagfile;
    endmacro;
    endmacro;
    endmacro;
    endmacro;


[ ]
RE:08389 秀丸エディタ で「HTMLタグを隠No.08392
山紫水明 さん 16/10/04 19:59
 
 秀まるおさん,

 依頼者ではありませんが,おもしろそうなので使ってみました。
 タグが全部追い出されるわけではないので,このファイルを別のマクロを使っ
て加工しようとすると,問題が出てくるようです。
 たとえば,加工するマクロの中にreplaceallfast "a", "あ";
などの置換や連番を変える処理があったりすると,残っているタグも巻き添えを
くらって一緒に変わってしまっう不都合が生じるのではないでしょうか。
 やはりタグは全部いったん消去する必要があるようです。
 テキストファイルの中には通常は現れない文字にいったん変えて,後でその場
所に復帰する方法をとりあえず考えてみました。
 エラー処理や例外処理はまだしていません。
//--------------------------------------------------------//
menu "&1 タグの除去", "&2 タグの復帰";
if( result == 2 ) goto Recover;
#roothandle = hidemaruhandle(0);
setcompatiblemode 0x000000200;
$file = basename2;
disabledraw;
gofiletop;
#i = 1;
while( 1 ) {
    searchdown2 "<[^>]+>", regular;
    if( !result ) break;
    $tag[#i] = gettext( foundtopx, foundtopy, foundendx, foundendy, 1 );
    insert "\x0b";
    #i = #i + 1;
}
#tagnum = #i - 1;
newfile;
#i = 1;
while( #i <= #tagnum ) {
    insert $tag[#i] + "\n";
    #i = #i + 1;
}
saveas "Tags_" + $file;
#subhandle = hidemaruhandle(0);
setactivehidemaru #roothandle;
saveas "NoTag_" + $file;
message str(#tagnum) + " 個除去しました。";
endmacro;

Recover:
$notagfile = basename2;
#main = hidemaruhandle(0);
$rootfile = midstr($notagfile, 6, 999);
$tagsfile = "Tags_" + $rootfile;
openfile $tagsfile;
#taghandle = hidemaruhandle(0);
setcompatiblemode 0x000000200;
#count = linecount2;
disabledraw;
gofiletop;
#i = 1;
while( #i <= #count ) {
    $tag[#i] = gettext2( 0, lineno, linelen2, lineno );
    movetolineno 1, lineno + 1;
    #i = #i + 1;
}
setactivehidemaru #main;
disabledraw;
gofiletop;
#i = 1;
while( 1 ) {
    searchdown2 "\x0b";
    if( !result ) break;
    insert $tag[#i];
    #i = #i + 1;
}
saveas $rootfile;
closehidemaru #taghandle;
deletefile $tagsfile;
deletefile $file;
endmacro;
//--------------------------------------------------------//

                    山紫水明

[ ]
RE:08389 秀丸エディタ で「HTMLタグを隠No.08394
Lizu01 さん 16/10/05 18:10
 
>マクロですが、「xxxx.html」ファイルを開いて実行すると、「xxxx.html.tag」っ
>てファイルにタグを追い出すようにしました。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>

素晴らしい。このような事が可能なのですね。
動作確認致しました。

ただ山紫水明さんのおっしゃる通り、<tag + num >が変換される可能性も捨てきれな
いと感じました。
ごめんなさい 最初に伝えていればよかったですね><

こちら「tag」の箇所を別文字に変換し、活用させて頂きたいと思います。
ありがとうございました。

[ ]
RE:08392 秀丸エディタ で「HTMLタグを隠No.08395
Lizu01 さん 16/10/05 18:20
 
> 秀まるおさん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                    山紫水明

山紫水明さん

ありがとうございます。
動作確認致しました。

理想通りのものを作って頂きありがとうございます。
とても助かりました。

[ ]
RE:08395 秀丸エディタ で「HTMLタグを隠No.08396
山紫水明 さん 16/10/05 20:57
 
 Lizu01さん,

 若干の補充をしておきました。
//------- HideHtmlTag.mac --------------------------------//
$mark = "\x0b";//退避用のマーク設定
setcompatiblemode 0x000000200;
if( leftstr( basename2, 6 ) == "NoTag_") goto Recover;
if( filetype !=".html" && filetype !=".htm" ) {
    question "htmlファイルではありませんが,このまま続けますか?";
    if( result == no )endmacro;
}
#roothandle = hidemaruhandle(0);
$file = basename2;
disabledraw;
searchdown2 $mark, loop;
if( result ) {
    message "このフィルには退避用の記号が元々含まれているので,実行できませ
ん。";
    endmacro;
}
gofiletop;
#i = 1;
while( 1 ) {
    searchdown2 "<[^>]+>", regular;
    if( !result ) break;
    $tag[#i] = gettext( foundtopx, foundtopy, foundendx, foundendy, 1 );
    insert $mark;
    #i = #i + 1;
}
#tagnum = #i - 1;
openfile "/h";
#i = 1;
while( #i <= #tagnum ) {
    insert $tag[#i] + "\n";
    #i = #i + 1;
}
saveas "Tags_" + $file;
#subhandle = hidemaruhandle(0);
setactivehidemaru #roothandle;
closehidemaru #subhandle;
saveas "NoTag_" + $file;
gofiletop;
message str(#tagnum) + " 個のタグを除去しました。";
endmacro;

Recover:    //タグの復帰
$notagfile = basename2;
#main = hidemaruhandle(0);
$rootfile = midstr($notagfile, 6, 999);
$tagsfile = "Tags_" + $rootfile;
if( !existfile($tagsfile) ) {
    message "同じフォルダに " + $tagsfile + " がありません。";
    endmacro;
}
openfile "/h " + $tagsfile;
#taghandle = hidemaruhandle(0);
#count = linecount2;
disabledraw;
gofiletop;
#i = 1;
while( #i <= #count ) {
    $tag[#i] = gettext2( 0, lineno, linelen2, lineno );
    movetolineno 1, lineno + 1;
    #i = #i + 1;
}
setactivehidemaru #main;
disabledraw;
gofiletop;
#i = 1;
while( 1 ) {
    searchdown2 $mark;
    if( !result ) break;
    insert $tag[#i];
    #i = #i + 1;
}
saveas $rootfile;
closehidemaru #taghandle;
deletefile $tagsfile;
deletefile $file;
enabledraw;
message "タグを復帰しました。";
endmacro;
//--------------------------------------------------------//

                    山紫水明

[ ]
RE:08396 秀丸エディタ で「HTMLタグを隠No.08397
Lizu01 さん 16/10/07 13:44
 
> Lizu01さん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                    山紫水明

山紫水明さん

退避用記号の条件分岐ありがとうございます。
大変助かりました。

[ ]
RE:08397 秀丸エディタ で「HTMLタグを隠No.08398
山紫水明 さん 16/10/07 20:41
 
 Lizu01さん,

 微修正したものを
http://12sun.on.coocan.jp/sansui.html
に置いておきました。ご使用になってお気づきの点などありましたら,お知らせ
ください。

                   山紫水明

[ ]