• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

rafalp / Misago / 14252691788

03 Apr 2025 09:01PM UTC coverage: 97.097% (-0.08%) from 97.173%
14252691788

push

github

web-flow
Replace default parser with `markdown-it-py` (#1901)

1902 of 1969 new or added lines in 66 files covered. (96.6%)

20 existing lines in 7 files now uncovered.

68959 of 71021 relevant lines covered (97.1%)

0.97 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.74
/misago/parser/plugins/imgbbcode.py
1
from markdown_it import MarkdownIt
1✔
2
from markdown_it.rules_inline.state_inline import StateInline
1✔
3
from markdown_it.token import Token
1✔
4

5

6
def img_bbcode_plugin(md: MarkdownIt):
1✔
7
    md.inline.ruler.push("img_bbcode", img_bbcode_rule)
1✔
8

9

10
def img_bbcode_rule(state: StateInline, silent: bool):
1✔
11
    start = state.pos
1✔
12
    maximum = state.posMax
1✔
13

14
    args_start = None
1✔
15
    args_end = None
1✔
16
    args_str = None
1✔
17

18
    content_start = None
1✔
19
    content_end = None
1✔
20

21
    if maximum - start < 11:
1✔
22
        return False
1✔
23

24
    if state.src[start : start + 4].lower() != "[img":
1✔
25
        return False
1✔
26

27
    if state.src[start + 4] == "=":
1✔
28
        if "]" not in state.src[start + 5 : maximum]:
1✔
NEW
29
            return False
×
30

31
        args_start = start + 5
1✔
32
        content_start = state.src.index("]", args_start) + 1
1✔
33
        args_end = content_start - 1
1✔
34

35
        args_str = state.src[args_start:args_end].strip() or None
1✔
36
        if args_str and (
1✔
37
            (args_str[0] == '"' and args_str[-1] == '"')
38
            or (args_str[0] == "'" and args_str[-1] == "'")
39
        ):
40
            args_str = args_str[1:-1].strip()
1✔
41
    else:
42
        content_start = start + 5
1✔
43

44
    pos = content_start
1✔
45
    while pos + 6 <= maximum:
1✔
46
        if state.src[pos : pos + 6].lower() == "[/img]":
1✔
47
            break
1✔
48

49
        pos += 1
1✔
50

51
    if state.src[pos : pos + 6].lower() != "[/img]":
1✔
NEW
52
        return False
×
53

54
    content_end = pos
1✔
55
    end = content_end + 6
1✔
56

57
    content = state.src[content_start:content_end].strip()
1✔
58

59
    if args_start and args_end and not args_str:
1✔
60
        return False  # Eject if [img=]...[/img]
1✔
61

62
    if not content:
1✔
63
        return False  # Eject if [img][/img]
1✔
64

65
    if args_str:
1✔
66
        href = state.md.normalizeLink(args_str)
1✔
67
    else:
68
        href = state.md.normalizeLink(content.strip())
1✔
69

70
    if not state.md.validateLink(href):
1✔
NEW
71
        return False
×
72

73
    pos_max_org = state.posMax
1✔
74

75
    if not silent:
1✔
76
        token = state.push("image", "img", 0)
1✔
77
        token.markup = state.src[start:end]
1✔
78
        token.attrs = {"src": href, "alt": ""}
1✔
79

80
        if args_str and content:
1✔
81
            token.children = [
1✔
82
                Token(
83
                    type="text",
84
                    tag="",
85
                    nesting=0,
86
                    content=content,
87
                )
88
            ]
89
            token.content = content
1✔
90

91
    state.pos = end
1✔
92
    state.posMax = pos_max_org
1✔
93

94
    return True
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc