diff options
author | Ary Borenszweig <asterite@gmail.com> | 2017-08-02 11:13:59 -0300 |
---|---|---|
committer | Ary Borenszweig <asterite@gmail.com> | 2017-08-02 13:57:51 -0300 |
commit | 5473c56cb6dc11a11e4bcae4adbe1d7971e79319 (patch) | |
tree | 00434353c13aa10a515a493fccaf9bf37ee3e001 /ext/java | |
parent | 4039a811248de7b0b9ae9e4a97854f00ba985255 (diff) | |
download | psych-5473c56cb6dc11a11e4bcae4adbe1d7971e79319.zip |
Add Psych::Handler#event_location
This adds a new reported event to Psych::Handler, event_location, with precise start/end line/column information.
The line/column information provided by Psych::Parser#mark is not very useful because it points to the location past the event.
Diffstat (limited to 'ext/java')
-rw-r--r-- | ext/java/PsychParser.java | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/java/PsychParser.java b/ext/java/PsychParser.java index b3e747e..0069819 100644 --- a/ext/java/PsychParser.java +++ b/ext/java/PsychParser.java @@ -190,6 +190,12 @@ public class PsychParser extends RubyObject { while (true) { event = parser.getEvent(); + IRubyObject start_line = runtime.newFixnum(event.getStartMark().getLine()); + IRubyObject start_column = runtime.newFixnum(event.getStartMark().getColumn()); + IRubyObject end_line = runtime.newFixnum(event.getEndMark().getLine()); + IRubyObject end_column = runtime.newFixnum(event.getEndMark().getColumn()); + invoke(context, handler, "event_location", start_line, start_column, end_line, end_column); + // FIXME: Event should expose a getID, so it can be switched if (event.is(ID.StreamStart)) { invoke(context, handler, "start_stream", runtime.newFixnum(YAML_ANY_ENCODING.ordinal())); @@ -277,6 +283,7 @@ public class PsychParser extends RubyObject { private void handleScalar(ThreadContext context, ScalarEvent se, boolean tainted, IRubyObject handler) { Ruby runtime = context.runtime; + IRubyObject anchor = stringOrNilFor(runtime, se.getAnchor(), tainted); IRubyObject tag = stringOrNilFor(runtime, se.getTag(), tainted); IRubyObject plain_implicit = runtime.newBoolean(se.getImplicit().canOmitTagInPlainScalar()); |