I've written a filter for Gentoo Linux ebuilds. The main goal is to extract 
information like the title, version, description, etc. It was really easy to 
write. I'd appreciate comments (I'm a Java developer, so I'm sure there are 
some bad things I've done with C# here ;). Any chance this could get included 
in the beagle distribution? How do I go about that, file a bug?

Thanks.


--- code here ---

using System;
using System.IO;
using System.Text.RegularExpressions;
using Beagle.Daemon;

namespace Beagle.Filters {

        public class FilterEbuild : Beagle.Daemon.Filter {
                Regex METADATA_PATTERN = new 
Regex("\\s*(?<key>([A-Z_]+))\\s*=\\s*\"(?<value>(.*))\"\\s*");
                Regex EINFO = new 
Regex("\\s*(einfo|ewarn)\\s+\"(?<message>(.*))\"\\s*");
                Regex PACKAGE = new 
Regex("(?<name>([^0-9]+))-(?<version>(.+)).ebuild");

                public FilterEbuild ()
                {
                        AddSupportedFlavor (FilterFlavor.NewFromExtension 
(".ebuild"));
                        SetVersion(1);
                }

                override protected void DoOpen (FileInfo file)
                {
                        Match match = PACKAGE.Match(file.Name);
                        String pkgname = match.Groups["name"].ToString();
                        if (pkgname.Length > 0) {
                                AddProperty (Beagle.Property.New 
("fixme:title", pkgname));
                        }
                        
                        String version = match.Groups["version"].ToString();
                        if (version.Length > 0) {
                                AddProperty (Beagle.Property.New 
("fixme:version", version));
                        }

                        StreamReader reader = new StreamReader(new 
FileStream(file.FullName, 
FileMode.Open, FileAccess.Read, FileShare.Read));

                        string str = TextReader.ReadLine ();
                        while ((str = reader.ReadLine ()) != null) {
                                if (str.Length > 0) {
                                        // check for meta data
                                        MatchCollection matches;
                                        matches = METADATA_PATTERN.Matches 
(str);
                                        if (matches.Count > 0) {
                                                foreach (Match theMatch in 
matches) {
                                                        String key = 
theMatch.Groups ["key"].ToString ();
                                                        String value = 
theMatch.Groups ["value"].ToString ();
                                                        if 
(key.Equals("DESCRIPTION")) {
                                                                AddProperty 
(Beagle.Property.New ("dc:description", value));
                                                        }
                                                        else if 
(key.Equals("LICENSE")) {
                                                                AddProperty 
(Beagle.Property.New ("dc:rights", value));
                                                        }
                                                        else if 
(key.Equals("HOMEPAGE")) {
                                                                AddProperty 
(Beagle.Property.New ("dc:source", value));
                                                        }
                                                }
                                        }
                                        else
                                        {
                                                // check for einfo/ewarn
                                                matches = EINFO.Matches (str);
                                                if (matches.Count > 0) {
                                                        foreach (Match theMatch 
in matches) {
                                                                
AppendText(theMatch.Groups ["message"].ToString ());
                                                        }
                                                }
                                        }
                                }
                        }
                        Finished();
                }
        }
}


--- code not here ---


-- 
Pat Double, [EMAIL PROTECTED]
"In the beginning God created the heaven and the earth."

Attachment: pgp1ZojlZzPYJ.pgp
Description: PGP signature

_______________________________________________
Dashboard-hackers mailing list
Dashboard-hackers@gnome.org
http://mail.gnome.org/mailman/listinfo/dashboard-hackers

Reply via email to