3939import java .io .StringReader ;
4040import java .text .SimpleDateFormat ;
4141import java .util .ArrayList ;
42- import java .util .Collections ;
4342import java .util .Date ;
4443import java .util .HashMap ;
4544import java .util .List ;
5857import org .scijava .module .AbstractModuleInfo ;
5958import org .scijava .module .DefaultMutableModuleItem ;
6059import org .scijava .module .ModuleException ;
60+ import org .scijava .parse .ParseService ;
6161import org .scijava .plugin .Parameter ;
62- import org .scijava .sjep .Variable ;
63- import org .scijava .sjep .eval .DefaultEvaluator ;
6462import org .scijava .util .DigestUtils ;
6563import org .scijava .util .FileUtils ;
6664
@@ -90,6 +88,9 @@ public class ScriptInfo extends AbstractModuleInfo implements Contextual {
9088 @ Parameter
9189 private ScriptService scriptService ;
9290
91+ @ Parameter
92+ private ParseService parser ;
93+
9394 @ Parameter
9495 private ConvertService convertService ;
9596
@@ -346,13 +347,13 @@ private void parseParam(final String param) throws ScriptException {
346347 else {
347348 final String cutParam =
348349 param .substring (0 , lParen ) + param .substring (rParen + 1 );
349- final String attrs = param .substring (lParen , rParen + 1 );
350+ final String attrs = param .substring (lParen + 1 , rParen );
350351 parseParam (cutParam , parseAttrs (attrs ));
351352 }
352353 }
353354
354355 private void parseParam (final String param ,
355- final HashMap <String , Object > attrs ) throws ScriptException
356+ final Map <String , Object > attrs ) throws ScriptException
356357 {
357358 final String [] tokens = param .trim ().split ("[ \t \n ]+" );
358359 checkValid (tokens .length >= 1 , param );
@@ -376,42 +377,8 @@ private void parseParam(final String param,
376377 }
377378
378379 /** Parses a comma-delimited list of {@code key=value} pairs into a map. */
379- private HashMap <String , Object > parseAttrs (final String attrs )
380- throws ScriptException
381- {
382- // NB: Parse the attributes using the SciJava Expression Parser.
383- final DefaultEvaluator e = new DefaultEvaluator ();
384- try {
385- final Object result = e .evaluate (attrs );
386- if (result == null ) throw new ScriptException ("Unparseable attributes" );
387- final List <?> list ;
388- if (result instanceof List ) list = (List <?>) result ;
389- else if (result instanceof Variable ) {
390- list = Collections .singletonList (result );
391- }
392- else {
393- throw new ScriptException ("Unexpected attributes type: " +
394- result .getClass ().getName ());
395- }
396-
397- final HashMap <String , Object > attrsMap = new HashMap <String , Object >();
398- for (final Object o : list ) {
399- if (o instanceof Variable ) {
400- final Variable v = (Variable ) o ;
401- attrsMap .put (v .getToken (), e .value (v ));
402- }
403- else {
404- throw new ScriptException ("Invalid attribute: " + o );
405- }
406- }
407- return attrsMap ;
408- }
409- catch (final IllegalArgumentException exc ) {
410- final ScriptException se = new ScriptException (
411- "Error parsing attributes" );
412- se .initCause (exc );
413- throw se ;
414- }
380+ private Map <String , Object > parseAttrs (final String attrs ) {
381+ return parser .parse (attrs ).asMap ();
415382 }
416383
417384 private boolean isIOType (final String token ) {
0 commit comments