Skip to content

Commit

Permalink
Set ext and src encoding from -K flag.
Browse files Browse the repository at this point in the history
Fixes #480.
  • Loading branch information
headius committed Dec 20, 2013
1 parent 0d37441 commit 6669bc5
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 9 deletions.
2 changes: 1 addition & 1 deletion bin/rake
@@ -1,4 +1,4 @@
#!/usr/bin/env jruby
#!/Users/headius/projects/jruby-1.7/test/../bin/jruby
#
# This file was generated by RubyGems.
#
Expand Down
2 changes: 1 addition & 1 deletion bin/rdoc
@@ -1,4 +1,4 @@
#!/usr/bin/env jruby
#!/Users/headius/projects/jruby-1.7/test/../bin/jruby
#
# This file was generated by RubyGems.
#
Expand Down
2 changes: 1 addition & 1 deletion bin/ri
@@ -1,4 +1,4 @@
#!/usr/bin/env jruby
#!/Users/headius/projects/jruby-1.7/test/../bin/jruby
#
# This file was generated by RubyGems.
#
Expand Down
31 changes: 26 additions & 5 deletions core/src/main/java/org/jruby/Ruby.java
Expand Up @@ -2553,14 +2553,22 @@ public void defineReadonlyVariable(String name, IRubyObject value, org.jruby.int

public Node parseFile(InputStream in, String file, DynamicScope scope, int lineNumber) {
if (parserStats != null) parserStats.addLoadParse();
return parser.parse(file, in, scope, new ParserConfiguration(this,
lineNumber, false, false, true, config));
ParserConfiguration parserConfig =
new ParserConfiguration(this, lineNumber, false, false, true, config);
if (is1_9) {
setupSourceEncoding(parserConfig);
}
return parser.parse(file, in, scope, parserConfig);
}

public Node parseFileFromMain(InputStream in, String file, DynamicScope scope) {
if (parserStats != null) parserStats.addLoadParse();
return parser.parse(file, in, scope, new ParserConfiguration(this,
0, false, false, true, true, config));
ParserConfiguration parserConfig =
new ParserConfiguration(this, 0, false, false, true, true, config);
if (is1_9) {
setupSourceEncoding(parserConfig);
}
return parser.parse(file, in, scope, parserConfig);
}

public Node parseFile(InputStream in, String file, DynamicScope scope) {
Expand All @@ -2571,10 +2579,23 @@ public Node parseInline(InputStream in, String file, DynamicScope scope) {
if (parserStats != null) parserStats.addEvalParse();
ParserConfiguration parserConfig =
new ParserConfiguration(this, 0, false, true, false, config);
if (is1_9) parserConfig.setDefaultEncoding(getEncodingService().getLocaleEncoding());
if (is1_9) {
setupSourceEncoding(parserConfig);
}
return parser.parse(file, in, scope, parserConfig);
}

private void setupSourceEncoding(ParserConfiguration parserConfig) {
if (config.getSourceEncoding() != null) {
if (config.isVerbose()) {
config.getError().println("-K is specified; it is for 1.8 compatibility and may cause odd behavior");
}
parserConfig.setDefaultEncoding(getEncodingService().getEncodingFromString(config.getSourceEncoding()));
} else {
parserConfig.setDefaultEncoding(getEncodingService().getLocaleEncoding());
}
}

public Node parseEval(String content, String file, DynamicScope scope, int lineNumber) {
if (parserStats != null) parserStats.addEvalParse();
return parser.parse(file, content.getBytes(), scope, new ParserConfiguration(this,
Expand Down
17 changes: 16 additions & 1 deletion core/src/main/java/org/jruby/RubyInstanceConfig.java
Expand Up @@ -1032,6 +1032,20 @@ public void setExternalEncoding(String externalEncoding) {
public String getExternalEncoding() {
return externalEncoding;
}

/**
* @see Options.CLI_ENCODING_SOURCE
*/
public void setSourceEncoding(String sourceEncoding) {
this.sourceEncoding = sourceEncoding;
}

/**
* @see Options.CLI_ENCODING_SOURCE
*/
public String getSourceEncoding() {
return sourceEncoding;
}

/**
* @see Options.CLI_RECORD_SEPARATOR
Expand Down Expand Up @@ -1436,7 +1450,8 @@ public void setAllowUppercasePackageNames(boolean allow) {

private String internalEncoding = Options.CLI_ENCODING_INTERNAL.load();
private String externalEncoding = Options.CLI_ENCODING_EXTERNAL.load();

private String sourceEncoding = Options.CLI_ENCODING_SOURCE.load();

private ProfilingMode profilingMode = Options.CLI_PROFILING_MODE.load();
private ProfileOutput profileOutput = new ProfileOutput(System.err);

Expand Down
10 changes: 10 additions & 0 deletions core/src/main/java/org/jruby/util/cli/ArgumentProcessor.java
Expand Up @@ -233,7 +233,17 @@ private void processArgument() {
// siphon off additional args 'jruby -K ~/scripts/foo'. Also better error
// processing.
String eArg = grabValue(getArgumentError("provide a value for -K"));

config.setKCode(KCode.create(null, eArg));

// source encoding
config.setSourceEncoding(config.getKCode().getEncoding().toString());

// set external encoding if not already specified
if (config.getExternalEncoding() == null) {
config.setExternalEncoding(config.getKCode().getEncoding().toString());
}

break;
case 'l':
config.setProcessLineEnds(true);
Expand Down
1 change: 1 addition & 0 deletions core/src/main/java/org/jruby/util/cli/Options.java
Expand Up @@ -189,6 +189,7 @@ public class Options {
public static final Option<Boolean> CLI_PROPERTIES = bool(CLI, "cli.properties", false, "Print config properties. Same as --properties but runs script.");
public static final Option<String> CLI_ENCODING_INTERNAL = string(CLI, "cli.encoding.internal", "Encoding name to use internally.");
public static final Option<String> CLI_ENCODING_EXTERNAL = string(CLI, "cli.encoding.external", "Encoding name to treat external data.");
public static final Option<String> CLI_ENCODING_SOURCE = string(CLI, "cli.encoding.source", "Encoding name to treat source code.");
public static final Option<String> CLI_RECORD_SEPARATOR = string(CLI, "cli.record.separator", "\n", "Default record separator.");
public static final Option<String> CLI_BACKUP_EXTENSION = string(CLI, "cli.backup.extension", "Backup extension for in-place ARGV files. Same as -i.");
public static final Option<ProfilingMode> CLI_PROFILING_MODE = enumeration(CLI, "cli.profiling.mode", ProfilingMode.class, ProfilingMode.OFF, "Enable instrumented profiling modes.");
Expand Down

0 comments on commit 6669bc5

Please sign in to comment.