Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5ab1882

Browse files
committed
1 parent865a464 commit5ab1882

File tree

1 file changed

+42
-34
lines changed

1 file changed

+42
-34
lines changed

‎src/main/java/com/github/difflib/unifieddiff/UnifiedDiffReader.java‎

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,16 @@ public final class UnifiedDiffReader {
4141

4242
privatefinalInternalUnifiedDiffReaderREADER;
4343
privatefinalUnifiedDiffdata =newUnifiedDiff();
44-
privatefinalUnifiedDiffLine[]MAIN_PARSER_RULES =newUnifiedDiffLine[]{
45-
newUnifiedDiffLine(true,"^diff\\s",this::processDiff),
46-
newUnifiedDiffLine(true,"^index\\s[\\da-zA-Z]+\\.\\.[\\da-zA-Z]+(\\s(\\d+))?$",this::processIndex),
47-
newUnifiedDiffLine(true,"^---\\s",this::processFromFile),
48-
newUnifiedDiffLine(true,"^\\+\\+\\+\\s",this::processToFile),
49-
newUnifiedDiffLine(false,UNIFIED_DIFF_CHUNK_REGEXP,this::processChunk),
50-
newUnifiedDiffLine("^\\s+",this::processNormalLine),
51-
newUnifiedDiffLine("^-",this::processDelLine),
52-
newUnifiedDiffLine("^+",this::processAddLine)
53-
};
44+
45+
privatefinalUnifiedDiffLineDIFF_COMMAND =newUnifiedDiffLine(true,"^diff\\s",this::processDiff);
46+
privatefinalUnifiedDiffLineINDEX =newUnifiedDiffLine(true,"^index\\s[\\da-zA-Z]+\\.\\.[\\da-zA-Z]+(\\s(\\d+))?$",this::processIndex);
47+
privatefinalUnifiedDiffLineFROM_FILE =newUnifiedDiffLine(true,"^---\\s",this::processFromFile);
48+
privatefinalUnifiedDiffLineTO_FILE =newUnifiedDiffLine(true,"^\\+\\+\\+\\s",this::processToFile);
49+
50+
privatefinalUnifiedDiffLineCHUNK =newUnifiedDiffLine(false,UNIFIED_DIFF_CHUNK_REGEXP,this::processChunk);
51+
privatefinalUnifiedDiffLineLINE_NORMAL =newUnifiedDiffLine("^\\s+",this::processNormalLine);
52+
privatefinalUnifiedDiffLineLINE_DEL =newUnifiedDiffLine("^-",this::processDelLine);
53+
privatefinalUnifiedDiffLineLINE_ADD =newUnifiedDiffLine("^+",this::processAddLine);
5454

5555
privateUnifiedDiffFileactualFile;
5656

@@ -63,32 +63,37 @@ public final class UnifiedDiffReader {
6363
// [/^---\s/, from_file], [/^\+\+\+\s/, to_file], [/^@@\s+\-(\d+),?(\d+)?\s+\+(\d+),?(\d+)?\s@@/, chunk],
6464
// [/^-/, del], [/^\+/, add], [/^\\ No newline at end of file$/, eof]];
6565
privateUnifiedDiffparse()throwsIOException,UnifiedDiffParserException {
66-
booleanheader =true;
6766
StringheaderTxt ="";
68-
StringtailTxt ="";
67+
LOG.log(Level.INFO,"header parsing");
68+
Stringline =null;
6969
while (READER.ready()) {
70-
Stringline =READER.readLine();
71-
if (line.matches("--\\s*")) {
70+
line =READER.readLine();
71+
LOG.log(Level.INFO,"parsing line {0}",line);
72+
if (DIFF_COMMAND.validLine(line) ||INDEX.validLine(line)
73+
||FROM_FILE.validLine(line) ||TO_FILE.validLine(line)) {
7274
break;
7375
}else {
74-
LOG.log(Level.INFO,"parsing line {0}",line);
75-
if (processLine(header,line) ==false) {
76-
if (header) {
77-
headerTxt +=line +"\n";
78-
}else {
79-
break;
80-
}
81-
}else {
82-
if (header) {
83-
header =false;
84-
data.setHeader(headerTxt);
85-
}
76+
headerTxt +=line +"\n";
77+
}
78+
}
79+
data.setHeader(headerTxt);
80+
81+
while (line !=null) {
82+
if (!CHUNK.validLine(line)) {
83+
if (processLine(line,DIFF_COMMAND,INDEX,FROM_FILE,TO_FILE) ==false) {
84+
thrownewUnifiedDiffParserException("parsing error at line " +line);
85+
}
86+
}else {
87+
if (processLine(line,CHUNK) ==false) {
88+
thrownewUnifiedDiffParserException("parsing error at line " +line);
8689
}
8790
}
91+
line =READER.readLine();
8892
}
8993

9094
finalizeChunk();
9195

96+
StringtailTxt ="";
9297
while (READER.ready()) {
9398
tailTxt +=READER.readLine() +"\n";
9499
}
@@ -112,13 +117,11 @@ public static UnifiedDiff parseUnifiedDiff(InputStream stream) throws IOExceptio
112117
returnparser.parse();
113118
}
114119

115-
privatebooleanprocessLine(booleanheader,Stringline)throwsUnifiedDiffParserException {
116-
for (UnifiedDiffLinerule :MAIN_PARSER_RULES) {
117-
if (header &&rule.isStopsHeaderParsing() || !header) {
118-
if (rule.processLine(line)) {
119-
LOG.info(" >>> processed rule " +rule.toString());
120-
returntrue;
121-
}
120+
privatebooleanprocessLine(Stringline,UnifiedDiffLine...rules)throwsUnifiedDiffParserException {
121+
for (UnifiedDiffLinerule :rules) {
122+
if (rule.processLine(line)) {
123+
LOG.info(" >>> processed rule " +rule.toString());
124+
returntrue;
122125
}
123126
}
124127
LOG.info(" >>> no rule matched " +line);
@@ -210,7 +213,7 @@ private String extractFileName(String line) {
210213
returnline.substring(4).replaceFirst("^(a|b)\\/","");
211214
}
212215

213-
classUnifiedDiffLine {
216+
finalclassUnifiedDiffLine {
214217

215218
privatefinalPatternpattern;
216219
privatefinalBiConsumer<MatchResult,String>command;
@@ -232,6 +235,11 @@ public UnifiedDiffLine(boolean stopsHeaderParsing, Pattern pattern, BiConsumer<M
232235
this.stopsHeaderParsing =stopsHeaderParsing;
233236
}
234237

238+
publicbooleanvalidLine(Stringline) {
239+
Matcherm =pattern.matcher(line);
240+
returnm.find();
241+
}
242+
235243
publicbooleanprocessLine(Stringline)throwsUnifiedDiffParserException {
236244
Matcherm =pattern.matcher(line);
237245
if (m.find()) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp