示例#1
0
 public void Compile()
 {
     Utility.PreparePath(OutFolder);
     foreach (var compileToken in _token)
     {
         CodeUnitBuilder codeUnitBuilder = new CodeUnitBuilder(compileToken);
         Save(codeUnitBuilder);
     }
 }
示例#2
0
    private void Save(CodeUnitBuilder creator)
    {
        const int lineCount = 3;

        using MemoryStream stream = new MemoryStream();
        StreamWriter sourceWriter = new StreamWriter(stream);
        var          unit         = creator.CompileUnit;

        _provider.GenerateCodeFromCompileUnit(unit, sourceWriter, _options);
        sourceWriter.Flush();
        stream.Seek(0, SeekOrigin.Begin);
        int    count  = 0;
        string outDir = Path.Combine(OutFolder, OutSuffix);
        string path   = Path.Combine(OutFolder, OutSuffix, creator.OutFileName);

        if (!Directory.Exists(outDir))
        {
            Directory.CreateDirectory(outDir);
        }

        StreamReader reader = new StreamReader(stream);

        using (StreamWriter fileWriter = new StreamWriter(path))
        {
            while (true)
            {
                string line = reader.ReadLine();
                if (line != null)
                {
                    if (count == lineCount)
                    {
                        int post = line.LastIndexOf('.');
                        if (post != -1)
                        {
                            line = line.Substring(0, post);
                            Console.WriteLine(line);
                        }
                    }
                    else
                    {
                        line = line.Replace(CodeUnitBuilder.PropertySignReplace, CodeUnitBuilder.PropertySign);
                    }

                    fileWriter.WriteLine(line);
                }
                else
                {
                    break;
                }

                count++;
            }
        }
    }