Skip to content

Commit

Permalink
Add Tools( Format/Unformat )
Browse files Browse the repository at this point in the history
  • Loading branch information
KnIlight committed Oct 4, 2020
1 parent 1f05d94 commit 860ade7
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 12 deletions.
74 changes: 68 additions & 6 deletions src/ui/PathToolDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.*;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static ui.PathTweakerDialog.parseFloatAttr;
import static ui.PathTweakerDialog.parsint;
import static ui.PathTweakerDialog.*;


public class PathToolDialog extends DialogWrapper {
Expand Down Expand Up @@ -122,18 +124,78 @@ protected JComponent createCenterPanel() {
layoutEater.eatJButton("Insert/Remove Background Canvas", e-> InjectBG(true) );
layoutEater.eatJButton(" / Copy", e-> InjectBG(false) );

Container ft1 = layoutEater.startNewLayout();
layoutEater.eatJButton("Format coords to get processable data (L0 0 -> L0,0)", e-> ForCoords(true) );
Container ft2 = layoutEater.startNewLayout();
layoutEater.eatJButton("Unformat coords to remove commas ( L0,0 -> L0 0 )", e-> ForCoords(false) );

Container cPtx = layoutEater.startNewLayout();
layoutEater.eatJButton("Generate SVG ", e-> {} );
layoutEater.eatJButton("Export SVG... ", e-> {} );
layoutEater.eatJButton("Copy last initial path data", e-> copyText(attachedTweaker.currentText) );

panel.add(vTbg);
panel.add(ft1);
panel.add(ft2);
panel.add(cPtx);


return panel;

}


/** Remove or insert ',' between coords. */
private void ForCoords(boolean format) {
PathTweakerDialog tweaker = attachedTweaker;
if(tweaker!=null && tweaker.mDocument!=null) {
String pathdata = tweaker.currentText;
if(pathdata!=null) {
if(format) {
StringBuilder pathbuilder = universal_buffer;
pathbuilder.setLength(0);
pathdata = pathdata.replaceAll("[\\s]+", " ");
pathdata = pathdata.replaceAll(" ?([a-zA-Z]) ?", "$1");
Matcher m = Pattern.compile("[a-zA-Z ]").matcher(pathdata);
int idx = 0;
int numberCount=0;
while (m.find()) {
int now = m.start();
if (idx != -1 && now > idx) {
//String currentPhrase = pathdata.substring(idx, now);
String command = pathdata.substring(idx, idx + 1);
String arr = pathdata.substring(idx + 1, now);
if (!command.equals(" ")) {
//lastCommand = command;
numberCount=0;
if(parsefloat(arr)!=null) {
numberCount++;
}
pathbuilder.append(command);
} else {
pathbuilder.append((numberCount+1)%2==0?","
: command);
if(parsefloat(arr)!=null) {
numberCount++;
}
}
pathbuilder.append(arr);
} else
pathbuilder.append(pathdata, idx, now);
//if(debug)Log(pathdata.substring(0,));
idx = now;
}
pathbuilder.append(pathdata.substring(idx));
String newData = pathbuilder.toString();
if(true) {
newData=newData.replaceAll("(:?<[\\S])([a-zA-Z])", "$1");
}
tweaker.replaceSelectedPathdata(newData);
}
else {
tweaker.replaceSelectedPathdata(pathdata.replace(',', ' '));
}
}
}
}

StringBuilder universal_buffer = new StringBuilder(4096);


Expand Down
31 changes: 25 additions & 6 deletions src/ui/PathTweakerDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -306,9 +306,9 @@ private void onTextChanged(DocumentEvent e) {
Container row_offset = layoutEater.startNewLayout();
layoutEater.eatLabel("Selected Path : ");
row_offset.add(maniOffset = new JLabel());
layoutEater.eatJButton("Tools", e -> showTool());
layoutEater.eatJButton("Rebase", e -> Rebase());
layoutEater.eatJButton("Revert", e -> Revert());
layoutEater.eatJButton("Tools", e -> showTool());

/* viewport */
Container row_viewport = layoutEater.startNewLayout();
Expand Down Expand Up @@ -446,7 +446,12 @@ static class LayouteatMan {
Button button;
JLabel label;
JTextField etFloat;
private JButton jbutton;
JButton jbutton;

LayouteatMan Wrap(Container cont) {
fft = cont;
return this;
}

LayouteatMan(ItemListener itemListener, DocumentListener inputListener, MouseWheelListener mouseWheelListener) {
_itemListener = itemListener;
Expand Down Expand Up @@ -564,6 +569,20 @@ void setDocumentText(CharSequence text, int selOffset) {
}
}

/** Replace selection to tweaked string. */
void replaceSelectedPathdata(String text) {
if(mDocument!=null && currentStart<currentEnd && currentStart>=0) {
Runnable runnable = () -> {
mDocument.deleteString(currentStart, currentEnd);
mDocument.insertString(currentStart, text);
currentEnd = currentStart + text.length();
currentText=text;
mEditor.getSelectionModel().setSelection(currentStart, currentEnd);
};
WriteCommandAction.runWriteCommandAction(mProject, runnable);
}
}

/** Revert the string that is first fetched via {@link #Rebase} */
private void Revert() {
String text = currentText;
Expand Down Expand Up @@ -733,7 +752,7 @@ private static String trimFloatString(String input) {
return /*((st > 0) || (*/len < input.length()/*))*/ ? input.substring(st, len) : input;
}

private static Float parsefloat(String text){
static Float parsefloat(String text){
try {
return Float.parseFloat(text);
} catch (Exception ignored) { }
Expand Down Expand Up @@ -865,7 +884,7 @@ private void resizeImage() {
WriteCommandAction.runWriteCommandAction(mProject, resizeImageRunnable);
}

private final static Pattern reg = Pattern.compile("[MmLlZzSsCcVvHhAaQqTt ]");
final static Pattern regSep = Pattern.compile("[MmLlZzSsCcVvHhAaQqTt ]");
private final static Pattern regLower = Pattern.compile("[a-z]");
private final static Pattern regVertical = Pattern.compile("[Vv]");

Expand All @@ -878,7 +897,7 @@ public static String tweak_path_internal(StringBuilder pathbuilder, String pathd
pathbuilder.setLength(0);
}
//Pattern regHorizontal = Pattern.compile("[Hh]");
Matcher m = reg.matcher(pathdata);
Matcher m = regSep.matcher(pathdata);
int idx = 0;
String lastCommand = null;
Float[] firstOrg = null;
Expand Down Expand Up @@ -1102,7 +1121,7 @@ public static String tweak_path_internal(StringBuilder pathbuilder, String pathd
}


private static void Log(Object... o) {
static void Log(Object... o) {
StringBuilder msg= new StringBuilder();
if(o!=null)
for (Object value : o) {
Expand Down

0 comments on commit 860ade7

Please sign in to comment.