diff options
author | Lev Walkin <vlm@lionet.info> | 2005-03-17 22:43:48 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2005-03-17 22:43:48 +0000 |
commit | d7f237b856514230b72706976d1f564c91f3d313 (patch) | |
tree | edc2d2a7b230af0dff6a8821b140672a528e7857 /examples/crfc2asn1.pl | |
parent | cc3e13d4fa0c37168d8caef2d35430af4f73933c (diff) |
support for RFC 3852
Diffstat (limited to 'examples/crfc2asn1.pl')
-rwxr-xr-x | examples/crfc2asn1.pl | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/examples/crfc2asn1.pl b/examples/crfc2asn1.pl index df0a099f..c22f81dd 100755 --- a/examples/crfc2asn1.pl +++ b/examples/crfc2asn1.pl @@ -33,22 +33,29 @@ while(<>) { # The least correct way to find the start of ASN # definition. # - if(/^[ \t]*END[ \t]*$/) { + if(/^[ \t]*END[ \t]*(--.*)?$/) { print STDERR "Missed an ASN.1 grammar before line ". $. ."?\n"; - unlink($currentFile) or die "Can't remove $!"; - print STDERR "Removed $currentFile"; exit(1); } + my $modName = ''; # ASN.1 module name my $rfcid = ''; $rfcid = $1 . '-' if($ARGV =~ /([a-z0-9]+)/i); - if(/^[ \t]+([A-Za-z0-9-]+).*DEFINITIONS.*::=/) { - $currentFname = $rfcid . $1 . ".asn1"; + if(/^[ \t]+([A-Z][A-Za-z0-9-]*).*DEFINITIONS.*::=/) { + $modName = $1; + $currentFname = $rfcid . $modName . ".asn1"; $inasn = 1; - } elsif(/^[ \t]*([A-Za-z0-9-]+).*{.*iso/) { - $currentFname = $rfcid . $1 . ".asn1"; + } elsif(/^[ \t]*([A-Z][A-Za-z0-9-]*).*{[ \t]*iso/ + || /^[ \t]*{[ \t]*iso/) { + $modName = $1; + unless(length($modName)) { + next unless $prevLine =~ + /^[ \t]*([A-Z][A-Za-z0-9-]*)[ \t]*$/; + $modName = $1; + } + $currentFname = $rfcid . $modName . ".asn1"; my @a = ($_); my $i; for($i = 0; $i < 8; $i++) { @@ -62,10 +69,11 @@ while(<>) { } next unless $inasn; } else { + $prevLine = $_; next; } - print STDERR "Found $1 at line $. => $currentFname\n"; + print STDERR "Found $modName at line $.\n=> Saving as $currentFname\n"; open(O, "> $currentFname") or die "Can't open $currentFname"; select(O); @@ -77,7 +85,7 @@ while(<>) { print "\n"; } - if(/^[ \t]*END[ \t]*$/) { + if(/^[ \t]*END[ \t]*(--.*)?$/) { print; select(STDOUT); close(O); @@ -92,7 +100,7 @@ while(<>) { # ASN.1 extraction and do not want to alter the ASN.1 specs. # if( -/^(.*)((UniversalString|BMPString|UTF8String)\s+::=\s+\[[A-Z]+\s\d+\]\sIMPLICIT\sOCTET\sSTRING)(.*)$/ms +/^([ \t]*)((UniversalString|BMPString|UTF8String)\s+::=\s+\[[A-Z]+\s\d+\]\sIMPLICIT\sOCTET\sSTRING)(.*)$/ms ) { print "\n-- Legacy redefinition of $3 removed by $0:\n"; print "$1-- $2 -- $4"; |