summaryrefslogtreecommitdiffstats
path: root/vendor/gitlab.com/golang-commonmark/markdown/balance_pairs.go
blob: d5830634aebbc483cd9f56a82924020f758813bc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// 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 ruleBalancePairs(s *StateInline) {
	delimiters := s.Delimiters
	max := len(delimiters)

	for i := 0; i < max; i++ {
		lastDelim := delimiters[i]

		if !lastDelim.Close {
			continue
		}

		j := i - lastDelim.Jump - 1

		for j >= 0 {
			currDelim := delimiters[j]

			if currDelim.Open &&
				currDelim.Marker == lastDelim.Marker &&
				currDelim.End < 0 &&
				currDelim.Level == lastDelim.Level {
				oddMatch := (currDelim.Close || lastDelim.Open) &&
					currDelim.Length != -1 &&
					lastDelim.Length != -1 &&
					(currDelim.Length+lastDelim.Length)%3 == 0
				if !oddMatch {
					delimiters[i].Jump = i - j
					delimiters[i].Open = false
					delimiters[j].End = i
					delimiters[j].Jump = 0
					break
				}
			}

			j -= currDelim.Jump + 1
		}
	}
}