@ECHO OFF
SETLOCAL
SET BATDIR=%~dp0
SET TMPNAM=%~n0.tmp

REM //--------------------------------------------------------------------------
REM //呼び出し側でSRCFILESを設定していなければ、デフォルトの入力ファイルを定義します。
REM //libclip.netのフォルダ構成を変更した場合は、以下の定義も変更して下さい。
IF "%SRCFILES%" EQU "" (
  SET SRCFILES=%CLIP%\libclip.net\src\*.cs ^
               %CLIP%\libclip.net\src\ToolLib\*.cs
)

REM //--------------------------------------------------------------------------
REM //REPLACE_NAMEシンボルを定義しなければ、名前空間とクラス名をそのままで変更せずに、libclip.csを生成します。
REM //REPLACE_NAMEシンボルを定義すると、名前空間とクラス名を一般的な名前に置き換えて、Library.csを生成します。
REM //プロジェクトによって、変更して下さい。
SET REPLACE_NAME=1

REM //--------------------------------------------------------------------------
REM //ツールを定義します。
REM //変更する必要は有りません。
SET NKF="C:\Home\Tools\nkf.exe"
SET ONIGSED="C:\Home\Tools\onigsed.exe"
SET SORT="C:\UnxUtils\usr\local\wbin\sort.exe"
SET UNIQ="C:\UnxUtils\usr\local\wbin\uniq.exe"
SET STRIPCOMMENTS="%CLIP%\tool\StripComments.exe"

REM //--------------------------------------------------------------------------
REM // * Tue Mar 07 22:38:22 JST 2017 Naoyuki Sawa
REM // - 1st リリース。
REM // - libclip.netの各ソースファイルを連結して、一つのlibclip.csにまとめます。
REM //   処理内容の注意点としては、元のソースファイルがUTF-8で、各ツールがシフトJIS対応なので、
REM //   最初にUTF-8⇒シフトJIS変換を行い、処理を行った後、最後にUTF-8に戻して出力しています。
REM // * Wed Apr 26 21:33:29 JST 2017 Naoyuki Sawa
REM // - libclip.netのフォルダ構成を変更した事に伴い、SRCFILESの定義を変更しました。
REM // * Mon May 01 22:50:38 JST 2017 Naoyuki Sawa
REM // - nkfのオプションに、'x'を追加しました。
REM //   'x'を指定しないと、半角カタカナが全角カタカナに変換されてしまうからです。
REM //   当バッチスクリプトに限らず、nkfを使う時は、常に'x'を指定する方が良いと思います。
REM //   □参照資料:「nkf - Network Kanji Filter」(http://pseudo.ddo.jp/~pseudo/cgi-bin/shop_v50/doc/nkf.html)
REM //   │-x 通常おこなわれる、いわゆる半角カナ(JIS X 0201片仮名)からいわゆる全角カナ(JIS X 0208片仮名)への変換を行わず、半角カナを保存する。
REM //   │   入力は、Shift_JISの1byteカナ、SO/SI、ESC-(-I,SSOを受け付ける。
REM //   │   出力は、日本語EUC中ではSSO、JISコード中ではESC-(-Iをデフォルトで用いる。
REM // - 呼び出し側でSRCFILESを設定した場合は、その入力ファイルに対して当バッチスクリプトの処理を行うようにしました。
REM //   使用例は、/clip/libclip.net/keep/Program/UPDATE.batを 参照して下さい。

REM //--------------------------------------------------------------------------
REM //■使い方
REM //│CALL ConcatLibclipNet.bat
REM //│入力フォルダは固定してあるので、どのフォルダで実行しても構いません。
REM //│出力ファイル(libclip.cs)は、カレントフォルダに作成されます。
REM //│従って、libclip.csを配置するフォルダ内で実行するのが良いと思います。

REM //--------------------------------------------------------------------------
REM //	シフトJIS変換・ファイル連結・コメント削除
REM //	- StripComments.exeとonigsed.exeはシフトJISを前提としているので、まず、シフトJIS変換を行います。
REM //	  また、ファイル連結とコメント削除はこの後の処理に対して共通なので、ここで行っておく事にします。
REM //--------------------------------------------------------------------------
ECHO シフトJIS変換・ファイル連結・コメント削除中...
%NKF% -sx %SRCFILES% ^
 | %STRIPCOMMENTS% -sz -dUNITY_5_3_OR_NEWER ^
 > %TMPNAM%
IF ERRORLEVEL 1 GOTO L_ERR

REM //--------------------------------------------------------------------------
REM //	「#define」「#undef」を抽出・UTF-8変換
REM //--------------------------------------------------------------------------
ECHO 「#define」「#undef」を抽出・UTF-8変換中...
TYPE %TMPNAM% ^
 | %ONIGSED% -ne "/^[[:blank:]]*#[[:blank:]]*\(define\|undef\)[[:blank:]]\+/{s//#\1 /p}" ^
 | %SORT% ^
 | %UNIQ% ^
 | %NKF% -wx ^
 > libclip.cs
IF ERRORLEVEL 1 GOTO L_ERR

REM //--------------------------------------------------------------------------
REM //	「using」を抽出・UTF-8変換
REM //	 - モジュールの先頭以外では「using」を使っていないと仮定しています。
REM //	 - 「using static」は考慮していません。
REM //--------------------------------------------------------------------------
ECHO 「using」を抽出・UTF-8変換中...
TYPE %TMPNAM% ^
 | %ONIGSED% -ne "/^[[:blank:]]*using[[:blank:]]\+/{s//using /p}" ^
 | %SORT% ^
 | %UNIQ% ^
 | %NKF% -wx ^
 >> libclip.cs
IF ERRORLEVEL 1 GOTO L_ERR

REM //--------------------------------------------------------------------------
REM //	上記以外を抽出・UTF-8変換
REM //--------------------------------------------------------------------------
ECHO 上記以外を抽出・UTF-8変換中...
TYPE %TMPNAM% ^
 | %ONIGSED% -e "/^[[:blank:]]*#[[:blank:]]*\(define\|undef\)[[:blank:]]\+/{d}" ^
             -e "/^[[:blank:]]*using[[:blank:]]\+/{d}" ^
 | %NKF% -wx ^
 >> libclip.cs
IF ERRORLEVEL 1 GOTO L_ERR

REM //--------------------------------------------------------------------------
REM //	一時ファイルを削除する。
REM //--------------------------------------------------------------------------
DEL %TMPNAM%
IF ERRORLEVEL 1 GOTO L_ERR

REM //--------------------------------------------------------------------------
REM //	名前空間とクラス名を一般的な名前に置き換えます。
REM //--------------------------------------------------------------------------
IF "%REPLACE_NAME%" NEQ "" (
  ECHO 名前を変更中...
  %ONIGSED% -e "s/\<org\.piece_me\>/com.Company/g" ^
            -e "s/\<libclip\>/Library/g" ^
            libclip.cs ^
   > Library.cs
  IF ERRORLEVEL 1 GOTO L_ERR
  DEL libclip.cs
  IF ERRORLEVEL 1 GOTO L_ERR
)

REM //--------------------------------------------------------------------------
ECHO 完了しました。
REM //PAUSE
EXIT /B

REM //--------------------------------------------------------------------------
:L_ERR
REM //□不完全な最終出力ファイルを確実に削除します。
IF EXIST libclip.cs DEL libclip.cs
IF EXIST Library.cs DEL Library.cs
ECHO ###エラーが発生しました。
REM //PAUSE
EXIT /B 1
