Beispiel #1
0
        public string GetImageName(AST.Address addr)
        {
            // calculate MD5
            MD5 md5 = MD5.Create();

            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(addr.A1FullyQualified());
            byte[] hash  = md5.ComputeHash(bytes);

            StringBuilder sb = new StringBuilder();

            // prepend the job state ID
            sb.AppendFormat("{0}", _jobstate.ToString());

            // convert byte array to hex string

            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }

            // stick a ".png" on the end
            sb.Append(".png");

            // url encode it
            return(System.Web.HttpUtility.UrlEncode(sb.ToString()));
        }
        private FSharpOption <BugClass> DualsFor(AST.Address addr)
        {
            // extract address environment
            var env = new AST.Env(addr.Path, addr.WorkbookName, addr.WorksheetName);

            // duals regexp
            var r = new Regex(@".*dual\s*=\s*((?<AddrOrRange>[A-Z]+[0-9]+(:?:[A-Z]+[0-9]+)?)(:?\s*,\s*)?)+", RegexOptions.Compiled);

            // get note for this address
            var note = _notes[addr];

            Match m = r.Match(note);

            if (!m.Success)
            {
                if (note.Contains("dual"))
                {
                    Console.Out.WriteLine("Malformed dual annotation for cell " + addr.A1FullyQualified() + " : " + note);
                }
                return(FSharpOption <BugClass> .None);
            }
            else
            {
                // init duals list
                var duals = new List <AST.Address>();

                var cs = m.Groups["AddrOrRange"].Captures;

                foreach (Capture c in cs)
                {
                    // get string value
                    string addrOrRange = c.Value;

                    AST.Reference xlref = null;

                    try
                    {
                        // parse
                        xlref = Parcel.simpleReferenceParser(addrOrRange, env);
                    } catch (Exception e)
                    {
                        var msg = "Bad reference: '" + addrOrRange + "'";
                        Console.Out.WriteLine(msg);
                        throw new Exception(msg);
                    }

                    // figure out the reference type
                    if (xlref.Type == AST.ReferenceType.ReferenceRange)
                    {
                        var rrref = (AST.ReferenceRange)xlref;
                        duals.AddRange(rrref.Range.Addresses());
                    }
                    else if (xlref.Type == AST.ReferenceType.ReferenceAddress)
                    {
                        var aref = (AST.ReferenceAddress)xlref;
                        duals.Add(aref.Address);
                    }
                    else
                    {
                        throw new Exception("Unsupported address reference type.");
                    }
                }

                var bugclass = new BugClass(duals);

                return(FSharpOption <BugClass> .Some(bugclass));
            }
        }