Beispiel #1
0
        public static void Preprocess(string originalFile, string outputFile, string game, ILog messageLog)
        {
            EACodeLanguage eaCodeLanguage = Program.Languages [game];

            using (IPreprocessor preprocessor = (IPreprocessor) new Preprocessor(messageLog)) {
                preprocessor.AddReserved(eaCodeLanguage.GetCodeNames());
                preprocessor.AddDefined(new string[] { "_" + game + "_", "_EA_" });

                using (StreamReader streamReader = File.OpenText(originalFile)) {
                    using (IInputStream inputStream = (IInputStream) new PreprocessingInputStream((TextReader)streamReader, preprocessor)) {
                        StringWriter stringWriter = new StringWriter();

                        while (true)
                        {
                            string str = inputStream.ReadLine();

                            if (str != null)
                            {
                                stringWriter.WriteLine(str);
                            }
                            else
                            {
                                break;
                            }
                        }

                        messageLog.AddMessage("Processed code:\n" + stringWriter.ToString() + "\nEnd processed code");
                    }
                }
            }
        }
Beispiel #2
0
        /**
         * <summary>Parses the character-code-to-unicode mapping [PDF:1.6:5.9.1].</summary>
         */
        public Dictionary <ByteArray, int> Parse(
            )
        {
            Dictionary <ByteArray, int> codes = new Dictionary <ByteArray, int>();

            string line;
            Regex  linePattern = new Regex("(\\S+)\\s+(.+)");

            while ((line = stream.ReadLine()) != null)
            {
                MatchCollection lineMatches = linePattern.Matches(line);
                if (lineMatches.Count < 1)
                {
                    continue;
                }

                Match lineMatch = lineMatches[0];

                string key = lineMatch.Groups[1].Value;
                if (key.Equals("/Encoding"))
                {
                    // Skip to the encoding array entries!
                    stream.ReadLine();
                    string encodingLine;
                    Regex  encodingLinePattern = new Regex("dup (\\S+) (\\S+) put");
                    while ((encodingLine = stream.ReadLine()) != null)
                    {
                        MatchCollection encodingLineMatches = encodingLinePattern.Matches(encodingLine);
                        if (encodingLineMatches.Count < 1)
                        {
                            break;
                        }

                        Match  encodingLineMatch = encodingLineMatches[0];
                        byte[] inputCode         = new byte[] { (byte)Int32.Parse(encodingLineMatch.Groups[1].Value) };
                        string name = encodingLineMatch.Groups[2].Value.Substring(1);
                        codes[new ByteArray(inputCode)] = GlyphMapping.NameToCode(name).Value;
                    }
                    break;
                }
            }
            return(codes);
        }
