私はあなたが研究目的のためにスタイルを変更したいと思っています。質問は単純に仮説です。 Joel S.は、単にあなたが何か間違っていると言っている答えはまったく良い答えではないと思っているようですので、私はあなたにあなたの問題に近づく道を教えようとします。
svnが変換に関して行う最も近いことは、チェックアウト時に行末を変更し、チェックイン時に再度変更することです。これにより、リポジトリは、行末の単一のアイデアを持ち、異なるクライアントがファイルを好みに変更することができます。この機能はかなり正直に聞こえますが、多くの人が正常に動作するには問題があるようです。単にGoogle のsvn eol-style 'です。
svnはカスタマイズ可能なクライアントサイドフィルタを提供していないので、svnクライアントを変更して自分の目的でコンパイルする必要があると想定すると安全だと思います。パッチやエクステンションをsvnに提出することもできます。
この時点で、svnソースをダウンロードしてクライアントをコンパイルすることができます。この時点で、あなたの注意をlibsvn_subr/subst.c
にしてください。このファイルには、さまざまな形式に変換するルーチンが含まれています。現在、キーワードの拡張とeolの翻訳を行っています。
member-variable-style
という新しいプロパティを作成するだけで済みます。このフラグが設定されているファイルの場合は、subst.c
コードで特別な変換を呼び出すことができます。 svn_subst_translate_stream3
への呼び出しを見れば、svnのリファレンスを変換コードにトラッキングすることができます。
OK。それは簡単な部分でした。これで、コードをあるフォームから別のフォームに正しく変換する関数を取得する必要があります。コードが有効/コンパイルされる保証はないので、単にgccからcppプロセッサーを取り出すことはできません。適切な変数に適切なことを行うことになるような、レキシングルールを作成して、あなたの最善の仕事をする必要があります。 m_またはmで始まるバラバラの場合、これはかなり簡単です。残念ながら、m_をまったく使用しないチームのメンバーにとって、C++のメンバー変数を決定するのはかなり難しいことです。幸運なことに、構文強調表示のコードを作成する人が行った、この分野の研究はかなりあります。私は周りを突っ張り、C++コードを強調表示する良い仕事をするいくつかのコードを見つけました。
最後に、これらの変換がかなり複雑になる可能性があるので、私はこの段階でフィルタプログラムにsvnシェルを用意することをお勧めします。これはパフォーマンスにはあまり適していませんが、フィルタを作成してデバッグする方がはるかに簡単です。 Perlや好みの言語でフィルタを書くことができます。外部フィルタプログラムを使用する良い例については、Squid redirectorsを参照してください。
幸運を祈る!