forked from flathub-infra/flathub.org
-
Notifications
You must be signed in to change notification settings - Fork 0
/
appstream-to-json.xslt
78 lines (76 loc) · 2.8 KB
/
appstream-to-json.xslt
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" doctype-public="XSLT-compat"
omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:param name="baseurl" select="''"/>
<xsl:param name="arch" select="'x86_64'"/>
<xsl:template match="/components">
<xsl:text>{ "apps" : [ </xsl:text>
<xsl:apply-templates select="component[starts-with(bundle, 'app/')]"/>
<xsl:text>]} </xsl:text>
</xsl:template>
<xsl:template match="component">
<xsl:text> { </xsl:text>
<xsl:text> "id": "</xsl:text>
<xsl:value-of select="substring-before(substring-after(bundle, '/'), '/')"/>
<xsl:text>", </xsl:text>
<xsl:text> "ref": "</xsl:text>
<xsl:value-of select="bundle"/>
<xsl:text>", </xsl:text>
<xsl:text> "name": "</xsl:text>
<xsl:value-of select="name"/>
<xsl:text>", </xsl:text>
<xsl:text> "summary": "</xsl:text>
<xsl:value-of select="summary"/>
<xsl:text>", </xsl:text>
<xsl:text> "flatpakref": "</xsl:text>
<xsl:value-of select="$baseurl"/>
<xsl:value-of select="substring-before(substring-after(bundle, '/'), '/')"/>
<xsl:text>.flatpakref", </xsl:text>
<xsl:text> "color": "#888</xsl:text>
<xsl:text>", </xsl:text>
<xsl:text> "icons": { </xsl:text>
<xsl:apply-templates select="icon[@type='cached' or @type='remote']"/>
<xsl:text> }</xsl:text>
<xsl:text> </xsl:text>
<xsl:text> }</xsl:text>
<xsl:if test="following-sibling::component[starts-with(bundle, 'app/')]">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="icon[@type='cached']">
<xsl:text> "</xsl:text>
<xsl:value-of select="@width"/>
<xsl:text>": "</xsl:text>
<xsl:value-of select="$baseurl"/>
<xsl:value-of select="$arch"/>
<xsl:text>/icons/</xsl:text>
<xsl:value-of select="@width"/>
<xsl:text>x</xsl:text>
<xsl:value-of select="@height"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="following-sibling::icon[@type='cached' or @type='remote']">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="icon[@type='remote']">
<xsl:text> "</xsl:text>
<xsl:choose>
<xsl:when test="@width">
<xsl:value-of select="@width"/>
</xsl:when>
<xsl:otherwise>64</xsl:otherwise>
</xsl:choose>
<xsl:text>": "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="following-sibling::icon[@type='cached' or @type='remote']">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:transform>