1+ /*
2+ * #%L
3+ * SciJava Common shared library for SciJava software.
4+ * %%
5+ * Copyright (C) 2009 - 2017 Board of Regents of the University of
6+ * Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
7+ * Institute of Molecular Cell Biology and Genetics.
8+ * %%
9+ * Redistribution and use in source and binary forms, with or without
10+ * modification, are permitted provided that the following conditions are met:
11+ *
12+ * 1. Redistributions of source code must retain the above copyright notice,
13+ * this list of conditions and the following disclaimer.
14+ * 2. Redistributions in binary form must reproduce the above copyright notice,
15+ * this list of conditions and the following disclaimer in the documentation
16+ * and/or other materials provided with the distribution.
17+ *
18+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+ * POSSIBILITY OF SUCH DAMAGE.
29+ * #L%
30+ */
31+
32+ package org .scijava .script .process ;
33+
34+ import org .scijava .log .LogService ;
35+ import org .scijava .plugin .Parameter ;
36+ import org .scijava .plugin .Plugin ;
37+ import org .scijava .script .ScriptInfo ;
38+ import org .scijava .script .ScriptLanguage ;
39+ import org .scijava .script .ScriptService ;
40+
41+ /**
42+ * A {@link ScriptProcessor} which looks for a {@code #!} at the beginning of a
43+ * script, and set the language accordingly.
44+ *
45+ * @author Curtis Rueden
46+ */
47+ @ Plugin (type = ScriptProcessor .class )
48+ public class ShebangScriptProcessor implements ScriptProcessor {
49+
50+ @ Parameter
51+ private ScriptService scriptService ;
52+
53+ @ Parameter
54+ private LogService log ;
55+
56+ private ScriptInfo info ;
57+ private boolean first = true ;
58+
59+ // -- ScriptProcessor methods --
60+
61+ @ Override
62+ public void begin (final ScriptInfo scriptInfo ) {
63+ info = scriptInfo ;
64+ }
65+
66+ @ Override
67+ public void process (final String line ) {
68+ if (!first ) return ;
69+ if (line .startsWith ("#!" )) {
70+ // shebang!
71+ final String langName = line .substring (2 );
72+ final ScriptLanguage lang = scriptService .getLanguageByName (langName );
73+ if (lang != null ) info .setLanguage (lang );
74+ else log .warn ("Unknown script language: " + langName );
75+ }
76+ first = false ;
77+ }
78+ }
0 commit comments