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

sile-typesetter / sile / 11534409649

26 Oct 2024 07:27PM UTC coverage: 33.196% (-28.7%) from 61.897%
11534409649

push

github

alerque
chore(tooling): Update editor-config key for stylua as accepted upstream

Our setting addition is still not in a tagged release, but the PR was
accepted into the default branch of stylua. This means you no longer
need to run my fork of Stylua to get this project's style, you just nead
any build from the main development branch. However the config key was
renamed as part of the acceptance, so this is the relevant adjustment.

5810 of 17502 relevant lines covered (33.2%)

1300.57 hits per line

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

72.88
/inputters/xml.lua
1
local base = require("inputters.base")
10✔
2
local lxp = require("lxp")
10✔
3

4
local inputter = pl.class(base)
10✔
5
inputter._name = "xml"
10✔
6

7
inputter.order = 2
10✔
8

9
local function startcommand (parser, command, options)
10
   local stack = parser:getcallbacks().stack
1✔
11
   local lno, col, pos = parser:pos()
1✔
12
   local position = { lno = lno, col = col, pos = pos }
1✔
13
   -- create an empty command which content will be filled on closing tag
14
   local element = SU.ast.createCommand(command, options, nil, position)
1✔
15
   table.insert(stack, element)
1✔
16
end
17

18
local function endcommand (parser, command)
19
   local stack = parser:getcallbacks().stack
1✔
20
   local element = table.remove(stack)
1✔
21
   assert(element.command == command)
1✔
22
   local level = #stack
1✔
23
   table.insert(stack[level], element)
1✔
24
end
25

26
local function text (parser, msg)
27
   local stack = parser:getcallbacks().stack
1✔
28
   local element = stack[#stack]
1✔
29
   local n = #element
1✔
30
   if type(element[n]) == "string" then
1✔
31
      element[n] = element[n] .. msg
×
32
   else
33
      table.insert(element, msg)
1✔
34
   end
35
end
36

37
local function parse (doc)
38
   local content = {
1✔
39
      StartElement = startcommand,
1✔
40
      EndElement = endcommand,
1✔
41
      CharacterData = text,
1✔
42
      _nonstrict = true,
43
      stack = { {} },
1✔
44
   }
45
   local parser = lxp.new(content)
1✔
46
   local status, err
47
   if type(doc) == "string" then
1✔
48
      status, err = parser:parse(doc)
1✔
49
      if not status then
1✔
50
         return nil, err
×
51
      end
52
   else
53
      for element in pairs(doc) do
×
54
         status, err = parser:parse(element)
×
55
         if not status then
×
56
            return nil, err
×
57
         end
58
      end
59
   end
60
   status, err = parser:parse()
1✔
61
   if not status then
1✔
62
      return nil, err
×
63
   end
64
   parser:close()
1✔
65
   return content.stack[1][1]
1✔
66
end
67

68
function inputter.appropriate (round, filename, doc)
10✔
69
   if round == 1 then
10✔
70
      return filename:match(".xml$")
10✔
71
   elseif round == 2 then
×
72
      local sniff = doc:sub(1, 100):gsub("begin.*", "") or ""
×
73
      local promising = sniff:match("<")
×
74
      return promising and inputter.appropriate(3, filename, doc)
×
75
   elseif round == 3 then
×
76
      local _, err = parse(doc)
×
77
      return not err
×
78
   end
79
end
80

81
function inputter.parse (_, doc)
10✔
82
   local tree, err = parse(doc)
1✔
83
   if not tree then
1✔
84
      SU.error(err)
×
85
   end
86
   -- XML documents can have any root element, and it should be up to the class
87
   -- to supply handling far whatever that element that is in a specific format.
88
   -- Hence we wrap the actual DOM in an extra element of our own if and only if
89
   -- it doesn't look like a native SILE one already.
90
   local rootelement = tree.command
1✔
91
   if rootelement ~= "sile" and rootelement ~= "document" then
1✔
92
      tree = SU.ast.createCommand("document", {}, tree)
×
93
   end
94
   return { tree }
1✔
95
end
96

97
return inputter
10✔
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