jhotdrawは、描画用のJavaのオープンソースプロジェクトです。フリーハンドの描画を3次ベジェ曲線に変換します。ソースが利用可能です-ダウンロードして翻訳してください。プロジェクトのサイズを恐れないでください。必要なクラスは2つだけです。
org.jhotdraw.geom.Bezier
org.jhotdraw.geom.BezierPath
org.jhotdraw.geom.Geom
翻訳中は、すべてのコレクション宣言を配列に変更することから始めます(FP10ユーザーのみを対象とする場合はベクトルを使用します)。変換に役立つ可能性のある正規表現がいくつかあります。必要に応じて投稿できます。
これはあなたが役に立つと思うかもしれない正規表現のリストです。各ペアで、最初のペアを検索テキスト領域に貼り付け、2番目のペアを置換領域に貼り付け、正規表現のチェックボックスをオンにして、[検索]ボタンと[置換]ボタンを使用します。使用しないでください Replace All
-これらのどれも絶対確実であることが保証されていません。
int/double name
すべての宣言を次のように置き換えますvar name:Number
\b(double|int)\s+(\w+)\b
var $2:Number
Point2D.Double name
すべての宣言を次のように置き換えますvar name:Point
\bPoint2D\.Double\s+(\w+)\b
var $1:Point
int/double name
関数シグニチャのすべての宣言を次のように置き換えますname:Number
\(([^)]*)\b(?:double|int)\s+(\w+)\b([^)]*?)\)
($1$2:Number$3)
Point2D.Double name
関数シグニチャのすべての宣言を次のように置き換えますname:Point
\(([^)]*)\b(?:Point2D\.Double)\s+(\w+)\b([^)]*?)\)
($1$2:Point$3)
メソッドシグネチャを変更する前に、すべてのメソッドが静的であることを確認してください。
(public|private)\s+(?!static)
メソッドシグネチャをAS形式に置き換えます
(public|private)\s+static\s+(\w+)\s+(\w+)\s*\(([^)]*)\)
$1 static function $3($4):$2
ArrayList.get(index)をarray [index]に置き換えます//警告:list.get(list.size()-1)で失敗します
(\w+)\.get\(([^)]+)\)
$1[$2]
//avoid the () failure
(\w+)\.get\(([^)]*(?:\([^)]*\))[^)]*)\)
$1[$2]
ArrayList.set(index, element)
//警告に置き換えarray[index] = element
ます:list.set(i、list.size())で失敗します
(\w+)\.set\(([^,]+)\s*,\s*([^)]+)\)
$1[$2] = $3
/*the above regex successfully made the following replacement*/
cleaned.set(cleaned.size() - 1, digitizedPoints[digitizedPoints.size() - 1])
cleaned[cleaned.size() - 1] = digitizedPoints[digitizedPoints.size() - 1]
に置き換えarraylist.add(object)
ますarray.push(object)
//would fail if object contains ')'
//add(index, object) should be done with splice
(\w+)\.add\(([^)]+)\)
$1.push($2)
//too many failures - fail safe version -
//still fails for nested parenthesis list.add(new Point(a.first(), a.last()))
//- only three such cases - the effort to match parenthesis wouldn't be worth it
//works for list.add(new Point(3, 4)) - there were many similar cases
(\w+)\.add\(([^)]*(?:\([^)]*\))[^)]*)\)
$1.push($2)
メソッドシグネチャをAS形式に置き換えます(非静的メソッド)
(public|private)\s+(?!function)(\w+)\s+(\w+)\s*\(([^)]*)\)
$1 function $3($4):$2
int/double/point/boolean name
関数シグニチャのすべての宣言を次のように置き換えますname:type
\(([^)]*)\b(\w+)\s+(\w+)\b([^)]*?)\)
($1$3:$2$4)
独自の行のすべての変数宣言を=toAS形式に置き換えます
^(\s+)(\w+)\s+(\w+)\s*=\s*(.+?)\s*;(\s*)$
$1var $3:$2 = $4;$5
中括弧の配置を変更します。
^(\t)(\s*)([^\n]+)\{\s*(\n)\s+
$1$2$3$4$1$2{$4$1$2
に変更} else
します} \n else
^([ \t]+)}[ \t]*else\b([^\n]*)(\n)
$1}$3$1else$2$3
1行の4つの変数宣言を別の行のASに置き換えます
^(\t+)(\w+)\s+(\w+)\s*,\s*(\w+)\s*,\s*(\w+)\s*,\s*(\w+)\s*;[ \t]*(\n)
$1var $3:$2;$7$1var $4:$2;$7$1var $5:$2;$7$1var $6:$2;$7
配列宣言を置き換えます
^(\s+)\w+\[\]\s*(\w+)\b
$1 var $2:Array
削除()キャスト-ASコンパイラはそれらを好きではありません
(?:\(\w+\)\s*)([^ ,*+;/)><=\-])
$1
maxなどをMath.maxに置き換えます-ASには静的インポートがありません
(?<!Math\.)\b(max|min|abs|sqrt|PI|cos|sin|atan2)\(
Math.$1(