mirror of
				https://github.com/42wim/matterbridge.git
				synced 2025-11-04 07:47:27 +01:00 
			
		
		
		
	This uses our own gomatrix lib with the SendHTML function which adds HTML to formatted_body in matrix. golang-commonmark is used to convert markdown into valid HTML.
		
			
				
	
	
		
			132 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2015 The Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package markdown
 | 
						|
 | 
						|
func ruleImage(s *StateInline, silent bool) bool {
 | 
						|
	pos := s.Pos
 | 
						|
	max := s.PosMax
 | 
						|
 | 
						|
	if pos+2 >= max {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
 | 
						|
	src := s.Src
 | 
						|
	if src[pos] != '!' || src[pos+1] != '[' {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
 | 
						|
	labelStart := pos + 2
 | 
						|
	labelEnd := parseLinkLabel(s, pos+1, false)
 | 
						|
	if labelEnd < 0 {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
 | 
						|
	var href, title, label string
 | 
						|
	oldPos := pos
 | 
						|
	pos = labelEnd + 1
 | 
						|
	if pos < max && src[pos] == '(' {
 | 
						|
		pos++
 | 
						|
		for pos < max {
 | 
						|
			b := src[pos]
 | 
						|
			if !byteIsSpace(b) && b != '\n' {
 | 
						|
				break
 | 
						|
			}
 | 
						|
			pos++
 | 
						|
		}
 | 
						|
		if pos >= max {
 | 
						|
			return false
 | 
						|
		}
 | 
						|
 | 
						|
		start := pos
 | 
						|
		url, _, endpos, ok := parseLinkDestination(src, pos, s.PosMax)
 | 
						|
		if ok {
 | 
						|
			url = normalizeLink(url)
 | 
						|
			if validateLink(url) {
 | 
						|
				href = url
 | 
						|
				pos = endpos
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		start = pos
 | 
						|
		for pos < max {
 | 
						|
			b := src[pos]
 | 
						|
			if !byteIsSpace(b) && b != '\n' {
 | 
						|
				break
 | 
						|
			}
 | 
						|
			pos++
 | 
						|
		}
 | 
						|
		if pos >= max {
 | 
						|
			return false
 | 
						|
		}
 | 
						|
 | 
						|
		title, _, endpos, ok = parseLinkTitle(src, pos, s.PosMax)
 | 
						|
		if pos < max && start != pos && ok {
 | 
						|
			pos = endpos
 | 
						|
			for pos < max {
 | 
						|
				b := src[pos]
 | 
						|
				if !byteIsSpace(b) && b != '\n' {
 | 
						|
					break
 | 
						|
				}
 | 
						|
				pos++
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if pos >= max || src[pos] != ')' {
 | 
						|
			s.Pos = oldPos
 | 
						|
			return false
 | 
						|
		}
 | 
						|
 | 
						|
		pos++
 | 
						|
 | 
						|
	} else {
 | 
						|
		if s.Env.References == nil {
 | 
						|
			return false
 | 
						|
		}
 | 
						|
 | 
						|
		if pos < max && src[pos] == '[' {
 | 
						|
			start := pos + 1
 | 
						|
			pos = parseLinkLabel(s, pos, false)
 | 
						|
			if pos >= 0 {
 | 
						|
				label = src[start:pos]
 | 
						|
				pos++
 | 
						|
			} else {
 | 
						|
				pos = labelEnd + 1
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			pos = labelEnd + 1
 | 
						|
		}
 | 
						|
 | 
						|
		if label == "" {
 | 
						|
			label = src[labelStart:labelEnd]
 | 
						|
		}
 | 
						|
 | 
						|
		ref, ok := s.Env.References[normalizeReference(label)]
 | 
						|
		if !ok {
 | 
						|
			s.Pos = oldPos
 | 
						|
			return false
 | 
						|
		}
 | 
						|
 | 
						|
		href = ref["href"]
 | 
						|
		title = ref["title"]
 | 
						|
	}
 | 
						|
 | 
						|
	if !silent {
 | 
						|
		content := src[labelStart:labelEnd]
 | 
						|
 | 
						|
		tokens := s.Md.Inline.Parse(content, s.Md, s.Env)
 | 
						|
 | 
						|
		s.PushToken(&Image{
 | 
						|
			Src:    href,
 | 
						|
			Title:  title,
 | 
						|
			Tokens: tokens,
 | 
						|
		})
 | 
						|
	}
 | 
						|
 | 
						|
	s.Pos = pos
 | 
						|
	s.PosMax = max
 | 
						|
 | 
						|
	return true
 | 
						|
}
 |