Beispiel #3
0
        /**
         * <summary>Loads the font header [AFM:4.1:3,4.1-4.4].</summary>
         */
        private void LoadFontHeader(
            )
        {
            string line;
            Regex  linePattern = new Regex("(\\S+)\\s+(.+)");

            while ((line = FontData.ReadLine()) != null)
            {
                MatchCollection lineMatches = linePattern.Matches(line);
                if (lineMatches.Count < 1)
                {
                    continue;
                }

                Match lineMatch = lineMatches[0];

                string key = lineMatch.Groups[1].Value;
                if (key.Equals("Ascender"))
                {
                    Metrics.Ascender = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("CapHeight"))
                {
                    Metrics.CapHeight = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("Descender"))
                {
                    Metrics.Descender = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("EncodingScheme"))
                {
                    Metrics.IsCustomEncoding = lineMatch.Groups[2].Value.Equals("FontSpecific");
                }
                else if (key.Equals("FontBBox"))
                {
                    string[] coordinates = Regex.Split(lineMatch.Groups[2].Value, "\\s+");
                    Metrics.XMin = ConvertUtils.ParseAsIntInvariant(coordinates[0]);
                    Metrics.YMin = ConvertUtils.ParseAsIntInvariant(coordinates[1]);
                    Metrics.XMax = ConvertUtils.ParseAsIntInvariant(coordinates[2]);
                    Metrics.YMax = ConvertUtils.ParseAsIntInvariant(coordinates[3]);
                }
                else if (key.Equals("FontName"))
                {
                    Metrics.FontName = lineMatch.Groups[2].Value;
                }
                else if (key.Equals("IsFixedPitch"))
                {
                    Metrics.IsFixedPitch = Boolean.Parse(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("ItalicAngle"))
                {
                    Metrics.ItalicAngle = ConvertUtils.ParseFloatInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("StdHW"))
                {
                    Metrics.StemH = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("StdVW"))
                {
                    Metrics.StemV = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("UnderlinePosition"))
                {
                    Metrics.UnderlinePosition = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("UnderlineThickness"))
                {
                    Metrics.UnderlineThickness = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("Weight"))
                {
                    Metrics.Weight = lineMatch.Groups[2].Value;
                }
                else if (key.Equals("XHeight"))
                {
                    Metrics.XHeight = ConvertUtils.ParseAsIntInvariant(lineMatch.Groups[2].Value);
                }
                else if (key.Equals("StartCharMetrics"))
                {
                    break;
                }
            }
            if (Metrics.Ascender == 0)
            {
                Metrics.Ascender = Metrics.YMax;
            }
            if (Metrics.Descender == 0)
            {
                Metrics.Descender = Metrics.YMin;
            }
        }
Beispiel #4
0
        /**
         * <summary>Loads the font header [AFM:4.1:3,4,4.1,4.2].</summary>
         */
        private void LoadFontHeader(
            )
        {
            string line;
            Regex  linePattern = new Regex("(\\S+)\\s+(.+)");

            while ((line = FontData.ReadLine()) != null)
            {
                MatchCollection lineMatches = linePattern.Matches(line);
                if (lineMatches.Count < 1)
                {
                    continue;
                }

                Match lineMatch = lineMatches[0];

                string key = lineMatch.Groups[1].Value;
                switch (key)
                {
                case "FontName":
                    Metrics.FontName = lineMatch.Groups[2].Value; break;

                case "Weight":
                    Metrics.Weight = lineMatch.Groups[2].Value; break;

                case "ItalicAngle":
                    Metrics.ItalicAngle = Single.Parse(lineMatch.Groups[2].Value); break;

                case "IsFixedPitch":
                    Metrics.IsFixedPitch = lineMatch.Groups[2].Value.Equals("true"); break;

                case "FontBBox":
                {
                    string[] coordinates = Regex.Split(lineMatch.Groups[2].Value, "\\s+");
                    Metrics.XMin = Int16.Parse(coordinates[0]);
                    Metrics.YMin = Int16.Parse(coordinates[1]);
                    Metrics.XMax = Int16.Parse(coordinates[2]);
                    Metrics.YMax = Int16.Parse(coordinates[3]);
                } break;

                case "UnderlinePosition":
                    Metrics.UnderlinePosition = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "UnderlineThickness":
                    Metrics.UnderlineThickness = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "EncodingScheme":
                    Metrics.IsCustomEncoding = lineMatch.Groups[2].Value.Equals("FontSpecific"); break;

                case "CapHeight":
                    Metrics.CapHeight = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "XHeight":
                    Metrics.XHeight = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "Ascender":
                    Metrics.Ascender = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "Descender":
                    Metrics.Descender = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "StdHW":
                    Metrics.StemH = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "StdVW":
                    Metrics.StemV = Int16.Parse(lineMatch.Groups[2].Value); break;

                case "StartCharMetrics":
                    goto endParsing;
                }
            }
endParsing:
            if (Metrics.Ascender == 0)
            {
                Metrics.Ascender = Metrics.YMax;
            }
            if (Metrics.Descender == 0)
            {
                Metrics.Descender = Metrics.YMin;
            }
        }