FC2ブログ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- / Top↑
KompoZerで作成したhtmlを修正する自作プログラムです。
以前「20140506KompoZer(HTMLエディタ)のインストール」で導入したKompoZerでした。私はhtml作成をKompoZerで行っていますが、私はもうHTMLエディタは他のツールを探さなくてもいいかと思える位になっています。作成するhtmlも全く凝った作りではないので今は全てKompoZerだけで済んでいます。

只、KompoZerを使い始めてから1つだけ気になっていた点がありました。それは以前からよそ様のサイトを拝見しながらも、何だろう?と思っていた事でした。特に目に付いたその現象は「半角スペースが何故か文章の中にランダムに挿入されている」現象でした。それは以前から気にはなっていたのですが、KompoZerを使いだしてからその原因がはっきりしました。

KompoZerでhtmlを作成すると小さくない確率で「半角スペースが何故か文章の中に挿入されてしまう」のでした。それはKompoZerのエディタ画面で編集している時には全く見えず気がつきません。そして、それは実際にブラウザで表示させた時に判明します。私もそうなのですが…、たぶん皆様もそうなのだと思いますが「半角スペースの挿入」は致命的ではなく、見る側が流してしまえば済んでしまうような程度です。

その「気になる現象」を解決すべく、KompoZerで排出するhtmlを修正するプログラム(KAssist.jar)を作成してみました。

(お断り)
■当プログラム KAssist.jar を使用するにはJRE以上の環境が必要です。
(Javaランタイムがインストール済みであること)
■当サイトでは非常に情けないことに…Web系表示文字等がまともに表示できないため、以下の文字列については全て全角文字で記載しています。これらは実際には半角文字で定義されていますので、記事閲覧に際しては読み換えて見て下さい

<>
 


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
1.現象
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
こんな↓感じ(赤丸印の所)
KAssist0001.jpg
出現しない時は出ないのですが、このように出るときには頻発します。たぶん、これは推測なのですが、この現象はKompoZerだけでなく、系列ソフトであるNvuやBlueGriffonなんかでもそうなのではないのかなと思っています。(但し、これは推測であり未確認です)今、思い起こしてみれば今まで見てきた世の中のサイトでも同様な現象をしばしば拝見してきたような気がします。

ほんと、先々はそうありたいものだと思いますが、KompoZerはソース提供されているのでc++を勉強するにはいい機会かもね…、と、いづれはKompoZerのソースでも見てみたいものだと思ってはみたものの…私はC++は現在ど素人ですので当面は扱えません。また、現象の明確化も出来ていないので、すぐには手が出せませんでした…。

まぁ、時折出現する半角ブランクなので気にするなと思えば、それで済んでしまいますが、気になり出すと気になるもので何とかしたいものだと思いました。そこで取り敢えず自分のモノだけでも直そうかと思い始めて修正プログラム(名前は KAssist としました)をJavaで作成してみました。今はとりあえず初期バージョンで基本機能しかありませんが、自作のhtmlには「ブランク挿入」は無くなりました。

■1ー1.現象1

現象の1つは「半角スペースが何故か文章の中に挿入されてしまう」もので、以下のようなhtmlが作成されています。

【本来表示したいhtml例(抜粋)】
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
読み込んだデータレコード(1行データ)は1つ1つの項目に細分化して見ていきます。中には半バイトで数字1桁(1バイトですうじ2桁)なんて特別な形式もありますが、普通であれば数字1文字1バイトな表し方最多です。文字列データの場合で何らかの処理を行うには文字列データを弄くりまわします。ここでは以前の記事と多少のダブりもありますが文字列の取り回し方を少々…。
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

上のような文章をKompoZerでhtmlにすると、下のようなhtmlになってしまうことがあります。

【現象出現時のhtml例(抜粋)】
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<br>
<br>
<br>読み込んだデータレコード(1行データ)は1つ1つの項目に細分化して見ていきます。中には半バイトで数字1桁(1バイトで数字2桁)なんて特
別な形式もありますが、普通であれば数字1文字1バイトな表し方最多です。文字列データの場合で何らかの処理を行うには文字列データを弄くりまわします。
ここでは以前の記事と多少のダブりもありますが文字列の取り回し方を少々…。
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

現象出現時のhtml例では以下のように文章が勝手に改行されています。
・「〜数字2桁)なんて特」で一旦改行されてから次行に「別な形式もありますが、〜」と続きます。
・「〜弄くりまわします。」で一旦改行されてから次行に「ここでは以前の記事と〜」と続きます。

■1ー2.現象2

