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

カンマの後ろの空白を1個に統一する #323

Merged

Conversation

berryzplus
Copy link
Contributor

目的

リソースファイル内のダイアログリソースの表記ゆれを改善します。
記述を統一することにより、編集しやすくすることが狙いです。

経緯

ダイアログリソースのコントロールの記述が複数行に渡っているのをまとめる修正( #320 )のレビュー中に対応を提案。PRと関係ない話題なので別にリクエストを投げることにしました。

#320 (comment)

修正内容

単純化すると s/,/, / の変更です。

普通に一括置換しようとすると引用符に囲まれたカンマまで処理してしまうので、前後に想定パターンを付けて誤って文字列内のカンマを置換してしまうことを防止しています。

置換パターン: ((?<!\\)"(?:[^\\"]|\\.)*"|\w+),(?: {2,})?(\w+|"(?:[^\\"]|\\.)*") ←内容は後述。
置換後文字列; $1, $2

一致箇所は、7,295+5,363+2で12,660箇所。
diffツール(WinMerge等)で空白の差分を無視する設定にすれば、
空白以外に差分がないことを確認できます。

置換パターン正規表現の説明

複雑な正規表現なので、内容の説明を付記します。
「先行パート、置換対象パート、後続パート」の3つのパートに分けてパターンマッチさせます。
正規表現はメタ文字で「キャプチャする/しない」を切り替えることにより、
置換時に変更したくない部分と変更したい部分を分けて考えられるようにしています。
※コメントに書いたときとパターンを変えてるので少し説明を変えています。

  1. ((?<!\\)"(?:[^\\"]|\\.)*"|\w+) 先行パート、キャプチャします。
    先行パートの構成物は 文字列か識別子 です。
    否定戻り読み(?<!...)でエスケープされてない二重引用符を探してます。
    文字列の中身は0個以上の文字ですがエスケープシーケンスは除外したいので複雑になってます。
  2. ,(?: {2,})? 置換対象パート、キャプチャしません。
    カンマの後に2個以上の半角空白があった場合はここにマッチします。
  3. (\w+|"(?:[^\\"]|\\.)*") 後続パート、キャプチャします。
    後続パートの構成物は 識別子か文字列 です。
    パフォーマンスを考慮して識別子を先に判定させます。
    先行文字列が決まっているので戻り読みの部分が消えています。

確認方法

否定先読み(?!...)を使って、カンマの後にスペースがない文字列を検索し、
二重引用符に囲まれた部分以外の一致(=修正漏れ)がないことを確認しました。

Find all ",(?! )", Match case, Regular expressions, Subfolders, Keep modified files open, Find Results 1, Entire Solution, "*.rc"
  C:\gitroot\sakura\sakura_core\sakura_rc.rc(3395):	STR_ESI_UTF16LE_B_AND_P		"\t\tUTF16LE 固有バイト数 %d,\tポイント数 %d\r\n"
  C:\gitroot\sakura\sakura_core\sakura_rc.rc(3396):	STR_ESI_UTF16BE_B_AND_P		"\t\tUTF16BE 固有バイト数 %d,\tポイント数 %d\r\n"
  C:\gitroot\sakura\sakura_lang_en_US\sakura_lang_rc.rc(1059):    CONTROL         "When closing all Sakura Editors,\nconfirm closing editor windows(&V)", IDC_CHECK_EXITCONFIRM, "Button", BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 8, 212, 124, 19
  C:\gitroot\sakura\sakura_lang_en_US\sakura_lang_rc.rc(3537):	STR_ERR_CPRINT02			"StartDoc() error,\nPriter Device Name=[%ts]"
  C:\gitroot\sakura\sakura_lang_en_US\sakura_lang_rc.rc(3585):	STR_PROPCOMGEN_FILE1		"Deleting recent file history,\nOK?\n"
  C:\gitroot\sakura\sakura_lang_en_US\sakura_lang_rc.rc(3587):	STR_PROPCOMGEN_DIR1			"Deleting recent folder history,\nOK?\n"
  Matching lines: 6    Matching files: 2    Total files searched: 2

