Skip to content

Commit 0a42322

Browse files
author
magiclu550
committed
修复bug
1 parent 984488d commit 0a42322

File tree

5 files changed

+35
-10
lines changed

5 files changed

+35
-10
lines changed

src/main/java/cn/wenyan/compiler/WenYanCompilerImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ public String compile(String wenyan){
219219
String result = factory.compile(wenyans)[0];
220220
builder.append("\n").append(result);
221221
this.clearCompiled();
222+
222223
}
223224
return builder.toString();
224225
}catch (Exception e){
@@ -289,7 +290,9 @@ public List<Integer> getNowCompiling() {
289290

290291
public void clearCompiled(){
291292
List<String> newWenyans = new ArrayList<>(Arrays.asList(wenyans));
293+
Utils.removeDuplicateWithOrder(nowCompiling);
292294
for(int index:nowCompiling){
295+
setIndexCode();
293296
newWenyans.set(index,null);
294297
}
295298
Iterator<String> str = newWenyans.iterator();
@@ -357,6 +360,7 @@ private String[] base(String wenyan){
357360
throw new SyntaxException("此占位符不可存在: {{$numberHASH~}}");
358361
}
359362
Map<String,String> nowMap = new HashMap<>();
363+
wenyan = JuDouUtils.splitComment(wenyan);
360364
wenyan = wenYansToHASH(wenyan,nowMap);
361365
wenyan = replaceOnlyString(wenyan,nowMap);
362366
wenyan = nameToHASH(wenyan,nowMap);

src/main/java/cn/wenyan/compiler/WenYanLib.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ object WenYanLib {
3838

3939
final val IF_END : String = "if_end"
4040

41-
final val SPLIT : String = "[。!,!,、]"
41+
final val SPLIT : String = "[。!,、]"
4242

4343
final val STRING_START : String = "「「"
4444

src/main/java/cn/wenyan/compiler/streams/FunctionCompileStream.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,13 @@ public CompileResult compile(String[] wenyan) {
8181
}
8282
if(Utils.matches(wenyan[0],WenYanLib.RUN_FUNCTION())){
8383
Utils.inputWenyan(compiler,0);
84-
String name = Utils.getString(WenYanLib.VAR_NAME_FOR(),wenyan[0]).replace("之",".");
84+
String find = Utils.getString(WenYanLib.VAR_NAME_FOR(),wenyan[0]);
85+
String name;
86+
if(find != null) {
87+
name = find.replace("之", ".");
88+
}else{
89+
name = wenyan[0].substring(wenyan[0].indexOf("施")+1).replace("之", ".");
90+
}
8591
StringBuilder builder = new StringBuilder();
8692
builder.append(Utils.getValue(name,stream)).append("(");
8793
int end = 0;

src/main/java/cn/wenyan/compiler/utils/JuDouUtils.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,15 @@ object JuDouUtils {
3333
}
3434
}
3535
)
36-
splitComment(builder.toString())
36+
builder.toString()
3737
}
3838

3939
def splitWenYan(strings: String) : java.util.List[String] ={
4040
val string = strings.replace(" ","")
4141
val list = new util.ArrayList[String]()
4242
var builder = new StringBuilder
4343
var index = 0
44+
println(strings)
4445
while(index < string.length){
4546
var isAppend = false
4647
val s = string(index)
@@ -100,13 +101,15 @@ object JuDouUtils {
100101
private def getString(target: String): Boolean ={
101102
val patterns = WenYanLib.syntaxs
102103
for(p <- patterns){
103-
if(target.matches(p._2))return true
104+
if(target.matches(p._2)){
105+
return true
106+
}
104107
}
105108
false
106109
}
107110

108111
var patterns = WenYanLib.patterns
109-
private def splitComment(now : String): String ={
112+
def splitComment(now : String): String ={
110113
var string = now
111114
var index = 0
112115
while(index < string.length){
@@ -132,8 +135,10 @@ object JuDouUtils {
132135
}
133136
//得到index
134137
val builder = new StringBuilder(string)
135-
builder.insert(index+1,"")
136-
string = builder.toString()
138+
if(!string(index+1).toString.matches(WenYanLib.SPLIT)){
139+
builder.insert(index+1,"")
140+
string = builder.toString()
141+
}
137142
}
138143
index+=1
139144
}

src/main/java/cn/wenyan/compiler/utils/Utils.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import cn.wenyan.compiler.WenYanLib;
66

77
import java.lang.reflect.Method;
8-
import java.util.ArrayList;
9-
import java.util.List;
8+
import java.util.*;
109
import java.util.regex.Matcher;
1110
import java.util.regex.Pattern;
1211

@@ -31,7 +30,6 @@ public static String getString(String patternId,String thing){
3130
}
3231

3332
public static void inputWenyan(WenYanCompilerImpl compiler, int wenyanIndex){
34-
compiler.setIndexCode();
3533
compiler.getNowCompiling().add(wenyanIndex);
3634
}
3735

@@ -40,6 +38,18 @@ public static String getStringFrom(String patternId,String thing,String start){
4038
return value.substring(value.indexOf(start)+1);
4139
}
4240

41+
public static void removeDuplicateWithOrder(List list) {
42+
Set set = new HashSet();
43+
List newList = new ArrayList();
44+
for (Iterator iter = list.iterator(); iter.hasNext();) {
45+
Object element = iter.next();
46+
if (set.add(element))
47+
newList.add(element);
48+
}
49+
list.clear();
50+
list.addAll(newList);
51+
}
52+
4353
public static String getStringFrom(String patternId,String thing,String start,String end){
4454
String value = getString(patternId,thing);
4555
if(patternId.equals(WenYanLib.STRING())||patternId.equals(WenYanLib.COMMENT())){

0 commit comments

Comments
 (0)