Пример #1
0
        private Slide BuildSlide(IEnumerable <Token> tokens)
        {
            if (tokens == null || !tokens.Any())
            {
                return(null);
            }

            var xml = new XElement("tokens",
                                   from t in tokens.NonCodeTokens().First()
                                   select new XElement("token",
                                                       new XAttribute("type", t.Type.ToString()),
                                                       new XAttribute("value", t.Value),
                                                       new XAttribute("rawValue", t.RawValue),
                                                       new XAttribute("start", t.Start),
                                                       new XAttribute("end", t.End)),
                                   from c in tokens.CodeTokens().First()
                                   .Where(x => x.Type.Equals(TokenType.InlineCode) && x.Value.Length > 3)
                                   select new XElement("code",
                                                       new XAttribute("language", c.Value.Substring(3)),
                                                       new XCData(
                                                           tokens.Where(tk => tk.IsCode).Aggregate(string.Empty, (aggregated, token) =>
            {
                aggregated += token.RawValue + Environment.NewLine; return(aggregated);
            })))
                                   );

            var transXml = _apiService.TransformXml(xml, "token2slide.xslt").GetAwaiter().GetResult();

            if (!string.IsNullOrEmpty(transXml))
            {
                return(XmlHelper2 <Slide> .LoadFromString(transXml));
            }

            return(new Slide());
        }
Пример #2
0
        public async Task <bool> AddItem(T item)
        {
            var    className = item.GetType().FullName.Split('.').Last().ToLower();
            string value     = string.Empty;

            if (_contentType.EndsWith("json"))
            {
                value = JsonConvert.SerializeObject(item);
            }
            else
            {
                value = XmlHelper2 <T> .Save(item);
            }
            using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(value)))
            {
                content.Headers.Add("Content-Type", _contentType);
                content.Headers.Add("Content-Length", value.Length.ToString());
                var response = await _client.PostAsync(_baseUrl + className + "/add", content);

                return(response.IsSuccessStatusCode);
            }
        }
Пример #3
0
        public async Task <string> Parse(Slide item)
        {
            var xml = XmlHelper2 <Slide> .Save(item);

            return(await _apiService.TransformXml(XElement.Load(new StringReader(xml)), "slide2markdown.xslt"));
        }
Пример #4
0
        public void Markdown_Generated_WhenValidSlideProvided()
        {
            #region vars

            var xml = @"<?xml version='1.0' encoding='utf-8' ?>
  <Slide Title='Dependency Injection with Windsor Castle' Margin='-200,0,0,0'>
      <RichTextBlock FontSize='20' FontWeight='DemiBold'>     
           <Paragraph>     
             <Bold>Windsor Castle Container</Bold>        
           </Paragraph>
           <Paragraph>
            <Run>Dependency Injection</Run>
           </Paragraph>
           </RichTextBlock>
        
           <Component Id='94928827-5412-4BC8-A279-EB88E21AC64F' Name='Windsor Castle' IsBrowsable='true' Action='View' TargetFile='IoC\ServiceInstaller.cs' TargetProject='Code.Service' Language='csharp'>
                   
             <Code>
                   <![CDATA[ using Castle.Windsor;
            using Castle.Windsor.Installer;
            using Castle.MicroKernel.Registration;
            using Castle.MicroKernel.SubSystems.Configuration;

            var container = new WindsorContainer();
            container.Install(FromAssembly.This());
            //usage:
            var codeServices = container.Resolve<ICodeServices>();

  public class ServiceInstaller : IWindsorInstaller
        {
            public void Install(IWindsorContainer container, IConfigurationStore store)
            {
                container.Register(
                    Component.For<IGenericServices<domain.Presentation>>()
                        .ImplementedBy<GenericServices<domain.Presentation>>()
                        .DependsOn(Dependency.OnAppSettingsValue('path'),
                          Dependency.OnAppSettingsValue('pattern'))
                        .LifestyleSingleton(),

                    Classes.FromThisAssembly()
                        .BasedOn<ApiController>()
                        .LifestyleScoped()
                    );
            }
        }]]>
      </Code>
    </Component>
  </Slide>".Trim().Replace("'", "\"");

            var expectedMarkdown = @"
    #Dependency Injection with Windsor Castle#
    
      *Windsor Castle Container*
  Dependency Injection
    ```csharp
 using Castle.Windsor;
            using Castle.Windsor.Installer;
            using Castle.MicroKernel.Registration;
            using Castle.MicroKernel.SubSystems.Configuration;

            var container = new WindsorContainer();
            container.Install(FromAssembly.This());
            //usage:
            var codeServices = container.Resolve<ICodeServices>();

  public class ServiceInstaller : IWindsorInstaller
        {
            public void Install(IWindsorContainer container, IConfigurationStore store)
            {
                container.Register(
                    Component.For<IGenericServices<domain.Presentation>>()
                        .ImplementedBy<GenericServices<domain.Presentation>>()
                        .DependsOn(Dependency.OnAppSettingsValue('path'),
                          Dependency.OnAppSettingsValue('pattern'))
                        .LifestyleSingleton(),

                    Classes.FromThisAssembly()
                        .BasedOn<ApiController>()
                        .LifestyleScoped()
                    );
            }
        }
      
    ```
  ".Replace("'", "\"");

            #endregion

            var parser = ParserFactory.CreateSlideParser(new MockApiServiceString());
            Assert.IsNotNull(parser);

            var markdown = parser.Parse(XmlHelper2 <Slide> .LoadFromString(xml)).GetAwaiter().GetResult();

            TextHelper.SaveFileContent("expected-markdown.txt", expectedMarkdown);
            TextHelper.SaveFileContent("actual-markdown.txt", markdown);
            Assert.AreEqual(expectedMarkdown.Trim(), markdown.Trim());
        }
Пример #5
0
        private Slide Clone(Slide source)
        {
            var xml = XmlHelper2 <Slide> .Save(source);

            return(XmlHelper2 <Slide> .LoadFromString(xml));
        }