xref: /Universal-ctags/misc/txt2cstr (revision 431a587e6c6caab7b964eb69bae0b65d342d8b69)
1*431a587eSMasatake YAMATO#!/usr/bin/env perl
2*431a587eSMasatake YAMATO#
3*431a587eSMasatake YAMATO# txt2cstr - a tool converting a text file into char[].
4*431a587eSMasatake YAMATO#
5*431a587eSMasatake YAMATO# Copyright (C) 2021 Masatake YAMATO
6*431a587eSMasatake YAMATO# Copyright (C) 2021 Red Hat Inc.
7*431a587eSMasatake YAMATO#
8*431a587eSMasatake YAMATO
9*431a587eSMasatake YAMATOuse File::Basename;
10*431a587eSMasatake YAMATO
11*431a587eSMasatake YAMATOsub show_help {
12*431a587eSMasatake YAMATO    print<<EOF;
13*431a587eSMasatake YAMATOUsage:
14*431a587eSMasatake YAMATO	$0 --help
15*431a587eSMasatake YAMATO	$0 INPUT.txt > OUTPUT.c
16*431a587eSMasatake YAMATOEOF
17*431a587eSMasatake YAMATO}
18*431a587eSMasatake YAMATO
19*431a587eSMasatake YAMATOsub convert {
20*431a587eSMasatake YAMATO    my $input = $_[0];
21*431a587eSMasatake YAMATO    my $name  = basename $input;
22*431a587eSMasatake YAMATO
23*431a587eSMasatake YAMATO    $name =~ s/\.[a-z]+$//g;
24*431a587eSMasatake YAMATO
25*431a587eSMasatake YAMATO    open(INPUT, "< " . $input) or die("faild to open " . $input);
26*431a587eSMasatake YAMATO
27*431a587eSMasatake YAMATO    print "const char ctags$name []=\n";
28*431a587eSMasatake YAMATO    while (<INPUT>) {
29*431a587eSMasatake YAMATO	chop;
30*431a587eSMasatake YAMATO	$_ =~ s/\\/\\\\/g;
31*431a587eSMasatake YAMATO	$_ =~ s/\"/\\\"/g;
32*431a587eSMasatake YAMATO	print '"' . "$_" . '\\n"' . "\n";
33*431a587eSMasatake YAMATO    }
34*431a587eSMasatake YAMATO    print ";\n";
35*431a587eSMasatake YAMATO
36*431a587eSMasatake YAMATO    close (INPUT);
37*431a587eSMasatake YAMATO}
38*431a587eSMasatake YAMATO
39*431a587eSMasatake YAMATOsub main {
40*431a587eSMasatake YAMATO    my $input;
41*431a587eSMasatake YAMATO
42*431a587eSMasatake YAMATO    for (@_) {
43*431a587eSMasatake YAMATO	if ( ($_ eq '-h') || ($_ eq '--help') ) {
44*431a587eSMasatake YAMATO	    show_help;
45*431a587eSMasatake YAMATO	    exit 0;
46*431a587eSMasatake YAMATO	} elsif ( /^-.*/ ) {
47*431a587eSMasatake YAMATO	    die "unrecongnized option: $_";
48*431a587eSMasatake YAMATO	} else {
49*431a587eSMasatake YAMATO	    if ($input) {
50*431a587eSMasatake YAMATO		die "Don't specify more than 1 input file: @_";
51*431a587eSMasatake YAMATO	    }
52*431a587eSMasatake YAMATO	    $input=$_;
53*431a587eSMasatake YAMATO	}
54*431a587eSMasatake YAMATO    }
55*431a587eSMasatake YAMATO
56*431a587eSMasatake YAMATO    unless ($input) {
57*431a587eSMasatake YAMATO	die "No input file given";
58*431a587eSMasatake YAMATO    }
59*431a587eSMasatake YAMATO
60*431a587eSMasatake YAMATO    convert $input;
61*431a587eSMasatake YAMATO    0;
62*431a587eSMasatake YAMATO}
63*431a587eSMasatake YAMATO
64*431a587eSMasatake YAMATOmain @ARGV;
65*431a587eSMasatake YAMATO
66*431a587eSMasatake YAMATO# txt2cstr ends here
67