Skip to content

Commit e4818fd

Browse files
committed
Add new features
AlignBlockingAssignments AlignLineComment AlignNoBlockingAssignments SpacesBlockingAssignment SpacesInParentheses SpacesNoBlockingAssignment
1 parent e7af9e0 commit e4818fd

16 files changed

+422
-30
lines changed

nbactions.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<goal>org.codehaus.mojo:exec-maven-plugin:1.5.0:exec</goal>
1111
</goals>
1212
<properties>
13-
<exec.args>-classpath %classpath net.ericsonj.verilog.VerilogFormat -f verilog/genrom.v -s verilog/.verilog-format.properties</exec.args>
13+
<exec.args>-classpath %classpath net.ericsonj.verilog.VerilogFormat -p -f verilog/genrom.v</exec.args>
1414
<exec.executable>java</exec.executable>
1515
<exec.workingdir>/home/ericson/PROJECTS/JAVA/MAVEN/verilog-format</exec.workingdir>
1616
</properties>
@@ -25,7 +25,7 @@
2525
<goal>org.codehaus.mojo:exec-maven-plugin:1.5.0:exec</goal>
2626
</goals>
2727
<properties>
28-
<exec.args>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath net.ericsonj.verilog.VerilogFormat -f verilog/genrom.v -s verilog/.verilog-format.properties</exec.args>
28+
<exec.args>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath net.ericsonj.verilog.VerilogFormat -p -f verilog/genrom.v</exec.args>
2929
<exec.executable>java</exec.executable>
3030
<jpda.listen>true</jpda.listen>
3131
<exec.workingdir>/home/ericson/PROJECTS/JAVA/MAVEN/verilog-format</exec.workingdir>
@@ -41,7 +41,7 @@
4141
<goal>org.codehaus.mojo:exec-maven-plugin:1.5.0:exec</goal>
4242
</goals>
4343
<properties>
44-
<exec.args>-classpath %classpath net.ericsonj.verilog.VerilogFormat -f verilog/genrom.v -s verilog/.verilog-format.properties</exec.args>
44+
<exec.args>-classpath %classpath net.ericsonj.verilog.VerilogFormat -p -f verilog/genrom.v</exec.args>
4545
<exec.executable>java</exec.executable>
4646
<exec.workingdir>/home/ericson/PROJECTS/JAVA/MAVEN/verilog-format</exec.workingdir>
4747
</properties>

src/main/java/net/ericsonj/verilog/FileFormat.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ public class FileFormat {
1010

1111
public static final String SPACES_BEFORE_TRAILING_COMMENTS = "SpacesBeforeTrailingComments";
1212
public static final String SPACES_BEFORE_IF_STATEMENT = "SpacesBeforeIfStatement";
13+
public static final String SPACES_BLOKING_ASSIGNMENTS = "SpacesBlockingAssignment";
14+
public static final String SPACES_NOBLOKING_ASSIGNMENTS = "SpacesNoBlockingAssignment";
15+
public static final String SPACES_IN_PARENTHESES = "SpacesInParentheses";
16+
public static final String ALIGN_BLOKING_ASSIGNMENTS = "AlignBlockingAssignments";
17+
public static final String ALIGN_NOBLOKING_ASSIGNMENTS = "AlignNoBlockingAssignments";
18+
public static final String ALIGN_LINE_COMMENTS = "AlignLineComments";
19+
1320
public static final char INDENT_TAB = '\t';
1421
public static final char INDENT_SPACE = ' ';
1522
public static final char LF = '\n';
@@ -66,10 +73,33 @@ public FormatSetting getSetting() {
6673
public int getSpacesBeforeTrailingComments() {
6774
return this.setting.getIntValue(SPACES_BEFORE_TRAILING_COMMENTS, 1);
6875
}
69-
76+
7077
public int getSpacesBeforeIfStatement() {
7178
return this.setting.getIntValue(SPACES_BEFORE_IF_STATEMENT, 1);
7279
}
7380

74-
81+
public int getSpacesBlockingAssignment() {
82+
return this.setting.getIntValue(SPACES_BLOKING_ASSIGNMENTS, 1);
83+
}
84+
85+
public int getSpacesNoBlockingAssignment() {
86+
return this.setting.getIntValue(SPACES_NOBLOKING_ASSIGNMENTS, 1);
87+
}
88+
89+
public boolean getAlignBlockingAssignments() {
90+
return this.setting.getBooleanValue(ALIGN_BLOKING_ASSIGNMENTS, true);
91+
}
92+
93+
public boolean getAlignNoBlockingAssignments() {
94+
return this.setting.getBooleanValue(ALIGN_NOBLOKING_ASSIGNMENTS, true);
95+
}
96+
97+
public boolean getAlignLineComments() {
98+
return this.setting.getBooleanValue(ALIGN_LINE_COMMENTS, false);
99+
}
100+
101+
public boolean getSpacesInParentheses() {
102+
return this.setting.getBooleanValue(SPACES_IN_PARENTHESES, false);
103+
}
104+
75105
}

src/main/java/net/ericsonj/verilog/FormatSetting.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,10 @@ public int getIntValue(String key, int defaultValue) {
5151
int value = Integer.parseInt(prop.getProperty(key, String.valueOf(defaultValue)));
5252
return value;
5353
}
54+
55+
public boolean getBooleanValue(String key, boolean defaultValue){
56+
String value = getStringValue(key, String.valueOf(defaultValue));
57+
return Boolean.valueOf(value);
58+
}
5459

5560
}

