コード例 #1
0
ファイル: HamlNodeTag_Tests.cs プロジェクト: RussPAll/NHaml
        public void Constructor_MalformedHtmlStyleAttributes_ThrowsMalformedTagException()
        {
            const string templateLine = "p(a='b'";
            var line = new HamlLine(templateLine, HamlRuleEnum.Tag, indent: "");

            Assert.Throws<HamlParserMalformedTagException>(() => new HamlNodeTag(line));
        }
コード例 #2
0
        public void Walk_NestedTags_AppendsCorrectTags()
        {
            // Arrange
            HamlLine nestedText = new HamlLine("Hello world", HamlRuleEnum.PlainText, indent: "  ", isInline: true);
            var tagNode = new HamlNodeHtmlComment(new HamlLine("", HamlRuleEnum.HtmlComment, indent: ""));
            tagNode.AddChild(new HamlNodeTextContainer(nestedText));

            // Act
            _walker.Walk(tagNode);

            // Assert
            string expectedComment = "<!--" + nestedText.Indent + nestedText.Content + " -->";
            Assert.That(_classBuilderMock.Build(""), Is.EqualTo(expectedComment));
        }
コード例 #3
0
        public void Walk_TextNode_AppendsCorrectTag()
        {
            // Arrange
            var content = new HamlLine("Simple content", HamlRuleEnum.PlainText, indent: "");
            var document = HamlDocumentBuilder.Create("",
                new HamlNodeTextContainer(content));
            Type baseType = typeof(Template);

            // Act
            var builder = new ClassBuilderMock();
            new HamlDocumentWalker(builder).Walk(document, "", baseType, new List<string>());

            // Assert
            Assert.That(builder.Build(""), Is.EqualTo(content.Content));
        }
コード例 #4
0
 private void ProcessInlineTags(HamlLine line, List <HamlLine> result)
 {
     if (IsRuleThatAllowsInlineContent(line.HamlRule))
     {
         int contentIndex = GetEndOfTagIndex('%' + line.Content) - 1;
         if (contentIndex < line.Content.Length - 1)
         {
             string subTag = line.Content.Substring(contentIndex).TrimStart();
             line.Content = line.Content.Substring(0, contentIndex).Trim();
             subTag       = AddImplicitDivTag(subTag);
             var subTagRule = HamlRuleFactory.ParseHamlRule(ref subTag);
             var subLine    = new HamlLine(subTag, subTagRule, line.Indent + "\t", line.SourceFileLineNo, true);
             ProcessInlineTags(subLine, result);
         }
     }
     result.Insert(0, line);
 }
コード例 #5
0
ファイル: HamlLineLexer.cs プロジェクト: hobdrive/NHaml
        public IEnumerable<HamlLine> ParseHamlLine(string currentLine, int currentLineIndex)
        {
            int whiteSpaceIndex = 0;

            while (whiteSpaceIndex < currentLine.Length
                && (currentLine[whiteSpaceIndex] == ' ' || currentLine[whiteSpaceIndex] == '\t'))
            {
                whiteSpaceIndex++;
            }

            string indent = currentLine.Substring(0, whiteSpaceIndex);
            string content = (whiteSpaceIndex == currentLine.Length) ? "" : currentLine.Substring(whiteSpaceIndex);
            content = AddImplicitDivTag(content);
            var hamlRule = HamlRuleFactory.ParseHamlRule(ref content);

            var result = new List<HamlLine>();
            var line = new HamlLine(content, hamlRule, indent, currentLineIndex, false);

            ProcessInlineTags(line, result);
            return result;
        }
コード例 #6
0
        public IEnumerable <HamlLine> ParseHamlLine(string currentLine, int currentLineIndex)
        {
            int whiteSpaceIndex = 0;

            while (whiteSpaceIndex < currentLine.Length &&
                   (currentLine[whiteSpaceIndex] == ' ' || currentLine[whiteSpaceIndex] == '\t'))
            {
                whiteSpaceIndex++;
            }

            string indent  = currentLine.Substring(0, whiteSpaceIndex);
            string content = (whiteSpaceIndex == currentLine.Length) ? "" : currentLine.Substring(whiteSpaceIndex);

            content = AddImplicitDivTag(content);
            var hamlRule = HamlRuleFactory.ParseHamlRule(ref content);

            var result = new List <HamlLine>();
            var line   = new HamlLine(content, hamlRule, indent, currentLineIndex, false);

            ProcessInlineTags(line, result);
            return(result);
        }
