Pārlūkot izejas kodu

Tweaked mx2cc makedocs markdown->html convertor.

Mark Sibly 7 gadi atpakaļ
vecāks
revīzija
c38ff43ce0
1 mainītis faili ar 35 papildinājumiem un 5 dzēšanām
  1. 35 5
      src/mx2cc/newdocs/markdown.monkey2

+ 35 - 5
src/mx2cc/newdocs/markdown.monkey2

@@ -17,6 +17,8 @@ Class MarkdownConvertor
 
 		_lineNum=0
 
+		_para=False
+		
 		_buf.Clear()
 		
 		For Local i:=0 Until _lines.Length
@@ -29,41 +31,55 @@ Class MarkdownConvertor
 			If Not line Continue
 		
 			If line.StartsWith( "#" )
+				
+				EndPara()
 			
 				EmitHeader( line )
 			
 			Else If line.StartsWith( "|" )
 			
+				EndPara()
+			
 				EmitTable( line )
 				
 			Else If line.StartsWith( "*" )
 			
+				EndPara()
+			
 				EmitList( line )
 				
 			Else If line.StartsWith( "<" )
 			
+				EndPara()
+			
 				Emit( line+"\" )
 				
 			Else If line.StartsWith( "---" )
 			
+				EndPara()
+			
 				Emit( "<hr class="+_cls+">" )
 				
 			Else If line.StartsWith( "```" ) Or line.ToLower().StartsWith( "<pre>" )
 			
+				EndPara()
+			
 				EmitCode( line )
 				
 			Else
 			
-				If _lineNum>1 And _lines[_lineNum-2]=""
-					Emit( "<p class="+_cls+">"+Escape( line ) )
-				Else
-					Emit( Escape( line ) )
+				If Not _para Or (_lineNum>1 And _lines[_lineNum-2]="")
+					EndPara()
+					BeginPara()
 				Endif
-
+				
+				Emit( Escape( line ) )
 			Endif
 				
 		Wend
 		
+		EndPara()
+		
 		Local html:=_buf.Join( "~n" )
 		
 		html=html.Replace( "\~n","" )
@@ -87,9 +103,23 @@ Class MarkdownConvertor
 	Field _lineNum:=0
 	Field _buf:=New StringStack
 	
+	Field _para:Bool=False
+	
 	Property AtEnd:Bool()
 		Return _lineNum>=_lines.Length
 	End
+
+	Method BeginPara()
+		If _para Return
+		Emit( "<p class="+_cls+">" )
+		_para=True
+	End
+	
+	Method EndPara()
+		If Not _para Return
+		Emit( "</p>" )
+		_para=False
+	End
 	
 	Method Emit( str:String )
 		_buf.Push( str )