mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 23:52:26 -05:00 
			
		
		
		
	[chore/bugfix] Switch markdown from blackfriday to goldmark (#1267)
Co-authored-by: Autumn! <autumnull@posteo.net>
This commit is contained in:
		
					parent
					
						
							
								2b0342b231
							
						
					
				
			
			
				commit
				
					
						eb08529f35
					
				
			
		
					 71 changed files with 16261 additions and 8358 deletions
				
			
		
							
								
								
									
										100
									
								
								vendor/github.com/yuin/goldmark/parser/code_block.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								vendor/github.com/yuin/goldmark/parser/code_block.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,100 @@ | |||
| package parser | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/yuin/goldmark/ast" | ||||
| 	"github.com/yuin/goldmark/text" | ||||
| 	"github.com/yuin/goldmark/util" | ||||
| ) | ||||
| 
 | ||||
| type codeBlockParser struct { | ||||
| } | ||||
| 
 | ||||
| // CodeBlockParser is a BlockParser implementation that parses indented code blocks. | ||||
| var defaultCodeBlockParser = &codeBlockParser{} | ||||
| 
 | ||||
| // NewCodeBlockParser returns a new BlockParser that | ||||
| // parses code blocks. | ||||
| func NewCodeBlockParser() BlockParser { | ||||
| 	return defaultCodeBlockParser | ||||
| } | ||||
| 
 | ||||
| func (b *codeBlockParser) Trigger() []byte { | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b *codeBlockParser) Open(parent ast.Node, reader text.Reader, pc Context) (ast.Node, State) { | ||||
| 	line, segment := reader.PeekLine() | ||||
| 	pos, padding := util.IndentPosition(line, reader.LineOffset(), 4) | ||||
| 	if pos < 0 || util.IsBlank(line) { | ||||
| 		return nil, NoChildren | ||||
| 	} | ||||
| 	node := ast.NewCodeBlock() | ||||
| 	reader.AdvanceAndSetPadding(pos, padding) | ||||
| 	_, segment = reader.PeekLine() | ||||
| 	// if code block line starts with a tab, keep a tab as it is. | ||||
| 	if segment.Padding != 0 { | ||||
| 		preserveLeadingTabInCodeBlock(&segment, reader, 0) | ||||
| 	} | ||||
| 	node.Lines().Append(segment) | ||||
| 	reader.Advance(segment.Len() - 1) | ||||
| 	return node, NoChildren | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func (b *codeBlockParser) Continue(node ast.Node, reader text.Reader, pc Context) State { | ||||
| 	line, segment := reader.PeekLine() | ||||
| 	if util.IsBlank(line) { | ||||
| 		node.Lines().Append(segment.TrimLeftSpaceWidth(4, reader.Source())) | ||||
| 		return Continue | NoChildren | ||||
| 	} | ||||
| 	pos, padding := util.IndentPosition(line, reader.LineOffset(), 4) | ||||
| 	if pos < 0 { | ||||
| 		return Close | ||||
| 	} | ||||
| 	reader.AdvanceAndSetPadding(pos, padding) | ||||
| 	_, segment = reader.PeekLine() | ||||
| 
 | ||||
| 	// if code block line starts with a tab, keep a tab as it is. | ||||
| 	if segment.Padding != 0 { | ||||
| 		preserveLeadingTabInCodeBlock(&segment, reader, 0) | ||||
| 	} | ||||
| 
 | ||||
| 	node.Lines().Append(segment) | ||||
| 	reader.Advance(segment.Len() - 1) | ||||
| 	return Continue | NoChildren | ||||
| } | ||||
| 
 | ||||
| func (b *codeBlockParser) Close(node ast.Node, reader text.Reader, pc Context) { | ||||
| 	// trim trailing blank lines | ||||
| 	lines := node.Lines() | ||||
| 	length := lines.Len() - 1 | ||||
| 	source := reader.Source() | ||||
| 	for length >= 0 { | ||||
| 		line := lines.At(length) | ||||
| 		if util.IsBlank(line.Value(source)) { | ||||
| 			length-- | ||||
| 		} else { | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 	lines.SetSliced(0, length+1) | ||||
| } | ||||
| 
 | ||||
| func (b *codeBlockParser) CanInterruptParagraph() bool { | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (b *codeBlockParser) CanAcceptIndentedLine() bool { | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| func preserveLeadingTabInCodeBlock(segment *text.Segment, reader text.Reader, indent int) { | ||||
| 	offsetWithPadding := reader.LineOffset() + indent | ||||
| 	sl, ss := reader.Position() | ||||
| 	reader.SetPosition(sl, text.NewSegment(ss.Start-1, ss.Stop)) | ||||
| 	if offsetWithPadding == reader.LineOffset() { | ||||
| 		segment.Padding = 0 | ||||
| 		segment.Start-- | ||||
| 	} | ||||
| 	reader.SetPosition(sl, ss) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue