Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] HTML ヘルプの文字コードを UTF-8 BOM 付きに変換する #807

Closed
wants to merge 6 commits into from

Conversation

m-tmatma
Copy link
Member

HTML ヘルプの文字コードを UTF-8 BOM 付きに変換する

経緯

web サイトhelp の HTMLsakura のリポジトリの最新 に合わせたいが、文字コードが違っていると
取り込みのための手間が非常にかかる。

http://naka.wankuma.com/site/kaisetu/htmlhelp/00001.htm の情報によって HTML HELP の
HTML は UTF-8 化 ができないとあきらめていたが、

https://tohokuaiki.hateblo.jp/entry/20120813/1344863876 の情報によって HTML HELP の
本文部分の HTML に関しては UTF-8 化が可能と分かったので、UTF-8 に変換する。

また sakura-editor/sakura-editor.github.io#47 (comment)
によって誤変換があったとわかったので、同様の問題を再発させないためにも UTF-8 で統一する。

変更点

  • 文字コード変換と META タグの変換のみです。

レビューポイント

  • hhc ファイルと hhk ファイルを ShiftJIS のままにしておけば文字化けすることはないです。
  • 差分を確認するときは WinMerge を使うと文字コードの違いによる差分を無視してくれるのでレビューしやすいです。

@m-tmatma m-tmatma added the document ドキュメント label Mar 21, 2019
@m-tmatma m-tmatma added this to the next release milestone Mar 21, 2019
@m-tmatma
Copy link
Member Author

m-tmatma commented Mar 21, 2019

文字コードの変換に使用した python スクリプトを添付します。
sakura-editor/sakura-editor.github.io#47 (comment) のものから少し更新しています。

※ 一度変換が終わったら次には使わないので、リポジトリには登録しません。
※ META タグの変換も行います。

convert.zip

import codecs
import os
import re
import sys

def convert(input):
	print (input)
	output = input + ".tmp"
	lineno = 0
	
	pattern = re.compile(r'META', re.IGNORECASE)
	try:
		with codecs.open(input, "r", "cp932") as fin:
			with codecs.open(output, "w", "utf-8-sig") as fout:
					for line in fin:
						lineno = lineno + 1
						match = pattern.search(line)
						if match:
							line = re.sub('charset=Shift_JIS', 'charset=UTF-8', line, flags=re.IGNORECASE)
						fout.write(line)
	except:
		print ("error " + input + ":" + str(lineno))
		sys.exit(1)

	os.unlink(input)
	os.rename(output, input)

def process_files(topdir):
	donefiles = set()

	for rootdir, dirs, files in os.walk(topdir):
		for file in files:
			base, ext = os.path.splitext(file)
			if ext == ".html":
				full = os.path.join(rootdir, file)
				if full in donefiles:
					print ("found: skip " + full)
				else:
					convert(full)
					donefiles.add(full)

process_files(".")

@m-tmatma
Copy link
Member Author

* 差分を確認するときは WinMerge を使うと文字コードの違いによる差分を無視してくれるのでレビューしやすいです。

https://qiita.com/py0n/items/a4e67456601be15e40d9
という情報を見つけたが、うまく動かなかった。

nkf -wnkf -s にして、diff-highlight は指定せずに試した。

@berryzplus
Copy link
Contributor

・・・参照リンク、わかりづらくてすんません。
http://naka.wankuma.com/site/kaisetu/htmlhelp/00001.htm

HTML Help Workshop はほとんど更新されていないので、
どっかの時点からUTF-8対応したとは考えにくいです。

@m-tmatma
Copy link
Member Author

HTML Help Workshop はほとんど更新されていないので、
どっかの時点からUTF-8対応したとは考えにくいです。

表示する側の OS の問題だった、あるいはHTML Help Workshop が依存しているシステムコンポーネントが更新されて解消した、ということなのかもしれません。

@m-tmatma
Copy link
Member Author