その他参考

パターン検索をできるだけ簡単にするため、
前提としてマッチしないパターンを除外しています。

カンマの前に空白があるパターン

Find all "("|\w+)\s+,", Match case, Regular expressions, Subfolders, Keep modified files open, Find Results 1, Entire Solution, "*.rc"
  Matching lines: 0    Matching files: 0    Total files searched: 2

OR演算子の後に空白がないパターン

Find all "(?<!\|)\|\w+", Match case, Regular expressions, Subfolders, Keep modified files open, Find Results 1, Entire Solution, "*.rc"
  Matching lines: 0    Matching files: 0    Total files searched: 2

OR演算子の前に空白がないパターン

Find all "\w+\|(?!\|)", Match case, Regular expressions, Subfolders, Keep modified files open, Find Results 1, Entire Solution, "*.rc"
  Matching lines: 0    Matching files: 0    Total files searched: 2

ダイアログスタイルのNOTの後が空白1個でないパターン

Find all "([,\|])[\t ]*NOT(?:\t| {2})", Match case, Regular expressions, Subfolders, Keep modified files open, Find Results 1, Entire Solution, "*.rc"
  Matching lines: 0    Matching files: 0    Total files searched: 2

@m-tmatma m-tmatma added the refactoring リファクタリング 【ChangeLog除外】 label Aug 5, 2018
@m-tmatma m-tmatma added this to the next release milestone Aug 5, 2018
@m-tmatma
Copy link
Member

m-tmatma commented Aug 5, 2018

確認方法

PR の最新のコミットを取得

以下コマンドでビルド

build-sln.bat Win32 Release
build-sln.bat Win32 Debug
build-sln.bat x64   Release
build-sln.bat x64   Debug

以下コマンドで移動

mkdir sakura_lang_en_US\New\
mkdir sakura\New\
move sakura_lang_en_US\Win32 sakura_lang_en_US\New\
move sakura_lang_en_US\x64   sakura_lang_en_US\New\
move sakura\x64              sakura\New\
move sakura\Win32            sakura\New\

分岐元の git hash を表示

git show-branch --merge-base

分岐元の git hash を取得

git checkout db3c108af76b53202bf26cb3797f8617de85f503

githash.bat の先頭に exit /b 0 を挿入して githash.h が更新されないようにする。

以下コマンドでビルドする

build-sln.bat Win32 Release
build-sln.bat Win32 Debug
build-sln.bat x64   Release
build-sln.bat x64   Debug

以下コマンドで移動

mkdir sakura_lang_en_US\Old\
mkdir sakura\Old\
move sakura_lang_en_US\Win32 sakura_lang_en_US\Old\
move sakura_lang_en_US\x64   sakura_lang_en_US\Old\
move sakura\x64              sakura\Old\
move sakura\Win32            sakura\Old\

#317 のスクリプトを実行する

calc-hash-res.py hash.txt .

以下ローカルビルドの結果です。

hash.txt

@m-tmatma
Copy link
Member

m-tmatma commented Aug 5, 2018

githash.bat の先頭に exit /b 0 を挿入して githash.h が更新されないようにする。

#319 を導入すると上記を自動化できます。

@berryzplus
Copy link
Contributor Author

レビューあざっす。

githash.bat の先頭に exit /b 0 を挿入して githash.h が更新されないようにする。

#319 を導入すると上記を自動化できます。

目的がようやく理解できたので再レビューしてきました。
あとは良きに計らってください 😄

@berryzplus berryzplus merged commit f65d647 into sakura-editor:master Aug 5, 2018
@berryzplus berryzplus deleted the unificate_space_after_comma branch August 25, 2018 09:05
@ds14050 ds14050 added the refactoring リファクタリング 【ChangeLog除外】 label Sep 18, 2018
HoppingTappy pushed a commit to HoppingTappy/sakura that referenced this pull request Jun 11, 2019
…after_comma

カンマの後ろの空白を1個に統一する
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactoring リファクタリング 【ChangeLog除外】
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants