Il jhotdraw è un progetto opensource in Java per il disegno. Converte i disegni a mano libera in curve cubiche più bezier. La fonte è disponibile - scarica e traduci. Non avere paura alla dimensione del progetto: è necessario solo un paio di classi e cioè:
org.jhotdraw.geom.Bezier
org.jhotdraw.geom.BezierPath
org.jhotdraw.geom.Geom
Durante la traduzione di avvio modificando tutte le dichiarazioni di raccolta per array (vettori di uso se ci si rivolge solo agli utenti FP10) . Ho alcune espressioni regolari che potresti trovare utili nella conversione: posso pubblicarle se vuoi.
Ecco un elenco di espressioni regolari che potrebbero essere utili. In ciascuna coppia, incolla il primo nell'area di testo di ricerca e il secondo nell'area di sostituzione, seleziona la casella di controllo regolare e utilizza i pulsanti Trova e sostituisci. Non utilizzareReplace All
- nessuno di questi è sicuro di essere infallibile.
sostituire tutte int/double name
dichiarazioni con le var name:Number
\b(double|int)\s+(\w+)\b
var $2:Number
Sostituire tutte Point2D.Double name
dichiarazioni con le var name:Point
\bPoint2D\.Double\s+(\w+)\b
var $1:Point
Sostituire tutte le dichiarazioni in int/double name
firme di funzione con name:Number
\(([^)]*)\b(?:double|int)\s+(\w+)\b([^)]*?)\)
($1$2:Number$3)
sostituire tutti i Point2D.Double name
dichiarazioni nelle firme di funzione con name:Point
\(([^)]*)\b(?:Point2D\.Double)\s+(\w+)\b([^)]*?)\)
($1$2:Point$3)
Prima di cambiare metodo di firme, assicurarsi che tutti i metodi sono statici:
(public|private)\s+(?!static)
Sostituire metodo firme per AS formato
(public|private)\s+static\s+(\w+)\s+(\w+)\s*\(([^)]*)\)
$1 static function $3($4):$2
Sostituisci ArrayList.get (index) con array [index] // Attenzione: fallisce per list.get (lista.size() - 1)
(\w+)\.get\(([^)]+)\)
$1[$2]
//avoid the() failure
(\w+)\.get\(([^)]*(?:\([^)]*\))[^)]*)\)
$1[$2]
Sostituire ArrayList.set(index, element)
con array[index] = element
// Attenzione: non riesce per 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]
Sostituire arraylist.add(object)
con 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)
Sostituire le firme del metodo in formato AS (metodi non statici)
(public|private)\s+(?!function)(\w+)\s+(\w+)\s*\(([^)]*)\)
$1 function $3($4):$2
Sostituire tutti int/double/point/boolean name
dichiarazioni di firme di funzione con name:type
\(([^)]*)\b(\w+)\s+(\w+)\b([^)]*?)\)
($1$3:$2$4)
Sostituire tutte dichiarazioni di variabili in una propria linea con un = AS formato
^(\s+)(\w+)\s+(\w+)\s*=\s*(.+?)\s*;(\s*)$
$1var $3:$2 = $4;$5
cambiamento sistemazione di bretelle.
^(\t)(\s*)([^\n]+)\{\s*(\n)\s+
$1$2$3$4$1$2{$4$1$2
cambiamento } else
in } \n else
^([ \t]+)}[ \t]*else\b([^\n]*)(\n)
$1}$3$1else$2$3
Sostituire 4 dichiarazioni di variabili in una singola linea di AS in diverse linee
^(\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
dichiarazioni di matrice Sostituire
^(\s+)\w+\[\]\s*(\w+)\b
$1 var $2:Array
Rimuovi() casting - AS compilatore non come loro
(?:\(\w+\)\s*)([^ ,*+;/)><=\-])
$1
Sostituire max ecc in Math.max - AS non ha le importazioni statiche
(?<!Math\.)\b(max|min|abs|sqrt|PI|cos|sin|atan2)\(
Math.$1(
sto cercando la stessa cosa ma javascript, ne conosci qualcuno? – igor