64bit の debug のビルドに失敗する
https://ci.appveyor.com/project/sakuraeditor/sakura/builds/23242178/job/2ft7vn50l94wfmlk

なぜだろう?

build-chm.bat 自体は Platform やビルド構成には依存しないのだが。

@berryzplus
Copy link
Contributor

思い付きをメモっておきます。

変更レビューを円滑にするために、他のファイルもutf8にしてしまうのはどうだろうか?

冷静に考えると最近のwindowsはpowershellを標準搭載していて、powershellからは.net frameworkを呼べる。実行直前にUTF8->MS932変換をしてやればいけるんじゃないか?

参考
http://www.shegolab.jp/entry/windows-conv-text-utf8
※コードが参考になります。展開されてる持論はテキトーに。

@m-tmatma
Copy link
Member Author

build-chm.bat をビルドの先頭に移動したら、全ビルド構成で失敗する

@berryzplus
Copy link
Contributor

変換と文字列置換に関しては問題なさそうでした。
害があると判明した 3b80c68 が積まれたままなので、総合でNGの判断です。

あと、 このPRを @m_tmatma さんがレビューしたら 自動変換と手作業はコミットを分けるべきだと思います。 とコメントする気がします。(#813 参照)

とりあえず 3b80c68 の除去待ちです。

@m-tmatma m-tmatma changed the title HTML ヘルプの文字コードを UTF-8 BOM 付きに変換する [WIP] HTML ヘルプの文字コードを UTF-8 BOM 付きに変換する Mar 25, 2019
@m-tmatma
Copy link
Member Author

あと、 このPRを @m_tmatma さんがレビューしたら 自動変換と手作業はコミットを分けるべきだと思います。 とコメントする気がします。(#813 参照)

分けてますよ。 https://github.com/sakura-editor/sakura/pull/807/commits

META タグの変換も文字コード変換も自動変換です。明示的には書いてませんでしたが。
#807 (comment)

害があると判明した 3b80c68 が積まれたままなので、総合でNGの判断です。

3b80c68 をもとに戻しても MinGW の Debug のビルドに
失敗するので解決策がないので、どうしようかな? という状態です。
まだ完成していない状態なので、WIP つけときました。

@m-tmatma m-tmatma force-pushed the feature/htmlhelp-utf8 branch from 3b80c68 to 7623a57 Compare March 25, 2019 20:31
@berryzplus
Copy link
Contributor

3b80c68 をもとに戻しても MinGW の Debug のビルドに失敗するので解決策がないので、どうしようかな? という状態です。

失敗すると分かっているなら実行しなければいいのでは?

どの環境で何をビルドすべきかという issue が前にあったような。

@ds14050
Copy link
Contributor

ds14050 commented Mar 26, 2019

失敗すると分かっているなら実行しなければいいのでは?
どの環境で何をビルドすべきかという issue が前にあったような。

今見たところ Release/x64 と Debug/Win32 が hhc.exe によって赤色になっていますから、取捨選択しても失敗からは逃れられないようです。

hhc のエラーコードを無視する方法を試したことがあります> 8ec9cc2

しかしエラーの発生頻度が低く、有効に機能するのか、エラーコードを無視した生成物に問題がないのかが確かめられていません。

@m-tmatma m-tmatma removed this from the v2.4.0 milestone Mar 27, 2019
@m-tmatma
Copy link
Member Author

とりあえず milestone を外しました。

@berryzplus
Copy link
Contributor

思い付きをメモっときます。

確か今、helpコンパイラの実行は1回だけリトライしてたと思います。
とりあえず、これを「10回リトライ」にしてはどうでしょうか。
失敗の確立が低いのであれば、3回連続、4回連続・・・と回数を増やしていけば、
全体の失敗確率はどんどん下がっていくと思います。

ビルド環境を絞ったら、思い切ったリトライ上限の変更も気軽に行えるんじゃないかと。

@m-tmatma m-tmatma force-pushed the feature/htmlhelp-utf8 branch 2 times, most recently from 4ad2dbc to 43c8a42 Compare March 30, 2019 23:48
@m-tmatma
Copy link
Member Author

とりあえず、これを「10回リトライ」にしてはどうでしょうか。

リトライしても失敗しました。

@berryzplus
Copy link
Contributor

appveyorを再起動して日本語にしないとダメなのかな。
windows 10 の言語パック en-us では再現しないんだよな(←hhcの失敗

@KENCHjp
Copy link
Member

KENCHjp commented Mar 31, 2019

リソース不足のような外部要因とか(最近うちでぶち当たったやつでたまに失敗するときにメモリ不足だったことが)、ディスク不足ってことはないだろうから、なにがしかの環境変数が時と場合で違うとか。。。

@m-tmatma m-tmatma force-pushed the feature/htmlhelp-utf8 branch 2 times, most recently from 57abf50 to 2b9c61c Compare April 5, 2019 13:16
@m-tmatma
Copy link
Member Author

m-tmatma commented Apr 5, 2019

azure pipelines だとビルド通ってますね。

@m-tmatma m-tmatma changed the title [WIP] HTML ヘルプの文字コードを UTF-8 BOM 付きに変換する HTML ヘルプの文字コードを UTF-8 BOM 付きに変換する Apr 5, 2019
@KENCHjp
Copy link
Member

KENCHjp commented May 6, 2019

バッチは古すぎて残念な言語です。

バッチはその名の通り「バッチ処理」が適任で、言語的な使い方をしようとすると途端に超難解な言語になっちゃいます(「遅延環境変数の展開」あたり・・・)

バッチの中でバッチファイル生成してcallするとかなるべく簡素になるように工夫してきた覚えがありますが、もう最近はそういう場面だとPowerShellへ逃避行。。。

@m-tmatma
Copy link
Member Author

#921 がマージされたら、この PR はいったん捨てて、再度別の PR を作成します。
その際10回リトライは不要だと思うので、リトライを追加する対応は含めません。
(1回だけリトライする現状の処理は残す予定です)

@m-tmatma
Copy link
Member Author

#906 (comment) で問題がありそうなので
実験用にこの PR を使用します。

@m-tmatma m-tmatma force-pushed the feature/htmlhelp-utf8 branch from d4baf66 to acd80b3 Compare May 25, 2019 11:45
@m-tmatma
Copy link
Member Author

sakura_core/sakura.hh の日本語コメントを削除したら、UTF-8 にしてもビルド通った。

https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=490 (acd80b3) → OK

@m-tmatma m-tmatma force-pushed the feature/htmlhelp-utf8 branch 3 times, most recently from 541dbf7 to 3f15e40 Compare May 25, 2019 21:37
@m-tmatma
Copy link
Member Author

#906 (comment)

sakura_core/sakura.hh の日本語コメントを削除したら、UTF-8 にしてもビルド通った

うわ、微妙・・・。
以前 help/sakura.hhを削る を対応したんですが、sakura_core/sakura.hhを元にビルド時にhelp/sakura.hhを生成するのもありなのかも。

上記方針で、 aa8d3be で試したところうまくいった。

@berryzplus
Copy link
Contributor

最新ビルドの成果物でヘルプのキーワードタブを見て見ました。化けてますね。
https://ci.appveyor.com/project/sakuraeditor/sakura/builds/24812463/job/i5rw8bj2se8equg3/artifacts

ビルド時にエラーにならないようにする、と
成果物が正しく生成されるようにする、は別の話題っぽい印象を持っています。

@m-tmatma
Copy link
Member Author

#921 がマージされたら、この PR はいったん捨てて、再度別の PR を作成します。

#937 を投げました。

@m-tmatma
Copy link
Member Author

m-tmatma commented Jun 1, 2019

#937 で対応
この PR はマージせず閉じる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
document ドキュメント
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants