v++
Учет настроек сравнения при сравнении пакетов сапфор
This commit is contained in:
@@ -1163,5 +1163,118 @@ public class Utils {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
public static Pair<Vector<String>, Vector<String>> getFortranLines(String text) {
|
||||
Vector<String> lines = new Vector<>();
|
||||
Vector<String> visible_lines = new Vector<>();
|
||||
//1.прочитать весь текст.
|
||||
char[] chars = text.toCharArray();
|
||||
//по символам получить строки.
|
||||
char c = 0; //текущий символ
|
||||
int i = 0; //индекс текущего символа.
|
||||
StringBuilder line = new StringBuilder(); //текущая строка
|
||||
StringBuilder v_line = new StringBuilder(); //текущая строка
|
||||
while (i < chars.length) {
|
||||
c = chars[i];
|
||||
//System.out.print("`"+c+"`");
|
||||
++i;
|
||||
switch (c) {
|
||||
case '\r': //возврат каретки, игнор
|
||||
break;
|
||||
case ' ':
|
||||
case '\t':
|
||||
if (Global.db.settings.get(SettingName.SpacesOn).toBoolean()) line.append(c);
|
||||
v_line.append(c);
|
||||
break;
|
||||
case '\n': //конец строки
|
||||
if (Global.db.settings.get(SettingName.FortranWrapsOn).toBoolean()) {
|
||||
//оракул. лезем в начало следующей строки
|
||||
//и анализируем первые 5 символов
|
||||
boolean hasWrap = false;
|
||||
int wi;
|
||||
//------
|
||||
//System.out.println("checking wrap...");
|
||||
//с нуля потому что и уже увеличено.
|
||||
for (int j = 0; (j < 6) && ((wi = i + j) < chars.length); ++j) {
|
||||
char s = chars[wi];
|
||||
// System.out.print(s);
|
||||
if ((j == 0) && ((s == 'c') || (s == 'C') || (s == '!'))) {
|
||||
// System.out.println("next line is FL comment");
|
||||
break;
|
||||
}
|
||||
if ((j > 0) && (j < 5) && (s == '!')) {
|
||||
// System.out.println("next line is comment");
|
||||
break;
|
||||
}
|
||||
if ((j == 5) && (s != ' ')) {
|
||||
hasWrap = true;
|
||||
i = wi + 1;
|
||||
// System.out.println("next line is WRAP");
|
||||
break;
|
||||
}
|
||||
}
|
||||
// System.out.println();
|
||||
//-----
|
||||
if (hasWrap)
|
||||
break;
|
||||
}
|
||||
// System.out.println();
|
||||
//добавление строки в результат.
|
||||
if ((line.length() > 0) || Global.db.settings.get(SettingName.EmptyLinesOn).toBoolean() &&
|
||||
Global.db.settings.get(SettingName.SpacesOn).toBoolean()) {
|
||||
lines.add(line.toString());
|
||||
visible_lines.add(v_line.toString());
|
||||
}
|
||||
//сброс
|
||||
line = new StringBuilder();
|
||||
v_line = new StringBuilder();
|
||||
break;
|
||||
default:
|
||||
line.append(c);
|
||||
v_line.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((i > 0) && (c != '\n')) {
|
||||
//строка оборвалась на EOF
|
||||
//добавление строки в результат.
|
||||
if ((line.length() > 0) || Global.db.settings.get(SettingName.EmptyLinesOn).toBoolean() && Global.db.settings.get(SettingName.SpacesOn).toBoolean()) {
|
||||
lines.add(line.toString());
|
||||
visible_lines.add(v_line.toString());
|
||||
}
|
||||
}
|
||||
return new Pair<>(lines, visible_lines);
|
||||
}
|
||||
public static boolean CompareLines(String line1_raw, String line2_raw) {
|
||||
String line1 = line1_raw;
|
||||
String line2 = line2_raw;
|
||||
if (!Global.db.settings.get(SettingName.RegisterOn).toBoolean()) {
|
||||
line1 = line1.toUpperCase();
|
||||
line2 = line2.toUpperCase();
|
||||
}
|
||||
if (!Global.db.settings.get(SettingName.SpacesOn).toBoolean()) {
|
||||
line1 = remove(line1, " ", "\t");
|
||||
line2 = remove(line2, " ", "\t");
|
||||
}
|
||||
return line1.equals(line2);
|
||||
}
|
||||
public static boolean Contains(Vector<String> list, String line, int max_index) {
|
||||
int last_index = -1;
|
||||
for (int i = 0; i < list.size(); ++i)
|
||||
if (CompareLines(list.get(i), line)) last_index = i;
|
||||
return (last_index >= max_index);
|
||||
}
|
||||
public static boolean compareFortranTexts(String text1, String text2) {
|
||||
Pair<Vector<String>, Vector<String>> p1 = getFortranLines(text1);
|
||||
Pair<Vector<String>, Vector<String>> p2 = getFortranLines(text2);
|
||||
Vector<String> lines1 = p1.getKey();
|
||||
Vector<String> lines2 = p2.getKey();
|
||||
if (lines1.size() != lines2.size())
|
||||
return false;
|
||||
for (int i = 0; i < lines1.size(); ++i) {
|
||||
if (!CompareLines(lines1.get(i), lines2.get(i)))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user