package fr.adrienbrault.idea.symfony2plugin.translation.parser;
import org.jetbrains.annotations.Nullable;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class TranslationStringParser {
public TranslationStringMap parse(String file) {
return this.parse(new File(file));
}
public TranslationStringMap parsePathMatcher(String path) {
File file = new File(path);
File[] files = file.listFiles();
if(null == files) {
return new TranslationStringMap();
}
for (final File fileEntry : files) {
if (!fileEntry.isDirectory()) {
String fileName = fileEntry.getName();
if( null != fileName && fileName.endsWith("php")) {
return this.parse(fileEntry);
}
}
}
return new TranslationStringMap();
}
@Nullable
public TranslationStringMap parse(File file) {
String string = "";
try {
string = this.fileToString(file.getPath());
} catch (IOException e) {
return null;
}
TranslationStringMap string_map = new TranslationStringMap();
Matcher matcher = Pattern.compile("'([\\w]+)'\\s=>.*?array\\s\\((.*?)\\s\\),", Pattern.MULTILINE).matcher(string);
while(matcher.find()){
String domain = matcher.group(1);
String array_strings = matcher.group(2);
Matcher match_strings = Pattern.compile("\\s'(.*?)'\\s=>\\s'.*?',\\s", Pattern.MULTILINE).matcher(array_strings);
while(match_strings.find()){
string_map.addString(domain, match_strings.group(1));
}
}
return string_map;
}
private String fileToString(String filename) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(filename));
StringBuilder builder = new StringBuilder();
String line;
while((line = reader.readLine()) != null){
builder.append(line);
}
return builder.toString();
}
}