「半角スペースが何故か文章の中に挿入されてしまう」2つ目は、正確に言えば勝手に入るのではなく、「半角スペースが文章の中にある」ものや挿入されるものがあるのです。これは元々htlmの中に含まれていた半角スペースがそのまま残っている場合もあるのですが、勝手に挿入されてしまうのも有るようです。

【本来表示したいhtml例(抜粋)】
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
最後に今回のインストール結果です。
Package Arch Version Repository Size
clamav i386 0.95.2-4.el5.rf dag 2.7M
clamav-db i386 0.95.2-4.el5.rf dag 21 M
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
(注)このブログサイトでは情けないことに半角ブランクがうまく表示されず詰まって見えます。

上のような文章をhtmlにすると、KompoZerでは下のようなhtmlになります。

【現象出現時のhtml例(抜粋)】
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<br>
最後に今回のインストール結果です。<br>
Package   Arch Version         Repository Size
<br>
clamav    i386 0.95.2-4.el5.rf dag        2.7M
<br>
clamav-db i386 0.95.2-4.el5.rf dag        21 M
<br>
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

html中の「 」はKompoZerが入れる半角スペースです。この例のhtmlはブラウザで表示すると上記の「本来表示したい形」そのままでそれでよいのですが、ブランク「 」が改行のみの行など他の場所にも入ったりします。

本来htmlの中の半角スペースは場所によってはブラウザ表示の際には無視されるべきものでもあるのですが、このように一方でKompoZerが文字リテラルとして半角スペースを定義してしまう部分もあります。このブランク「 」は本当に必要な部分もあれば、全く必要もない部分があるので厄介な扱いになります。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
2.対策
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■
■2ー1.原因?
■■■■■■■■■■■■■■■■■■■
はっきり言って原因なんてソースプログラムを一所懸命追いかけてみなければ判りません。たぶん、誰かが見てすぐに判るような代物ならこんな現象は残っていないでしょうから、少しだけ見て解決するようなシロモノではないのでしょう。

実際htmlを見ながら追いかけてみても、現象が発生するパターンが解かりません。何となく何十文字か全角文字が連続して続いた後に発生するのか?と思えるのですが、正確な特定には至っていません。

■■■■■■■■■■■■■■■■■■■
■2ー2.対策
■■■■■■■■■■■■■■■■■■■
このプログラムでは前記2つの現象に対しての対応は以下のように対応します。特に現象2についてはケースバイケースです。

「2ー2.現象1」については無条件に対応。

「2ー3.現象2」についてはhtml毎に対応するのか対応しないのか見極める。対応する場合は「 」を半角スペースに置き換える。

■■■■■■■■■■■■■■■■■■■
■2ー3.KAssistプログラムでの対応
■■■■■■■■■■■■■■■■■■■

以下のようにKAssistプログラムで修正出来るようにしました。また、他にも様々なパラメタも扱えるようにしています。

基本的にはhtmlを全行読み込み、全ての改行(\r,\n,\r\n)を取り除きパラメタを1行にまとめます。そして指定があれば「 」を半角スペースに置き換えます。それから<html>,<head>,<title>,<body,<br>,</body>,</html>などのパラメタ毎に改行を加えて形を整えます。また、他のパラメタの指定があればそれ等も改行を加えます。

【注記】
UNIX系での改行コードは<LF>だそうです。Macintoshでは<CR>、Windowsでは<CR><LF>のようです。只、CentOSでデータを扱ってみると時折<CR>で処理されていたりでマチマチかもしてません。「\r\n」のような表現をエスケープシークエンス(EscapeSequence)といいます。(※ここではバックスラッシュを表示の都合から全角文字で扱っています)

改行エスケープシークエンス
<CR> \r:carriage return
<LF> \n:linefeed


<<<「2ー2.現象1」対応>>>>>>

【修正前のhtml例(抜粋)】
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<br>
でもコマンドの意味も調べながらの作業でしたので、ほんと出来た時はうれしかった...(私はまだこんなレベルです) ところで、どうもまだJavaの動
作が不安定なのです。ハードなのかソフトなのか判りませんがJava使用画面が突然固まったり、Firefox自体が消えてしまうことがまれにあります。
今後は安定して動かせるように直していきたいものです。
<br>
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

このような↑htmlを改行を取り除いて下↓の様に1行にします。

【修正後のhtml例(抜粋)】
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<br>
<br>でもコマンドの意味も調べながらの作業でしたので、ほんと出来た時はうれしかった...(私はまだこんなレベルです) ところで、どうもまだJavaの動作が不安定なのです。ハードなのかソフトなのか判りませんがJava使用画面が突然固まったり、Firefox自体が消えてしまうことがまれにあります。今後は安定して動かせるように直していきたいものです。
<br>
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