コード例 #7
0
ファイル: HamlLineLexer.cs プロジェクト: RussPAll/NHaml
        public static IEnumerable<HamlLine> ParseHamlLine(string currentLine, int currentLineIndex)
        {
            int whiteSpaceIndex = 0;

            while (whiteSpaceIndex < currentLine.Length
                && (currentLine[whiteSpaceIndex] == ' ' || currentLine[whiteSpaceIndex] == '\t'))
            {
                whiteSpaceIndex++;
            }

            string indent = currentLine.Substring(0, whiteSpaceIndex);
            string content = (whiteSpaceIndex == currentLine.Length) ? "" : currentLine.Substring(whiteSpaceIndex);
            int tokenLength = 0;
            var hamlRule = HamlRuleFactory.ParseHamlRule(ref content, out tokenLength);

            var metrics = new HamlSourceFileMetrics(currentLineIndex, whiteSpaceIndex, currentLine.Length - whiteSpaceIndex, tokenLength);
            var result = new List<HamlLine>();
            var line = new HamlLine(content, hamlRule, metrics, indent, false);

            ProcessInlineTags(line, result);
            return result;
        }
コード例 #8
0
ファイル: HamlNodeFactory.cs プロジェクト: RussPAll/NHaml
 public static HamlNode GetHamlNode(HamlLine nodeLine)
 {
     switch (nodeLine.HamlRule)
     {
         case HamlRuleEnum.PlainText:
             return new HamlNodeTextContainer(nodeLine);
         case HamlRuleEnum.Tag:
             return new HamlNodeTag(nodeLine);
         case HamlRuleEnum.HamlComment:
             return new HamlNodeHamlComment(nodeLine);
         case HamlRuleEnum.HtmlComment:
             return new HamlNodeHtmlComment(nodeLine);
         case HamlRuleEnum.Evaluation:
             return new HamlNodeEval(nodeLine);
         case HamlRuleEnum.Code:
             return new HamlNodeCode(nodeLine);
         case HamlRuleEnum.DocType:
             return new HamlNodeDocType(nodeLine);
         case HamlRuleEnum.Partial:
             return new HamlNodePartial(nodeLine);
         default:
             throw new HamlParserUnknownRuleException(nodeLine.Content, nodeLine.Metrics);
     }
 }
コード例 #9
0
ファイル: HamlLine_Tests.cs プロジェクト: RussPAll/NHaml
 public void Constructor_CalculatesIndentCountCorrectly(string indent, string content, int expectedIndent)
 {
     var line = new HamlLine(content, HamlRuleEnum.PlainText, indent: indent);
     Assert.AreEqual(expectedIndent, line.IndentCount);
 }
コード例 #10
0
ファイル: HamlLineLexer.cs プロジェクト: hobdrive/NHaml
 private void ProcessInlineTags(HamlLine line, List<HamlLine> result)
 {
     if (IsRuleThatAllowsInlineContent(line.HamlRule))
     {
         int contentIndex = GetEndOfTagIndex('%' + line.Content)-1;
         if (contentIndex < line.Content.Length-1)
         {
             string subTag = line.Content.Substring(contentIndex).TrimStart();
             line.Content = line.Content.Substring(0, contentIndex).Trim();
             subTag = AddImplicitDivTag(subTag);
             var subTagRule = HamlRuleFactory.ParseHamlRule(ref subTag);
             var subLine = new HamlLine(subTag, subTagRule, line.Indent + "\t", line.SourceFileLineNo, true);
             ProcessInlineTags(subLine, result);
         }
     }
     result.Insert(0, line);
 }
