2011-07-25 11 views
2

私はのように見えるCの関数プロトタイプ(特定のWindows APIのヘッダファイル)があります。コンデンス複数行のCの関数プロトタイプに

私はプログラム的にしようとしています
int 
foo 
(
int 
a 
, 
int 
* 
b 
) 
; 

(彼らはコーディング規約を持っていないように見える)

をフォーム(またはそれに近いもの)の1ラインのプロトタイプに変身:

int foo(int a, int * b); 

私はctagsの(ctags multi-line C function prototypes)のようなプログラムに見て、様々なsettiにしていますuncrustify(http://uncrustify.sourceforge.net/)でngsしかし、私はいずれかの進歩を行うことができませんでした。 (どんな洞察力も素晴らしいかもしれません。あるいは私が逃した385件のuncrustifyオプションのうちの1つが、私が望むことをするでしょう)。

プログラマチックには、関数プロトタイプを意味する固有のマーカーを探して、コードを好みの形にするスクリプトを書くことができます。

レクサーとパーサーを使用しないと、非常に複雑になる可能性が高いようです。助言がありますか?

+0

元のフォーマットはどこから来ましたか? –

+0

@carlファイルはWindowsのapiヘッダーファイルですが、ほとんどの例は誇張されていませんが、可能な限り頑強な解決策を探しています – pseudosudo

答えて

4

VIを使用してindent -krastyle --style=kr

+0

'indent -kr'はほぼ正確に私が探しているのですが、解決しないのは同じ行にポインタを持ち込むことだけです – pseudosudo

+0

' astyle --style = kr'はdepricatedと思われます(http: /style.sourceforge.net/notes.html)私は '--style = k/r'を使いました。しかし、それはインデントを行い、改行は変更されませんでした。 – pseudosudo

+0

インデント付きでkrフラグを使用しないでください。 – Dave

1

vimを使用したソリューション?

すべての改行を削除する正規表現の検索を実行します。int型11J

+1

他の型を返す関数のプロトタイプはどうですか? – Yitzchak

0

別の解決策を介してそれらを実行しないで

プット・マーカー。その後、結果の混乱を取って、;をそれぞれ; \n\nに置き換えて別の正規表現検索を実行します。それで、プロトタイプのリストをあなたに残すはずです。最初のプロトタイプではなくプロトタイプの終わりをマークしているので、すべてのプロトタイプが同じように終了するので、特別なケースを認識しないことを心配する必要はありません。

+0

私はこれを以前に実験しましたが、なぜ止めたのかを覚えています - 私はそれを振り返ります – pseudosudo

+0

私の推測は必要です傾いた爪楊枝症候群から回復する。まあ、それに戻って。 :) – Yitzchak

1
sed ':a;N;$!ba;s/\n/ /g' prototypes.file | sed 's/; */;\n/g' 

最初のコマンドは、すべての改行をスペースに置き換え、次はセミコロンごとに改行を戻します。

もちろん、これはファイルにこれらのプロトタイプ以外のものがない場合にのみ機能します。あなたはそのまま残しておきたいいくつかの他のものがある場合は、Vimの視覚的な選択と2つの置換コマンドを使用することができます。

参加行を選択し

:s/\n//

よりも、あなたが参加したい地域を選択そして

:s/; */;\r/g 
関連する問題