jhotdraw是一个用于绘图的Java 开源项目。它将手绘图转换为三次贝塞尔曲线。源代码可用 - 下载并翻译。不要对项目的规模感到害怕:您只需要几个类,即:
org.jhotdraw.geom.Bezier
org.jhotdraw.geom.BezierPath
org.jhotdraw.geom.Geom
翻译时首先将所有集合声明更改为数组(如果您仅针对 FP10 用户,请使用向量)。我有一些您可能会在转换中发现有用的正则表达式 - 如果您愿意,我可以发布它们。
这是您可能会发现有用的正则表达式列表。在每一对中,将第一个粘贴到搜索文本区域,第二个粘贴到替换区域,选中正则表达式复选框并使用查找和替换按钮。不要使用 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
Replace ArrayList.get(index) with array[index] //Warning: failed for list.get(list.size() - 1)
(\w+)\.get\(([^)]+)\)
$1[$2]
//avoid the () failure
(\w+)\.get\(([^)]*(?:\([^)]*\))[^)]*)\)
$1[$2]
替换ArrayList.set(index, element)
为array[index] = element
//Warning: failed for 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)
用 = 到 AS 格式替换它自己的行中的所有变量声明
^(\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
将单行中的 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
Remove () 强制转换 - AS 编译器不喜欢它们
(?:\(\w+\)\s*)([^ ,*+;/)><=\-])
$1
将 max 等替换为 Math.max - AS 没有静态导入
(?<!Math\.)\b(max|min|abs|sqrt|PI|cos|sin|atan2)\(
Math.$1(