コード例 #11
0
ファイル: HamlLineLexer.cs プロジェクト: RussPAll/NHaml
 private static void ProcessInlineTags(HamlLine line, List<HamlLine> result)
 {
     if (IsRuleThatAllowsInlineContent(line.HamlRule))
     {
         int contentIndex = GetEndOfTagIndex('%' + line.Content)-1;
         if (contentIndex < line.Content.Length-1)
         {
             string subTag = line.Content.Substring(contentIndex);
             line.Content = line.Content.Substring(0, contentIndex);
             int tokenLength;
             var subTagRule = HamlRuleFactory.ParseHamlRule(ref subTag, out tokenLength);
             var colNo = contentIndex + line.Metrics.TokenLength;
             var metrics = new HamlSourceFileMetrics(line.Metrics.LineNo,
                 line.Metrics.ColNo + colNo, line.Metrics.Length - colNo, tokenLength);
             var subLine = new HamlLine(subTag, subTagRule, metrics, line.Indent + "\t", isInline: true);
             ProcessInlineTags(subLine, result);
         }
     }
     result.Insert(0, line);
 }
コード例 #12
0
ファイル: HamlFile.cs プロジェクト: hobdrive/NHaml
 public void AddLine(HamlLine line)
 {
     _hamlLines.Add(line);
 }
コード例 #13
0
ファイル: HamlFile.cs プロジェクト: parhelia512/NHaml
 public void AddLine(HamlLine line)
 {
     _hamlLines.Add(line);
 }
コード例 #14
0
 public HamlNodeTextContainer(HamlLine nodeLine)
     : base(nodeLine)
 {
     ParseFragments(nodeLine.Content);
 }
コード例 #15
0
ファイル: HamlNodeCode.cs プロジェクト: hobdrive/NHaml
 public HamlNodeCode(HamlLine line)
     : base(line)
 {
 }
コード例 #16
0
ファイル: HamlNodePartial.cs プロジェクト: hobdrive/NHaml
 public HamlNodePartial(HamlLine line)
     : base(line)
 {
     IsResolved = false;
 }
コード例 #17
0
ファイル: HamlNode.cs プロジェクト: hobdrive/NHaml
 protected HamlNode(HamlLine nodeLine)
 {
     _line = nodeLine;
     Content = nodeLine.Content;
     SourceFileLineNum = _line.SourceFileLineNo;
 }
コード例 #18
0
 public void GetHamlNode_DifferentHamlLineTypes_ReturnsCorrectHamlNode(HamlRuleEnum rule, Type nodeType)
 {
     var line = new HamlLine("Blah", rule, indent: "");
     var result = HamlNodeFactory.GetHamlNode(line);
     Assert.That(result, Is.InstanceOf(nodeType));
 }
コード例 #19
0
 public void Children_IncompleteVariableReference_ThrowsException()
 {
     var line = new HamlLine("#{variable", HamlRuleEnum.PlainText, indent: "");
     Assert.Throws<HamlParserMalformedVariableException>(() => new HamlNodeTextContainer(line));
 }
コード例 #20
0
ファイル: HamlNodeDocType.cs プロジェクト: RussPAll/NHaml
 public HamlNodeDocType(HamlLine line)
     : base(line)
 {
 }
コード例 #21
0
 public void GetHamlNode_TagSubTypes_ThrowsHamlUnknownRuleException(HamlRuleEnum rule, Type nodeType)
 {
     var line = new HamlLine("Blah", rule, indent: "");
     Assert.Throws<HamlParserUnknownRuleException>(() => HamlNodeFactory.GetHamlNode(line));
 }
コード例 #22
0
ファイル: HamlLine_Tests.cs プロジェクト: RussPAll/NHaml
 public void Constructor_MaintainsIndentForNonTextNodes(string indent, string content, HamlRuleEnum rule, int expectedIndent)
 {
     var line = new HamlLine(content, rule, indent: indent);
     Assert.AreEqual(expectedIndent, line.IndentCount);
 }
コード例 #23
0
ファイル: HamlNodeEval.cs プロジェクト: hobdrive/NHaml
 public HamlNodeEval(HamlLine line)
     : base(line)
 {
 }
コード例 #24
0
        public void ParseHamlFile_UnknownRuleType_ThrowsUnknownRuleException()
        {
            var line = new HamlLine("", HamlRuleEnum.Unknown, indent: "");

            var file = new HamlFile("");
            file.AddLine(line);
            Assert.Throws<HamlParserUnknownRuleException>(() => _parser.ParseHamlFile(file));
        }