<<<「2ー3.現象2」対応>>>>>>

【修正前のhtml例(抜粋)】
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<br>
最後に今回のインストール結果です。
<br>
Package   Arch Version         Repository Size
<br>
clamav    i386 0.95.2-4.el5.rf dag        2.7M
<br>
clamav-db i386 0.95.2-4.el5.rf dag        21 M
<br>
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

【修正後のhtml例(抜粋)】パラメタで修正設定しない場合

この場合、要は何にもしないということなので…、殆どそのままです。
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<br>最後に今回のインストール結果です。
<br>Package   Arch Version         Repository Size
<br>clamav    i386 0.95.2-4.el5.rf dag        2.7M
<br>clamav-db i386 0.95.2-4.el5.rf dag        21 M
<br>
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

【修正後のhtml例(抜粋)】パラメタで修正設定した場合

これは適切な例ではありませんが、単純に「 」を半角スペースに置き換えています。
↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<br>
<br>最後に今回のインストール結果です。
<br>Package Arch Version Repository Size
<br>clamav i386 0.95.2-4.el5.rf dag 2.7M
<br>clamav-db i386 0.95.2-4.el5.rf dag 21 M
<br>
↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
(注)このブログサイトでは情けないことに半角ブランクがうまく表示されず詰まって見えます。
    実際には項目毎に整列されています。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
3.使い方
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
KAssist.jar(KompoZerで排出するhtmlを修正補完するプログラム) は、Java(実行Jar)プログラムです。

■■■■■■■■■■■■■■■■■■■
使うには
■■■■■■■■■■■■■■■■■■■
以下からダウンロードできます。また、説明書もありますので事前に確認して下さい。

「Lakeside Lodge」サイトの「Download」ページへアクセス
http://lakeside.webcrow.jp/download/download.html

このサイト「Lakeside Lodge」は、このブログの姉妹サイトとして私が作ったサイトです。

(お断り)
当プログラム KAssist.jar を使用するにはJRE以上の環境が必要です。
(Javaランタイムがインストール済みであること)

■■■■■■■■■■■■■■■■■■■
起動
■■■■■■■■■■■■■■■■■■■
起動は以下のように行います。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
起動コマンド例(linux例1)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
$ java -jar /home/k/KAssist/KAssist.jar

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
起動コマンド例(linux例2)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
cd /home/k/KAssist/
java -jar KAssist.jar

(コメント)
■例1は絶対パスで起動しています。
■例2ではKAssist.jarを /home/k/KAssist/ に置いてます。
■例2はカレントディレクトリを指定してから起動しています。
■実際にはhtmlのバックアップを行った上で使用して下さい。
■パス指定はUnix系の指定です。例えばWindowsなどでは
 バックシュラッシュ(\)が円マーク(¥)に置き換わります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
実行例(起動時指定)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
KAssist起動直後の初期画面です。
KAssist0002.jpg

[開始]ボタンをクリック。

「データ選択画面」が表示されるので、(フォルダや)データファイルを指定して[開く]ボタンをクリック。
KAssist0003.jpg

処理が終了すると結果が画面の明細表示領域に表示されます。(処理結果はスクロール出来ます)
KAssist0004.jpg

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
実行例(処理前html)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
処理前の状況です。赤丸印の所に現象が出ています。
KAssist0005.jpg

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
実行例(処理後html)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
処理後の状況です。赤丸印の所が修正されています。
KAssist0006.jpg


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
4.その他の機能
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
基本機能は「半角スペースが何故かhtmlの中に挿入されてしまう」のを修正するものですが、他に以下の様な機能も有ります。それらは画面上部のチェックボックスで指定できます。


チェックボックスの設定は以下の通り沢山の指定が可能です。特に1行目の「バックアップを作成してから修正」以外は全てhtmlの体裁を整える指定です。
KAssist0007.jpg

■■■【バックアップの指定】■■■■■■
■「バックアップを作成してから修正」:これをチェックすると指定されたファイルに更に「.backup」という拡張子を付加して同一フォルダにバックアップファイル(修正前ファイル内容のコピー)を作成します。尚、バックアップする時点で同名ファイルが存在する場合(2回以上行っているなど)は上書きされます。

<例>
ファイル名.html → ファイル名.html.backup

尚、プログラム立ち上がり時の標準設定は「バックアップを作成してから修正」のチェックボックスが選択されています。これは入力ファイルの文字コード間違えると全角文字(漢字コード)が壊れるため、自動的にバックアップさせておく狙いがあるためです。

入力ファイルの文字コード間違えてしまった場合には、バックアップファイルからリストア(データ復元)して再実行して下さい。

