2015-12-14 08:33:11 -08:00
// Copyright (c) .NET Foundation and contributors. All rights reserved.
2015-11-16 11:21:57 -08:00
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System.IO ;
2015-11-16 17:02:04 -08:00
using System.Linq ;
2015-10-18 21:07:48 -07:00
using Microsoft.Dnx.Runtime.Common.CommandLine ;
using Microsoft.DotNet.Cli.Utils ;
2015-12-14 08:33:11 -08:00
using System ;
2015-10-18 21:07:48 -07:00
namespace Microsoft.DotNet.Tools.Resgen
{
public class Program
{
public static int Main ( string [ ] args )
{
DebugHelper . HandleDebugSwitch ( ref args ) ;
2015-12-14 08:33:11 -08:00
var app = new CommandLineApplication ( false ) ;
2015-10-18 21:07:48 -07:00
app . Name = "resgen" ;
app . FullName = "Resource compiler" ;
app . Description = "Microsoft (R) .NET Resource Generator" ;
app . HelpOption ( "-h|--help" ) ;
2015-12-14 08:33:11 -08:00
var ouputFile = app . Option ( "-o" , "Output file name" , CommandOptionType . SingleValue ) ;
var culture = app . Option ( "-c" , "Ouput assembly culture" , CommandOptionType . SingleValue ) ;
var references = app . Option ( "-r" , "Compilation references" , CommandOptionType . MultipleValue ) ;
var inputFiles = app . Argument ( "<input>" , "Input files" , true ) ;
2015-10-18 21:07:48 -07:00
app . OnExecute ( ( ) = >
{
2015-12-14 08:33:11 -08:00
if ( ! inputFiles . Values . Any ( ) )
{
Reporter . Error . WriteLine ( "No input files specified" ) ;
return 1 ;
}
2015-10-18 21:07:48 -07:00
2015-12-14 08:33:11 -08:00
var intputResourceFiles = inputFiles . Values . Select ( ParseInputFile ) . ToArray ( ) ;
var outputResourceFile = ResourceFile . Create ( ouputFile . Value ( ) ) ;
2015-10-18 21:07:48 -07:00
2015-12-14 08:33:11 -08:00
switch ( outputResourceFile . Type )
2015-10-18 21:07:48 -07:00
{
2015-12-14 08:33:11 -08:00
case ResourceFileType . Dll :
using ( var outputStream = outputResourceFile . File . Create ( ) )
{
ResourceAssemblyGenerator . Generate ( intputResourceFiles ,
outputStream ,
Path . GetFileNameWithoutExtension ( outputResourceFile . File . Name ) ,
culture . Value ( ) ,
references . Values . ToArray ( )
) ;
}
break ;
case ResourceFileType . Resources :
using ( var outputStream = outputResourceFile . File . Create ( ) )
{
if ( intputResourceFiles . Length > 1 )
{
Reporter . Error . WriteLine ( "Only one input file required when generating .resource output" ) ;
return 1 ;
}
ResourcesFileGenerator . Generate ( intputResourceFiles . Single ( ) . Resource , outputStream ) ;
}
break ;
default :
Reporter . Error . WriteLine ( "Resx output type not supported" ) ;
return 1 ;
2015-10-18 21:07:48 -07:00
}
2015-12-14 08:33:11 -08:00
return 0 ;
} ) ;
try
{
return app . Execute ( args ) ;
}
catch ( Exception ex )
{
#if DEBUG
Reporter . Error . WriteLine ( ex . ToString ( ) ) ;
#else
Reporter . Error . WriteLine ( ex . Message ) ;
#endif
return 1 ;
2015-11-16 17:02:04 -08:00
}
}
2015-12-14 08:33:11 -08:00
private static ResourceSource ParseInputFile ( string arg )
2015-11-16 17:02:04 -08:00
{
2015-12-14 08:33:11 -08:00
var seperatorIndex = arg . IndexOf ( ',' ) ;
string name = null ;
string metadataName = null ;
if ( seperatorIndex > 0 )
2015-11-16 17:02:04 -08:00
{
2015-12-14 08:33:11 -08:00
name = arg . Substring ( 0 , seperatorIndex ) ;
metadataName = arg . Substring ( seperatorIndex + 1 ) ;
2015-10-18 21:07:48 -07:00
}
2015-12-14 08:33:11 -08:00
else
{
name = arg ;
metadataName = arg ;
}
return new ResourceSource ( ResourceFile . Create ( name ) , metadataName ) ;
2015-10-18 21:07:48 -07:00
}
}
}