File: generate-jsonc.pl

package info (click to toggle)
kf6-syntax-highlighting 6.20.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 49,872 kB
  • sloc: xml: 205,656; cpp: 12,882; python: 3,055; sh: 965; perl: 814; ruby: 494; pascal: 393; javascript: 161; php: 150; jsp: 132; lisp: 131; haskell: 124; ada: 119; ansic: 107; makefile: 96; f90: 94; ml: 85; cobol: 81; yacc: 71; csh: 62; exp: 61; erlang: 54; sql: 51; java: 47; sed: 45; objc: 37; tcl: 36; awk: 31; asm: 30; fortran: 18; cs: 10
file content (50 lines) | stat: -rwxr-xr-x 1,783 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/env perl
# SPDX-FileCopyrightText: 2025 Jonathan Poelen <jonathan.poelen@gmail.com>
# SPDX-License-Identifier: MIT

my $file = "";

open(my $input, '<:encoding(UTF-8)', $ARGV[0])
  or die "Could not open file '$ARGV[0]': $!";

open(my $output, '>:encoding(UTF-8)', $ARGV[1])
  or die "Could not open file '$ARGV[1]': $!";

while (<$input>)
{
  $file .= $_;
}

$warning = "\n\n<!-- ***** THIS FILE WAS GENERATED BY A SCRIPT - DO NOT EDIT ***** -->\n";
$last_context = "
  <context name='FindComment' lineEndContext='#pop' attribute='Style_Normal'>
    <StringDetect String='//' context='CommentSingle'/>
    <StringDetect String='/*' context='CommentMultiLine'/>
  </context>

  <context name='CommentSingle' lineEndContext='#pop' attribute='Style_Comment'>
    <DetectSpaces/>
    <IncludeRules context='##Comments'/>
    <DetectIdentifier/>
  </context>

  <context name='CommentMultiLine' lineEndContext='#stay' attribute='Style_Comment'>
    <IncludeRules context='CommentSingle'/>
    <StringDetect String='*/' context='#pop' attribute='Style_Comment'/>
  </context>
";
$last_item = "<itemData name='Style_Comment' defStyleNum='dsComment' />";

$language = $file =~ s#.*?(<language[^>]+?>).*#$1#sr;
$language =~ s#name="[^"]+#name="JSONC" priority="1#s;
$language =~ s#extensions="[^"]+#extensions="*.json;*.jsonc#s;
$language =~ s#mimetype="[^"]+#mimetype="application/json#s;
$language =~ s/version="([^"]+)/sprintf("version=\"%d", $1-9)/se;
$language =~ s/kateversion="([^"]+)/kateversion="5.0/s;
$file =~ s#<!-- JSONC -->#<IncludeRules context="FindComment"/>#sg;
$file =~ s#<language[^>]+?>#$warning\n$language#s;
$file =~ s#</itemDatas>#$last_item\n</itemDatas>#s;
$file =~ s#</contexts>#$last_context</contexts>#s;

print $output $file;
print $output $warning;