public void SyncTranslation(string sitePath, string cultureCode)
 {
     Path.Get(sitePath)
     .Files("orchard.*.po", true)
     .Where(p => p.Parent().FileName.Equals("en-US", StringComparison.OrdinalIgnoreCase))
     .ForEach(baselinePath =>
     {
         var path         = baselinePath.Parent().Parent().Combine(cultureCode, baselinePath.FileName);
         var translations = new List <StringEntry>();
         if (path.Exists)
         {
             path.Open(inStream => ReadTranslations(inStream, translations), FileMode.Open, FileAccess.Read, FileShare.Read);
         }
         path.Parent().CreateDirectory();
         path.Open(outStream =>
         {
             var englishTranslations = new List <StringEntry>();
             baselinePath.Open(baselineStream => ReadTranslations(baselineStream, englishTranslations), FileMode.Open, FileAccess.Read, FileShare.Read);
             using (var writer = new StreamWriter(outStream))
             {
                 foreach (var englishTranslation in englishTranslations)
                 {
                     var entry       = englishTranslation;
                     var translation = translations.Where(
                         t => t.Context == entry.Context &&
                         t.Key == entry.Key).FirstOrDefault();
                     if (translation == default(StringEntry) ||
                         translation.Translation == null ||
                         translation.Translation.Equals(@"msgstr """""))
                     {
                         writer.WriteLine("# Untranslated string");
                     }
                     writer.WriteLine(entry.Context);
                     writer.WriteLine(entry.Key);
                     writer.WriteLine(entry.English);
                     if (translation != null)
                     {
                         translation.Used = true;
                         writer.WriteLine(translation.Translation);
                     }
                     else
                     {
                         writer.WriteLine("msgstr \"\"");
                     }
                     writer.WriteLine();
                 }
                 foreach (var translation in translations.Where(t => !t.Used))
                 {
                     writer.WriteLine("# Obsolete translation");
                     writer.WriteLine(translation.Context);
                     writer.WriteLine(translation.Key);
                     writer.WriteLine(translation.English);
                     writer.WriteLine(translation.Translation);
                     writer.WriteLine();
                 }
             }
         }, FileMode.Create, FileAccess.Write, FileShare.None);
     });
 }
예제 #2
0
        static void Main(string[] args)
        {
            var assemblyPath      = typeof(Program).Assembly.Location;
            var assemblyDirectory = Path.Get(assemblyPath);

            _testPath  = assemblyDirectory.Parent().Parent().Parent().Parent().Combine("Jint.Tests.Ecma");
            _suitePath = _testPath;
            if (!_suitePath.Exists)
            {
                _suitePath.CreateDirectory();
            }

            _classTemplate  = File.ReadAllText("ClassTemplate.txt");
            _methodTemplate = File.ReadAllText("MethodTemplate.txt");

            foreach (var url in suites)
            {
                var     content    = new WebClient().DownloadString(url);
                dynamic suite      = JsonConvert.DeserializeObject(content);
                var     collection = suite.testsCollection;
                var     tests      = collection.tests;

                Console.Write(".");

                foreach (var test in tests)
                {
                    byte[] data          = Convert.FromBase64String((string)test.code);
                    string decodedString = Encoding.UTF8.GetString(data);

                    RenderTest(
                        decodedString,
                        (string)test.commentary,
                        (string)test.description,
                        (string)test.path,
                        test.negative != null
                        );
                }
            }

            foreach (var category in categorizedTests.Keys)
            {
                var file = _testPath.Combine("Ecma").Combine(category + ".cs");

                var methods = new StringBuilder();
                foreach (var test in categorizedTests[category])
                {
                    methods.Append(test.Test);
                    methods.AppendLine();
                }

                var fileContent = _classTemplate;
                fileContent = fileContent.Replace("$$Methods$$", methods.ToString());
                fileContent = fileContent.Replace("$$ClassName$$", GetClassName(category));

                File.WriteAllText(file.FullPath, fileContent);
            }
        }
예제 #3
0
        public byte[] ExtractDefaultTranslation(string sitePath)
        {
            var site       = Path.Get(sitePath);
            var corePoPath = site.Combine(
                "Core", "App_Data",
                "Localization", "en-US",
                "orchard.core.po");
            var rootPoPath = site.Combine(
                "App_Data", "Localization", "en-US",
                "orchard.root.po");
            var zipFiles = new Dictionary <Path, StringBuilder>();

            // Extract resources for module manifests
            site.Files("module.txt", true)
            .Read((content, path) => {
                var moduleName = path.Parent().FileName;
                var poPath     =
                    path.MakeRelativeTo(sitePath).Tokens[0].Equals("core", StringComparison.OrdinalIgnoreCase) ?
                    corePoPath : GetModuleLocalizationPath(site, moduleName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources for theme manifests
            site.Files("theme.txt", true)
            .Read((content, path) => {
                var themeName = path.Parent().FileName;
                var poPath    = GetThemeLocalizationPath(site, themeName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources from views and cs files, for the web site
            // as well as for the framework and Azure projects.
            site.Add(site.Parent().Combine("Orchard"))
            .Add(site.Parent().Combine("Orchard.Azure"))
            .ForEach(p =>
                     p.Files("*", true)
                     .WhereExtensionIs(".cshtml", ".aspx", ".ascx", ".cs")
                     .Grep(
                         ResourceStringExpression,
                         (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, corePoPath, rootPoPath, site, path, p, contents, str);
            }
                         )
                     .Grep(
                         PluralStringExpression,
                         (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, corePoPath, rootPoPath, site, path, p, contents, str);
                str = match.Groups[6].ToString();
                DispatchResourceString(zipFiles, corePoPath, rootPoPath, site, path, p, contents, str);
            }
                         ));
            return(ZipExtensions.Zip(
                       new Path(zipFiles.Keys.Select(p => p.MakeRelativeTo(site))),
                       p => Encoding.UTF8.GetBytes(zipFiles[site.Combine(p)].ToString())));
        }
        public byte[] PackageTranslations(string cultureCode, string sitePath)
        {
            var site             = Path.Get(sitePath);
            var translationFiles = site
                                   .Files("orchard.*.po", true)
                                   .Where(p => p.Parent().FileName.Equals(cultureCode, StringComparison.OrdinalIgnoreCase))
                                   .MakeRelativeTo(site);

            return(ZipExtensions.Zip(
                       translationFiles,
                       p => site.Combine(p).ReadBytes()));
        }
예제 #5
0
        public byte[] ExtractDefaultTranslation(string sitePath, IEnumerable <string> extensionNames)
        {
            if (extensionNames == null || extensionNames.Count() == 0)
            {
                return(ExtractDefaultTranslation(sitePath));
            }
            var site     = Path.Get(sitePath);
            var zipFiles = new Dictionary <Path, StringBuilder>();

            // Extract resources for module manifests
            site.Files("module.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName))
            .Read((content, path) => {
                var moduleName = path.Parent().FileName;
                var poPath     = GetModuleLocalizationPath(site, moduleName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources for theme manifests
            site.Files("theme.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName))
            .Read((content, path) => {
                var themeName = path.Parent().FileName;
                var poPath    = GetThemeLocalizationPath(site, themeName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources from views and cs files
            site.Files("*", true)
            .WhereExtensionIs(".cshtml", ".aspx", ".ascx", ".cs")
            .Where(p => {
                var tokens = p.MakeRelativeTo(site).Tokens;
                return(new[] { "themes", "modules" }.Contains(tokens[0]) &&
                       extensionNames.Contains(tokens[1]));
            })
            .Grep(
                ResourceStringExpression,
                (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, null, null, site, path, site, contents, str);
            }
                )
            .Grep(
                PluralStringExpression,
                (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, null, null, site, path, site, contents, str);
                str = match.Groups[6].ToString();
                DispatchResourceString(zipFiles, null, null, site, path, site, contents, str);
            }
                );
            return(ZipExtensions.Zip(
                       new Path(zipFiles.Keys.Select(p => p.MakeRelativeTo(site))),
                       p => Encoding.UTF8.GetBytes(zipFiles[site.Combine(p)].ToString())));
        }
예제 #6
0
        private static Path GetResourceCache(Statement statement, Path cache)
        {
            var name      = Path.Get(statement.Subject.Uri).FileName.ToLower();
            var extension = Path.Get(statement.Object.Uri).Extension.ToLower();

            if (extension == "" || extension.StartsWith("._"))
            {
                extension = ".html";
            }

            return(cache.Combine(name + extension));
        }
예제 #7
0
        public byte[] PackageTranslations(string cultureCode, string sitePath, IEnumerable <string> extensionNames)
        {
            var site             = Path.Get(sitePath);
            var translationFiles = site
                                   .Files("orchard.*.po", true)
                                   .Where(p =>
                                          p.Parent().FileName.Equals(cultureCode, StringComparison.OrdinalIgnoreCase) &&
                                          (extensionNames.Contains(p.MakeRelativeTo(site.Combine("Modules")).Tokens[0]) ||
                                           extensionNames.Contains(p.MakeRelativeTo(site.Combine("Themes")).Tokens[0])))
                                   .MakeRelativeTo(site);

            return(ZipExtensions.Zip(
                       translationFiles,
                       p => site.Combine(p).ReadBytes()));
        }
예제 #8
0
        private static string GetEntityName(MemoryStore store, Uri uri)
        {
            var name = store.Select(new Statement(uri.AbsoluteUri, foaf + "name", null))
                       .Select(statement => statement.Object)
                       .Cast <Literal>()
                       .Select(literal => literal.Value)
                       .FirstOrDefault();

            if (name == null)
            {
                name = Path.Get(uri.AbsolutePath).FileName;
            }

            return(name);
        }
        public void InstallTranslation(byte[] zippedTranslation, string sitePath)
        {
            var siteRoot = Path.Get(sitePath);

            ZipExtensions.Unzip(zippedTranslation,
                                (path, contents) => {
                if (path.Extension == ".po")
                {
                    var tokens   = path.Tokens;
                    var destPath = siteRoot.Combine(tokens);
                    // If a translation file is for a module or a theme, only install it
                    // if said module or theme exists already. Otherwise, skip.
                    if ((!tokens[0].Equals("modules", StringComparison.OrdinalIgnoreCase) &&
                         !tokens[0].Equals("themes", StringComparison.OrdinalIgnoreCase)) ||
                        siteRoot.Combine(tokens[0], tokens[1]).IsDirectory)
                    {
                        destPath.Write(contents);
                    }
                }
            });
        }
        public byte[] ExtractDefaultTranslation(string sitePath, IEnumerable <string> extensionNames)
        {
            if (extensionNames == null || !extensionNames.Any())
            {
                return(ExtractDefaultTranslation(sitePath));
            }
            var site     = Path.Get(sitePath);
            var zipFiles = new Dictionary <Path, StringEntryBuilder>();

            // Extract resources for module manifests
            site.Files("module.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName, StringComparer.OrdinalIgnoreCase))
            .Read((content, path) => {
                var moduleName = path.Parent().FileName;
                var poPath     = GetModuleLocalizationPath(site, moduleName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources for theme manifests
            site.Files("theme.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName, StringComparer.OrdinalIgnoreCase))
            .Read((content, path) => {
                var themeName = path.Parent().FileName;
                var poPath    = GetThemeLocalizationPath(site, themeName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources from views and cs files
            site.Files("*", true)
            .WhereExtensionIs(".cshtml", ".aspx", ".ascx", ".cs")
            .Where(p => {
                var tokens = p.MakeRelativeTo(site).Tokens;
                return(new[] { "themes", "modules" }.Contains(tokens[0], StringComparer.OrdinalIgnoreCase) &&
                       extensionNames.Contains(tokens[1], StringComparer.OrdinalIgnoreCase));
            })
            .Read((contents, path) => ExtractResourcesFromCode(contents, null, null, site, path, zipFiles));
            return(ZipExtensions.Zip(
                       new Path(zipFiles.Keys.Select(p => p.MakeRelativeTo(site))),
                       p => Encoding.UTF8.GetBytes(zipFiles[site.Combine(p)].ToString())));
        }
예제 #11
0
        public void Execute(IJobExecutionContext context)
        {
            if (Singleton.Instance.SourceMountpoints == null || Singleton.Instance.SourceMountpoints.Count == 0)
            {
                return;
            }

            try
            {
                foreach (var sourceMount in Singleton.Instance.SourceMountpoints)
                {
                    var construct = new DriveConstruct(sourceMount.MountPoint);
                    Win32Api.USN_JOURNAL_DATA newUsnState;
                    List <Win32Api.UsnEntry>  usnEntries;
                    NtfsUsnJournal            journal = new NtfsUsnJournal(construct.DriveLetter);

                    var drivePath = Path.Get(construct.DriveLetter);

                    logger.Trace("Polling for changes from " + sourceMount.CurrentUSNLocation);

                    var rtn = journal.GetUsnJournalEntries(construct.CurrentJournalData, reasonMask, out usnEntries, out newUsnState, OverrideLastUsn: sourceMount.CurrentUSNLocation);

                    if (rtn == NtfsUsnJournal.UsnJournalReturnCode.USN_JOURNAL_SUCCESS)
                    {
                        List <RawUSNEntry> entries = new List <RawUSNEntry>();
                        if (usnEntries.Any())
                        {
                            logger.Debug("USN returned with " + usnEntries.Count + " entries");
                            logger.Trace($"fsutil usn readjournal {construct.Volume} startusn={sourceMount.CurrentUSNLocation}");
                        }

                        List <USNChangeRange> changeRange = new List <USNChangeRange>();

                        foreach (var frn in usnEntries.Select(e => e.FileReferenceNumber).Distinct())
                        {
                            var entriesForFile = usnEntries.Where(f => f.FileReferenceNumber == frn).ToList();

                            if (entriesForFile.All(e => e.SourceInfo == Win32Api.UsnEntry.USNJournalSourceInfo.DataManagement || e.SourceInfo == Win32Api.UsnEntry.USNJournalSourceInfo.ReplicationManagement))
                            {
                                continue;
                            }

                            var actualPath = GetActualPath(journal, entriesForFile.FirstOrDefault());

                            if (actualPath == "Unavailable" || String.IsNullOrWhiteSpace(actualPath))
                            {
                                continue;
                            }

                            if (sourceMount.IgnoreList != null && sourceMount.IgnoreList.Any() && sourceMount.IgnoreList.Any(ignore => new Regex(ignore).IsMatch(actualPath)))
                            {
                                continue;
                            }

                            USNChangeRange range = new USNChangeRange
                            {
                                FRN        = frn,
                                Min        = entriesForFile.Min(e => e.TimeStamp),
                                Max        = entriesForFile.Max(e => e.TimeStamp),
                                Closed     = entriesForFile.OrderBy(f => f.TimeStamp).LastOrDefault() != null ? (entriesForFile.OrderBy(f => f.TimeStamp).LastOrDefault().Reason & Win32Api.USN_REASON_CLOSE) != 0 : false,
                                RenameFrom = entriesForFile.FirstOrDefault(e => (e.Reason & Win32Api.USN_REASON_RENAME_OLD_NAME) != 0),
                                Entry      = entriesForFile.OrderBy(f => f.TimeStamp).LastOrDefault()
                            };

                            bool alreadyCopiedItem = entriesForFile.GroupBy(r => r.ParentFileReferenceNumber).Select(r => r.First()).Distinct().Any(pfrn => GetActualPath(journal, pfrn).Contains("\\.proximaTemp\\"));

                            if (alreadyCopiedItem || ShouldIgnore(actualPath, drivePath, range, journal))
                            {
                                continue;
                            }

                            changeRange.Add(range);
                        }


                        foreach (var item in changeRange)
                        {
                            var actualPath = GetActualPath(journal, item.Entry);

                            if (actualPath == "Unavailable")
                            {
                                continue;
                            }

                            string relativePath;
                            try
                            {
                                Uri drivePathUri  = new Uri(drivePath.FullPath, UriKind.Absolute);
                                Uri actualPathUri = new Uri(actualPath, UriKind.Absolute);

                                relativePath = Uri.UnescapeDataString(drivePathUri.MakeRelativeUri(actualPathUri).ToString());
                            }
                            catch (Exception e)
                            {
                                relativePath = "#ERROR#";
                            }

                            if (relativePath == "#ERROR#" || relativePath.StartsWith("System Volume Information"))
                            {
                                continue;
                            }


                            string renameFromRelativePath = "";
                            if (item.RenameFrom != null)
                            {
                                string renameFromPath = GetActualPath(journal, ((Win32Api.UsnEntry)item.RenameFrom));

                                try
                                {
                                    Uri drivePathUri  = new Uri(drivePath.FullPath, UriKind.Absolute);
                                    Uri actualPathUri = new Uri(actualPath, UriKind.Absolute);

                                    renameFromRelativePath = Uri.UnescapeDataString(drivePathUri.MakeRelativeUri(actualPathUri).ToString());
                                }
                                catch (Exception e)
                                {
                                    renameFromRelativePath = "";
                                }
                            }

                            if (!String.IsNullOrWhiteSpace(renameFromRelativePath) && renameFromRelativePath.StartsWith(".proximaTemp"))
                            {
                                continue;
                            }

                            var dbEntry = new RawUSNEntry();

                            PopulateFlags(dbEntry, item.Entry);

                            dbEntry.Path         = actualPath;
                            dbEntry.RelativePath = relativePath;
                            dbEntry.File         = item.Entry.IsFile;
                            dbEntry.Directory    = item.Entry.IsFolder;
                            dbEntry.FRN          = item.Entry.FileReferenceNumber;
                            dbEntry.PFRN         = item.Entry.ParentFileReferenceNumber;
                            dbEntry.RecordLength = item.Entry.RecordLength;
                            dbEntry.USN          = item.Entry.USN;
                            dbEntry.Mountpoint   = sourceMount;

                            dbEntry.TimeStamp   = item.Entry.TimeStamp.Truncate(TimeSpan.TicksPerMillisecond);
                            dbEntry.SourceInfo  = item.Entry.SourceInfo.ToString();
                            dbEntry.ChangeRange = item;

                            if (actualPath != null && actualPath != "Unavailable" && actualPath.ToLowerInvariant().StartsWith($"{journal.MountPoint.TrimEnd('\\')}\\$".ToLowerInvariant()))
                            {
                                dbEntry.SystemFile = true;
                            }


                            if (item.RenameFrom != null)
                            {
                                dbEntry.RenameFromPath = GetActualPath(journal, ((Win32Api.UsnEntry)item.RenameFrom));
                                if (!string.IsNullOrWhiteSpace(dbEntry.RenameFromPath) && dbEntry.RenameFromPath != "Unavailable")
                                {
                                    dbEntry.RenameFromRelativePath = new Regex(Regex.Escape(drivePath.FullPath), RegexOptions.IgnoreCase).Replace(dbEntry.RenameFromPath, "", 1);
                                }
                            }

                            entries.Add(dbEntry);
                        }


                        if (changeRange.Any())
                        {
                            Singleton.Instance.Repository.Add <USNChangeRange>(changeRange);
                            Singleton.Instance.Repository.Add <RawUSNEntry>(entries);

                            var performRollup = RollupService.PerformRollup(entries, sourceMount, Singleton.Instance.Repository);
                            logger.Info(string.Format("[{3}] Adding [{2}CHANGE/{1}USN/{0}File]", performRollup.Count, entries.Count, changeRange.Count, sourceMount.Id));
                            foreach (var fileAction in performRollup)
                            {
                                //  logger.Trace("ADD: " + fileAction.RelativePath + ", USN:" + fileAction.USN);
                            }
                            Singleton.Instance.Repository.Add <FileAction>(performRollup);

                            //performRollup.ForEach(f=> logger.Debug("Added " + f.Id));
                        }

                        construct.CurrentJournalData   = newUsnState;
                        sourceMount.CurrentUSNLocation = newUsnState.NextUsn;
                        sourceMount.Volume             = construct.Volume;

                        Singleton.Instance.Repository.Update(sourceMount);
                    }
                    else
                    {
                        logger.Error("Error on Monitor - " + rtn.ToString());
                        throw new UsnJournalException(rtn);
                    }
                }
            }

            catch (Exception e)
            {
                logger.Error(e, "Error in USNJournalMonitor");
            }
        }
 public void SyncTranslation(string sitePath, string cultureCode)
 {
     Path.Get(sitePath)
     .Files("orchard.*.po", true)
     .Where(p => p.Parent().FileName.Equals("en-US", StringComparison.OrdinalIgnoreCase))
     .ForEach(baselinePath => {
         var path         = baselinePath.Parent().Parent().Combine(cultureCode, baselinePath.FileName);
         var translations = new List <StringEntry>();
         if (path.Exists)
         {
             path.Open(inStream => ReadTranslations(inStream, translations), FileMode.Open, FileAccess.Read, FileShare.Read);
         }
         path.Parent().CreateDirectory();
         path.Open(outStream => {
             var englishTranslations = new List <StringEntry>();
             baselinePath.Open(baselineStream => ReadTranslations(baselineStream, englishTranslations), FileMode.Open, FileAccess.Read, FileShare.Read);
             using (var writer = new StreamWriter(outStream)) {
                 foreach (var englishTranslation in englishTranslations)
                 {
                     var entry       = englishTranslation;
                     var translation = translations.FirstOrDefault(t => t.UniqueKey == entry.UniqueKey);
                     if (translation == null)
                     {
                         translation             = StringEntry.Parse(entry.ToString());
                         translation.Translation = @"msgstr """"";
                     }
                     else
                     {
                         if (translation.Comment != null && translation.Comment.Contains("# Untranslated string"))
                         {
                             translation.Comment = translation.Comment.Replace("# Untranslated string", string.Empty);     //remove previous untraslated comment if any
                         }
                         translation.Used = true;
                     }
                     translation.Scope   = entry.Scope;   //fix case
                     translation.Context = entry.Context; //fix case
                     if (translation.Translation.Equals(@"msgstr """""))
                     {
                         var findAny = translations.Where(t => t.Id == entry.Id);
                         var find    = findAny.FirstOrDefault(any => any.Translation != @"msgstr """"" && any.Translation != translation.Translation);
                         if (find != null)
                         {
                             //picks new scopes from translated one and states it on comment
                             translation.Translation = find.Translation;
                             translation.Comment     = "# Picked from: " + find.Scope;
                         }
                         else
                         {
                             translation.Comment = "# Untranslated string";
                         }
                     }
                     writer.WriteLine(translation);
                 }
                 foreach (var translation in translations.Where(t => !t.Used))
                 {
                     translation.Comment = "# Obsolete translation";
                     writer.WriteLine(translation);
                 }
             }
         }, FileMode.Create, FileAccess.Write, FileShare.None);
     });
 }
예제 #13
0
 /// Constructor
 public BuildArguments(String projectRoot)
 {
     this.ProjectRoot      = Path.Get(Path.Get(projectRoot).FullPath);
     this.MainConfigFile   = this.ProjectRoot.File("forkdown.main.config.yaml");
     this.LabelsConfigFile = this.ProjectRoot.File("forkdown.main.labels.yaml");
 }
예제 #14
0
        public static void Main(string[] args)
        {
            var source = Path.Get(args.Length > 0 ? args[0] : @"\\ottawa\c$\inetpub\apex-net.it\Apex-net DOC\public");
            var dest   = Path.Get(args.Length > 1 ? args[1] : @"H:\MyWorks\C#\Screwturn2markdown\SourcePages");

            source.Combine("Pages")
            .Files(p => !RevisionEx.IsMatch(p.FileName))
            .Read((content, path) => {
                Console.WriteLine(path.FileName);
                // Skipping first four lines (metadata)
                var reader = new StringReader(content);
                reader.ReadLine();
                reader.ReadLine();
                reader.ReadLine();
                reader.ReadLine();
                content = reader.ReadToEnd();
                if (content == null)
                {
                    return;
                }
                // OK, using regular expressions, not ideal, I know, but I need to get that done. Shame on me. No perf pressure here, also.
                // Do not change the order of these operations: it is meaningful.
                var nowikiSections  = new List <string>();
                var literalSections = new List <string>();
                content             = content
                                      .Apply(Literal, m => {
                    literalSections.Add(m.Groups[0].Value);
                    return("<literal:" + (literalSections.Count - 1) + "/>");
                })
                                      .Apply(NoWiki, m => {
                    nowikiSections.Add(m.Groups[1].Value.EscapeForMarkdown());
                    return("<nowiki:" + (nowikiSections.Count - 1) + "/>");
                })
                                      .Apply(Bold, "**$1**")
                                      .Apply(Italic, "_$1_") // must be after bold.
                                      .Apply(Underlined, "<span style=\"text-decoration:underline\">$1</span>")
                                      .Apply(Separator, "- - -")
                                      .Apply(Strike, "$1<del>$2</del>")
                                      .ConvertEnumerations() // Must be before headers
                                      .ConvertTables()
                                      .RemoveToc()
                                      .Apply(H6, "###### $1")
                                      .Apply(H5, "##### $1")
                                      .Apply(H4, "#### $1")
                                      .Apply(H3, "### $1")
                                      .Apply(H2, "## $1")
                                      .Apply(H1, "# $1")
                                      .Apply(Box, "> $1")
                                      .Replace("{br}", "  \r\n")
                                      .ConvertUp()
                                      .ConvertUpRelative()
                                      .Apply(Anchor, "")
                                      .Apply(Img, "![$2]($3)") // must be before link
                                      .Apply(Link, StringHelpers.ConvertLink)
                                      .Apply(NoWikiRestore, m => nowikiSections[int.Parse(m.Groups[1].Value)])
                                      .Apply(LiteralRestore, m => literalSections[int.Parse(m.Groups[1].Value)])
                                      .Apply(InlineCode, "`$1`")
                                      .Apply(CodeBlock, StringHelpers.FormatMarkdownCodeSample)
                                      .Replace("<nowiki>", "")
                                      .Replace("</nowiki>", "")
                                      .Replace('’', '\'')
                                      .Replace("®", "&reg;")
                                      .Replace("©", "&copy;")
                                      .Replace("™", "&trade;")
                                      .Replace("–", "-")
                                      .Replace("»", "&raquo;")
                                      .Replace("«", "&laquo;");
                dest.Combine(path.ChangeExtension(".md").FileName)
                .Write(content);
            });
        }
        public IEnumerable <StringEntry> ExtractDefaultTranslation(string sitePath, string targetSitePath)
        {
            var result = new List <StringEntry>();
            //var site = Path.Get(sitePath);
            //var baseSite = String.IsNullOrEmpty(resourceType) ? site : Path.Get(Server.MapPath("~/"));
            var baseSite = Path.Get(sitePath);

            var    site       = !String.IsNullOrEmpty(targetSitePath) ? Path.Get(targetSitePath) : baseSite;
            string corePoPath = System.IO.Path.Combine(
                "Core", "App_Data",
                "Localization", "{0}",
                "orchard.core.po");
            var rootPoPath = System.IO.Path.Combine(
                "App_Data", "Localization", "{0}",
                "orchard.root.po");

            // Extract resources for module manifests
            site.Files("module.txt", true)
            .Read((content, path) =>
            {
                var moduleName = path.Parent().FileName;
                var poPath     =
                    path.MakeRelativeTo(sitePath).Tokens[0].Equals("core", StringComparison.OrdinalIgnoreCase) ?
                    corePoPath : GetModuleLocalizationPath(site, moduleName);
                result.AddRange(ExtractPoFromManifest(poPath, content, path, site));
            });
            // Extract resources for theme manifests
            site.Files("theme.txt", true)
            .Read((content, path) =>
            {
                var themeName = path.Parent().FileName;
                var poPath    = GetThemeLocalizationPath(site, themeName);
                result.AddRange(ExtractPoFromManifest(poPath, content, path, site));
            });
            // Extract resources from views and cs files, for the web site
            // as well as for the framework and Azure projects.
            if (site.Parent().Combine("Orchard").Exists)
            {
                site = site.Add(site.Parent().Combine("Orchard"));
            }
            if (site.Parent().Combine("Orchard.Azure").Exists)
            {
                site = site.Add(site.Parent().Combine("Orchard.Azure"));
            }

            site.Where(p => !p.FullPath.Contains("_Backup"))
            .ForEach(p =>
                     p.Files("*", true)
                     .WhereExtensionIs(".cshtml", ".aspx", ".ascx", ".cs")
                     .Grep(
                         ResourceStringExpression,
                         (path, match, contents) =>
            {
                var str = Unescape(match.Groups[1].ToString()).Trim('"');
                result.AddRange(DispatchResourceString(corePoPath, rootPoPath, site, path, baseSite, contents, str));
            }
                         )
                     .Grep(
                         PluralStringExpression,
                         (path, match, contents) =>
            {
                var str = Unescape(match.Groups[1].ToString()).Trim('"');
                result.AddRange(DispatchResourceString(corePoPath, rootPoPath, site, path, baseSite, contents, str));
                str = Unescape(match.Groups[6].ToString()).Trim('"');
                result.AddRange(DispatchResourceString(corePoPath, rootPoPath, site, path, baseSite, contents, str));
            }
                         ));
            return(result);
        }
예제 #16
0
        static void Main(string[] args)
        {
            var root     = Path.Get("../..");
            var dbpedia  = root.Combine("dbpedia.xml");
            var dbpedia2 = root.Combine("dbpedia2.xml");
            var cache    = root.Combine("Downloads");

            MemoryStore store;

            //if (!dbpedia2.Exists)
            if (true)
            {
                if (!dbpedia.Exists)
                {
                    ExecuteQuery(dbpedia);
                }

                store = LoadResults(dbpedia);
                FilterDuplicates(store);
                MergePredicates(store, mys + "birth", dbo + "birthPlace", dbo + "birthYear");
                MergePredicates(store, mys + "death", dbo + "deathPlace", dbo + "deathYear");
                ParseFiles(store, cache);
                SaveResults(store, dbpedia2);
            }
            else
            {
                store = LoadResults(dbpedia2);
            }

            if (!cache.Exists)
            {
                cache.CreateDirectories();
            }

            //using (var client = new WebClient())
            //{
            //    foreach (var predicate in new[] { foaf + "page", dbo + "thumbnail" })
            //        foreach (var result in store.Select(new Statement(null, predicate, null)).OrderBy(result => result.Subject.Uri))
            //            DownloadResource(client, result, cache);
            //}

            Console.WriteLine("Creating edges...");
            var edges = CreateEdges(store, cache).ToArray();

            Console.WriteLine("Computing components...");
            var map = new Dictionary <Vertex, int>();

            //edges.ToUndirectedGraph<Vertex, Edge>().ConnectedComponents(map);
            edges.ToBidirectionalGraph <Vertex, Edge>().WeaklyConnectedComponents(map);

            Console.WriteLine("Building subgraphs...");
            var subgraphs = map
                            .GroupBy(pair => pair.Value)
                            .OrderByDescending(group => group.Count())
                            .Take(10)
                            //.Select(group => group.Select(pair => pair.Key).ToArray())
                            .Select(group => GetGroupEdges(group.Select(pair => pair.Key), edges).ToBidirectionalGraph <Vertex, Edge>())
                            .ToArray();

            Console.WriteLine("Cleaning subgraphs...");
            foreach (var graph in subgraphs)
            {
                graph.RemoveVertexIf(vertex => vertex is LiteralVertex && graph.OutDegree(vertex) + graph.InDegree(vertex) < 2);
            }

            foreach (var group in subgraphs)
            {
                Console.WriteLine("Count = {0}", group.VertexCount);
                //foreach (var vertex in group.Vertices)
                //    Console.WriteLine("\t{0}", vertex);
            }

            Console.WriteLine("Initializing viewer...");
            var viewer = new Viewer();

            viewer.DataContext = subgraphs;
            viewer.ShowDialog();
        }