src/main/java/net/ericsonj/verilog/VerilogFormat.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@
22

33
import java.io.File;
44
import net.ericsonj.commonscli.ConsoleApplication;
5+
import net.ericsonj.verilog.decorations.AlignBlockingAssignments;
6+
import net.ericsonj.verilog.decorations.AlignLineComment;
7+
import net.ericsonj.verilog.decorations.AlignNoBlockingAssignments;
58
import net.ericsonj.verilog.decorations.ModuleAlign;
69
import net.ericsonj.verilog.decorations.SpacesBeforeIfStatement;
710
import net.ericsonj.verilog.decorations.SpacesBeforeTrailingComment;
11+
import net.ericsonj.verilog.decorations.SpacesBlockingAssignment;
12+
import net.ericsonj.verilog.decorations.SpacesInParentheses;
13+
import net.ericsonj.verilog.decorations.SpacesNoBlockingAssignment;
814
import org.apache.commons.cli.CommandLine;
915
import org.apache.commons.cli.Option;
1016
import org.apache.commons.cli.Options;
@@ -101,6 +107,12 @@ private void formatFile(File file) {
101107
vFile.addStyle(new ModuleAlign());
102108
vFile.addStyle(new SpacesBeforeTrailingComment());
103109
vFile.addStyle(new SpacesBeforeIfStatement());
110+
vFile.addStyle(new SpacesBlockingAssignment());
111+
vFile.addStyle(new SpacesNoBlockingAssignment());
112+
vFile.addStyle(new SpacesInParentheses());
113+
vFile.addStyle(new AlignBlockingAssignments());
114+
vFile.addStyle(new AlignNoBlockingAssignments());
115+
vFile.addStyle(new AlignLineComment());
104116
vFile.format();
105117
if (printFileFormated) {
106118
vFile.print();

src/main/java/net/ericsonj/verilog/decorations/AbstractLineDecoration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ public void applyStyle(FileFormat format, LinkedList<String> buffer) {
2929
}
3030
if (state == BLOCK_COMMNET_STATE.INIT
3131
|| (state == BLOCK_COMMNET_STATE.IN_BLOCK_COMMNET && inBlockComment())) {
32-
line = decorateLine(format, line);
32+
line = decorateLine(format, line, i);
3333
buffer.remove(i);
3434
buffer.add(i, line);
3535
}
3636
}
3737
}
3838

39-
public abstract String decorateLine(FileFormat format, String line);
39+
public abstract String decorateLine(FileFormat format, String line, int lineIndex);
4040

