2006-04-25 Hendrik Brandt <heb@gnome-de.org>
[beagle.git] / Filters / FilterShellscript.cs
blobe762365ab8748c6618f2f217a391568d1c7eb561
1 //
2 // FilterShellscript.cs
3 //
4 // Copyright (C) 2004-2006 Novell, Inc.
5 //
7 //
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.
27 using System;
28 using System.Collections;
29 using System.IO;
30 using System.Text;
32 using Beagle.Daemon;
33 using Beagle.Util;
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" };
47 private int count;
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 ()
64 this.count = 0;
67 override protected void DoPull ()
69 string str = TextReader.ReadLine ();
70 if (str == null)
71 Finished ();
72 else {
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;
81 ExtractTokens (str);
83 if (this.count > 20 * 1024) {
84 Log.Debug ("Truncating shell script to 20k");
85 Finished ();