MSX BASIC Viewerからのコピー時に改行が消える問題の修正

MSX BASIC Viewer

https://minagi.jp/apps/mbv/

以前はWIndows用にリリースされていた「MSX VIewer」のBASICプログラム表示だけを取り出してアップデートしたもので、Viewerから直接プログラムテキストをコピーし、MSX固有文字が文字化けすることなく他のテキストエディタに貼り付けることができます。

このMSX固有文字変換機能は以前のバージョンであるMSX Viewerにはありませんでした。(そちらはそちらで使い道があります)

 

作者様のページはこちら。

www.minagi.jp

 

MSX固有文字の処理ですが、ANKモード前提となっており、半角ひらがなやGRAPH記号が全角に変換されます。
この変換方法はMSXPenと同じなので、コピーしたテキストをMSXPen のBasicタブに書き込んでRUNすると、BASICファイルとしてちゃんと保存されます。 

msxpen.com

 

問題点!!!

ところが、ここで重大な問題がありまして。

MSX固有文字を全角に変換してくれて文字化け回避できるのは良いのだけど、表示されたテキストをテキストファイルにコピー&ペーストすると

改行が消えてしまうのです。

Viewerのテキストをコピーして貼り付けるとこんなんになってしまいます。

勿体ないですよね。

なんとかならないかな?と思ったのですが、有り難い事にソースファイルを公開されているので何とかなりました。

 

結論を先に言うと、これはHTMLテキストをコピーすると改行が消えるという問題でした。

あくまでもViewerだから対策をされていないのかもしれませんが、とりあえず検証がてらに対策をしてみました。

 

対策版を作ろう!

① まず、ソースファイルを全部ダウンロードします。

www.minagi.jp

手作業でフォルダを再現しながらダウンロードするのも良いですが、wgetなどのツールを使って丸ごとダウンロードするのが楽かと思います。

 

wgetの例

wget for winを使う場合は、wget for windows 1.21.3を使用します。

GNU Wget 1.21.3 for Windows

※注意) 検索ですぐ出てくるのは1.11.4などが多いですが、そちらは今となってはかなり古いもので、最近のhttpsサイトではアクセスに失敗します。(MSX BASIC Viewerのダウンロードも失敗します。)

wgetを展開したら、そのフォルダに

wget -r -c -np --level=6 -nc https://minagi.jp/apps/src/MSXBASICViewer/

という内容のテキストファイルを download_msx_basic_viewer.bat 等のファイル名で保存して実行するか、コマンドラインでそのパスに移動して実行すれば丸ごと保存してくれます。

 

そうしてダウンロードして出来た
www.minagi.jp\apps\src\MSXBASICViewer\1.0.0
の中身がMSX BASIC Viewerの本体になります。

ここにある index.htmlをブラウザで開けば動作します。

これで準備はできましたので、次は問題を修正します。

 

修正しよう!

www.minagi.jp\apps\src\MSXBASICViewer\1.0.0

にある、index.js テキストエディタで開きます。

そしてテキストの最後に


// --- uniskie 追加分 (外部へコピーする際に改行が消えないようにする)
// コピーをした時に実行されるイベントハンドラをリスナに登録
document.addEventListener('copy', function(event) {
    try{
        if(event.target.id==getBASIC().id){
            event.preventDefault();
            if(ons.platform.isIE()){
                window.clipboardData.setData('text/plain',getBASIC().innerText);
            }else{
                event.clipboardData.setData('text/plain',getBASIC().innerText);
            }
        }
    }catch(e){
        if(debug) console.log('document.show:'+e.message);
    }
});


という内容を追加して保存します。

HTMLテキストオブジェクトはクリップボードへtext形式で値を渡すと改行が消えてしまうの仕様のようで、その場合はcopyイベントハンドラを用意し、innerText経由でクリップボードに渡せば解決するそうです。

 

※注:ただし、あくまで検証ついでの対策なので、ChromeFirefoxでしか検証していません。本来であればスマホにも対応したwebアプリなので他では動かない可能性があります。

 

あとはindex.htmlを開いて適当なBASICプログラムをMSX BASIC Viewerで表示したら、それをコピーしてテキストエディタに張り付けて見ましょう。

ばっちり改行が入っていると思います。

 

後は、Windowsなどのテキストエディタで編集して、MSXPen経由でBASファイルに戻すという形です。

これでBASICもMSX←→PCのクロス開発が楽になりますね。

 

文字の変換については原則的に全角ひらがなや全角記号が半角に変換されます。
MSXPenの説明やMSX BASIC Viewer紹介ページをご参照ください。

 

ただ、BASICプログラム中で全角文字を扱いたい場合はこの方法だとうまくいかない可能性があります。

全角文字を使うのであれば、そのままSHIFT-JISテキストとして扱い、変換せずにMSXとPCで同じファイルでOKです。
(※その際、MSX半角GRAPH記号文字は諦める必要はあります)