4141
public abstract boolean inBlockComment();
4242

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package net.ericsonj.verilog.decorations;
2+
3+
import java.util.LinkedList;
4+
import net.ericsonj.verilog.FileFormat;
5+
6+
/**
7+
*
8+
* @author ericson
9+
*/
10+
public class AlignBlockingAssignments extends AlignConsecutive {
11+
12+
public AlignBlockingAssignments() {
13+
super(".*[^<]", "=", ".*[;]");
14+
}
15+
16+
@Override
17+
public void applyStyle(FileFormat format, LinkedList<String> buffer) {
18+
if (format.getAlignBlockingAssignments()) {
19+
super.applyStyle(format, buffer); //To change body of generated methods, choose Tools | Templates.
20+
}
21+
}
22+
23+
}
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
package net.ericsonj.verilog.decorations;
2+
3+
import java.util.LinkedList;
4+
import net.ericsonj.util.StringHelper;
5+
import net.ericsonj.verilog.FileFormat;
6+
7+
/**
8+
*
9+
* @author ericson
10+
*/
11+
public class AlignConsecutive extends AbstractLineDecoration {
12+
13+
private static final String COMMNET = "[ ]*[//|/*].*";
14+
15+
public enum STATE {
16+
INIT,
17+
IS_CONSECUTIVE,
18+
CONSECUTIVE
19+
}
20+
21+
private STATE state = STATE.INIT;
22+
private int alignIndex;
23+
private int startLineIndex;
24+
private int endLineIndex;
25+
private LinkedList<AssignmentLine> assignmentsBlocks = new LinkedList<>();
26+
27+
private String beforeKeyRegex;
28+
private String key;
29+
private String afterKeyRegex;
30+
31+
public AlignConsecutive(String beforeKeyRegex, String KeyRegex, String afterKeyRegex) {
32+
this.beforeKeyRegex = beforeKeyRegex;
33+
this.key = KeyRegex;
34+
this.afterKeyRegex = afterKeyRegex;
35+
}
36+
37+
private String getLinePattern() {
38+
return beforeKeyRegex + key + afterKeyRegex;
39+
}
40+
41+
@Override
42+
public void applyStyle(FileFormat format, LinkedList<String> buffer) {
43+
super.applyStyle(format, buffer); //To change body of generated methods, choose Tools | Templates.
44+
45+
assignmentsBlocks.forEach((assignmentsBlock) -> {
46+
47+
for (int i = assignmentsBlock.getStartLineIndex(); i <= assignmentsBlock.getEndLineIndex(); i++) {
48+
String line = buffer.get(i);
49+
int assignmentIdx = line.indexOf(getKey());
50+
if (assignmentIdx < assignmentsBlock.getAlignValue()) {
51+
line = line.replaceAll(getKey(), StringHelper.getSpaces(assignmentsBlock.getAlignValue() - assignmentIdx) + getKey());
52+
if (getKey().equals("=")) {
53+
line = line.replaceAll("[ ]*=[ ]*=[ ]*", " == ");
54+
}
55+
}
56+
buffer.remove(i);
57+
buffer.add(i, line);
58+
}
59+
60+
});
61+
}
62+
63+
@Override
64+
public String decorateLine(FileFormat format, String line, int lineIndex) {
65+
switch (state) {
66+
case INIT:
67+
if (line.matches(getLinePattern()) || line.matches(getLinePattern() + COMMNET)) {
68+
alignIndex = line.indexOf(getKey());
69+
startLineIndex = lineIndex;
70+
state = STATE.IS_CONSECUTIVE;
71+
}
72+
break;
73+
case IS_CONSECUTIVE:
74+
if (line.matches(getLinePattern()) || line.matches(getLinePattern() + COMMNET)) {
75+
int aux = line.indexOf(getKey());
76+
if (aux > alignIndex) {
77+
alignIndex = aux;
78+
}
79+
endLineIndex = lineIndex;
80+
state = STATE.CONSECUTIVE;
81+
} else {
82+
state = STATE.INIT;
83+
}
84+
break;
85+
case CONSECUTIVE:
86+
if (line.matches(getLinePattern()) || line.matches(getLinePattern() + COMMNET)) {
87+
int aux = line.indexOf(getKey());
88+
if (aux > alignIndex) {
89+
alignIndex = aux;
90+
}
91+
endLineIndex = lineIndex;
92+
state = STATE.CONSECUTIVE;
93+
} else {
94+
assignmentsBlocks.add(new AssignmentLine(startLineIndex, endLineIndex, alignIndex));
95+
alignIndex = 0;
96+
state = STATE.INIT;
97+
}
98+
break;
99+
default:
100+
throw new AssertionError(state.name());
101+
}
102+
return line;
103+
}
104+
105+
@Override
106+
public boolean inBlockComment() {
107+
return false;
108+
}
109+
110+
public String getBeforeKeyRegex() {
111+
return beforeKeyRegex;
112+
}
113+
114+
public void setBeforeKeyRegex(String beforeKeyRegex) {
115+
this.beforeKeyRegex = beforeKeyRegex;
116+
}
117+
118+
public String getKey() {
119+
return key;
120+
}
121+
122+
public void setKey(String key) {
123+
this.key = key;
124+
}
125+
126+
public String getAfterKeyRegex() {
127+
return afterKeyRegex;
128+
}
129+
130+
public void setAfterKeyRegex(String afterKeyRegex) {
131+
this.afterKeyRegex = afterKeyRegex;
132+
}
133+
134+
public class AssignmentLine {
135+
136+
private int startLineIndex;
137+
private int endLineIndex;
138+
private int alignValue;
139+
140+
public AssignmentLine(int startLineIndex, int endLineIndex, int alignValue) {
141+
this.startLineIndex = startLineIndex;
142+
this.endLineIndex = endLineIndex;
143+
this.alignValue = alignValue;
144+
}
145+
146+
public int getStartLineIndex() {
147+
return startLineIndex;
148+
}
149+
150+
public void setStartLineIndex(int startLineIndex) {
151+
this.startLineIndex = startLineIndex;
152+
}
153+
154+
public int getEndLineIndex() {
155+
return endLineIndex;
156+
}
157+
158+
public void setEndLineIndex(int endLineIndex) {
159+
this.endLineIndex = endLineIndex;
160+
}
161+
162+
public int getAlignValue() {
163+
return alignValue;
164+
}
165+
166+
public void setAlignValue(int alignValue) {
167+
this.alignValue = alignValue;
168+
}
169+
170+
@Override
171+
public String toString() {
172+
return "AssignmentLine{" + "startLineIndex=" + startLineIndex + ", endLineIndex=" + endLineIndex + ", alignValue=" + alignValue + '}';
173+
}
174+
175+
}
176+
177+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package net.ericsonj.verilog.decorations;
2+
3+
import java.util.LinkedList;
4+
import net.ericsonj.verilog.FileFormat;
5+
6+
/**
7+
*
8+
* @author ericson
9+
*/
10+
public class AlignLineComment extends AlignConsecutive {
11+
12+
public AlignLineComment() {
13+
super(".*", "//", ".*");
14+
}
15+
16+
@Override
17+
public void applyStyle(FileFormat format, LinkedList<String> buffer) {
18+
if (format.getAlignLineComments()) {
19+
super.applyStyle(format, buffer); //To change body of generated methods, choose Tools | Templates.
20+
}
21+
}
22+
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package net.ericsonj.verilog.decorations;
2+
3+
import java.util.LinkedList;
4+
import net.ericsonj.verilog.FileFormat;
5+
6+
/**
7+
*
8+
* @author ericson
9+
*/
10+
public class AlignNoBlockingAssignments extends AlignConsecutive {
11+
12+
public AlignNoBlockingAssignments() {
13+
super(".*", "<=", ".*[;]");
14+
}
15+
16+
@Override
17+
public void applyStyle(FileFormat format, LinkedList<String> buffer) {
18+
if (format.getAlignNoBlockingAssignments()) {
19+
super.applyStyle(format, buffer); //To change body of generated methods, choose Tools | Templates.
20+
}
21+
}
22+
}

src/main/java/net/ericsonj/verilog/decorations/SpacesBeforeIfStatement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
public class SpacesBeforeIfStatement extends AbstractLineDecoration {
1313

1414
@Override
15-
public String decorateLine(FileFormat format, String line) {
15+
public String decorateLine(FileFormat format, String line, int lineIndex) {
1616
int spaces = format.getSpacesBeforeIfStatement();
1717
String aux = line.replaceAll("if[ ]*", "if" + StringHelper.getSpaces(spaces));
1818
aux = aux.replaceAll("else[ ]*", "else" + StringHelper.getSpaces(spaces));

0 commit comments

Comments
 (0)