2 // FilterShellscript.cs
4 // Copyright (C) 2004-2006 Novell, Inc.
8 // Permission is hereby granted, free of charge, to any person obtaining a
9 // copy of this software and associated documentation files (the "Software"),
10 // to deal in the Software without restriction, including without limitation
11 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 // and/or sell copies of the Software, and to permit persons to whom the
13 // Software is furnished to do so, subject to the following conditions:
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 // DEALINGS IN THE SOFTWARE.
28 using System
.Collections
;
35 namespace Beagle
.Filters
{
37 public class FilterShellscript
: FilterSource
{
39 static string [] strKeyWords
= { "bash", "mv", "cp", "ls", "ps", "exit",
40 "export", "echo", "if", "else", "elif",
41 "then", "fi", "while", "do", "done", "until",
42 "case", "in", "esac", "select", "for",
43 "function", "time", "break", "cd", "continue",
44 "declare", "fg", "kill", "pwd", "read", "return",
45 "set", "test", "unset", "wait", "touch" };
49 public FilterShellscript ()
51 // FIXME: Add other shell mime-types, if they are different
52 AddSupportedFlavor (FilterFlavor
.NewFromMimeType ("application/x-shellscript"));
55 override protected void DoOpen (FileInfo info
)
57 foreach (string keyword
in strKeyWords
)
58 KeyWordsHash
[keyword
] = true;
59 SrcLangType
= LangType
.Shell_Style
;
62 override protected void DoPullSetup ()
67 override protected void DoPull ()
69 string str
= TextReader
.ReadLine ();
73 // Shell scripts usually aren't very big, so
74 // never index more than 20k. This prevents us
75 // from going insane when we *do* index large
76 // ones that embed binaries in them. We're
77 // really only counting characters here, but we
78 // don't need to be very precise.
79 this.count
+= str
.Length
;
83 if (this.count
> 20 * 1024) {
84 Log
.Debug ("Truncating shell script to 20k");