nicer print_usage

git-svn-id: https://projects.brucker.ch/su4sml/svn/infsec-import/trunk/src/su4sml@6201 3260e6d1-4efc-4170-b0a7-36055960796d
This commit is contained in:
Jürgen Doser 2007-02-23 14:19:20 +00:00
parent 849d9fdded
commit 7f6370d1ad
1 changed files with 101 additions and 77 deletions

View File

@ -70,85 +70,100 @@ type cartridge = {lang : string, (* identifier (for input) *)
(* maybe these should be declared by the individual cartridges and simply concatenated here? *) (* maybe these should be declared by the individual cartridges and simply concatenated here? *)
(* FIXME: add long descriptions *) (* FIXME: add long descriptions *)
val cartridge_list = [ {lang = "base", val supported_cartridges = [
name = "Base Cartridge", (* Base Cartridge *)
description = "", {lang = "base",
recommended = false, name = "Base Cartridge",
generator = Base_Gcg.generate, description = "",
parser = RepParser.readFile, recommended = false,
template = "base.tpl"}, generator = Base_Gcg.generate,
{lang = "c#", parser = RepParser.readFile,
name = "C# Cartridge", template = "base.tpl"},
description = "", (* C# Cartridge *)
recommended = true, {lang = "c#",
generator = CSharp_Gcg.generate, name = "C# Cartridge",
parser = RepParser.readFile, description = "",
template = "C#.tpl"}, recommended = true,
{lang = "c#_secure", generator = CSharp_Gcg.generate,
name = "C# SecureUML Cartridge", parser = RepParser.readFile,
description = "", template = "C#.tpl"},
recommended = true, (* C# SecureUML Cartridge *)
generator = CSharpSecure_Gcg.generate, {lang = "c#_secure",
parser = RepParser.readFile, name = "C# SecureUML Cartridge",
template = "C#_SecureUML.tpl"}, description = "",
{lang = "c#_net1", recommended = true,
name = "C# .NET1 Cartridge", generator = CSharpSecure_Gcg.generate,
description = "", parser = RepParser.readFile,
recommended = true, template = "C#_SecureUML.tpl"},
generator = CSharp_NET1_Gcg.generate, (* C# .NET1 Cartridge *)
parser = RepParser.readFile, {lang = "c#_net1",
template = "C#.pl"}, name = "C# .NET1 Cartridge",
{lang = "c#_net1_secure", description = "",
name = "C# .NET1 SecureUML Cartridge", recommended = true,
description = "", generator = CSharp_NET1_Gcg.generate,
recommended = true, parser = RepParser.readFile,
generator = CSharpSecure_NET1_Gcg.generate, template = "C#.pl"},
parser = RepParser.readFile, (* C# .NET1 SecureUML Cartridge *)
template = "C#_SecureUML.tpl"}, {lang = "c#_net1_secure",
{lang = "c#_sm", name = "C# .NET1 SecureUML Cartridge",
name = "C# StateMachine Cartridge", description = "",
description = "", recommended = true,
recommended = true, generator = CSharpSecure_NET1_Gcg.generate,
generator = CSharpSM_Gcg.generate, parser = RepParser.readFile,
parser = RepParser.readFile, template = "C#_SecureUML.tpl"},
template = "C#_SM.tpl"}, (* C# StateMachine Cartridge *)
{lang = "java", {lang = "c#_sm",
name = "Java Cartridge", name = "C# StateMachine Cartridge",
description = "", description = "",
recommended = true, recommended = true,
generator = Java_Gcg.generate, generator = CSharpSM_Gcg.generate,
parser = RepParser.readFile, parser = RepParser.readFile,
template = "java.tpl"}, template = "C#_SM.tpl"},
{lang = "junit", (* Java Cartridge *)
name = "Junit Cartridge", {lang = "java",
description = "", name = "Java Cartridge",
recommended = true, description = "",
generator = Junit_Gcg.generate, recommended = true,
parser = RepParser.readFile, generator = Java_Gcg.generate,
template = "junit.tpl"}, parser = RepParser.readFile,
{lang = "java_ocl", template = "java.tpl"},
name = "Java OCL Cartridge", (* Junit Cartridge *)
description = "", {lang = "junit",
recommended = true, name = "Junit Cartridge",
generator = Java_Ocl_Gcg.generate, description = "",
parser = RepParser.readFile, recommended = true,
template = "java_ocl.tpl"}, generator = Junit_Gcg.generate,
{lang = "securemova", parser = RepParser.readFile,
name = "SecureMOVA Cartridge", template = "junit.tpl"},
description = "", (* Java OCL Cartridge *)
recommended = false, {lang = "java_ocl",
generator = SecureMova_Gcg.generate, name = "Java OCL Cartridge",
parser = RepParser.transformXMI o XmiParser.readFile, description = "",
template = "securemova.tpl"}]:cartridge list recommended = true,
generator = Java_Ocl_Gcg.generate,
parser = RepParser.readFile,
template = "java_ocl.tpl"},
(* SecureMOVA Cartridge *)
{lang = "securemova",
name = "SecureMOVA Cartridge",
description = "",
recommended = false,
generator = SecureMova_Gcg.generate,
parser = RepParser.transformXMI o XmiParser.readFile,
template = "securemova.tpl"}]:cartridge list
val supported_languages = map #lang cartridge_list val recommended_cartridges = List.filter #recommended supported_cartridges
val recommended_languages = map #lang (List.filter #recommended cartridge_list)
val string_of_languages = String.concatWith " | " recommended_languages
fun is_supported lang = ListEq.includes supported_languages lang val supported_languages = map #lang supported_cartridges
val recommended_languages = map #lang recommended_cartridges
fun cartridge_of lang = Option.valOf (List.find (fn c => #lang c = lang) cartridge_list) fun is_supported lang = ListEq.includes supported_languages lang
fun is_recommended lang = ListEq.includes recommended_languages lang
fun cartridge_of lang = Option.valOf (List.find (fn c => #lang c = lang) supported_cartridges)
fun generateWithTemplate xmi_file lang template = fun generateWithTemplate xmi_file lang template =
let val cart = cartridge_of lang let val cart = cartridge_of lang
@ -172,8 +187,17 @@ fun generateWithCart xmi_file (cart:cartridge) =
fun generateFromModel model lang = genFromModelWithCart model (cartridge_of lang) fun generateFromModel model lang = genFromModelWithCart model (cartridge_of lang)
fun generate xmi_file lang = generateWithCart xmi_file (cartridge_of lang) fun generate xmi_file lang = generateWithCart xmi_file (cartridge_of lang)
fun print_usage () = print ("usage: codegen <xmi_file> <language>\n"^ fun print_usage () = let val language_names = map #name recommended_cartridges
"\tlanguage = "^string_of_languages ^"\n") val string_of_languages = String.concatWith " | " recommended_languages
val desc_of_languages = map (fn (l,n) => l^":\t"^n)
(ListPair.zip (recommended_languages,
language_names))
in
print ("usage: codegen <xmi_file> <language>\n"^
"where <language> = "^string_of_languages ^"\n\n"^
"supported languges are:\n"^
String.concatWith "\n" desc_of_languages^"\n")
end
fun main (_,[xmi_file,lang]) = ((if is_supported lang fun main (_,[xmi_file,lang]) = ((if is_supported lang
then generate xmi_file lang then generate xmi_file lang