Revision 1215

View differences:

org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/resources-plugin/scripting/lib/pylint/utils.py
945 945

  
946 946
PY_EXTS = ('.py', '.pyc', '.pyo', '.pyw', '.so', '.dll')
947 947

  
948
def listdir(directory):
949
  #print "@@@ listdir ", repr(directory)
950
  if directory!=u'__pyclasspath__/':
951
    return os.listdir(directory)
952
  files = list()
953
  urls = sys.getClassLoader().getURLs()
954
  for url in urls:
955
    f = unicode(url)
956
    if f.startswith("file:") and f.endswith("/"):
957
      f = f[5:]
958
      for filename in os.listdir(f):
959
        files.append(filename)
960
  return files
961

  
962
def join_ex(directory,filename):
963
  #print("### join_ex: ", repr(directory), repr(filename))
964
  if directory!=u'__pyclasspath__/':
965
    return join(directory,filename)
966
  return sys.getClassLoader().getResourcePath(join(directory,filename))
967

  
948 968
def register_plugins(linter, directory):
949 969
    """load all module and package in the given directory, looking for a
950 970
    'register' function in each one, used to register pylint checkers
951 971
    """
952 972
    imported = {}
953
    for filename in os.listdir(directory):
973
    for filename in listdir_ex(directory):
954 974
        base, extension = splitext(filename)
955 975
        if base in imported or base == '__pycache__':
956 976
            continue
957 977
        if extension in PY_EXTS and base != '__init__' or (
958
                not extension and isdir(join(directory, base))):
978
                not extension and isdir(join_ex(directory, base))):
959 979
            try:
960
                module = load_module_from_file(join(directory, filename))
980
                module = load_module_from_file(join_ex(directory, filename))
961 981
            except ValueError:
962 982
                # empty module name (usually emacs auto-save files)
963 983
                continue
964 984

  
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/DefaultScriptingExternalFile.java
3 3

  
4 4
import java.io.File;
5 5
import java.io.IOException;
6
import java.nio.charset.Charset;
6 7
import java.util.ArrayList;
7 8
import java.util.List;
8 9
import java.util.logging.Level;
9 10
import java.util.logging.Logger;
11
import org.apache.commons.io.Charsets;
10 12
import org.apache.commons.io.FileUtils;
11 13
import org.apache.tika.Tika;
12 14
import org.gvsig.scripting.ScriptingExternalFile;
......
135 137
    @Override
136 138
    public String getContentsAsText() {
137 139
        try {
138
            return FileUtils.readFileToString(externFile);
140
            Charset encoding = Charsets.toCharset(EncodingUtils.getEncoding(externFile));
141
            return FileUtils.readFileToString(externFile, encoding);
139 142
        } catch (IOException ex) {
140 143
            throw new RuntimeException(ex);
141 144
        }
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/DefaultScriptingScript.java
21 21
import javax.script.Invocable;
22 22
import javax.script.ScriptEngine;
23 23
import javax.script.ScriptException;
24
import org.apache.commons.io.Charsets;
24 25

  
25 26
import org.apache.commons.io.FileUtils;
26 27
import org.apache.commons.io.FilenameUtils;
......
228 229
            File f = null;
229 230
            try {
230 231
                f = this.getFileResource(this.extension);
231
                this.code = FileUtils.readFileToString(f);
232
                Charset encoding = Charsets.toCharset(EncodingUtils.getEncoding(f));
233
                this.code = FileUtils.readFileToString(f, encoding);
232 234
            } catch (IOException e) {
233 235
                String fname = (f == null) ? "(null)" : f.getAbsolutePath();
234 236
                logger.warn("Can't load code from file '" + fname + "'.");
org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.lib/org.gvsig.scripting.lib.impl/src/main/java/org/gvsig/scripting/impl/EncodingUtils.java
1
package org.gvsig.scripting.impl;
2

  
3
import java.io.BufferedReader;
4
import java.io.File;
5
import java.io.FileInputStream;
6
import java.io.IOException;
7
import java.io.InputStream;
8
import java.io.InputStreamReader;
9
import java.util.regex.Matcher;
10
import java.util.regex.Pattern;
11
import org.apache.commons.lang3.StringUtils;
12

  
13
/**
14
 *
15
 * @author jjdelcerro
16
 */
17
public class EncodingUtils {
18

  
19
  private static final Pattern RE_ENCODING = Pattern.compile(".*encoding[:]\\s*\"?([a-zA-Z_][a-zA-Z0-9_-]*)\"?.*");
20

  
21
  public static String getEncoding(File f) {
22
    String line = getFirstLine(f);
23
    String encoding = getEncoding(line);
24
    return encoding;
25
  }
26

  
27
  public static String getEncoding(InputStream is) {
28
    String line = getFirstLine(is);
29
    String encoding = getEncoding(line);
30
    return encoding;
31
  }
32

  
33
  public static String getEncoding(String line) {
34
    if( StringUtils.isBlank(line) ) {
35
      return null;
36
    }
37
    String encoding = null;
38
    Matcher m = RE_ENCODING.matcher(line);
39
    if (m != null && m.matches() && m.groupCount() == 1) {
40
      String s = m.group(1);
41
      if (!StringUtils.isBlank(s)) {
42
        encoding = s;
43
      }
44
    }
45
    return encoding;
46
  }
47

  
48
  public static String getFirstLine(File f) {
49
    String line;
50
    try (FileInputStream is = new FileInputStream(f)) {
51
      line = getFirstLine(is);
52
    } catch (Exception ex) {
53
      return null;
54
    }
55
    return line;
56
  }
57
  
58
  public static String getFirstLine(InputStream is) {
59
    String line;
60
    try (InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr)) {
61
      line = br.readLine();
62
      while (line != null) {
63
        if (!StringUtils.isBlank(line)) {
64
          break;
65
        }
66
        line = br.readLine();
67
      }
68
    } catch (IOException ex) {
69
      return null;
70
    }
71
    return line;
72
  }
73
}

Also available in: Unified diff