<例>
「ファイル名.html.backup」という名称でバックアップファイルが作成されているので、現在の間違って書き換えられてしまった「ファイル名.html」を削除。次にバックアップされていた「ファイル名.html.backup」のファイル名称を変更して「ファイル名.html」とオリジナルなファイル名に戻せば復元できます。

ただ、KompoZer出力のhtmlの修正の場合、標準であればKompoZer出力は初期値である Shift_JIS のハズですので意識する必要はないかと思います。但し、他出処のhtmlの場合は要注意です。本プログラムはKompoZer補完用なので文字コードの検出は行いません。確認は処理結果で表示されたhtmlの漢字コードが壊れていなければOKです。

■■■【体裁を整える指定】■■■■■■
htmlパラメタ整理での指定値(チェックボックス)はプログラム起動時の初期値では殆ど指定されていません。これは必要な時のみ選択指定して使用するスタンスにしたためです。

以下の指定があります。

◆「  → blank」
◆「\n → null」
◆「 <html> → \n<html>」
◆「<head> → \n<head>」
◆「<title> → \n<title>」
◆「<meta → \n<meta」
◆「<body → \n<body」
◆「<span → \n<span」
◆「<a → \n<a」
◆「</a> → </a>\n」
◆「<table → \n<table」
◆「</table> → </table>\n」
◆「<link → \n<link」
◆「<div → \n<div」
◆「</div> → </div>\n」
◆「<option → \n<option」
◆「</option> → </option>\n」
◆「<ul → \n<ul」
◆「</ul> → </ul>\n」
◆「<li → \n<li」
◆「</li> → </li>\n」
◆「<style → \n<style」
◆「</style> → </style>\n」
◆「<pre → \n<pre」
◆「</pre> → </pre>\n」
◆「<p → \n<p」
◆「</p> → </p>\n」
◆「<script → \n<script」
◆「</script> → </script>\n」
◆「<noscript → \n<noscript」
◆「</noscript> → </noscript>\n」
◆「<!-- → \n<!--」
◆「--> → -->\n」
◆「} → -->}\n」
◆「<frameset → \n<frameset」
◆「</frameset> → </frameset>\n」
◆「<iframe → \n<iframe 」
◆「</iframe> → </iframe>\n」
◆「<section → \n<section」
◆「</section> → </section>\n」
◆「<form → \n<form」
◆「<input → \n<input」
◆「<select → \n<select」
◆「<address → \n<address」
◆「</address> → </address>\n」
◆「<footer → \n<footer」
◆「</footer> → </footer>\n」
◆「<br → \n<br」
◆「</body> → \n</body>」
◆「</html> → \n</html>\n」

指定形式は「xxxxx → yyyyy」となっており、html内に記述された左項目xxxxxから矢印(→)で指示された右項目yyyyyへhtmlを文字列レベルで単純変換します。
<例>
「  → blank」
これは" "の文字列を"blank:半角ブランク"に置き換えます。

尚、以下の記述のみは特別な変換を扱います。
blank:半角ブランク
\n :改行
null :ヌル(何も無い状態)


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
5.さいごに
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
ずっと気になっていたブランク挿入現象でした。これですっきり出来ました。

------------------------------------------------------------------
○KAssist.jarプログラム使用に関して
 ・プログラムは度重ねたテスト/修正/確認を行っていますが、
  万一新たな潜在バグ/不具合等が発見された場合でも
  有償/無償に拘らず、その版の修正版再提供や改修の責は負いません。
 ・原因/理由に拘らずプログラム使用に纏わるいかなる事態や結果に対しても
  当方では関知しませんし一切の責任も負いません。
 ・プログラム使用において再配布や改変に繋がるような無断行為等は固くお断りいたします。
 ・当プログラムにおける新たな創作物の著作権は kumasan@yuukoku にあります。
 ・動作検証はCentOSだけです。Windowsや他OSでもJavaですので動作するはずですが
  現在は未検証ですので、使用してのご意見など頂けたら幸いです。

(お断り)
■当プログラム KAssist.jar を使用するにはJRE以上の環境が必要です。
(Javaランタイムがインストール済みであること)
■当サイトでは非常に情けないことに…Web系表示文字等がまともに表示できないため、以下の文字列については全て全角文字で記載しています。これらは実際には半角文字で定義されていますので、記事閲覧に際しては読み換えて見て下さい

<>
 


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
当作業の実行環境
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
◆オペレーティングシステム:CentOS release 5.9 (Final) CPU:32bit メモリ:512MB
◆Java SE Development Kit 8
(JREの環境)
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode, sharing)
◆KompoZer:バージョン 0.8b3 (20100228)
2014.09.16 / Top↑
Secret(管理者にだけ表示を許可する)


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。