build: move version number definition to central place, clean up build tools
This commit is contained in:
parent
b1dd82278f
commit
e17cda8a38
|
@ -1,11 +0,0 @@
|
|||
/*
|
||||
* AssemblyInfo.cs
|
||||
*
|
||||
* This is free software. See COPYING for details.
|
||||
*/
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: AssemblyVersion("@ASM_VERSION@")]
|
||||
[assembly: AssemblyTitle ("SparkleShare")]
|
|
@ -15,16 +15,13 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: AssemblyTitle("SparkleLib")]
|
||||
[assembly: AssemblyVersion("0.9.0.0")]
|
||||
namespace SparkleLib {
|
||||
|
||||
public class Defines {
|
||||
|
||||
public const string VERSION = "@VERSION@";
|
||||
public const string LOCALE_DIR = "@prefix@/share/locale";
|
||||
public const string DATAROOTDIR = "@expanded_datadir@";
|
||||
public const string GETTEXT_PACKAGE = "@GETTEXT_PACKAGE@";
|
||||
public const string PREFIX = "@prefix@";
|
||||
}
|
||||
public class Defines {
|
||||
public const string INSTALL_DIR = "@expanded_datadir@/sparkleshare";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
ASSEMBLY = SparkleLib.Git
|
||||
TARGET = library
|
||||
|
||||
ASSEMBLY_INFO_SOURCE = ../Defines.cs
|
||||
|
||||
LINK = -r:$(DIR_BIN)/SparkleLib.dll
|
||||
|
||||
SOURCES = \
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
<RootNamespace>SparkleLib.Git</RootNamespace>
|
||||
<AssemblyName>SparkleLib.Git</AssemblyName>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ReleaseVersion />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -29,43 +30,23 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Defines.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>Defines.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="GlobalAssemblyInfoGit.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>GlobalAssemblyInfoGit.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\Git\SparkleFetcherGit.cs">
|
||||
<Compile Include="SparkleFetcherGit.cs">
|
||||
<Link>SparkleFetcherGit.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Git\SparkleGit.cs">
|
||||
<Link>SparkleGit.cs</Link>
|
||||
<Compile Include="SparkleGit.cs">
|
||||
<SubType>Component</SubType>
|
||||
<Link>SparkleGit.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\Git\SparkleRepoGit.cs">
|
||||
<Compile Include="SparkleRepoGit.cs">
|
||||
<Link>SparkleRepoGit.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Defines.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Defines.tt</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GlobalAssemblyInfoGit.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>GlobalAssemblyInfoGit.tt</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="SparkleLib.csproj">
|
||||
<ProjectReference Include="..\SparkleLib.csproj">
|
||||
<Project>{2C914413-B31C-4362-93C7-1AE34F09112A}</Project>
|
||||
<Name>SparkleLib</Name>
|
||||
</ProjectReference>
|
|
@ -1,6 +1,8 @@
|
|||
ASSEMBLY = SparkleLib
|
||||
TARGET = library
|
||||
|
||||
ASSEMBLY_INFO_SOURCE = Defines.cs
|
||||
|
||||
SOURCES = \
|
||||
Defines.cs \
|
||||
SparkleAnnouncement.cs \
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SparkleLib {
|
||||
|
@ -25,16 +25,11 @@ namespace SparkleLib {
|
|||
|
||||
public static string Version {
|
||||
get {
|
||||
return Defines.VERSION;
|
||||
return Assembly.GetExecutingAssembly ().GetName ().Version.ToString ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Strange magic needed by Platform ()
|
||||
[DllImport ("libc")]
|
||||
private static extern int uname (IntPtr buf);
|
||||
|
||||
|
||||
// This fixes the PlatformID enumeration for MacOSX in Environment.OSVersion.Platform,
|
||||
// which is intentionally broken in Mono for historical reasons
|
||||
public static PlatformID Platform {
|
||||
|
@ -56,5 +51,9 @@ namespace SparkleLib {
|
|||
return Environment.OSVersion.Platform;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[DllImport ("libc")]
|
||||
private static extern int uname (IntPtr buf);
|
||||
}
|
||||
}
|
||||
|
|
13
SparkleLib/SparkleLib.csproj
Executable file → Normal file
13
SparkleLib/SparkleLib.csproj
Executable file → Normal file
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
|
@ -9,6 +9,8 @@
|
|||
<OutputType>Library</OutputType>
|
||||
<RootNamespace>SparkleLib</RootNamespace>
|
||||
<AssemblyName>SparkleLib</AssemblyName>
|
||||
<ReleaseVersion />
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -35,15 +37,10 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="SparkleRepoBase.cs" />
|
||||
<Compile Include="Git/SparkleRepoGit.cs" />
|
||||
<Compile Include="Hg/SparkleRepoHg.cs" />
|
||||
<Compile Include="SparkleFetcherBase.cs" />
|
||||
<Compile Include="Git/SparkleFetcherGit.cs" />
|
||||
<Compile Include="Hg/SparkleFetcherHg.cs" />
|
||||
<Compile Include="Defines.cs" />
|
||||
<Compile Include="SparkleAnnouncement.cs" />
|
||||
<Compile Include="SparkleHelpers.cs" />
|
||||
<Compile Include="SparklePaths.cs" />
|
||||
<Compile Include="SparkleWrappers.cs" />
|
||||
<Compile Include="SparkleListenerBase.cs" />
|
||||
<Compile Include="SparkleListenerFactory.cs" />
|
||||
|
@ -52,11 +49,13 @@
|
|||
<Compile Include="SparkleConfig.cs" />
|
||||
<Compile Include="SparkleWatcher.cs" />
|
||||
<Compile Include="SparkleExtensions.cs" />
|
||||
<Compile Include="SparkleExceptions.cs" />
|
||||
<Compile Include="SparkleUser.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<MonoDevelop>
|
||||
<Properties InternalTargetFrameworkVersion="3.5">
|
||||
<Properties>
|
||||
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="true" RelativeMakefileName="Makefile.am">
|
||||
<BuildFilesVar Sync="true" Name="SOURCES" />
|
||||
<DeployFilesVar />
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
/*
|
||||
* AssemblyInfo.cs
|
||||
*
|
||||
* This is free software. See COPYING for details.
|
||||
*/
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyTitle ("SparkleLib")]
|
||||
[assembly: AssemblyDescription ("SparkleShare is a simple file sharing and collaboration tool.")]
|
||||
|
||||
[assembly: Guid ("38092E48-5DCC-4d23-8109-9D994E710ACF")]
|
|
@ -1,46 +0,0 @@
|
|||
// SparkleShare, an instant update workflow to Git.
|
||||
// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
<#@ template language="C#v3.5" HostSpecific="true" #>
|
||||
<#@ output extension="cs" #>
|
||||
|
||||
<#@ include file="getversion.tt" #>
|
||||
|
||||
<#
|
||||
PlatformID platform = Environment.OSVersion.Platform;
|
||||
bool IsWindows = (platform == PlatformID.Win32NT
|
||||
|| platform == PlatformID.Win32S
|
||||
|| platform == PlatformID.Win32Windows
|
||||
|| platform == PlatformID.WinCE);
|
||||
#>
|
||||
|
||||
using System;
|
||||
|
||||
namespace SparkleLib {
|
||||
|
||||
public class Defines {
|
||||
|
||||
public const string VERSION = "<#= VERSION #>";
|
||||
public const string LOCALE_DIR = "@prefix@/share/locale";
|
||||
public const string DATAROOTDIR = "@expanded_datadir@";
|
||||
public const string GETTEXT_PACKAGE = "@GETTEXT_PACKAGE@";
|
||||
public const string PREFIX = "@prefix@";
|
||||
public const string OPEN_COMMAND = "xdg-open";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
* GlobalAssemblyInfo.cs
|
||||
*
|
||||
* This is free software. See COPYING for details.
|
||||
*/
|
||||
<#@ template language="C#v3.5" HostSpecific="true" #>
|
||||
<#@ output extension="cs" #>
|
||||
|
||||
<#@ include file="getversion.tt" #>
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: AssemblyProduct("SparkleLib.Git")]
|
||||
|
||||
[assembly: AssemblyVersion("<#= ASM_VERSION #>")]
|
||||
[assembly: AssemblyFileVersion("<#= ASM_FILE_VERSION #>")]
|
||||
[assembly: AssemblyInformationalVersion("<#= VERSION #>")]
|
||||
|
||||
#if DEBUG
|
||||
[assembly: AssemblyConfiguration("Debug")]
|
||||
#else
|
||||
[assembly: AssemblyConfiguration("Release")]
|
||||
#endif
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
/*
|
||||
* GlobalAssemblyInfo.cs
|
||||
*
|
||||
* This is free software. See COPYING for details.
|
||||
*/
|
||||
<#@ template language="C#v3.5" HostSpecific="true" #>
|
||||
<#@ output extension="cs" #>
|
||||
|
||||
<#@ include file="getversion.tt" #>
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: AssemblyProduct("SparkleShare")]
|
||||
|
||||
[assembly: AssemblyVersion("<#= ASM_VERSION #>")]
|
||||
[assembly: AssemblyFileVersion("<#= ASM_FILE_VERSION #>")]
|
||||
[assembly: AssemblyInformationalVersion("<#= VERSION #>")]
|
||||
|
||||
#if DEBUG
|
||||
[assembly: AssemblyConfiguration("Debug")]
|
||||
#else
|
||||
[assembly: AssemblyConfiguration("Release")]
|
||||
#endif
|
||||
|
|
@ -1,294 +0,0 @@
|
|||
<StyleCopSettings Version="105">
|
||||
<Analyzers>
|
||||
<Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
|
||||
<Rules>
|
||||
<Rule Name="CurlyBracketsForMultiLineStatementsMustNotShareLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="StatementMustNotBeOnSingleLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ElementMustNotBeOnSingleLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="CurlyBracketsMustNotBeOmitted">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="AllAccessorsMustBeMultiLineOrSingleLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="OpeningCurlyBracketsMustNotBeFollowedByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ElementDocumentationHeadersMustNotBeFollowedByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="CodeMustNotContainMultipleBlankLinesInARow">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ClosingCurlyBracketsMustNotBePrecededByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="OpeningCurlyBracketsMustNotBePrecededByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ChainedStatementBlocksMustNotBePrecededByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="WhileDoFooterMustNotBePrecededByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="SingleLineCommentsMustNotBeFollowedByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ClosingCurlyBracketMustBeFollowedByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ElementDocumentationHeaderMustBePrecededByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="SingleLineCommentMustBePrecededByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ElementsMustBeSeparatedByBlankLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="CodeMustNotContainBlankLinesAtStartOfFile">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="CodeMustNotContainBlankLinesAtEndOfFile">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
</Rules>
|
||||
<AnalyzerSettings />
|
||||
</Analyzer>
|
||||
<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
|
||||
<Rules>
|
||||
<Rule Name="ElementMustBeginWithUpperCaseLetter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ElementMustBeginWithLowerCaseLetter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="InterfaceNamesMustBeginWithI">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ConstFieldNamesMustBeginWithUpperCaseLetter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="FieldNamesMustNotUseHungarianNotation">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="FieldNamesMustBeginWithLowerCaseLetter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="VariableNamesMustNotBePrefixed">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="FieldNamesMustNotBeginWithUnderscore">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="FieldNamesMustNotContainUnderscore">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
</Rules>
|
||||
<AnalyzerSettings />
|
||||
</Analyzer>
|
||||
<Analyzer AnalyzerId="StyleCop.CSharp.OrderingRules">
|
||||
<Rules>
|
||||
<Rule Name="UsingDirectivesMustBePlacedWithinNamespace">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ElementsMustAppearInTheCorrectOrder">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ElementsMustBeOrderedByAccess">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ConstantsMustAppearBeforeFields">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="StaticElementsMustAppearBeforeInstanceElements">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="DeclarationKeywordsMustFollowOrder">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ProtectedMustComeBeforeInternal">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="PropertyAccessorsMustFollowOrder">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="EventAccessorsMustFollowOrder">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="UsingDirectivesMustBeOrderedAlphabeticallyByNamespace">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
</Rules>
|
||||
<AnalyzerSettings />
|
||||
</Analyzer>
|
||||
<Analyzer AnalyzerId="StyleCop.CSharp.ReadabilityRules">
|
||||
<Rules>
|
||||
<Rule Name="DoNotPrefixCallsWithBaseUnlessLocalImplementationExists">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="PrefixLocalCallsWithThis">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="OpeningParenthesisMustBeOnDeclarationLine">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ClosingParenthesisMustBeOnLineOfLastParameter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ClosingParenthesisMustBeOnLineOfOpeningParenthesis">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="CommaMustBeOnSameLineAsPreviousParameter">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ParameterListMustFollowDeclaration">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ParameterMustFollowComma">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="SplitParametersMustStartOnLineAfterDeclaration">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ParametersMustBeOnSameLineOrSeparateLines">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
<Rule Name="ParameterMustNotSpanMultipleLines">
|
||||
<RuleSettings>
|
||||
<BooleanProperty Name="Enabled">False</BooleanProperty>
|
||||
</RuleSettings>
|
||||
</Rule>
|
||||
</Rules>
|
||||
<AnalyzerSettings />
|
||||
</Analyzer>
|
||||
</Analyzers>
|
||||
</StyleCopSettings>
|
|
@ -1,168 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{2C914413-B31C-4362-93C7-1AE34F09112A}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<RootNamespace>SparkleLib</RootNamespace>
|
||||
<AssemblyName>SparkleLib</AssemblyName>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\bin</OutputPath>
|
||||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\bin</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\SparkleAnnouncement.cs">
|
||||
<Link>SparkleAnnouncement.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleConfig.cs">
|
||||
<Link>SparkleConfig.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleExtensions.cs">
|
||||
<Link>SparkleExtensions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleListenerFactory.cs">
|
||||
<Link>SparkleListenerFactory.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleRepoBase.cs">
|
||||
<Link>SparkleRepoBase.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleUser.cs">
|
||||
<Link>SparkleUser.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleWatcher.cs">
|
||||
<Link>SparkleWatcher.cs</Link>
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AssemblyInfo.cs" />
|
||||
<Compile Include="Defines.cs">
|
||||
<DependentUpon>Defines.tt</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleFetcherBase.cs" />
|
||||
<Compile Include="..\SparkleHelpers.cs" />
|
||||
<Compile Include="..\SparkleWrappers.cs" />
|
||||
<Compile Include="..\SparkleListenerBase.cs" />
|
||||
<Compile Include="..\SparkleListenerTcp.cs" />
|
||||
<Compile Include="..\SparkleBackend.cs" />
|
||||
<Compile Include="GlobalAssemblyInfo.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>GlobalAssemblyInfo.tt</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleExceptions.cs">
|
||||
<Link>SparkleExceptions.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
|
||||
<Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Defines.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>Defines.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="GlobalAssemblyInfo.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>GlobalAssemblyInfo.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<MonoDevelop>
|
||||
<Properties>
|
||||
<MonoDevelop.Autotools.MakefileInfo RelativeMakefileName="Makefile.am">
|
||||
<BuildFilesVar Sync="true" Name="SOURCES" />
|
||||
<DeployFilesVar />
|
||||
<ResourcesVar />
|
||||
<OthersVar />
|
||||
<GacRefVar />
|
||||
<AsmRefVar />
|
||||
<ProjectRefVar />
|
||||
</MonoDevelop.Autotools.MakefileInfo>
|
||||
</Properties>
|
||||
</MonoDevelop>
|
||||
<VisualStudio />
|
||||
</ProjectExtensions>
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>"$(ProjectDir)transform_tt.cmd"</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,15 +0,0 @@
|
|||
<#@ import namespace="System" #>
|
||||
<#@ import namespace="System.IO" #>
|
||||
<#@ import namespace="System.Diagnostics" #>
|
||||
<#@ import namespace="System.Text.RegularExpressions" #>
|
||||
|
||||
<#
|
||||
String VERSION;
|
||||
String ASM_VERSION;
|
||||
String ASM_FILE_VERSION;
|
||||
VERSION = ASM_VERSION = ASM_FILE_VERSION = "0.9.0";
|
||||
#>
|
||||
|
||||
// VERSION=<#= VERSION #>
|
||||
// ASM_VERSION=<#= ASM_VERSION #>
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
@echo off
|
||||
cd %~dp0
|
||||
|
||||
set TextTransform=..\..\SparkleShare\Windows\tools\TextTemplating\bin\TextTransform.exe
|
||||
if not exist %TextTransform% call ..\..\SparkleShare\Windows\tools\TextTemplating\build.cmd
|
||||
|
||||
echo running texttransform..
|
||||
|
||||
%TextTransform% -out Defines.cs Defines.tt
|
||||
%TextTransform% -out GlobalAssemblyInfo.cs GlobalAssemblyInfo.tt
|
||||
%TextTransform% -out GlobalAssemblyInfoGit.cs GlobalAssemblyInfoGit.tt
|
|
@ -22,6 +22,7 @@ using System.IO;
|
|||
using MonoMac.Foundation;
|
||||
using MonoMac.AppKit;
|
||||
using MonoMac.ObjCRuntime;
|
||||
|
||||
using SparkleLib;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>10.0.0</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
|
@ -10,9 +10,10 @@
|
|||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>SparkleShare</RootNamespace>
|
||||
<AssemblyName>SparkleShare</AssemblyName>
|
||||
<ReleaseVersion>0.9.0</ReleaseVersion>
|
||||
<ReleaseVersion>
|
||||
</ReleaseVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
|
@ -20,19 +21,11 @@
|
|||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
<CustomCommands>
|
||||
<CustomCommands>
|
||||
<Command type="AfterBuild" command="mkdir -p ${TargetDir}/${SolutionName}.app/Contents/Frameworks; cp -r Growl.framework ${TargetDir}/${SolutionName}.app/Contents/Frameworks; cp -r git ${TargetDir}/${SolutionName}.app/Contents/Resources; cp -r SparkleShareInviteOpener.app ${TargetDir}/${SolutionName}.app/Contents/Resources" externalConsole="true" />
|
||||
</CustomCommands>
|
||||
</CustomCommands>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Release</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
|
@ -43,12 +36,6 @@
|
|||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="MonoMac" />
|
||||
<Reference Include="System.Net" />
|
||||
<Reference Include="SparkleLib">
|
||||
<HintPath>..\..\bin\SparkleLib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SparkleLib.Git">
|
||||
<HintPath>..\..\bin\SparkleLib.Git.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AppDelegate.cs">
|
||||
|
@ -270,4 +257,14 @@
|
|||
<Folder Include="HTML\" />
|
||||
<Folder Include="Plugins\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\SparkleLib\SparkleLib.csproj">
|
||||
<Project>{2C914413-B31C-4362-93C7-1AE34F09112A}</Project>
|
||||
<Name>SparkleLib</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\SparkleLib\Git\SparkleLib.Git.csproj">
|
||||
<Project>{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}</Project>
|
||||
<Name>SparkleLib.Git</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
@ -3,19 +3,29 @@ Microsoft Visual Studio Solution File, Format Version 11.00
|
|||
# Visual Studio 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleShare", "SparkleShare.csproj", "{CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleLib", "..\..\SparkleLib\SparkleLib.csproj", "{2C914413-B31C-4362-93C7-1AE34F09112A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleLib.Git", "..\..\SparkleLib\Git\SparkleLib.Git.csproj", "{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CF5BC8DB-A633-4FCC-8A3E-E3AC9B59FABC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = SparkleShare.csproj
|
||||
version = 0.9.0
|
||||
version =
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
// SparkleShare, a collaboration and sharing tool.
|
||||
// Copyright (C) 2010 Hylke Bons (hylkebons@gmail.com)
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see (http://www.gnu.org/licenses/).
|
||||
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyTitle ("SparkleShare")]
|
||||
[assembly: AssemblyDescription ("SparkleShare is a simple file sharing and collaboration tool.")]
|
||||
|
||||
[assembly: Guid ("A8F34995-DB20-4bf2-AA27-869B15B8C2F9")]
|
|
@ -30,6 +30,7 @@
|
|||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<ApplicationIcon>Pixmaps\sparkleshare-app.ico</ApplicationIcon>
|
||||
<ReleaseVersion />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -70,12 +71,6 @@
|
|||
<Reference Include="System.Xaml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\SparkleLib\windows\GlobalAssemblyInfo.cs">
|
||||
<Link>GlobalAssemblyInfo.cs</Link>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>GlobalAssemblyInfo.tt</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleBubblesController.cs">
|
||||
<Link>SparkleBubblesController.cs</Link>
|
||||
</Compile>
|
||||
|
@ -94,7 +89,6 @@
|
|||
<Compile Include="..\SparkleStatusIconController.cs">
|
||||
<Link>SparkleStatusIconController.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="AssemblyInfo.cs" />
|
||||
<Compile Include="..\SparkleSetupController.cs" />
|
||||
<Compile Include="SparkleShortcut.cs" />
|
||||
<Compile Include="SparkleUI.cs" />
|
||||
|
@ -119,12 +113,6 @@
|
|||
<Compile Include="SparkleNotifyIcon.cs" />
|
||||
<Compile Include="SparkleSpinner.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\SparkleLib\windows\SparkleLib.csproj">
|
||||
<Project>{2C914413-B31C-4362-93C7-1AE34F09112A}</Project>
|
||||
<Name>SparkleLib</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<MonoDevelop>
|
||||
<Properties>
|
||||
|
@ -162,13 +150,6 @@
|
|||
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
|
||||
<Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\SparkleLib\windows\GlobalAssemblyInfo.tt">
|
||||
<Link>GlobalAssemblyInfo.tt</Link>
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>GlobalAssemblyInfo.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>"$(ProjectDir)transform_tt.cmd"</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
|
@ -303,4 +284,10 @@
|
|||
<EmbeddedResource Include="Pixmaps\tutorial-slide-2.png" />
|
||||
<EmbeddedResource Include="Pixmaps\tutorial-slide-3.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\SparkleLib\SparkleLib.csproj">
|
||||
<Project>{2C914413-B31C-4362-93C7-1AE34F09112A}</Project>
|
||||
<Name>SparkleLib</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
@ -7,26 +7,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleShare", "SparkleShar
|
|||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE} = {009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleLib", "..\..\SparkleLib\windows\SparkleLib.csproj", "{2C914413-B31C-4362-93C7-1AE34F09112A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleLib.Git", "..\..\SparkleLib\windows\SparkleLib.Git.csproj", "{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleShareInviteOpener", "SparkleShareInviteOpener\SparkleShareInviteOpener.csproj", "{1DB5492D-B897-4A5E-8DD7-175EC65F52F2}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleLib", "..\..\SparkleLib\SparkleLib.csproj", "{2C914413-B31C-4362-93C7-1AE34F09112A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleLib.Git", "..\..\SparkleLib\Git\SparkleLib.Git.csproj", "{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{009FDCD7-1D57-4202-BB6D-8477D8C6B8EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
|
@ -35,13 +27,22 @@ Global
|
|||
{1DB5492D-B897-4A5E-8DD7-175EC65F52F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1DB5492D-B897-4A5E-8DD7-175EC65F52F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1DB5492D-B897-4A5E-8DD7-175EC65F52F2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2C914413-B31C-4362-93C7-1AE34F09112A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{728483AA-E34B-4441-BF2C-C8BC2901E4E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = SparkleShare.csproj
|
||||
version =
|
||||
outputpath = bin
|
||||
name = SparkleShare
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = SparkleShare.csproj
|
||||
outputpath = bin
|
||||
name = SparkleShare
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
@ -10,10 +10,9 @@
|
|||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>SparkleShareInviteOpener</RootNamespace>
|
||||
<AssemblyName>SparkleShareInviteOpener</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ApplicationIcon>..\Pixmaps\sparkleshare-app.ico</ApplicationIcon>
|
||||
<TargetFrameworkProfile />
|
||||
<ReleaseVersion />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
.gitattributes eol=lf
|
||||
.gitmodules eol=lf
|
|
@ -1,11 +0,0 @@
|
|||
*~
|
||||
*.bak
|
||||
*.suo
|
||||
*.user
|
||||
*.sln.cache
|
||||
bin/
|
||||
obj/
|
||||
_ReSharper.*/
|
||||
_UpgradeReport_Files/
|
||||
Backup/
|
||||
UpgradeLog.XML
|
|
@ -1,9 +0,0 @@
|
|||
2009-08-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Makefile.am:
|
||||
* TextTransform:
|
||||
* Mono.TextTemplating:
|
||||
* Mono.TextTemplating.Tests:
|
||||
* MonoDevelop.TextTemplating: Include the ASP.NET MVC and
|
||||
TextTemplating addins in the main solution and build.
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
SUBDIRS = \
|
||||
Mono.TextTemplating \
|
||||
TextTransform \
|
||||
MonoDevelop.TextTemplating
|
|
@ -1,65 +0,0 @@
|
|||
2009-12-11 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Don't local-copy nunit.
|
||||
|
||||
2009-11-27 Olivier Dagenais <olivier.dagenais@gmail.com>
|
||||
|
||||
* GenerationTests.cs: Make tests independent of the runtime
|
||||
they are running under by stripping the "autogenerated"
|
||||
comment (i.e. the first 9 lines).
|
||||
|
||||
2009-10-29 Lluis Sanchez Gual <lluis@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Flush.
|
||||
|
||||
2009-08-13 Lluis Sanchez Gual <lluis@novell.com>
|
||||
|
||||
* DummyHost.cs: Fix windows build.
|
||||
|
||||
2009-08-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Use assembly refs for
|
||||
nunit.
|
||||
|
||||
2009-08-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Include the ASP.NET MVC
|
||||
and TextTemplating addins in the main solution and build.
|
||||
|
||||
2009-04-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* GenerationTests.cs: Add tests for Windows/Mac newlines.
|
||||
|
||||
2009-04-03 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Updated.
|
||||
|
||||
* GenerationTests.cs: Add test for C# output.
|
||||
|
||||
* ParsingTests.cs: Track dummy host name change.
|
||||
|
||||
* DummyHost.cs: Add more functionality to dummy host.
|
||||
|
||||
2009-03-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Move output dir from
|
||||
../bin to ../build.
|
||||
|
||||
2009-03-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Fix output directory.
|
||||
|
||||
2009-03-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Updated.
|
||||
|
||||
* ParsingTests.cs: Add parser test.
|
||||
|
||||
* DummyHost.cs: Dummy templating host.
|
||||
|
||||
2009-03-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.Tests.csproj: Add tests.
|
||||
|
||||
* ParsingTests.cs: Tokeniser state/value/location test.
|
||||
|
|
@ -1,113 +0,0 @@
|
|||
//
|
||||
// IncludeFileProviderHost.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CodeDom.Compiler;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
|
||||
namespace Mono.TextTemplating.Tests
|
||||
{
|
||||
|
||||
public class DummyHost : ITextTemplatingEngineHost
|
||||
{
|
||||
public readonly Dictionary<string, string> Locations = new Dictionary<string, string> ();
|
||||
public readonly Dictionary<string, string> Contents = new Dictionary<string, string> ();
|
||||
public readonly Dictionary<string, object> HostOptions = new Dictionary<string, object> ();
|
||||
List<string> standardAssemblyReferences = new List<string> ();
|
||||
List<string> standardImports = new List<string> ();
|
||||
public readonly CompilerErrorCollection Errors = new CompilerErrorCollection ();
|
||||
public readonly Dictionary<string, Type> DirectiveProcessors = new Dictionary<string, Type> ();
|
||||
|
||||
public virtual object GetHostOption (string optionName)
|
||||
{
|
||||
object o;
|
||||
HostOptions.TryGetValue (optionName, out o);
|
||||
return o;
|
||||
}
|
||||
|
||||
public virtual bool LoadIncludeText (string requestFileName, out string content, out string location)
|
||||
{
|
||||
content = null;
|
||||
return Locations.TryGetValue (requestFileName, out location)
|
||||
&& Contents.TryGetValue (requestFileName, out content);
|
||||
}
|
||||
|
||||
public virtual void LogErrors (CompilerErrorCollection errors)
|
||||
{
|
||||
Errors.AddRange (errors);
|
||||
}
|
||||
|
||||
public virtual AppDomain ProvideTemplatingAppDomain (string content)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual string ResolveAssemblyReference (string assemblyReference)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public virtual Type ResolveDirectiveProcessor (string processorName)
|
||||
{
|
||||
Type t;
|
||||
DirectiveProcessors.TryGetValue (processorName, out t);
|
||||
return t;
|
||||
}
|
||||
|
||||
public virtual string ResolveParameterValue (string directiveId, string processorName, string parameterName)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public virtual string ResolvePath (string path)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public virtual void SetFileExtension (string extension)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public virtual void SetOutputEncoding (System.Text.Encoding encoding, bool fromOutputDirective)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
|
||||
public virtual IList<string> StandardAssemblyReferences {
|
||||
get { return standardAssemblyReferences; }
|
||||
}
|
||||
|
||||
public virtual IList<string> StandardImports {
|
||||
get { return standardImports; }
|
||||
}
|
||||
|
||||
public virtual string TemplateFile {
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,171 +0,0 @@
|
|||
//
|
||||
// GenerationTests.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using NUnit.Framework;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
|
||||
namespace Mono.TextTemplating.Tests
|
||||
{
|
||||
|
||||
|
||||
[TestFixture]
|
||||
public class GenerationTests
|
||||
{
|
||||
[Test]
|
||||
public void Generate ()
|
||||
{
|
||||
string Input = ParsingTests.ParseSample1;
|
||||
string Output = OutputSample1;
|
||||
Generate (Input, Output, "\n");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GenerateMacNewlines ()
|
||||
{
|
||||
string MacInput = ParsingTests.ParseSample1.Replace ("\n", "\r");
|
||||
string MacOutput = OutputSample1.Replace ("\\n", "\\r").Replace ("\n", "\r");;
|
||||
Generate (MacInput, MacOutput, "\r");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GenerateWindowsNewlines ()
|
||||
{
|
||||
string WinInput = ParsingTests.ParseSample1.Replace ("\n", "\r\n");
|
||||
string WinOutput = OutputSample1.Replace ("\\n", "\\r\\n").Replace ("\n", "\r\n");
|
||||
Generate (WinInput, WinOutput, "\r\n");
|
||||
}
|
||||
|
||||
//NOTE: we set the newline property on the code generator so that the whole files has matching newlines,
|
||||
// in order to match the newlines in the verbatim code blocks
|
||||
void Generate (string input, string expectedOutput, string newline)
|
||||
{
|
||||
DummyHost host = new DummyHost ();
|
||||
string className = "GeneratedTextTransformation4f504ca0";
|
||||
string code = GenerateCode (host, input, className, newline);
|
||||
Assert.AreEqual (0, host.Errors.Count);
|
||||
Assert.AreEqual (expectedOutput, TemplatingEngineHelper.StripHeader (code, newline));
|
||||
}
|
||||
|
||||
#region Helpers
|
||||
|
||||
string GenerateCode (ITextTemplatingEngineHost host, string content, string name, string generatorNewline)
|
||||
{
|
||||
ParsedTemplate pt = ParsedTemplate.FromText (content, host);
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
TemplateSettings settings = TemplatingEngine.GetSettings (host, pt);
|
||||
if (name != null)
|
||||
settings.Name = name;
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
var ccu = TemplatingEngine.GenerateCompileUnit (host, content, pt, settings);
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
var opts = new System.CodeDom.Compiler.CodeGeneratorOptions ();
|
||||
using (var writer = new System.IO.StringWriter ()) {
|
||||
writer.NewLine = generatorNewline;
|
||||
settings.Provider.GenerateCodeFromCompileUnit (ccu, writer, opts);
|
||||
return writer.ToString ();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Expected output strings
|
||||
|
||||
public static string OutputSample1 =
|
||||
@"
|
||||
namespace Microsoft.VisualStudio.TextTemplating {
|
||||
|
||||
|
||||
public partial class GeneratedTextTransformation4f504ca0 : global::Microsoft.VisualStudio.TextTemplating.TextTransformation {
|
||||
|
||||
|
||||
#line 9 """"
|
||||
|
||||
baz \#>
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
public override string TransformText() {
|
||||
this.GenerationEnvironment = null;
|
||||
|
||||
#line 2 """"
|
||||
this.Write(""Line One\nLine Two\n"");
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 4 """"
|
||||
|
||||
foo
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 7 """"
|
||||
this.Write(""Line Three "");
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 7 """"
|
||||
this.Write(global::Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture( bar ));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 7 """"
|
||||
this.Write(""\nLine Four\n"");
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
return this.GenerationEnvironment.ToString();
|
||||
}
|
||||
|
||||
protected override void Initialize() {
|
||||
base.Initialize();
|
||||
}
|
||||
}
|
||||
}
|
||||
";
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{CB590106-8331-4CBE-8131-B154E7BF79E1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AssemblyName>Mono.TextTemplating.Tests</AssemblyName>
|
||||
<RootNamespace>Mono.TextTemplating.Tests</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\bin</OutputPath>
|
||||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\bin</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="nunit.core">
|
||||
<HintPath>..\NUnit\lib\nunit.core.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="nunit.framework">
|
||||
<HintPath>..\NUnit\lib\nunit.framework.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ParsingTests.cs" />
|
||||
<Compile Include="DummyHost.cs" />
|
||||
<Compile Include="GenerationTests.cs" />
|
||||
<Compile Include="TemplatingEngineHelper.cs" />
|
||||
<Compile Include="TemplateEnginePreprocessTemplateTests.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Mono.TextTemplating\Mono.TextTemplating.csproj">
|
||||
<Project>{A2364D6A-00EF-417C-80A6-815726C70032}</Project>
|
||||
<Name>Mono.TextTemplating</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
|
@ -1,191 +0,0 @@
|
|||
//
|
||||
// Test.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Mono.TextTemplating.Tests
|
||||
{
|
||||
|
||||
|
||||
[TestFixture]
|
||||
public class ParsingTests
|
||||
{
|
||||
public static string ParseSample1 =
|
||||
@"<#@ template language=""C#v3.5"" #>
|
||||
Line One
|
||||
Line Two
|
||||
<#
|
||||
foo
|
||||
#>
|
||||
Line Three <#= bar #>
|
||||
Line Four
|
||||
<#+
|
||||
baz \#>
|
||||
#>
|
||||
";
|
||||
|
||||
[Test]
|
||||
public void TokenTest ()
|
||||
{
|
||||
string tf = "test.input";
|
||||
Tokeniser tk = new Tokeniser (tf, ParseSample1);
|
||||
|
||||
//line 1
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 1, 1), tk.Location);
|
||||
Assert.AreEqual (State.Content, tk.State);
|
||||
Assert.AreEqual ("", tk.Value);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (State.Directive, tk.State);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 1, 5), tk.Location);
|
||||
Assert.AreEqual (State.DirectiveName, tk.State);
|
||||
Assert.AreEqual ("template", tk.Value);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (State.Directive, tk.State);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 1, 14), tk.Location);
|
||||
Assert.AreEqual (State.DirectiveName, tk.State);
|
||||
Assert.AreEqual ("language", tk.Value);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (State.Directive, tk.State);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (State.DirectiveValue, tk.State);
|
||||
Assert.AreEqual (new Location (tf, 1, 23), tk.Location);
|
||||
Assert.AreEqual ("C#v3.5", tk.Value);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (State.Directive, tk.State);
|
||||
|
||||
//line 2, 3
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 2, 1), tk.Location);
|
||||
Assert.AreEqual (State.Content, tk.State);
|
||||
Assert.AreEqual ("Line One\nLine Two\n", tk.Value);
|
||||
|
||||
//line 4, 5, 6
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 4, 1), tk.TagStartLocation);
|
||||
Assert.AreEqual (new Location (tf, 4, 3), tk.Location);
|
||||
Assert.AreEqual (new Location (tf, 6, 3), tk.TagEndLocation);
|
||||
Assert.AreEqual (State.Block, tk.State);
|
||||
Assert.AreEqual ("\nfoo\n", tk.Value);
|
||||
|
||||
//line 7
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 7, 1), tk.Location);
|
||||
Assert.AreEqual (State.Content, tk.State);
|
||||
Assert.AreEqual ("Line Three ", tk.Value);
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 7, 12), tk.TagStartLocation);
|
||||
Assert.AreEqual (new Location (tf, 7, 15), tk.Location);
|
||||
Assert.AreEqual (new Location (tf, 7, 22), tk.TagEndLocation);
|
||||
Assert.AreEqual (State.Expression, tk.State);
|
||||
Assert.AreEqual (" bar ", tk.Value);
|
||||
|
||||
//line 8
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 7, 22), tk.Location);
|
||||
Assert.AreEqual (State.Content, tk.State);
|
||||
Assert.AreEqual ("\nLine Four\n", tk.Value);
|
||||
|
||||
//line 9, 10, 11
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 9, 1), tk.TagStartLocation);
|
||||
Assert.AreEqual (new Location (tf, 9, 4), tk.Location);
|
||||
Assert.AreEqual (new Location (tf, 11, 3), tk.TagEndLocation);
|
||||
Assert.AreEqual (State.Helper, tk.State);
|
||||
Assert.AreEqual (" \nbaz \\#>\n", tk.Value);
|
||||
|
||||
//line 12
|
||||
Assert.IsTrue (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 12, 1), tk.Location);
|
||||
Assert.AreEqual (State.Content, tk.State);
|
||||
Assert.AreEqual ("", tk.Value);
|
||||
|
||||
//EOF
|
||||
Assert.IsFalse (tk.Advance ());
|
||||
Assert.AreEqual (new Location (tf, 12, 1), tk.Location);
|
||||
Assert.AreEqual (State.EOF, tk.State);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ParseTest ()
|
||||
{
|
||||
string tf = "test.input";
|
||||
|
||||
ParsedTemplate pt = new ParsedTemplate ("test.input");
|
||||
Tokeniser tk = new Tokeniser (tf, ParseSample1);
|
||||
DummyHost host = new DummyHost ();
|
||||
pt.Parse (host, tk);
|
||||
|
||||
Assert.AreEqual (0, pt.Errors.Count);
|
||||
var content = new List<TemplateSegment> (pt.Content);
|
||||
var dirs = new List<Directive> (pt.Directives);
|
||||
|
||||
Assert.AreEqual (1, dirs.Count);
|
||||
Assert.AreEqual (6, content.Count);
|
||||
|
||||
Assert.AreEqual ("template", dirs[0].Name);
|
||||
Assert.AreEqual (1, dirs[0].Attributes.Count);
|
||||
Assert.AreEqual ("C#v3.5", dirs[0].Attributes["language"]);
|
||||
Assert.AreEqual (new Location (tf, 1, 1), dirs[0].TagStartLocation);
|
||||
Assert.AreEqual (new Location (tf, 1, 34), dirs[0].EndLocation);
|
||||
|
||||
Assert.AreEqual ("Line One\nLine Two\n", content[0].Text);
|
||||
Assert.AreEqual ("\nfoo\n", content[1].Text);
|
||||
Assert.AreEqual ("Line Three ", content[2].Text);
|
||||
Assert.AreEqual (" bar ", content[3].Text);
|
||||
Assert.AreEqual ("\nLine Four\n", content[4].Text);
|
||||
Assert.AreEqual (" \nbaz \\#>\n", content[5].Text);
|
||||
|
||||
Assert.AreEqual (SegmentType.Content, content[0].Type);
|
||||
Assert.AreEqual (SegmentType.Block, content[1].Type);
|
||||
Assert.AreEqual (SegmentType.Content, content[2].Type);
|
||||
Assert.AreEqual (SegmentType.Expression, content[3].Type);
|
||||
Assert.AreEqual (SegmentType.Content, content[4].Type);
|
||||
Assert.AreEqual (SegmentType.Helper, content[5].Type);
|
||||
|
||||
Assert.AreEqual (new Location (tf, 4, 1), content[1].TagStartLocation);
|
||||
Assert.AreEqual (new Location (tf, 7, 12), content[3].TagStartLocation);
|
||||
Assert.AreEqual (new Location (tf, 9, 1), content[5].TagStartLocation);
|
||||
|
||||
Assert.AreEqual (new Location (tf, 2, 1), content[0].StartLocation);
|
||||
Assert.AreEqual (new Location (tf, 4, 3), content[1].StartLocation);
|
||||
Assert.AreEqual (new Location (tf, 7, 1), content[2].StartLocation);
|
||||
Assert.AreEqual (new Location (tf, 7, 15), content[3].StartLocation);
|
||||
Assert.AreEqual (new Location (tf, 7, 22), content[4].StartLocation);
|
||||
Assert.AreEqual (new Location (tf, 9, 4), content[5].StartLocation);
|
||||
|
||||
Assert.AreEqual (new Location (tf, 6, 3), content[1].EndLocation);
|
||||
Assert.AreEqual (new Location (tf, 7, 22), content[3].EndLocation);
|
||||
Assert.AreEqual (new Location (tf, 11, 3), content[5].EndLocation);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -1,246 +0,0 @@
|
|||
//
|
||||
// TemplateEnginePreprocessTemplateTests.cs
|
||||
//
|
||||
// Author:
|
||||
// Matt Ward
|
||||
//
|
||||
// Copyright (c) 2010 Matt Ward
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using NUnit.Framework;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
|
||||
namespace Mono.TextTemplating.Tests
|
||||
{
|
||||
[TestFixture]
|
||||
public class TemplateEnginePreprocessTemplateTests
|
||||
{
|
||||
[Test]
|
||||
public void Preprocess ()
|
||||
{
|
||||
string input =
|
||||
"<#@ template language=\"C#\" #>\r\n" +
|
||||
"Test\r\n";
|
||||
|
||||
string expectedOutput = OutputSample1;
|
||||
string output = Preprocess (input);
|
||||
|
||||
Assert.AreEqual (expectedOutput, output);
|
||||
}
|
||||
|
||||
#region Helpers
|
||||
|
||||
string Preprocess (string input)
|
||||
{
|
||||
DummyHost host = new DummyHost ();
|
||||
string className = "PreprocessedTemplate";
|
||||
string classNamespace = "Templating";
|
||||
string language = null;
|
||||
string[] references = null;
|
||||
|
||||
TemplatingEngine engine = new TemplatingEngine ();
|
||||
string output = engine.PreprocessTemplate (input, host, className, classNamespace, out language, out references);
|
||||
output = output.Replace ("\r\n", "\n");
|
||||
return TemplatingEngineHelper.StripHeader (output, "\n");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Expected output strings
|
||||
|
||||
public static string OutputSample1 =
|
||||
@"
|
||||
namespace Templating {
|
||||
|
||||
|
||||
public partial class PreprocessedTemplate : PreprocessedTemplateBase {
|
||||
|
||||
public virtual string TransformText() {
|
||||
this.GenerationEnvironment = null;
|
||||
|
||||
#line 2 """"
|
||||
this.Write(""Test\r\n"");
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
return this.GenerationEnvironment.ToString();
|
||||
}
|
||||
|
||||
protected virtual void Initialize() {
|
||||
}
|
||||
}
|
||||
|
||||
public class PreprocessedTemplateBase {
|
||||
|
||||
private global::System.Text.StringBuilder builder;
|
||||
|
||||
private global::System.Collections.Generic.IDictionary<string, object> session;
|
||||
|
||||
private global::System.CodeDom.Compiler.CompilerErrorCollection errors;
|
||||
|
||||
private string currentIndent = string.Empty;
|
||||
|
||||
private global::System.Collections.Generic.Stack<int> indents;
|
||||
|
||||
private ToStringInstanceHelper _toStringHelper = new ToStringInstanceHelper();
|
||||
|
||||
public virtual global::System.Collections.Generic.IDictionary<string, object> Session {
|
||||
get {
|
||||
return this.session;
|
||||
}
|
||||
set {
|
||||
this.session = value;
|
||||
}
|
||||
}
|
||||
|
||||
public global::System.Text.StringBuilder GenerationEnvironment {
|
||||
get {
|
||||
if ((this.builder == null)) {
|
||||
this.builder = new global::System.Text.StringBuilder();
|
||||
}
|
||||
return this.builder;
|
||||
}
|
||||
set {
|
||||
this.builder = value;
|
||||
}
|
||||
}
|
||||
|
||||
protected global::System.CodeDom.Compiler.CompilerErrorCollection Errors {
|
||||
get {
|
||||
if ((this.errors == null)) {
|
||||
this.errors = new global::System.CodeDom.Compiler.CompilerErrorCollection();
|
||||
}
|
||||
return this.errors;
|
||||
}
|
||||
}
|
||||
|
||||
public string CurrentIndent {
|
||||
get {
|
||||
return this.currentIndent;
|
||||
}
|
||||
}
|
||||
|
||||
private global::System.Collections.Generic.Stack<int> Indents {
|
||||
get {
|
||||
if ((this.indents == null)) {
|
||||
this.indents = new global::System.Collections.Generic.Stack<int>();
|
||||
}
|
||||
return this.indents;
|
||||
}
|
||||
}
|
||||
|
||||
public ToStringInstanceHelper ToStringHelper {
|
||||
get {
|
||||
return this._toStringHelper;
|
||||
}
|
||||
}
|
||||
|
||||
public void Error(string message) {
|
||||
this.Errors.Add(new global::System.CodeDom.Compiler.CompilerError(null, -1, -1, null, message));
|
||||
}
|
||||
|
||||
public void Warning(string message) {
|
||||
global::System.CodeDom.Compiler.CompilerError val = new global::System.CodeDom.Compiler.CompilerError(null, -1, -1, null, message);
|
||||
val.IsWarning = true;
|
||||
this.Errors.Add(val);
|
||||
}
|
||||
|
||||
public string PopIndent() {
|
||||
if ((this.Indents.Count == 0)) {
|
||||
return string.Empty;
|
||||
}
|
||||
int lastPos = (this.currentIndent.Length - this.Indents.Pop());
|
||||
string last = this.currentIndent.Substring(lastPos);
|
||||
this.currentIndent = this.currentIndent.Substring(0, lastPos);
|
||||
return last;
|
||||
}
|
||||
|
||||
public void PushIndent(string indent) {
|
||||
this.Indents.Push(indent.Length);
|
||||
this.currentIndent = (this.currentIndent + indent);
|
||||
}
|
||||
|
||||
public void ClearIndent() {
|
||||
this.currentIndent = string.Empty;
|
||||
this.Indents.Clear();
|
||||
}
|
||||
|
||||
public void Write(string textToAppend) {
|
||||
this.GenerationEnvironment.Append(textToAppend);
|
||||
}
|
||||
|
||||
public void Write(string format, params object[] args) {
|
||||
this.GenerationEnvironment.AppendFormat(format, args);
|
||||
}
|
||||
|
||||
public void WriteLine(string textToAppend) {
|
||||
this.GenerationEnvironment.Append(this.currentIndent);
|
||||
this.GenerationEnvironment.AppendLine(textToAppend);
|
||||
}
|
||||
|
||||
public void WriteLine(string format, params object[] args) {
|
||||
this.GenerationEnvironment.Append(this.currentIndent);
|
||||
this.GenerationEnvironment.AppendFormat(format, args);
|
||||
this.GenerationEnvironment.AppendLine();
|
||||
}
|
||||
|
||||
public class ToStringInstanceHelper {
|
||||
|
||||
private global::System.IFormatProvider formatProvider = global::System.Globalization.CultureInfo.InvariantCulture;
|
||||
|
||||
public global::System.IFormatProvider FormatProvider {
|
||||
get {
|
||||
return this.formatProvider;
|
||||
}
|
||||
set {
|
||||
if ((this.formatProvider == null)) {
|
||||
throw new global::System.ArgumentNullException(""formatProvider"");
|
||||
}
|
||||
this.formatProvider = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string ToStringWithCulture(object objectToConvert) {
|
||||
if ((objectToConvert == null)) {
|
||||
throw new global::System.ArgumentNullException(""objectToConvert"");
|
||||
}
|
||||
global::System.Type type = objectToConvert.GetType();
|
||||
global::System.Type iConvertibleType = typeof(global::System.IConvertible);
|
||||
if (iConvertibleType.IsAssignableFrom(type)) {
|
||||
return ((global::System.IConvertible)(objectToConvert)).ToString(this.formatProvider);
|
||||
}
|
||||
global::System.Reflection.MethodInfo methInfo = type.GetMethod(""ToString"", new global::System.Type[] {
|
||||
iConvertibleType});
|
||||
if ((methInfo != null)) {
|
||||
return ((string)(methInfo.Invoke(objectToConvert, new object[] {
|
||||
this.formatProvider})));
|
||||
}
|
||||
return objectToConvert.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
";
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
//
|
||||
// Test.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Mono.TextTemplating.Tests
|
||||
{
|
||||
public static class TemplatingEngineHelper
|
||||
{
|
||||
public static string StripHeader (string input, string newLine)
|
||||
{
|
||||
using (var writer = new StringWriter ()) {
|
||||
using (var reader = new StringReader (input)) {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
reader.ReadLine ();
|
||||
}
|
||||
string line;
|
||||
while ((line = reader.ReadLine ()) != null) {
|
||||
writer.Write (line);
|
||||
writer.Write (newLine);
|
||||
}
|
||||
}
|
||||
return writer.ToString ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
//
|
||||
// AssemblyInfo.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System;
|
||||
|
||||
[assembly: AssemblyTitle("Mono.TextTemplating")]
|
||||
[assembly: AssemblyDescription("An implementation of Visual Studio's T4 text templating")]
|
||||
[assembly: AssemblyCompany("The Mono Project")]
|
||||
[assembly: AssemblyProduct("MonoDevelop")]
|
||||
[assembly: AssemblyCopyright("MIT/X11")]
|
||||
[assembly: CLSCompliant (true)]
|
||||
|
||||
//[assembly: AssemblyVersion("1.0.0.0")]
|
|
@ -1,212 +0,0 @@
|
|||
2010-03-15 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/TemplateGenerator.cs: Expose OutputFile
|
||||
for custom tool to access.
|
||||
|
||||
2010-03-01 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/CrossAppDomainAssemblyResolver.cs: A
|
||||
handler for AssemblyResolve events that looks them up in the
|
||||
domain that created the resolver.
|
||||
|
||||
* Makefile.am:
|
||||
* Mono.TextTemplating.csproj: Added file.
|
||||
|
||||
2009-11-27 Olivier Dagenais <olivier.dagenais@gmail.com>
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Fixed a bug where the
|
||||
location of an error was being ignored.
|
||||
|
||||
2009-11-27 Olivier Dagenais <olivier.dagenais@gmail.com>
|
||||
|
||||
* Mono.TextTemplating/TemplatingEngine.cs: Mark the generated
|
||||
type as partial.
|
||||
|
||||
2009-11-25 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Don't check if
|
||||
included file exists before trying to resolve it from the
|
||||
host, because host may use include paths. Patch from Aaron
|
||||
Bockover.
|
||||
|
||||
2009-08-17 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/TemplatingEngine.cs: Fix NRE when
|
||||
template fails to compile.
|
||||
|
||||
2009-08-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Makefile.am:
|
||||
* Mono.TextTemplating.csproj: Include the ASP.NET MVC and
|
||||
TextTemplating addins in the main solution and build.
|
||||
|
||||
2009-08-11 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.csproj:
|
||||
* Mono.TextTemplating/ParsedTemplate.cs:
|
||||
* Mono.TextTemplating/CompiledTemplate.cs:
|
||||
* Mono.TextTemplating/TemplatingEngine.cs:
|
||||
* Mono.TextTemplating/TemplateGenerator.cs:
|
||||
* Mono.TextTemplating/IExtendedTextTemplatingEngineHost.cs:
|
||||
Add support for caching compiled templates, and a couple of
|
||||
bugfixes. Patch from Nathan Baulch
|
||||
(nathan.baulch@gmail.com).
|
||||
|
||||
2009-06-25 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/TemplatingEngine.cs: Handle expressions
|
||||
and content in helpers, based on patch from Nathan Baulch.
|
||||
Liberally add C# 3 sugar to neaten up CodeDOM usage.
|
||||
|
||||
2009-06-25 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/TemplateGenerator.cs: Added overload for
|
||||
Process template that uses input/output strings directly,
|
||||
avoiding file read/write. Expose engine to subclasses.
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs: Remove outdated TODO.
|
||||
|
||||
2009-04-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Microsoft.VisualStudio.TextTemplating/ToStringHelper.cs: Use
|
||||
IConvertible.ToString (formatProvider) when possible.
|
||||
|
||||
Thanks to Stuart Carnie for this patch.
|
||||
|
||||
2009-04-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs: Add support for Mac and
|
||||
Windows newlines.
|
||||
|
||||
* Mono.TextTemplating/TemplatingEngine.cs: Keep temp files
|
||||
when in debug mode, so that the generated code can be
|
||||
debugged.
|
||||
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Fixes for csc
|
||||
compilation.
|
||||
|
||||
Thanks to Stuart Carnie for this patch.
|
||||
|
||||
2009-04-03 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.csproj:
|
||||
* Mono.TextTemplating/TemplatingEngine.cs:
|
||||
* Mono.TextTemplating/TemplateSettings.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/Engine.cs: Move the
|
||||
real engine into the Mono.TextTemplating namespace and
|
||||
expose helper methods so that they can be tested.
|
||||
|
||||
2009-03-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.csproj: Move output dir from ../bin to
|
||||
../build.
|
||||
|
||||
2009-03-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs: Tweaked location of next
|
||||
state after directive.
|
||||
|
||||
2009-03-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs: Location tweaks within
|
||||
directives.
|
||||
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Make Location
|
||||
equatable.
|
||||
|
||||
2009-03-10 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs:
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Fix end location
|
||||
capture after newline handling changes.
|
||||
|
||||
2009-03-10 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/Engine.cs: Match T4's
|
||||
newline handling.
|
||||
|
||||
2009-03-10 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Fix logic that
|
||||
prevented adding directives.
|
||||
|
||||
2009-03-09 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs:
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: More accurate
|
||||
location captures. Capture start of tags as well as start of
|
||||
content.
|
||||
|
||||
2009-03-09 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/TemplateGenerator.cs: Report exceptions
|
||||
in errors.
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs: Make API public.
|
||||
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Unify segment types.
|
||||
Track end locations. Make API public. Allow parsing without
|
||||
includes.
|
||||
|
||||
* Microsoft.VisualStudio.TextTemplating/Engine.cs: Track
|
||||
location API.
|
||||
|
||||
2009-03-06 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/TemplateGenerator.cs: Fix
|
||||
SetFileExtension.
|
||||
|
||||
* Microsoft.VisualStudio.TextTemplating/Engine.cs: Capture
|
||||
hostspecific attribute from template directive.
|
||||
|
||||
2009-03-05 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating/TemplateGenerator.cs: Fix output
|
||||
extension changing.
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs: Fix helper regions.
|
||||
|
||||
2009-03-05 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Mono.TextTemplating.csproj: Updated.
|
||||
|
||||
* Mono.TextTemplating/TemplateGenerator.cs: Simple template
|
||||
host implementation. Doesn't handle everything yet.
|
||||
|
||||
* Mono.TextTemplating/Tokeniser.cs: Fix a number of offset
|
||||
issues that broke most captures. Only allow EOF in content
|
||||
regions, and in this case capture the last content. Track
|
||||
current column, for error reporting.
|
||||
|
||||
* Mono.TextTemplating/ParsedTemplate.cs: Overhaul location
|
||||
tracking for error reporting. Don't record empty segments.
|
||||
|
||||
* Microsoft.VisualStudio.TextTemplating/Engine.cs: Use run
|
||||
method instead of runner, since the whole thing's done in
|
||||
the appdomain now. Catch errors from the runner. Use host's
|
||||
default assemblies and imports. Track ParsedTemplate error
|
||||
reporting changes. Filter out content regions with only a
|
||||
single newline.
|
||||
|
||||
* Microsoft.VisualStudio.TextTemplating/ToStringHelper.cs:
|
||||
Don't cache delegates; this won't work for instances. Maybe
|
||||
IL generation is called for.
|
||||
|
||||
2009-03-04 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* AssemblyInfo.cs:
|
||||
* Mono.TextTemplating:
|
||||
* Mono.TextTemplating.csproj:
|
||||
* Mono.TextTemplating/Tokeniser.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating:
|
||||
* Mono.TextTemplating/ParsedTemplate.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/Engine.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/ToStringHelper.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/DirectiveProcessor.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/TextTransformation.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/ITextTemplatingEngineHost.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/DirectiveProcessorException.cs:
|
||||
* Microsoft.VisualStudio.TextTemplating/RequiresProvidesDirectiveProcessor.cs:
|
||||
Move T4 implementation to its own assembly. Tweak some
|
||||
appdomain stuff.
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
ADDIN_BUILD = $(top_builddir)/build/AddIns/MonoDevelop.TextTemplating
|
||||
ASSEMBLY = $(ADDIN_BUILD)/Mono.TextTemplating.dll
|
||||
|
||||
DEPS =
|
||||
|
||||
REFS = \
|
||||
-r:System \
|
||||
-r:System.Core
|
||||
|
||||
FILES = \
|
||||
AssemblyInfo.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/AssemblyCacheMonitor.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/DirectiveProcessor.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/DirectiveProcessorException.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/EncodingHelper.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/Engine.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/Interfaces.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/ParameterDirectiveProcessor.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/RequiresProvidesDirectiveProcessor.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/TextTemplatingSession.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/TextTransformation.cs \
|
||||
Microsoft.VisualStudio.TextTemplating/ToStringHelper.cs \
|
||||
Mono.TextTemplating/CompiledTemplate.cs \
|
||||
Mono.TextTemplating/CrossAppDomainAssemblyResolver.cs \
|
||||
Mono.TextTemplating/ParsedTemplate.cs \
|
||||
Mono.TextTemplating/TemplateGenerator.cs \
|
||||
Mono.TextTemplating/TemplateSettings.cs \
|
||||
Mono.TextTemplating/TemplatingEngine.cs \
|
||||
Mono.TextTemplating/Tokeniser.cs
|
||||
|
||||
RES =
|
||||
|
||||
all: $(ASSEMBLY) $(ASSEMBLY).mdb $(DATA_FILE_BUILD)
|
||||
|
||||
$(ASSEMBLY): $(build_sources) $(build_resources) $(DEPS)
|
||||
mkdir -p $(ADDIN_BUILD)
|
||||
$(CSC) $(CSC_FLAGS) -debug -out:$@ -target:library $(REFS) $(build_deps) \
|
||||
$(build_resources:%=/resource:%) $(build_sources)
|
||||
|
||||
$(ASSEMBLY).mdb: $(ASSEMBLY)
|
||||
|
||||
$(DATA_FILE_BUILD): $(srcdir)$(subst $(ADDIN_BUILD),, $@)
|
||||
mkdir -p $(ADDIN_BUILD)/Schemas
|
||||
cp $(srcdir)/$(subst $(ADDIN_BUILD),,$@) $@
|
||||
|
||||
check: all
|
||||
|
||||
assemblydir = $(MD_ADDIN_DIR)/MonoDevelop.TextTemplating
|
||||
assembly_DATA = $(ASSEMBLY) $(ASSEMBLY).mdb
|
||||
|
||||
CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb
|
||||
EXTRA_DIST = $(FILES) $(RES)
|
||||
|
||||
include $(top_srcdir)/Makefile.include
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
//
|
||||
// AssemblyCacheMonitor.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public sealed class AssemblyCacheMonitor : MarshalByRefObject
|
||||
{
|
||||
public AssemblyCacheMonitor ()
|
||||
{
|
||||
}
|
||||
|
||||
public int GetStaleAssembliesCount (TimeSpan assemblyStaleTime)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
//
|
||||
// DirectiveProcessor.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CodeDom.Compiler;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public abstract class DirectiveProcessor
|
||||
{
|
||||
protected DirectiveProcessor ()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void Initialize (ITextTemplatingEngineHost host)
|
||||
{
|
||||
if (host == null)
|
||||
throw new ArgumentNullException ("host");
|
||||
}
|
||||
|
||||
public virtual void StartProcessingRun (CodeDomProvider languageProvider, string templateContents, CompilerErrorCollection errors)
|
||||
{
|
||||
if (languageProvider == null)
|
||||
throw new ArgumentNullException ("languageProvider");
|
||||
this.Errors = errors;
|
||||
}
|
||||
|
||||
public abstract void FinishProcessingRun ();
|
||||
public abstract string GetClassCodeForProcessingRun ();
|
||||
public abstract string[] GetImportsForProcessingRun ();
|
||||
public abstract string GetPostInitializationCodeForProcessingRun ();
|
||||
public abstract string GetPreInitializationCodeForProcessingRun ();
|
||||
public abstract string[] GetReferencesForProcessingRun ();
|
||||
public abstract bool IsDirectiveSupported (string directiveName);
|
||||
public abstract void ProcessDirective (string directiveName, IDictionary<string, string> arguments);
|
||||
|
||||
protected CompilerErrorCollection Errors { get; private set; }
|
||||
}
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
//
|
||||
// DirectiveProcessorException.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
|
||||
[Serializable]
|
||||
public class DirectiveProcessorException : Exception
|
||||
{
|
||||
|
||||
public DirectiveProcessorException ()
|
||||
{
|
||||
}
|
||||
|
||||
public DirectiveProcessorException (string message)
|
||||
: base (message)
|
||||
{
|
||||
}
|
||||
|
||||
public DirectiveProcessorException (SerializationInfo info, StreamingContext context)
|
||||
: base (info, context)
|
||||
{
|
||||
}
|
||||
|
||||
public DirectiveProcessorException (string message, Exception inner)
|
||||
: base (message, inner)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
//
|
||||
// EncodingHelper.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public static class EncodingHelper
|
||||
{
|
||||
public static Encoding GetEncoding (string filePath)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
//
|
||||
// Engine.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using System.CodeDom;
|
||||
using System.CodeDom.Compiler;
|
||||
using Mono.TextTemplating;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public class Engine : ITextTemplatingEngine
|
||||
{
|
||||
TemplatingEngine engine = new TemplatingEngine ();
|
||||
|
||||
public Engine ()
|
||||
{
|
||||
}
|
||||
|
||||
public string ProcessTemplate (string content, ITextTemplatingEngineHost host)
|
||||
{
|
||||
return engine.ProcessTemplate (content, host);
|
||||
}
|
||||
|
||||
public string PreprocessTemplate (string content, ITextTemplatingEngineHost host, string className,
|
||||
string classNamespace, out string language, out string[] references)
|
||||
{
|
||||
return engine.PreprocessTemplate (content, host, className, classNamespace, out language, out references);
|
||||
}
|
||||
|
||||
public const string CacheAssembliesOptionString = "CacheAssemblies";
|
||||
}
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
//
|
||||
// ITextTemplatingEngineHost.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009-2010 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public interface IRecognizeHostSpecific
|
||||
{
|
||||
void SetProcessingRunIsHostSpecific (bool hostSpecific);
|
||||
bool RequiresProcessingRunIsHostSpecific { get; }
|
||||
}
|
||||
|
||||
[CLSCompliant(true)]
|
||||
public interface ITextTemplatingEngine
|
||||
{
|
||||
string ProcessTemplate (string content, ITextTemplatingEngineHost host);
|
||||
string PreprocessTemplate (string content, ITextTemplatingEngineHost host, string className,
|
||||
string classNamespace, out string language, out string[] references);
|
||||
}
|
||||
|
||||
[CLSCompliant(true)]
|
||||
public interface ITextTemplatingEngineHost
|
||||
{
|
||||
object GetHostOption (string optionName);
|
||||
bool LoadIncludeText (string requestFileName, out string content, out string location);
|
||||
void LogErrors (CompilerErrorCollection errors);
|
||||
AppDomain ProvideTemplatingAppDomain (string content);
|
||||
string ResolveAssemblyReference (string assemblyReference);
|
||||
Type ResolveDirectiveProcessor (string processorName);
|
||||
string ResolveParameterValue (string directiveId, string processorName, string parameterName);
|
||||
string ResolvePath (string path);
|
||||
void SetFileExtension (string extension);
|
||||
void SetOutputEncoding (Encoding encoding, bool fromOutputDirective);
|
||||
IList<string> StandardAssemblyReferences { get; }
|
||||
IList<string> StandardImports { get; }
|
||||
string TemplateFile { get; }
|
||||
}
|
||||
|
||||
[CLSCompliant(true)]
|
||||
public interface ITextTemplatingSession :
|
||||
IEquatable<ITextTemplatingSession>, IEquatable<Guid>, IDictionary<string, Object>,
|
||||
ICollection<KeyValuePair<string, Object>>,
|
||||
IEnumerable<KeyValuePair<string, Object>>,
|
||||
IEnumerable, ISerializable
|
||||
{
|
||||
Guid Id { get; }
|
||||
}
|
||||
|
||||
[CLSCompliant(true)]
|
||||
public interface ITextTemplatingSessionHost
|
||||
{
|
||||
ITextTemplatingSession CreateSession ();
|
||||
ITextTemplatingSession Session { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,268 +0,0 @@
|
|||
//
|
||||
// ParameterDirectiveProcessor.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.CodeDom;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public sealed class ParameterDirectiveProcessor : DirectiveProcessor, IRecognizeHostSpecific
|
||||
{
|
||||
CodeDomProvider provider;
|
||||
bool isCSharp;
|
||||
bool useMonoHack;
|
||||
|
||||
bool hostSpecific;
|
||||
List<CodeStatement> postStatements = new List<CodeStatement> ();
|
||||
CodeTypeMemberCollection members = new CodeTypeMemberCollection ();
|
||||
|
||||
public ParameterDirectiveProcessor ()
|
||||
{
|
||||
}
|
||||
|
||||
public override void StartProcessingRun (CodeDomProvider languageProvider, string templateContents, CompilerErrorCollection errors)
|
||||
{
|
||||
base.StartProcessingRun (languageProvider, templateContents, errors);
|
||||
this.provider = languageProvider;
|
||||
//HACK: Mono as of 2.10.2 doesn't implement GenerateCodeFromMember
|
||||
if (Type.GetType ("Mono.Runtime") != null)
|
||||
useMonoHack = true;
|
||||
if (languageProvider is Microsoft.CSharp.CSharpCodeProvider)
|
||||
isCSharp = true;
|
||||
postStatements.Clear ();
|
||||
members.Clear ();
|
||||
}
|
||||
|
||||
public override void FinishProcessingRun ()
|
||||
{
|
||||
var statement = new CodeConditionStatement (
|
||||
new CodeBinaryOperatorExpression (
|
||||
new CodePropertyReferenceExpression (
|
||||
new CodePropertyReferenceExpression (new CodeThisReferenceExpression (), "Errors"), "HasErrors"),
|
||||
CodeBinaryOperatorType.ValueEquality,
|
||||
new CodePrimitiveExpression (false)),
|
||||
postStatements.ToArray ());
|
||||
|
||||
postStatements.Clear ();
|
||||
postStatements.Add (statement);
|
||||
}
|
||||
|
||||
public override string GetClassCodeForProcessingRun ()
|
||||
{
|
||||
var options = new CodeGeneratorOptions ();
|
||||
using (var sw = new StringWriter ()) {
|
||||
GenerateCodeFromMembers (sw, options);
|
||||
return Indent (sw.ToString (), " ");
|
||||
}
|
||||
}
|
||||
|
||||
string Indent (string s, string indent)
|
||||
{
|
||||
if (isCSharp)
|
||||
return Mono.TextTemplating.TemplatingEngine.IndentSnippetText (s, indent);
|
||||
return s;
|
||||
}
|
||||
|
||||
public override string[] GetImportsForProcessingRun ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public override string GetPostInitializationCodeForProcessingRun ()
|
||||
{
|
||||
return Indent (StatementsToCode (postStatements), " ");
|
||||
}
|
||||
|
||||
public override string GetPreInitializationCodeForProcessingRun ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
string StatementsToCode (List<CodeStatement> statements)
|
||||
{
|
||||
var options = new CodeGeneratorOptions ();
|
||||
using (var sw = new StringWriter ()) {
|
||||
foreach (var statement in statements)
|
||||
provider.GenerateCodeFromStatement (statement, sw, options);
|
||||
return sw.ToString ();
|
||||
}
|
||||
}
|
||||
|
||||
public override string[] GetReferencesForProcessingRun ()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public override bool IsDirectiveSupported (string directiveName)
|
||||
{
|
||||
return directiveName == "parameter";
|
||||
}
|
||||
|
||||
public override void ProcessDirective (string directiveName, IDictionary<string, string> arguments)
|
||||
{
|
||||
string name = arguments["name"];
|
||||
string type = arguments["type"];
|
||||
if (string.IsNullOrEmpty (name))
|
||||
throw new DirectiveProcessorException ("Parameter directive has no name argument");
|
||||
if (string.IsNullOrEmpty (type))
|
||||
throw new DirectiveProcessorException ("Parameter directive has no type argument");
|
||||
|
||||
string fieldName = "_" + name + "Field";
|
||||
var typeRef = new CodeTypeReference (type);
|
||||
var thisRef = new CodeThisReferenceExpression ();
|
||||
var fieldRef = new CodeFieldReferenceExpression (thisRef, fieldName);
|
||||
|
||||
var property = new CodeMemberProperty () {
|
||||
Name = name,
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
HasGet = true,
|
||||
HasSet = false,
|
||||
Type = typeRef
|
||||
};
|
||||
property.GetStatements.Add (new CodeMethodReturnStatement (fieldRef));
|
||||
members.Add (new CodeMemberField (typeRef, fieldName));
|
||||
members.Add (property);
|
||||
|
||||
string acquiredName = "_" + name + "Acquired";
|
||||
var valRef = new CodeVariableReferenceExpression ("data");
|
||||
var namePrimitive = new CodePrimitiveExpression (name);
|
||||
var sessionRef = new CodePropertyReferenceExpression (thisRef, "Session");
|
||||
var callContextTypeRefExpr = new CodeTypeReferenceExpression ("System.Runtime.Remoting.Messaging.CallContext");
|
||||
var nullPrim = new CodePrimitiveExpression (null);
|
||||
|
||||
var acquiredVariable = new CodeVariableDeclarationStatement (typeof (bool), acquiredName, new CodePrimitiveExpression (false));
|
||||
var acquiredVariableRef = new CodeVariableReferenceExpression (acquiredVariable.Name);
|
||||
this.postStatements.Add (acquiredVariable);
|
||||
|
||||
//checks the local called "data" can be cast and assigned to the field, and if successful, sets acquiredVariable to true
|
||||
var checkCastThenAssignVal = new CodeConditionStatement (
|
||||
new CodeMethodInvokeExpression (
|
||||
new CodeTypeOfExpression (typeRef), "IsAssignableFrom", new CodeMethodInvokeExpression (valRef, "GetType")),
|
||||
new CodeStatement[] {
|
||||
new CodeAssignStatement (fieldRef, new CodeCastExpression (typeRef, valRef)),
|
||||
new CodeAssignStatement (acquiredVariableRef, new CodePrimitiveExpression (true)),
|
||||
},
|
||||
new CodeStatement[] {
|
||||
new CodeExpressionStatement (new CodeMethodInvokeExpression (thisRef, "Error",
|
||||
new CodePrimitiveExpression ("The type '" + type + "' of the parameter '" + name +
|
||||
"' did not match the type passed to the template"))),
|
||||
});
|
||||
|
||||
//tries to gets the value from the session
|
||||
var checkSession = new CodeConditionStatement (
|
||||
new CodeBinaryOperatorExpression (NotNull (sessionRef), CodeBinaryOperatorType.BooleanAnd,
|
||||
new CodeMethodInvokeExpression (sessionRef, "ContainsKey", namePrimitive)),
|
||||
new CodeVariableDeclarationStatement (typeof (object), "data", new CodeIndexerExpression (sessionRef, namePrimitive)),
|
||||
checkCastThenAssignVal);
|
||||
|
||||
this.postStatements.Add (checkSession);
|
||||
|
||||
//if acquiredVariable is false, tries to gets the value from the host
|
||||
if (hostSpecific) {
|
||||
var hostRef = new CodePropertyReferenceExpression (thisRef, "Host");
|
||||
var checkHost = new CodeConditionStatement (
|
||||
BooleanAnd (IsFalse (acquiredVariableRef), NotNull (hostRef)),
|
||||
new CodeVariableDeclarationStatement (typeof (string), "data",
|
||||
new CodeMethodInvokeExpression (hostRef, "ResolveParameterValue", nullPrim, nullPrim, namePrimitive)),
|
||||
new CodeConditionStatement (NotNull (valRef), checkCastThenAssignVal));
|
||||
|
||||
this.postStatements.Add (checkHost);
|
||||
}
|
||||
|
||||
//if acquiredVariable is false, tries to gets the value from the call context
|
||||
var checkCallContext = new CodeConditionStatement (
|
||||
IsFalse (acquiredVariableRef),
|
||||
new CodeVariableDeclarationStatement (typeof (object), "data",
|
||||
new CodeMethodInvokeExpression (callContextTypeRefExpr, "LogicalGetData", namePrimitive)),
|
||||
new CodeConditionStatement (NotNull (valRef), checkCastThenAssignVal));
|
||||
|
||||
this.postStatements.Add (checkCallContext);
|
||||
}
|
||||
|
||||
static CodeBinaryOperatorExpression NotNull (CodeExpression reference)
|
||||
{
|
||||
return new CodeBinaryOperatorExpression (reference, CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression (null));
|
||||
}
|
||||
|
||||
static CodeBinaryOperatorExpression IsFalse (CodeExpression expr)
|
||||
{
|
||||
return new CodeBinaryOperatorExpression (expr, CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression (false));
|
||||
}
|
||||
|
||||
static CodeBinaryOperatorExpression BooleanAnd (CodeExpression expr1, CodeExpression expr2)
|
||||
{
|
||||
return new CodeBinaryOperatorExpression (expr1, CodeBinaryOperatorType.BooleanAnd, expr2);
|
||||
}
|
||||
|
||||
void IRecognizeHostSpecific.SetProcessingRunIsHostSpecific (bool hostSpecific)
|
||||
{
|
||||
this.hostSpecific = hostSpecific;
|
||||
}
|
||||
|
||||
public bool RequiresProcessingRunIsHostSpecific {
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
void GenerateCodeFromMembers (StringWriter sw, CodeGeneratorOptions options)
|
||||
{
|
||||
if (!useMonoHack) {
|
||||
foreach (CodeTypeMember member in members)
|
||||
provider.GenerateCodeFromMember (member, sw, options);
|
||||
}
|
||||
|
||||
var cgType = typeof (CodeGenerator);
|
||||
var cgInit = cgType.GetMethod ("InitOutput", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
var cgFieldGen = cgType.GetMethod ("GenerateField", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
var cgPropGen = cgType.GetMethod ("GenerateProperty", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
|
||||
#pragma warning disable 0618
|
||||
var generator = (CodeGenerator) provider.CreateGenerator ();
|
||||
#pragma warning restore 0618
|
||||
var dummy = new CodeTypeDeclaration ("Foo");
|
||||
|
||||
foreach (CodeTypeMember member in members) {
|
||||
var f = member as CodeMemberField;
|
||||
if (f != null) {
|
||||
cgInit.Invoke (generator, new object[] { sw, options });
|
||||
cgFieldGen.Invoke (generator, new object[] { f });
|
||||
continue;
|
||||
}
|
||||
var p = member as CodeMemberProperty;
|
||||
if (p != null) {
|
||||
cgInit.Invoke (generator, new object[] { sw, options });
|
||||
cgPropGen.Invoke (generator, new object[] { p, dummy });
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,196 +0,0 @@
|
|||
//
|
||||
// RequiresProvidesDirectiveProcessor.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Text;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
|
||||
|
||||
public abstract class RequiresProvidesDirectiveProcessor : DirectiveProcessor
|
||||
{
|
||||
bool isInProcessingRun;
|
||||
ITextTemplatingEngineHost host;
|
||||
StringBuilder preInitBuffer = new StringBuilder ();
|
||||
StringBuilder postInitBuffer = new StringBuilder ();
|
||||
StringBuilder codeBuffer = new StringBuilder ();
|
||||
CodeDomProvider languageProvider;
|
||||
|
||||
protected RequiresProvidesDirectiveProcessor ()
|
||||
{
|
||||
}
|
||||
|
||||
public override void Initialize (ITextTemplatingEngineHost host)
|
||||
{
|
||||
base.Initialize (host);
|
||||
this.host = host;
|
||||
}
|
||||
|
||||
protected abstract void InitializeProvidesDictionary (string directiveName, IDictionary<string, string> providesDictionary);
|
||||
protected abstract void InitializeRequiresDictionary (string directiveName, IDictionary<string, string> requiresDictionary);
|
||||
protected abstract string FriendlyName { get; }
|
||||
|
||||
protected abstract void GeneratePostInitializationCode (string directiveName, StringBuilder codeBuffer, CodeDomProvider languageProvider,
|
||||
IDictionary<string, string> requiresArguments, IDictionary<string, string> providesArguments);
|
||||
protected abstract void GeneratePreInitializationCode (string directiveName, StringBuilder codeBuffer, CodeDomProvider languageProvider,
|
||||
IDictionary<string, string> requiresArguments, IDictionary<string, string> providesArguments);
|
||||
protected abstract void GenerateTransformCode (string directiveName, StringBuilder codeBuffer, CodeDomProvider languageProvider,
|
||||
IDictionary<string, string> requiresArguments, IDictionary<string, string> providesArguments);
|
||||
|
||||
protected virtual void PostProcessArguments (string directiveName, IDictionary<string, string> requiresArguments,
|
||||
IDictionary<string, string> providesArguments)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetClassCodeForProcessingRun ()
|
||||
{
|
||||
AssertNotProcessing ();
|
||||
return codeBuffer.ToString ();
|
||||
}
|
||||
|
||||
public override string[] GetImportsForProcessingRun ()
|
||||
{
|
||||
AssertNotProcessing ();
|
||||
return null;
|
||||
}
|
||||
|
||||
public override string[] GetReferencesForProcessingRun ()
|
||||
{
|
||||
AssertNotProcessing ();
|
||||
return null;
|
||||
}
|
||||
|
||||
public override string GetPostInitializationCodeForProcessingRun ()
|
||||
{
|
||||
AssertNotProcessing ();
|
||||
return postInitBuffer.ToString ();
|
||||
}
|
||||
|
||||
public override string GetPreInitializationCodeForProcessingRun ()
|
||||
{
|
||||
AssertNotProcessing ();
|
||||
return preInitBuffer.ToString ();
|
||||
}
|
||||
|
||||
public override void StartProcessingRun (CodeDomProvider languageProvider, string templateContents, CompilerErrorCollection errors)
|
||||
{
|
||||
AssertNotProcessing ();
|
||||
isInProcessingRun = true;
|
||||
base.StartProcessingRun (languageProvider, templateContents, errors);
|
||||
|
||||
this.languageProvider = languageProvider;
|
||||
codeBuffer.Length = 0;
|
||||
preInitBuffer.Length = 0;
|
||||
postInitBuffer.Length = 0;
|
||||
}
|
||||
|
||||
public override void FinishProcessingRun ()
|
||||
{
|
||||
isInProcessingRun = false;
|
||||
}
|
||||
|
||||
void AssertNotProcessing ()
|
||||
{
|
||||
if (isInProcessingRun)
|
||||
throw new InvalidOperationException ();
|
||||
}
|
||||
|
||||
//FIXME: handle escaping
|
||||
IEnumerable<KeyValuePair<string,string>> ParseArgs (string args)
|
||||
{
|
||||
var pairs = args.Split (';');
|
||||
foreach (var p in pairs) {
|
||||
int eq = p.IndexOf ('=');
|
||||
var k = p.Substring (0, eq);
|
||||
var v = p.Substring (eq);
|
||||
yield return new KeyValuePair<string, string> (k, v);
|
||||
}
|
||||
}
|
||||
|
||||
public override void ProcessDirective (string directiveName, IDictionary<string, string> arguments)
|
||||
{
|
||||
if (directiveName == null)
|
||||
throw new ArgumentNullException ("directiveName");
|
||||
if (arguments == null)
|
||||
throw new ArgumentNullException ("arguments");
|
||||
|
||||
var providesDictionary = new Dictionary<string,string> ();
|
||||
var requiresDictionary = new Dictionary<string,string> ();
|
||||
|
||||
string provides;
|
||||
if (arguments.TryGetValue ("provides", out provides)) {
|
||||
foreach (var arg in ParseArgs (provides)) {
|
||||
providesDictionary.Add (arg.Key, arg.Value);
|
||||
}
|
||||
}
|
||||
|
||||
string requires;
|
||||
if (arguments.TryGetValue ("requires", out requires)) {
|
||||
foreach (var arg in ParseArgs (requires)) {
|
||||
requiresDictionary.Add (arg.Key, arg.Value);
|
||||
}
|
||||
}
|
||||
|
||||
InitializeRequiresDictionary (directiveName, requiresDictionary);
|
||||
InitializeProvidesDictionary (directiveName, providesDictionary);
|
||||
|
||||
var id = ProvideUniqueId (directiveName, arguments, requiresDictionary, providesDictionary);
|
||||
|
||||
foreach (var req in requiresDictionary) {
|
||||
var val = host.ResolveParameterValue (id, FriendlyName, req.Key);
|
||||
if (val != null)
|
||||
requiresDictionary[req.Key] = val;
|
||||
else if (req.Value == null)
|
||||
throw new DirectiveProcessorException ("Could not resolve required value '" + req.Key + "'");
|
||||
}
|
||||
|
||||
foreach (var req in providesDictionary) {
|
||||
var val = host.ResolveParameterValue (id, FriendlyName, req.Key);
|
||||
if (val != null)
|
||||
providesDictionary[req.Key] = val;
|
||||
}
|
||||
|
||||
PostProcessArguments (directiveName, requiresDictionary, providesDictionary);
|
||||
|
||||
GeneratePreInitializationCode (directiveName, preInitBuffer, languageProvider, requiresDictionary, providesDictionary);
|
||||
GeneratePostInitializationCode (directiveName, postInitBuffer, languageProvider, requiresDictionary, providesDictionary);
|
||||
GenerateTransformCode (directiveName, codeBuffer, languageProvider, requiresDictionary, providesDictionary);
|
||||
}
|
||||
|
||||
protected virtual string ProvideUniqueId (string directiveName, IDictionary<string, string> arguments,
|
||||
IDictionary<string, string> requiresArguments, IDictionary<string, string> providesArguments)
|
||||
{
|
||||
return directiveName;
|
||||
}
|
||||
|
||||
protected ITextTemplatingEngineHost Host {
|
||||
get { return host; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
//
|
||||
// TextTemplatingSession.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2010 Novell, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class TextTemplatingSession : Dictionary<string, Object>, ITextTemplatingSession
|
||||
{
|
||||
public TextTemplatingSession () : this (Guid.NewGuid ())
|
||||
{
|
||||
}
|
||||
|
||||
public TextTemplatingSession (Guid id)
|
||||
{
|
||||
this.Id = id;
|
||||
}
|
||||
|
||||
public Guid Id {
|
||||
get; private set;
|
||||
}
|
||||
|
||||
public override int GetHashCode ()
|
||||
{
|
||||
return Id.GetHashCode ();
|
||||
}
|
||||
|
||||
public override bool Equals (object obj)
|
||||
{
|
||||
var o = obj as TextTemplatingSession;
|
||||
return o != null && o.Equals (this);
|
||||
}
|
||||
|
||||
public bool Equals (Guid other)
|
||||
{
|
||||
return other.Equals (Id);
|
||||
}
|
||||
|
||||
public bool Equals (ITextTemplatingSession other)
|
||||
{
|
||||
return other != null && other.Id == this.Id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,219 +0,0 @@
|
|||
//
|
||||
// TextTransformation.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public abstract class TextTransformation : IDisposable
|
||||
{
|
||||
Stack<int> indents;
|
||||
string currentIndent = string.Empty;
|
||||
CompilerErrorCollection errors;
|
||||
StringBuilder builder;
|
||||
bool endsWithNewline;
|
||||
|
||||
public TextTransformation ()
|
||||
{
|
||||
}
|
||||
|
||||
protected internal virtual void Initialize ()
|
||||
{
|
||||
}
|
||||
|
||||
public abstract string TransformText ();
|
||||
|
||||
public virtual IDictionary<string, object> Session { get; set; }
|
||||
|
||||
#region Errors
|
||||
|
||||
public void Error (string message)
|
||||
{
|
||||
Errors.Add (new CompilerError (null, -1, -1, null, message));
|
||||
}
|
||||
|
||||
public void Warning (string message)
|
||||
{
|
||||
var err = new CompilerError (null, -1, -1, null, message) {
|
||||
IsWarning = true,
|
||||
};
|
||||
Errors.Add (err);
|
||||
}
|
||||
|
||||
protected internal CompilerErrorCollection Errors {
|
||||
get {
|
||||
if (errors == null)
|
||||
errors = new CompilerErrorCollection ();
|
||||
return errors;
|
||||
}
|
||||
}
|
||||
|
||||
Stack<int> Indents {
|
||||
get {
|
||||
if (indents == null)
|
||||
indents = new Stack<int> ();
|
||||
return indents;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Indents
|
||||
|
||||
public string PopIndent ()
|
||||
{
|
||||
if (Indents.Count == 0)
|
||||
return "";
|
||||
int lastPos = currentIndent.Length - Indents.Pop ();
|
||||
string last = currentIndent.Substring (lastPos);
|
||||
currentIndent = currentIndent.Substring (0, lastPos);
|
||||
return last;
|
||||
}
|
||||
|
||||
public void PushIndent (string indent)
|
||||
{
|
||||
if (indent == null)
|
||||
throw new ArgumentNullException ("indent");
|
||||
Indents.Push (indent.Length);
|
||||
currentIndent += indent;
|
||||
}
|
||||
|
||||
public void ClearIndent ()
|
||||
{
|
||||
currentIndent = string.Empty;
|
||||
Indents.Clear ();
|
||||
}
|
||||
|
||||
public string CurrentIndent {
|
||||
get { return currentIndent; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Writing
|
||||
|
||||
protected StringBuilder GenerationEnvironment {
|
||||
get {
|
||||
if (builder == null)
|
||||
builder = new StringBuilder ();
|
||||
return builder;
|
||||
}
|
||||
set {
|
||||
builder = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void Write (string textToAppend)
|
||||
{
|
||||
if (string.IsNullOrEmpty (textToAppend))
|
||||
return;
|
||||
|
||||
if ((GenerationEnvironment.Length == 0 || endsWithNewline) && CurrentIndent.Length > 0) {
|
||||
GenerationEnvironment.Append (CurrentIndent);
|
||||
}
|
||||
endsWithNewline = false;
|
||||
|
||||
char last = textToAppend[textToAppend.Length-1];
|
||||
if (last == '\n' || last == '\r') {
|
||||
endsWithNewline = true;
|
||||
}
|
||||
|
||||
if (CurrentIndent.Length == 0) {
|
||||
GenerationEnvironment.Append (textToAppend);
|
||||
return;
|
||||
}
|
||||
|
||||
//insert CurrentIndent after every newline (\n, \r, \r\n)
|
||||
//but if there's one at the end of the string, ignore it, it'll be handled next time thanks to endsWithNewline
|
||||
int lastNewline = 0;
|
||||
for (int i = 0; i < textToAppend.Length - 1; i++) {
|
||||
char c = textToAppend[i];
|
||||
if (c == '\r') {
|
||||
if (textToAppend[i + 1] == '\n') {
|
||||
i++;
|
||||
if (i == textToAppend.Length - 1)
|
||||
break;
|
||||
}
|
||||
} else if (c != '\n') {
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
int len = i - lastNewline;
|
||||
if (len > 0) {
|
||||
GenerationEnvironment.Append (textToAppend, lastNewline, i - lastNewline);
|
||||
}
|
||||
GenerationEnvironment.Append (CurrentIndent);
|
||||
lastNewline = i;
|
||||
}
|
||||
if (lastNewline > 0)
|
||||
GenerationEnvironment.Append (textToAppend, lastNewline, textToAppend.Length - lastNewline);
|
||||
else
|
||||
GenerationEnvironment.Append (textToAppend);
|
||||
}
|
||||
|
||||
public void Write (string format, params object[] args)
|
||||
{
|
||||
Write (string.Format (format, args));
|
||||
}
|
||||
|
||||
public void WriteLine (string textToAppend)
|
||||
{
|
||||
Write (textToAppend);
|
||||
GenerationEnvironment.AppendLine ();
|
||||
endsWithNewline = true;
|
||||
}
|
||||
|
||||
public void WriteLine (string format, params object[] args)
|
||||
{
|
||||
WriteLine (string.Format (format, args));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Dispose
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
Dispose (true);
|
||||
GC.SuppressFinalize (this);
|
||||
}
|
||||
|
||||
protected virtual void Dispose (bool disposing)
|
||||
{
|
||||
}
|
||||
|
||||
~TextTransformation ()
|
||||
{
|
||||
Dispose (false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
//
|
||||
// ToStringHelper.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Microsoft.VisualStudio.TextTemplating
|
||||
{
|
||||
public static class ToStringHelper
|
||||
{
|
||||
static object [] formatProviderAsParameterArray;
|
||||
|
||||
static IFormatProvider formatProvider = System.Globalization.CultureInfo.InvariantCulture;
|
||||
|
||||
static ToStringHelper ()
|
||||
{
|
||||
formatProviderAsParameterArray = new object[] { formatProvider };
|
||||
}
|
||||
|
||||
public static string ToStringWithCulture (object objectToConvert)
|
||||
{
|
||||
if (objectToConvert == null)
|
||||
throw new ArgumentNullException ("objectToConvert");
|
||||
|
||||
IConvertible conv = objectToConvert as IConvertible;
|
||||
if (conv != null)
|
||||
return conv.ToString (formatProvider);
|
||||
|
||||
var str = objectToConvert as string;
|
||||
if (str != null)
|
||||
return str;
|
||||
|
||||
//TODO: implement a cache of types and DynamicMethods
|
||||
MethodInfo mi = objectToConvert.GetType ().GetMethod ("ToString", new Type[] { typeof (IFormatProvider) });
|
||||
if (mi != null)
|
||||
return (string) mi.Invoke (objectToConvert, formatProviderAsParameterArray);
|
||||
return objectToConvert.ToString ();
|
||||
}
|
||||
|
||||
public static IFormatProvider FormatProvider {
|
||||
get { return (IFormatProvider)formatProviderAsParameterArray[0]; }
|
||||
set { formatProviderAsParameterArray[0] = formatProvider = value; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,79 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{A2364D6A-00EF-417C-80A6-815726C70032}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<RootNamespace>Mono.TextTemplating</RootNamespace>
|
||||
<AssemblyName>Mono.TextTemplating</AssemblyName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\bin</OutputPath>
|
||||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\bin</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\DirectiveProcessor.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\DirectiveProcessorException.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\Engine.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\RequiresProvidesDirectiveProcessor.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\TextTransformation.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\ToStringHelper.cs" />
|
||||
<Compile Include="Mono.TextTemplating\CompiledTemplate.cs" />
|
||||
<Compile Include="Mono.TextTemplating\ParsedTemplate.cs" />
|
||||
<Compile Include="Mono.TextTemplating\Tokeniser.cs" />
|
||||
<Compile Include="AssemblyInfo.cs" />
|
||||
<Compile Include="Mono.TextTemplating\TemplateGenerator.cs" />
|
||||
<Compile Include="Mono.TextTemplating\TemplatingEngine.cs" />
|
||||
<Compile Include="Mono.TextTemplating\TemplateSettings.cs" />
|
||||
<Compile Include="Mono.TextTemplating\CrossAppDomainAssemblyResolver.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\AssemblyCacheMonitor.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\EncodingHelper.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\ParameterDirectiveProcessor.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\TextTemplatingSession.cs" />
|
||||
<Compile Include="Microsoft.VisualStudio.TextTemplating\Interfaces.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
<Folder Include="Microsoft.VisualStudio.TextTemplating\" />
|
||||
<Folder Include="Mono.TextTemplating\" />
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<MonoDevelop>
|
||||
<Properties>
|
||||
<Policies>
|
||||
<DotNetNamingPolicy DirectoryNamespaceAssociation="Flat" ResourceNamePolicy="FileName" />
|
||||
</Policies>
|
||||
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="true" RelativeMakefileName="Makefile.am" BuildTargetName="" CleanTargetName="" SyncReferences="true" IsAutotoolsProject="true" RelativeConfigureInPath="..">
|
||||
<BuildFilesVar Sync="true" Name="FILES" />
|
||||
<DeployFilesVar />
|
||||
<ResourcesVar Sync="true" Name="RES" />
|
||||
<OthersVar />
|
||||
<GacRefVar Sync="true" Name="REFS" Prefix="-r:" />
|
||||
<AsmRefVar Sync="true" Name="REFS" Prefix="-r:" />
|
||||
<ProjectRefVar Sync="true" Name="DEPS" />
|
||||
</MonoDevelop.Autotools.MakefileInfo>
|
||||
</Properties>
|
||||
</MonoDevelop>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
|
@ -1,113 +0,0 @@
|
|||
//
|
||||
// CompiledTemplate.cs
|
||||
//
|
||||
// Author:
|
||||
// Nathan Baulch <nathan.baulch@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2009 Nathan Baulch
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
public sealed class CompiledTemplate : MarshalByRefObject, IDisposable
|
||||
{
|
||||
ITextTemplatingEngineHost host;
|
||||
TextTransformation tt;
|
||||
CultureInfo culture;
|
||||
string[] assemblyFiles;
|
||||
|
||||
public CompiledTemplate (ITextTemplatingEngineHost host, CompilerResults results, string fullName, CultureInfo culture,
|
||||
string[] assemblyFiles)
|
||||
{
|
||||
AppDomain.CurrentDomain.AssemblyResolve += ResolveReferencedAssemblies;
|
||||
this.host = host;
|
||||
this.culture = culture;
|
||||
this.assemblyFiles = assemblyFiles;
|
||||
Load (results, fullName);
|
||||
}
|
||||
|
||||
void Load (CompilerResults results, string fullName)
|
||||
{
|
||||
var assembly = results.CompiledAssembly;
|
||||
Type transformType = assembly.GetType (fullName);
|
||||
tt = (TextTransformation) Activator.CreateInstance (transformType);
|
||||
|
||||
//set the host property if it exists
|
||||
var hostProp = transformType.GetProperty ("Host", typeof (ITextTemplatingEngineHost));
|
||||
if (hostProp != null && hostProp.CanWrite)
|
||||
hostProp.SetValue (tt, host, null);
|
||||
|
||||
var sessionHost = host as ITextTemplatingSessionHost;
|
||||
if (sessionHost != null) {
|
||||
//FIXME: should we create a session if it's null?
|
||||
tt.Session = sessionHost.Session;
|
||||
}
|
||||
}
|
||||
|
||||
public string Process ()
|
||||
{
|
||||
tt.Errors.Clear ();
|
||||
|
||||
//set the culture
|
||||
if (culture != null)
|
||||
ToStringHelper.FormatProvider = culture;
|
||||
else
|
||||
ToStringHelper.FormatProvider = CultureInfo.InvariantCulture;
|
||||
|
||||
tt.Initialize ();
|
||||
|
||||
string output = null;
|
||||
try {
|
||||
output = tt.TransformText ();
|
||||
} catch (Exception ex) {
|
||||
tt.Error ("Error running transform: " + ex.ToString ());
|
||||
}
|
||||
host.LogErrors (tt.Errors);
|
||||
|
||||
ToStringHelper.FormatProvider = CultureInfo.InvariantCulture;
|
||||
return output;
|
||||
}
|
||||
|
||||
System.Reflection.Assembly ResolveReferencedAssemblies (object sender, ResolveEventArgs args)
|
||||
{
|
||||
System.Reflection.Assembly asm = null;
|
||||
foreach (var asmFile in assemblyFiles) {
|
||||
var name = System.IO.Path.GetFileNameWithoutExtension (asmFile);
|
||||
if (args.Name.StartsWith (name))
|
||||
asm = System.Reflection.Assembly.LoadFrom (asmFile);
|
||||
}
|
||||
return asm;
|
||||
}
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
if (host != null) {
|
||||
host = null;
|
||||
AppDomain.CurrentDomain.AssemblyResolve -= ResolveReferencedAssemblies;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
//
|
||||
// CrossAppDomainAssemblyResolver.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2010 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
[Serializable]
|
||||
/// <summary>
|
||||
/// Provides a handler for AssemblyResolve events that looks them up in the domain that created the resolver.
|
||||
/// </summary>
|
||||
public class CrossAppDomainAssemblyResolver
|
||||
{
|
||||
ParentDomainLookup parent = new ParentDomainLookup ();
|
||||
|
||||
public System.Reflection.Assembly Resolve (object sender, ResolveEventArgs args)
|
||||
{
|
||||
var location = parent.GetAssemblyPath (args.Name);
|
||||
if (location != null)
|
||||
return System.Reflection.Assembly.LoadFrom (location);
|
||||
return null;
|
||||
}
|
||||
|
||||
class ParentDomainLookup : MarshalByRefObject
|
||||
{
|
||||
public string GetAssemblyPath (string name)
|
||||
{
|
||||
var assem = System.Reflection.Assembly.Load (name);
|
||||
if (assem != null)
|
||||
return assem.Location;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,320 +0,0 @@
|
|||
//
|
||||
// Template.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
|
||||
|
||||
public class ParsedTemplate
|
||||
{
|
||||
List<ISegment> segments = new List<ISegment> ();
|
||||
CompilerErrorCollection errors = new CompilerErrorCollection ();
|
||||
string rootFileName;
|
||||
|
||||
public ParsedTemplate (string rootFileName)
|
||||
{
|
||||
this.rootFileName = rootFileName;
|
||||
}
|
||||
|
||||
public List<ISegment> RawSegments {
|
||||
get { return segments; }
|
||||
}
|
||||
|
||||
public IEnumerable<Directive> Directives {
|
||||
get {
|
||||
foreach (ISegment seg in segments) {
|
||||
Directive dir = seg as Directive;
|
||||
if (dir != null)
|
||||
yield return dir;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<TemplateSegment> Content {
|
||||
get {
|
||||
foreach (ISegment seg in segments) {
|
||||
TemplateSegment ts = seg as TemplateSegment;
|
||||
if (ts != null)
|
||||
yield return ts;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public CompilerErrorCollection Errors {
|
||||
get { return errors; }
|
||||
}
|
||||
|
||||
public static ParsedTemplate FromText (string content, ITextTemplatingEngineHost host)
|
||||
{
|
||||
ParsedTemplate template = new ParsedTemplate (host.TemplateFile);
|
||||
try {
|
||||
template.Parse (host, new Tokeniser (host.TemplateFile, content));
|
||||
} catch (ParserException ex) {
|
||||
template.LogError (ex.Message, ex.Location);
|
||||
}
|
||||
return template;
|
||||
}
|
||||
|
||||
public void Parse (ITextTemplatingEngineHost host, Tokeniser tokeniser)
|
||||
{
|
||||
Parse (host, tokeniser, true);
|
||||
}
|
||||
|
||||
public void ParseWithoutIncludes (Tokeniser tokeniser)
|
||||
{
|
||||
Parse (null, tokeniser, false);
|
||||
}
|
||||
|
||||
void Parse (ITextTemplatingEngineHost host, Tokeniser tokeniser, bool parseIncludes)
|
||||
{
|
||||
bool skip = false;
|
||||
while ((skip || tokeniser.Advance ()) && tokeniser.State != State.EOF) {
|
||||
skip = false;
|
||||
ISegment seg = null;
|
||||
switch (tokeniser.State) {
|
||||
case State.Block:
|
||||
if (!String.IsNullOrEmpty (tokeniser.Value))
|
||||
seg = new TemplateSegment (SegmentType.Block, tokeniser.Value, tokeniser.Location);
|
||||
break;
|
||||
case State.Content:
|
||||
if (!String.IsNullOrEmpty (tokeniser.Value))
|
||||
seg = new TemplateSegment (SegmentType.Content, tokeniser.Value, tokeniser.Location);
|
||||
break;
|
||||
case State.Expression:
|
||||
if (!String.IsNullOrEmpty (tokeniser.Value))
|
||||
seg = new TemplateSegment (SegmentType.Expression, tokeniser.Value, tokeniser.Location);
|
||||
break;
|
||||
case State.Helper:
|
||||
if (!String.IsNullOrEmpty (tokeniser.Value))
|
||||
seg = new TemplateSegment (SegmentType.Helper, tokeniser.Value, tokeniser.Location);
|
||||
break;
|
||||
case State.Directive:
|
||||
Directive directive = null;
|
||||
string attName = null;
|
||||
while (!skip && tokeniser.Advance ()) {
|
||||
switch (tokeniser.State) {
|
||||
case State.DirectiveName:
|
||||
if (directive == null) {
|
||||
directive = new Directive (tokeniser.Value.ToLower (), tokeniser.Location);
|
||||
directive.TagStartLocation = tokeniser.TagStartLocation;
|
||||
if (!parseIncludes || directive.Name != "include")
|
||||
segments.Add (directive);
|
||||
} else
|
||||
attName = tokeniser.Value;
|
||||
break;
|
||||
case State.DirectiveValue:
|
||||
if (attName != null && directive != null)
|
||||
directive.Attributes[attName.ToLower ()] = tokeniser.Value;
|
||||
else
|
||||
LogError ("Directive value without name", tokeniser.Location);
|
||||
attName = null;
|
||||
break;
|
||||
case State.Directive:
|
||||
if (directive != null)
|
||||
directive.EndLocation = tokeniser.TagEndLocation;
|
||||
break;
|
||||
default:
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (parseIncludes && directive.Name == "include")
|
||||
Import (host, directive, Path.GetDirectoryName (tokeniser.Location.FileName));
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException ();
|
||||
}
|
||||
if (seg != null) {
|
||||
seg.TagStartLocation = tokeniser.TagStartLocation;
|
||||
seg.EndLocation = tokeniser.TagEndLocation;
|
||||
segments.Add (seg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Import (ITextTemplatingEngineHost host, Directive includeDirective, string relativeToDirectory)
|
||||
{
|
||||
string fileName;
|
||||
if (includeDirective.Attributes.Count > 1 || !includeDirective.Attributes.TryGetValue ("file", out fileName)) {
|
||||
LogError ("Unexpected attributes in include directive", includeDirective.StartLocation);
|
||||
return;
|
||||
}
|
||||
|
||||
//try to resolve path relative to the file that included it
|
||||
if (!Path.IsPathRooted (fileName)) {
|
||||
string possible = Path.Combine (relativeToDirectory, fileName);
|
||||
if (File.Exists (possible))
|
||||
fileName = possible;
|
||||
}
|
||||
|
||||
string content, resolvedName;
|
||||
if (host.LoadIncludeText (fileName, out content, out resolvedName))
|
||||
Parse (host, new Tokeniser (resolvedName, content), true);
|
||||
else
|
||||
LogError ("Could not resolve include file '" + fileName + "'.", includeDirective.StartLocation);
|
||||
}
|
||||
|
||||
void LogError (string message, Location location, bool isWarning)
|
||||
{
|
||||
CompilerError err = new CompilerError ();
|
||||
err.ErrorText = message;
|
||||
if (location.FileName != null) {
|
||||
err.Line = location.Line;
|
||||
err.Column = location.Column;
|
||||
err.FileName = location.FileName ?? string.Empty;
|
||||
} else {
|
||||
err.FileName = rootFileName ?? string.Empty;
|
||||
}
|
||||
err.IsWarning = isWarning;
|
||||
errors.Add (err);
|
||||
}
|
||||
|
||||
public void LogError (string message)
|
||||
{
|
||||
LogError (message, Location.Empty, false);
|
||||
}
|
||||
|
||||
public void LogWarning (string message)
|
||||
{
|
||||
LogError (message, Location.Empty, true);
|
||||
}
|
||||
|
||||
public void LogError (string message, Location location)
|
||||
{
|
||||
LogError (message, location, false);
|
||||
}
|
||||
|
||||
public void LogWarning (string message, Location location)
|
||||
{
|
||||
LogError (message, location, true);
|
||||
}
|
||||
}
|
||||
|
||||
public interface ISegment
|
||||
{
|
||||
Location StartLocation { get; }
|
||||
Location EndLocation { get; set; }
|
||||
Location TagStartLocation {get; set; }
|
||||
}
|
||||
|
||||
public class TemplateSegment : ISegment
|
||||
{
|
||||
public TemplateSegment (SegmentType type, string text, Location start)
|
||||
{
|
||||
this.Type = type;
|
||||
this.StartLocation = start;
|
||||
this.Text = text;
|
||||
}
|
||||
|
||||
public SegmentType Type { get; private set; }
|
||||
public string Text { get; private set; }
|
||||
public Location TagStartLocation { get; set; }
|
||||
public Location StartLocation { get; private set; }
|
||||
public Location EndLocation { get; set; }
|
||||
}
|
||||
|
||||
public class Directive : ISegment
|
||||
{
|
||||
public Directive (string name, Location start)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Attributes = new Dictionary<string, string> ();
|
||||
this.StartLocation = start;
|
||||
}
|
||||
|
||||
public string Name { get; private set; }
|
||||
public Dictionary<string,string> Attributes { get; private set; }
|
||||
public Location TagStartLocation { get; set; }
|
||||
public Location StartLocation { get; private set; }
|
||||
public Location EndLocation { get; set; }
|
||||
|
||||
public string Extract (string key)
|
||||
{
|
||||
string value;
|
||||
if (!Attributes.TryGetValue (key, out value))
|
||||
return null;
|
||||
Attributes.Remove (key);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public enum SegmentType
|
||||
{
|
||||
Block,
|
||||
Expression,
|
||||
Content,
|
||||
Helper
|
||||
}
|
||||
|
||||
public struct Location : IEquatable<Location>
|
||||
{
|
||||
public Location (string fileName, int line, int column) : this()
|
||||
{
|
||||
FileName = fileName;
|
||||
Column = column;
|
||||
Line = line;
|
||||
}
|
||||
|
||||
public int Line { get; private set; }
|
||||
public int Column { get; private set; }
|
||||
public string FileName { get; private set; }
|
||||
|
||||
public static Location Empty {
|
||||
get { return new Location (null, -1, -1); }
|
||||
}
|
||||
|
||||
public Location AddLine ()
|
||||
{
|
||||
return new Location (this.FileName, this.Line + 1, 1);
|
||||
}
|
||||
|
||||
public Location AddCol ()
|
||||
{
|
||||
return AddCols (1);
|
||||
}
|
||||
|
||||
public Location AddCols (int number)
|
||||
{
|
||||
return new Location (this.FileName, this.Line, this.Column + number);
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return string.Format("[{0} ({1},{2})]", FileName, Line, Column);
|
||||
}
|
||||
|
||||
public bool Equals (Location other)
|
||||
{
|
||||
return other.Line == Line && other.Column == Column && other.FileName == FileName;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,373 +0,0 @@
|
|||
//
|
||||
// TemplatingHost.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
public class TemplateGenerator : MarshalByRefObject, ITextTemplatingEngineHost
|
||||
{
|
||||
//re-usable
|
||||
TemplatingEngine engine;
|
||||
|
||||
//per-run variables
|
||||
string inputFile, outputFile;
|
||||
Encoding encoding;
|
||||
|
||||
//host fields
|
||||
CompilerErrorCollection errors = new CompilerErrorCollection ();
|
||||
List<string> refs = new List<string> ();
|
||||
List<string> imports = new List<string> ();
|
||||
List<string> includePaths = new List<string> ();
|
||||
List<string> referencePaths = new List<string> ();
|
||||
|
||||
//host properties for consumers to access
|
||||
public CompilerErrorCollection Errors { get { return errors; } }
|
||||
public List<string> Refs { get { return refs; } }
|
||||
public List<string> Imports { get { return imports; } }
|
||||
public List<string> IncludePaths { get { return includePaths; } }
|
||||
public List<string> ReferencePaths { get { return referencePaths; } }
|
||||
public string OutputFile { get { return outputFile; } }
|
||||
|
||||
public TemplateGenerator ()
|
||||
{
|
||||
Refs.Add (typeof (TextTransformation).Assembly.Location);
|
||||
Refs.Add (typeof(System.Uri).Assembly.Location);
|
||||
Imports.Add ("System");
|
||||
}
|
||||
|
||||
public CompiledTemplate CompileTemplate (string content)
|
||||
{
|
||||
if (String.IsNullOrEmpty (content))
|
||||
throw new ArgumentNullException ("content");
|
||||
|
||||
errors.Clear ();
|
||||
encoding = Encoding.UTF8;
|
||||
|
||||
return Engine.CompileTemplate (content, this);
|
||||
}
|
||||
|
||||
protected TemplatingEngine Engine {
|
||||
get {
|
||||
if (engine == null)
|
||||
engine = new TemplatingEngine ();
|
||||
return engine;
|
||||
}
|
||||
}
|
||||
|
||||
public bool ProcessTemplate (string inputFile, string outputFile)
|
||||
{
|
||||
if (String.IsNullOrEmpty (inputFile))
|
||||
throw new ArgumentNullException ("inputFile");
|
||||
if (String.IsNullOrEmpty (outputFile))
|
||||
throw new ArgumentNullException ("outputFile");
|
||||
|
||||
string content;
|
||||
try {
|
||||
content = File.ReadAllText (inputFile);
|
||||
} catch (IOException ex) {
|
||||
errors.Clear ();
|
||||
AddError ("Could not read input file '" + inputFile + "':\n" + ex.ToString ());
|
||||
return false;
|
||||
}
|
||||
|
||||
string output;
|
||||
ProcessTemplate (inputFile, content, ref outputFile, out output);
|
||||
|
||||
try {
|
||||
if (!errors.HasErrors)
|
||||
File.WriteAllText (outputFile, output, encoding);
|
||||
} catch (IOException ex) {
|
||||
AddError ("Could not write output file '" + outputFile + "':\n" + ex.ToString ());
|
||||
}
|
||||
|
||||
return !errors.HasErrors;
|
||||
}
|
||||
|
||||
public bool ProcessTemplate (string inputFileName, string inputContent, ref string outputFileName, out string outputContent)
|
||||
{
|
||||
errors.Clear ();
|
||||
encoding = Encoding.UTF8;
|
||||
|
||||
this.outputFile = outputFileName;
|
||||
this.inputFile = inputFileName;
|
||||
outputContent = Engine.ProcessTemplate (inputContent, this);
|
||||
outputFileName = this.outputFile;
|
||||
|
||||
return !errors.HasErrors;
|
||||
}
|
||||
|
||||
public bool PreprocessTemplate (string inputFile, string className, string classNamespace,
|
||||
string outputFile, System.Text.Encoding encoding, out string language, out string[] references)
|
||||
{
|
||||
language = null;
|
||||
references = null;
|
||||
|
||||
if (string.IsNullOrEmpty (inputFile))
|
||||
throw new ArgumentNullException ("inputFile");
|
||||
if (string.IsNullOrEmpty (outputFile))
|
||||
throw new ArgumentNullException ("outputFile");
|
||||
|
||||
string content;
|
||||
try {
|
||||
content = File.ReadAllText (inputFile);
|
||||
} catch (IOException ex) {
|
||||
errors.Clear ();
|
||||
AddError ("Could not read input file '" + inputFile + "':\n" + ex.ToString ());
|
||||
return false;
|
||||
}
|
||||
|
||||
string output;
|
||||
PreprocessTemplate (inputFile, className, classNamespace, content, out language, out references, out output);
|
||||
|
||||
try {
|
||||
if (!errors.HasErrors)
|
||||
File.WriteAllText (outputFile, output, encoding);
|
||||
} catch (IOException ex) {
|
||||
AddError ("Could not write output file '" + outputFile + "':\n" + ex.ToString ());
|
||||
}
|
||||
|
||||
return !errors.HasErrors;
|
||||
}
|
||||
|
||||
public bool PreprocessTemplate (string inputFileName, string className, string classNamespace, string inputContent,
|
||||
out string language, out string[] references, out string outputContent)
|
||||
{
|
||||
errors.Clear ();
|
||||
encoding = Encoding.UTF8;
|
||||
|
||||
this.inputFile = inputFileName;
|
||||
outputContent = Engine.PreprocessTemplate (inputContent, this, className, classNamespace, out language, out references);
|
||||
|
||||
return !errors.HasErrors;
|
||||
}
|
||||
|
||||
CompilerError AddError (string error)
|
||||
{
|
||||
CompilerError err = new CompilerError ();
|
||||
err.ErrorText = error;
|
||||
Errors.Add (err);
|
||||
return err;
|
||||
}
|
||||
|
||||
#region Virtual members
|
||||
|
||||
public virtual object GetHostOption (string optionName)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual AppDomain ProvideTemplatingAppDomain (string content)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
//FIXME: implement
|
||||
protected virtual string ResolveAssemblyReference (string assemblyReference)
|
||||
{
|
||||
//foreach (string referencePath in ReferencePaths) {
|
||||
//
|
||||
//}
|
||||
return assemblyReference;
|
||||
}
|
||||
|
||||
protected virtual string ResolveParameterValue (string directiveId, string processorName, string parameterName)
|
||||
{
|
||||
var key = new ParameterKey (processorName, directiveId, parameterName);
|
||||
string value;
|
||||
if (parameters.TryGetValue (key, out value))
|
||||
return value;
|
||||
if (processorName != null || directiveId != null)
|
||||
return ResolveParameterValue (null, null, parameterName);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected virtual Type ResolveDirectiveProcessor (string processorName)
|
||||
{
|
||||
KeyValuePair<string,string> value;
|
||||
if (!directiveProcessors.TryGetValue (processorName, out value))
|
||||
throw new Exception (string.Format ("No directive processor registered as '{0}'", processorName));
|
||||
var asmPath = ResolveAssemblyReference (value.Value);
|
||||
if (asmPath == null)
|
||||
throw new Exception (string.Format ("Could not resolve assembly '{0}' for directive processor '{1}'", value.Value, processorName));
|
||||
var asm = System.Reflection.Assembly.LoadFrom (asmPath);
|
||||
return asm.GetType (value.Key, true);
|
||||
}
|
||||
|
||||
protected virtual string ResolvePath (string path)
|
||||
{
|
||||
path = System.Environment.ExpandEnvironmentVariables (path);
|
||||
if (Path.IsPathRooted (path))
|
||||
return path;
|
||||
var dir = Path.GetDirectoryName (inputFile);
|
||||
var test = Path.Combine (dir, path);
|
||||
if (File.Exists (test))
|
||||
return test;
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
Dictionary<ParameterKey,string> parameters = new Dictionary<ParameterKey, string> ();
|
||||
Dictionary<string,KeyValuePair<string,string>> directiveProcessors = new Dictionary<string, KeyValuePair<string,string>> ();
|
||||
|
||||
public void AddDirectiveProcessor (string name, string klass, string assembly)
|
||||
{
|
||||
directiveProcessors.Add (name, new KeyValuePair<string,string> (klass,assembly));
|
||||
}
|
||||
|
||||
public void AddParameter (string processorName, string directiveName, string parameterName, string value)
|
||||
{
|
||||
parameters.Add (new ParameterKey (processorName, directiveName, parameterName), value);
|
||||
}
|
||||
|
||||
protected virtual bool LoadIncludeText (string requestFileName, out string content, out string location)
|
||||
{
|
||||
content = "";
|
||||
location = ResolvePath (requestFileName);
|
||||
|
||||
if (location == null) {
|
||||
foreach (string path in includePaths) {
|
||||
string f = Path.Combine (path, requestFileName);
|
||||
if (File.Exists (f)) {
|
||||
location = f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (location == null)
|
||||
return false;
|
||||
|
||||
try {
|
||||
content = File.ReadAllText (location);
|
||||
return true;
|
||||
} catch (IOException ex) {
|
||||
AddError ("Could not read included file '" + location + "':\n" + ex.ToString ());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
#region Explicit ITextTemplatingEngineHost implementation
|
||||
|
||||
bool ITextTemplatingEngineHost.LoadIncludeText (string requestFileName, out string content, out string location)
|
||||
{
|
||||
return LoadIncludeText (requestFileName, out content, out location);
|
||||
}
|
||||
|
||||
void ITextTemplatingEngineHost.LogErrors (CompilerErrorCollection errors)
|
||||
{
|
||||
this.errors.AddRange (errors);
|
||||
}
|
||||
|
||||
string ITextTemplatingEngineHost.ResolveAssemblyReference (string assemblyReference)
|
||||
{
|
||||
return ResolveAssemblyReference (assemblyReference);
|
||||
}
|
||||
|
||||
string ITextTemplatingEngineHost.ResolveParameterValue (string directiveId, string processorName, string parameterName)
|
||||
{
|
||||
return ResolveParameterValue (directiveId, processorName, parameterName);
|
||||
}
|
||||
|
||||
Type ITextTemplatingEngineHost.ResolveDirectiveProcessor (string processorName)
|
||||
{
|
||||
return ResolveDirectiveProcessor (processorName);
|
||||
}
|
||||
|
||||
string ITextTemplatingEngineHost.ResolvePath (string path)
|
||||
{
|
||||
return ResolvePath (path);
|
||||
}
|
||||
|
||||
void ITextTemplatingEngineHost.SetFileExtension (string extension)
|
||||
{
|
||||
extension = extension.TrimStart ('.');
|
||||
if (Path.HasExtension (outputFile)) {
|
||||
outputFile = Path.ChangeExtension (outputFile, extension);
|
||||
} else {
|
||||
outputFile = outputFile + "." + extension;
|
||||
}
|
||||
}
|
||||
|
||||
void ITextTemplatingEngineHost.SetOutputEncoding (System.Text.Encoding encoding, bool fromOutputDirective)
|
||||
{
|
||||
this.encoding = encoding;
|
||||
}
|
||||
|
||||
IList<string> ITextTemplatingEngineHost.StandardAssemblyReferences {
|
||||
get { return refs; }
|
||||
}
|
||||
|
||||
IList<string> ITextTemplatingEngineHost.StandardImports {
|
||||
get { return imports; }
|
||||
}
|
||||
|
||||
string ITextTemplatingEngineHost.TemplateFile {
|
||||
get { return inputFile; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
struct ParameterKey : IEquatable<ParameterKey>
|
||||
{
|
||||
public ParameterKey (string processorName, string directiveName, string parameterName)
|
||||
{
|
||||
this.processorName = processorName ?? "";
|
||||
this.directiveName = directiveName ?? "";
|
||||
this.parameterName = parameterName ?? "";
|
||||
unchecked {
|
||||
hashCode = this.processorName.GetHashCode ()
|
||||
^ this.directiveName.GetHashCode ()
|
||||
^ this.parameterName.GetHashCode ();
|
||||
}
|
||||
}
|
||||
|
||||
string processorName, directiveName, parameterName;
|
||||
int hashCode;
|
||||
|
||||
public override bool Equals (object obj)
|
||||
{
|
||||
return obj != null && obj is ParameterKey && Equals ((ParameterKey)obj);
|
||||
}
|
||||
|
||||
public bool Equals (ParameterKey other)
|
||||
{
|
||||
return processorName == other.processorName && directiveName == other.directiveName && parameterName == other.parameterName;
|
||||
}
|
||||
|
||||
public override int GetHashCode ()
|
||||
{
|
||||
return hashCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
//
|
||||
// TemplateSettings.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
|
||||
public class TemplateSettings
|
||||
{
|
||||
public TemplateSettings ()
|
||||
{
|
||||
Imports = new HashSet<string> ();
|
||||
Assemblies = new HashSet<string> ();
|
||||
CustomDirectives = new List<CustomDirective> ();
|
||||
DirectiveProcessors = new Dictionary<string, DirectiveProcessor> ();
|
||||
}
|
||||
|
||||
public bool HostSpecific { get; set; }
|
||||
public bool Debug { get; set; }
|
||||
public string Inherits { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Namespace { get; set; }
|
||||
public HashSet<string> Imports { get; private set; }
|
||||
public HashSet<string> Assemblies { get; private set; }
|
||||
public System.CodeDom.Compiler.CodeDomProvider Provider { get; set; }
|
||||
public string Language { get; set; }
|
||||
public string CompilerOptions { get; set; }
|
||||
public Encoding Encoding { get; set; }
|
||||
public string Extension { get; set; }
|
||||
public System.Globalization.CultureInfo Culture { get; set; }
|
||||
public List<CustomDirective> CustomDirectives { get; private set; }
|
||||
public Dictionary<string,DirectiveProcessor> DirectiveProcessors { get; private set; }
|
||||
public bool IncludePreprocessingHelpers { get; set; }
|
||||
public bool IsPreprocessed { get; set; }
|
||||
}
|
||||
|
||||
public class CustomDirective
|
||||
{
|
||||
public CustomDirective (string processorName, Directive directive)
|
||||
{
|
||||
this.ProcessorName = processorName;
|
||||
this.Directive = directive;
|
||||
}
|
||||
|
||||
public string ProcessorName { get; set; }
|
||||
public Directive Directive { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,963 +0,0 @@
|
|||
//
|
||||
// Engine.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using System.CodeDom;
|
||||
using System.CodeDom.Compiler;
|
||||
using Microsoft.CSharp;
|
||||
using Microsoft.VisualStudio.TextTemplating;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
public class TemplatingEngine : MarshalByRefObject, Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngine
|
||||
{
|
||||
public string ProcessTemplate (string content, ITextTemplatingEngineHost host)
|
||||
{
|
||||
var tpl = CompileTemplate (content, host);
|
||||
try {
|
||||
if (tpl != null)
|
||||
return tpl.Process ();
|
||||
return null;
|
||||
} finally {
|
||||
if (tpl != null)
|
||||
tpl.Dispose ();
|
||||
}
|
||||
}
|
||||
|
||||
public string PreprocessTemplate (string content, ITextTemplatingEngineHost host, string className,
|
||||
string classNamespace, out string language, out string[] references)
|
||||
{
|
||||
if (content == null)
|
||||
throw new ArgumentNullException ("content");
|
||||
if (host == null)
|
||||
throw new ArgumentNullException ("host");
|
||||
if (className == null)
|
||||
throw new ArgumentNullException ("className");
|
||||
if (classNamespace == null)
|
||||
throw new ArgumentNullException ("classNamespace");
|
||||
|
||||
language = null;
|
||||
references = null;
|
||||
|
||||
var pt = ParsedTemplate.FromText (content, host);
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
var settings = GetSettings (host, pt);
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
settings.Name = className;
|
||||
settings.Namespace = classNamespace;
|
||||
settings.IncludePreprocessingHelpers = string.IsNullOrEmpty (settings.Inherits);
|
||||
settings.IsPreprocessed = true;
|
||||
language = settings.Language;
|
||||
|
||||
var ccu = GenerateCompileUnit (host, content, pt, settings);
|
||||
references = ProcessReferences (host, pt, settings).ToArray ();
|
||||
|
||||
host.LogErrors (pt.Errors);
|
||||
if (pt.Errors.HasErrors) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var options = new CodeGeneratorOptions ();
|
||||
using (var sw = new StringWriter ()) {
|
||||
settings.Provider.GenerateCodeFromCompileUnit (ccu, sw, options);
|
||||
return sw.ToString ();
|
||||
};
|
||||
}
|
||||
|
||||
public CompiledTemplate CompileTemplate (string content, ITextTemplatingEngineHost host)
|
||||
{
|
||||
if (content == null)
|
||||
throw new ArgumentNullException ("content");
|
||||
if (host == null)
|
||||
throw new ArgumentNullException ("host");
|
||||
|
||||
var pt = ParsedTemplate.FromText (content, host);
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
var settings = GetSettings (host, pt);
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty (settings.Extension)) {
|
||||
host.SetFileExtension (settings.Extension);
|
||||
}
|
||||
if (settings.Encoding != null) {
|
||||
//FIXME: when is this called with false?
|
||||
host.SetOutputEncoding (settings.Encoding, true);
|
||||
}
|
||||
|
||||
var ccu = GenerateCompileUnit (host, content, pt, settings);
|
||||
var references = ProcessReferences (host, pt, settings);
|
||||
if (pt.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
var results = GenerateCode (host, references, settings, ccu);
|
||||
if (results.Errors.HasErrors) {
|
||||
host.LogErrors (pt.Errors);
|
||||
host.LogErrors (results.Errors);
|
||||
return null;
|
||||
}
|
||||
|
||||
var templateClassFullName = settings.Namespace + "." + settings.Name;
|
||||
var domain = host.ProvideTemplatingAppDomain (content);
|
||||
if (domain != null) {
|
||||
var type = typeof (CompiledTemplate);
|
||||
var obj = domain.CreateInstanceAndUnwrap (type.Assembly.FullName, type.FullName, false,
|
||||
BindingFlags.CreateInstance, null,
|
||||
new object[] { host, results, templateClassFullName, settings.Culture, references.ToArray () },
|
||||
null, null);
|
||||
return (CompiledTemplate) obj;
|
||||
} else {
|
||||
return new CompiledTemplate (host, results, templateClassFullName, settings.Culture, references.ToArray ());
|
||||
}
|
||||
}
|
||||
|
||||
static CompilerResults GenerateCode (ITextTemplatingEngineHost host, IEnumerable<string> references, TemplateSettings settings, CodeCompileUnit ccu)
|
||||
{
|
||||
var pars = new CompilerParameters () {
|
||||
GenerateExecutable = false,
|
||||
CompilerOptions = settings.CompilerOptions,
|
||||
IncludeDebugInformation = settings.Debug,
|
||||
GenerateInMemory = false,
|
||||
};
|
||||
|
||||
foreach (var r in references)
|
||||
pars.ReferencedAssemblies.Add (r);
|
||||
|
||||
if (settings.Debug)
|
||||
pars.TempFiles.KeepFiles = true;
|
||||
|
||||
return settings.Provider.CompileAssemblyFromDom (pars, ccu);
|
||||
}
|
||||
|
||||
static HashSet<string> ProcessReferences (ITextTemplatingEngineHost host, ParsedTemplate pt, TemplateSettings settings)
|
||||
{
|
||||
var resolved = new HashSet<string> ();
|
||||
|
||||
foreach (string assem in settings.Assemblies.Union (host.StandardAssemblyReferences)) {
|
||||
if (resolved.Contains (assem))
|
||||
continue;
|
||||
|
||||
string resolvedAssem = host.ResolveAssemblyReference (assem);
|
||||
if (!string.IsNullOrEmpty (resolvedAssem)) {
|
||||
resolved.Add (resolvedAssem);
|
||||
} else {
|
||||
pt.LogError ("Could not resolve assembly reference '" + assem + "'");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return resolved;
|
||||
}
|
||||
|
||||
public static TemplateSettings GetSettings (ITextTemplatingEngineHost host, ParsedTemplate pt)
|
||||
{
|
||||
var settings = new TemplateSettings ();
|
||||
|
||||
foreach (Directive dt in pt.Directives) {
|
||||
switch (dt.Name) {
|
||||
case "template":
|
||||
string val = dt.Extract ("language");
|
||||
if (val != null)
|
||||
settings.Language = val;
|
||||
val = dt.Extract ("debug");
|
||||
if (val != null)
|
||||
settings.Debug = string.Compare (val, "true", StringComparison.OrdinalIgnoreCase) == 0;
|
||||
val = dt.Extract ("inherits");
|
||||
if (val != null)
|
||||
settings.Inherits = val;
|
||||
val = dt.Extract ("culture");
|
||||
if (val != null) {
|
||||
System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.GetCultureInfo (val);
|
||||
if (culture == null)
|
||||
pt.LogWarning ("Could not find culture '" + val + "'", dt.StartLocation);
|
||||
else
|
||||
settings.Culture = culture;
|
||||
}
|
||||
val = dt.Extract ("hostspecific");
|
||||
if (val != null) {
|
||||
settings.HostSpecific = string.Compare (val, "true", StringComparison.OrdinalIgnoreCase) == 0;
|
||||
}
|
||||
val = dt.Extract ("CompilerOptions");
|
||||
if (val != null) {
|
||||
settings.CompilerOptions = val;
|
||||
}
|
||||
break;
|
||||
|
||||
case "assembly":
|
||||
string name = dt.Extract ("name");
|
||||
if (name == null)
|
||||
pt.LogError ("Missing name attribute in assembly directive", dt.StartLocation);
|
||||
else
|
||||
settings.Assemblies.Add (name);
|
||||
break;
|
||||
|
||||
case "import":
|
||||
string namespac = dt.Extract ("namespace");
|
||||
if (namespac == null)
|
||||
pt.LogError ("Missing namespace attribute in import directive", dt.StartLocation);
|
||||
else
|
||||
settings.Imports.Add (namespac);
|
||||
break;
|
||||
|
||||
case "output":
|
||||
settings.Extension = dt.Extract ("extension");
|
||||
string encoding = dt.Extract ("encoding");
|
||||
if (encoding != null)
|
||||
settings.Encoding = Encoding.GetEncoding (encoding);
|
||||
break;
|
||||
|
||||
case "include":
|
||||
throw new InvalidOperationException ("Include is handled in the parser");
|
||||
|
||||
case "parameter":
|
||||
AddDirective (settings, host, "ParameterDirectiveProcessor", dt);
|
||||
continue;
|
||||
|
||||
default:
|
||||
string processorName = dt.Extract ("Processor");
|
||||
if (processorName == null)
|
||||
throw new InvalidOperationException ("Custom directive '" + dt.Name + "' does not specify a processor");
|
||||
|
||||
AddDirective (settings, host, processorName, dt);
|
||||
continue;
|
||||
}
|
||||
ComplainExcessAttributes (dt, pt);
|
||||
}
|
||||
|
||||
//initialize the custom processors
|
||||
foreach (var kv in settings.DirectiveProcessors) {
|
||||
kv.Value.Initialize (host);
|
||||
var hs = kv.Value as IRecognizeHostSpecific;
|
||||
if (hs == null)
|
||||
continue;
|
||||
if (hs.RequiresProcessingRunIsHostSpecific && !settings.HostSpecific) {
|
||||
settings.HostSpecific = true;
|
||||
pt.LogWarning ("Directive processor '" + kv.Key + "' requires hostspecific=true, forcing on.");
|
||||
}
|
||||
hs.SetProcessingRunIsHostSpecific (settings.HostSpecific);
|
||||
}
|
||||
|
||||
if (settings.Name == null)
|
||||
settings.Name = string.Format ("GeneratedTextTransformation{0:x}", new System.Random ().Next ());
|
||||
if (settings.Namespace == null)
|
||||
settings.Namespace = typeof (TextTransformation).Namespace;
|
||||
|
||||
//resolve the CodeDOM provider
|
||||
if (String.IsNullOrEmpty (settings.Language)) {
|
||||
pt.LogError ("No language was specified for the template");
|
||||
return settings;
|
||||
}
|
||||
|
||||
if (settings.Language == "C#v3.5") {
|
||||
Dictionary<string, string> providerOptions = new Dictionary<string, string> ();
|
||||
providerOptions.Add ("CompilerVersion", "v3.5");
|
||||
settings.Provider = new CSharpCodeProvider (providerOptions);
|
||||
}
|
||||
else {
|
||||
settings.Provider = CodeDomProvider.CreateProvider (settings.Language);
|
||||
}
|
||||
|
||||
if (settings.Provider == null) {
|
||||
pt.LogError ("A provider could not be found for the language '" + settings.Language + "'");
|
||||
return settings;
|
||||
}
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
public static string IndentSnippetText (string text, string indent)
|
||||
{
|
||||
var builder = new StringBuilder (text.Length);
|
||||
builder.Append (indent);
|
||||
int lastNewline = 0;
|
||||
for (int i = 0; i < text.Length - 1; i++) {
|
||||
char c = text[i];
|
||||
if (c == '\r') {
|
||||
if (text[i + 1] == '\n') {
|
||||
i++;
|
||||
if (i == text.Length - 1)
|
||||
break;
|
||||
}
|
||||
} else if (c != '\n') {
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
int len = i - lastNewline;
|
||||
if (len > 0) {
|
||||
builder.Append (text, lastNewline, i - lastNewline);
|
||||
}
|
||||
builder.Append (indent);
|
||||
lastNewline = i;
|
||||
}
|
||||
if (lastNewline > 0)
|
||||
builder.Append (text, lastNewline, text.Length - lastNewline);
|
||||
else
|
||||
builder.Append (text);
|
||||
return builder.ToString ();
|
||||
}
|
||||
|
||||
static void AddDirective (TemplateSettings settings, ITextTemplatingEngineHost host, string processorName, Directive directive)
|
||||
{
|
||||
DirectiveProcessor processor;
|
||||
if (!settings.DirectiveProcessors.TryGetValue (processorName, out processor)) {
|
||||
switch (processorName) {
|
||||
case "ParameterDirectiveProcessor":
|
||||
processor = new ParameterDirectiveProcessor ();
|
||||
break;
|
||||
default:
|
||||
Type processorType = host.ResolveDirectiveProcessor (processorName);
|
||||
processor = (DirectiveProcessor) Activator.CreateInstance (processorType);
|
||||
break;
|
||||
}
|
||||
if (!processor.IsDirectiveSupported (directive.Name))
|
||||
throw new InvalidOperationException ("Directive processor '" + processorName + "' does not support directive '" + directive.Name + "'");
|
||||
|
||||
settings.DirectiveProcessors [processorName] = processor;
|
||||
}
|
||||
settings.CustomDirectives.Add (new CustomDirective (processorName, directive));
|
||||
}
|
||||
|
||||
static bool ComplainExcessAttributes (Directive dt, ParsedTemplate pt)
|
||||
{
|
||||
if (dt.Attributes.Count == 0)
|
||||
return false;
|
||||
StringBuilder sb = new StringBuilder ("Unknown attributes ");
|
||||
bool first = true;
|
||||
foreach (string key in dt.Attributes.Keys) {
|
||||
if (!first) {
|
||||
sb.Append (", ");
|
||||
} else {
|
||||
first = false;
|
||||
}
|
||||
sb.Append (key);
|
||||
}
|
||||
sb.Append (" found in ");
|
||||
sb.Append (dt.Name);
|
||||
sb.Append (" directive.");
|
||||
pt.LogWarning (sb.ToString (), dt.StartLocation);
|
||||
return false;
|
||||
}
|
||||
|
||||
static void ProcessDirectives (ITextTemplatingEngineHost host, string content, ParsedTemplate pt, TemplateSettings settings)
|
||||
{
|
||||
foreach (var processor in settings.DirectiveProcessors.Values) {
|
||||
processor.StartProcessingRun (settings.Provider, content, pt.Errors);
|
||||
}
|
||||
|
||||
foreach (var dt in settings.CustomDirectives) {
|
||||
var processor = settings.DirectiveProcessors[dt.ProcessorName];
|
||||
|
||||
if (processor is RequiresProvidesDirectiveProcessor)
|
||||
throw new NotImplementedException ("RequiresProvidesDirectiveProcessor");
|
||||
|
||||
processor.ProcessDirective (dt.Directive.Name, dt.Directive.Attributes);
|
||||
}
|
||||
|
||||
foreach (var processor in settings.DirectiveProcessors.Values) {
|
||||
processor.FinishProcessingRun ();
|
||||
|
||||
var imports = processor.GetImportsForProcessingRun ();
|
||||
if (imports != null)
|
||||
settings.Imports.UnionWith (imports);
|
||||
var references = processor.GetReferencesForProcessingRun ();
|
||||
if (references != null)
|
||||
settings.Assemblies.UnionWith (references);
|
||||
}
|
||||
}
|
||||
|
||||
public static CodeCompileUnit GenerateCompileUnit (ITextTemplatingEngineHost host, string content, ParsedTemplate pt, TemplateSettings settings)
|
||||
{
|
||||
ProcessDirectives (host, content, pt, settings);
|
||||
|
||||
//prep the compile unit
|
||||
var ccu = new CodeCompileUnit ();
|
||||
var namespac = new CodeNamespace (settings.Namespace);
|
||||
ccu.Namespaces.Add (namespac);
|
||||
|
||||
foreach (string ns in settings.Imports.Union (host.StandardImports))
|
||||
namespac.Imports.Add (new CodeNamespaceImport (ns));
|
||||
|
||||
//prep the type
|
||||
var type = new CodeTypeDeclaration (settings.Name);
|
||||
type.IsPartial = true;
|
||||
if (!string.IsNullOrEmpty (settings.Inherits)) {
|
||||
type.BaseTypes.Add (new CodeTypeReference (settings.Inherits));
|
||||
} else if (!settings.IncludePreprocessingHelpers) {
|
||||
type.BaseTypes.Add (TypeRef<TextTransformation> ());
|
||||
} else {
|
||||
type.BaseTypes.Add (new CodeTypeReference (settings.Name + "Base"));
|
||||
}
|
||||
namespac.Types.Add (type);
|
||||
|
||||
//prep the transform method
|
||||
var transformMeth = new CodeMemberMethod () {
|
||||
Name = "TransformText",
|
||||
ReturnType = new CodeTypeReference (typeof (String)),
|
||||
Attributes = MemberAttributes.Public,
|
||||
};
|
||||
if (!settings.IncludePreprocessingHelpers)
|
||||
transformMeth.Attributes |= MemberAttributes.Override;
|
||||
|
||||
transformMeth.Statements.Add (new CodeAssignStatement (
|
||||
new CodePropertyReferenceExpression (new CodeThisReferenceExpression (), "GenerationEnvironment"),
|
||||
new CodePrimitiveExpression (null)));
|
||||
|
||||
CodeExpression toStringHelper;
|
||||
if (settings.IsPreprocessed) {
|
||||
toStringHelper = new CodePropertyReferenceExpression (new CodeThisReferenceExpression (), "ToStringHelper");
|
||||
} else {
|
||||
toStringHelper = new CodeTypeReferenceExpression (
|
||||
new CodeTypeReference (typeof (ToStringHelper), CodeTypeReferenceOptions.GlobalReference));
|
||||
}
|
||||
|
||||
//method references that will need to be used multiple times
|
||||
var writeMeth = new CodeMethodReferenceExpression (new CodeThisReferenceExpression (), "Write");
|
||||
var toStringMeth = new CodeMethodReferenceExpression (toStringHelper, "ToStringWithCulture");
|
||||
bool helperMode = false;
|
||||
|
||||
//build the code from the segments
|
||||
foreach (TemplateSegment seg in pt.Content) {
|
||||
CodeStatement st = null;
|
||||
var location = new CodeLinePragma (seg.StartLocation.FileName ?? host.TemplateFile, seg.StartLocation.Line);
|
||||
switch (seg.Type) {
|
||||
case SegmentType.Block:
|
||||
if (helperMode)
|
||||
//TODO: are blocks permitted after helpers?
|
||||
throw new ParserException ("Blocks are not permitted after helpers", seg.StartLocation);
|
||||
st = new CodeSnippetStatement (seg.Text);
|
||||
break;
|
||||
case SegmentType.Expression:
|
||||
st = new CodeExpressionStatement (
|
||||
new CodeMethodInvokeExpression (writeMeth,
|
||||
new CodeMethodInvokeExpression (toStringMeth, new CodeSnippetExpression (seg.Text))));
|
||||
break;
|
||||
case SegmentType.Content:
|
||||
st = new CodeExpressionStatement (new CodeMethodInvokeExpression (writeMeth, new CodePrimitiveExpression (seg.Text)));
|
||||
break;
|
||||
case SegmentType.Helper:
|
||||
type.Members.Add (new CodeSnippetTypeMember (seg.Text) { LinePragma = location });
|
||||
helperMode = true;
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException ();
|
||||
}
|
||||
if (st != null) {
|
||||
if (helperMode) {
|
||||
//convert the statement into a snippet member and attach it to the top level type
|
||||
//TODO: is there a way to do this for languages that use indentation for blocks, e.g. python?
|
||||
using (var writer = new StringWriter ()) {
|
||||
settings.Provider.GenerateCodeFromStatement (st, writer, null);
|
||||
type.Members.Add (new CodeSnippetTypeMember (writer.ToString ()) { LinePragma = location });
|
||||
}
|
||||
} else {
|
||||
st.LinePragma = location;
|
||||
transformMeth.Statements.Add (st);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//complete the transform method
|
||||
transformMeth.Statements.Add (new CodeMethodReturnStatement (
|
||||
new CodeMethodInvokeExpression (
|
||||
new CodePropertyReferenceExpression (
|
||||
new CodeThisReferenceExpression (),
|
||||
"GenerationEnvironment"),
|
||||
"ToString")));
|
||||
type.Members.Add (transformMeth);
|
||||
|
||||
//class code from processors
|
||||
foreach (var processor in settings.DirectiveProcessors.Values) {
|
||||
string classCode = processor.GetClassCodeForProcessingRun ();
|
||||
if (classCode != null)
|
||||
type.Members.Add (new CodeSnippetTypeMember (classCode));
|
||||
}
|
||||
|
||||
//generate the Host property if needed
|
||||
if (settings.HostSpecific) {
|
||||
GenerateHostProperty (type, settings);
|
||||
}
|
||||
|
||||
GenerateInitializationMethod (type, settings);
|
||||
|
||||
if (settings.IncludePreprocessingHelpers) {
|
||||
var baseClass = new CodeTypeDeclaration (settings.Name + "Base");
|
||||
GenerateProcessingHelpers (baseClass, settings);
|
||||
AddToStringHelper (baseClass, settings);
|
||||
namespac.Types.Add (baseClass);
|
||||
}
|
||||
return ccu;
|
||||
}
|
||||
|
||||
static void GenerateHostProperty (CodeTypeDeclaration type, TemplateSettings settings)
|
||||
{
|
||||
var hostField = new CodeMemberField (TypeRef<ITextTemplatingEngineHost> (), "hostValue");
|
||||
hostField.Attributes = (hostField.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Private;
|
||||
type.Members.Add (hostField);
|
||||
|
||||
var hostProp = GenerateGetterSetterProperty ("Host", hostField);
|
||||
hostProp.Attributes = MemberAttributes.Public | MemberAttributes.Final;
|
||||
type.Members.Add (hostProp);
|
||||
}
|
||||
|
||||
static void GenerateInitializationMethod (CodeTypeDeclaration type, TemplateSettings settings)
|
||||
{
|
||||
//initialization method
|
||||
var initializeMeth = new CodeMemberMethod () {
|
||||
Name = "Initialize",
|
||||
ReturnType = new CodeTypeReference (typeof (void), CodeTypeReferenceOptions.GlobalReference),
|
||||
Attributes = MemberAttributes.Family
|
||||
};
|
||||
if (!settings.IncludePreprocessingHelpers)
|
||||
initializeMeth.Attributes |= MemberAttributes.Override;
|
||||
|
||||
//pre-init code from processors
|
||||
foreach (var processor in settings.DirectiveProcessors.Values) {
|
||||
string code = processor.GetPreInitializationCodeForProcessingRun ();
|
||||
if (code != null)
|
||||
initializeMeth.Statements.Add (new CodeSnippetStatement (code));
|
||||
}
|
||||
|
||||
//base call
|
||||
if (!settings.IncludePreprocessingHelpers) {
|
||||
initializeMeth.Statements.Add (
|
||||
new CodeMethodInvokeExpression (
|
||||
new CodeMethodReferenceExpression (
|
||||
new CodeBaseReferenceExpression (),
|
||||
"Initialize")));
|
||||
}
|
||||
|
||||
//post-init code from processors
|
||||
foreach (var processor in settings.DirectiveProcessors.Values) {
|
||||
string code = processor.GetPostInitializationCodeForProcessingRun ();
|
||||
if (code != null)
|
||||
initializeMeth.Statements.Add (new CodeSnippetStatement (code));
|
||||
}
|
||||
|
||||
type.Members.Add (initializeMeth);
|
||||
}
|
||||
|
||||
static void GenerateProcessingHelpers (CodeTypeDeclaration type, TemplateSettings settings)
|
||||
{
|
||||
var thisRef = new CodeThisReferenceExpression ();
|
||||
var sbTypeRef = TypeRef<StringBuilder> ();
|
||||
|
||||
var sessionField = PrivateField (TypeRef<IDictionary<string,object>> (), "session");
|
||||
var sessionProp = GenerateGetterSetterProperty ("Session", sessionField);
|
||||
sessionProp.Attributes = MemberAttributes.Public;
|
||||
|
||||
var builderField = PrivateField (sbTypeRef, "builder");
|
||||
var builderFieldRef = new CodeFieldReferenceExpression (thisRef, builderField.Name);
|
||||
|
||||
var generationEnvironmentProp = GenerateGetterSetterProperty ("GenerationEnvironment", builderField);
|
||||
AddPropertyGetterInitializationIfFieldIsNull (generationEnvironmentProp, builderFieldRef, TypeRef<StringBuilder> ());
|
||||
|
||||
type.Members.Add (builderField);
|
||||
type.Members.Add (sessionField);
|
||||
type.Members.Add (sessionProp);
|
||||
type.Members.Add (generationEnvironmentProp);
|
||||
|
||||
AddErrorHelpers (type, settings);
|
||||
AddIndentHelpers (type, settings);
|
||||
AddWriteHelpers (type, settings);
|
||||
}
|
||||
|
||||
static void AddPropertyGetterInitializationIfFieldIsNull (CodeMemberProperty property, CodeFieldReferenceExpression fieldRef, CodeTypeReference typeRef)
|
||||
{
|
||||
var fieldInit = FieldInitializationIfNull (fieldRef, typeRef);
|
||||
property.GetStatements.Insert (0, fieldInit);
|
||||
}
|
||||
|
||||
static CodeConditionStatement FieldInitializationIfNull (CodeFieldReferenceExpression fieldRef, CodeTypeReference typeRef)
|
||||
{
|
||||
return new CodeConditionStatement (
|
||||
new CodeBinaryOperatorExpression (fieldRef,
|
||||
CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression (null)),
|
||||
new CodeAssignStatement (fieldRef, new CodeObjectCreateExpression (typeRef)));
|
||||
}
|
||||
|
||||
static void AddErrorHelpers (CodeTypeDeclaration type, TemplateSettings settings)
|
||||
{
|
||||
var cecTypeRef = TypeRef<CompilerErrorCollection> ();
|
||||
var thisRef = new CodeThisReferenceExpression ();
|
||||
var stringTypeRef = TypeRef<string> ();
|
||||
var nullPrim = new CodePrimitiveExpression (null);
|
||||
var minusOnePrim = new CodePrimitiveExpression (-1);
|
||||
|
||||
var errorsField = PrivateField (cecTypeRef, "errors");
|
||||
var errorsFieldRef = new CodeFieldReferenceExpression (thisRef, errorsField.Name);
|
||||
|
||||
var errorsProp = GenerateGetterProperty ("Errors", errorsField);
|
||||
errorsProp.Attributes = MemberAttributes.Family | MemberAttributes.Final;
|
||||
errorsProp.GetStatements.Insert (0, FieldInitializationIfNull (errorsFieldRef, TypeRef<CompilerErrorCollection>()));
|
||||
|
||||
var errorsPropRef = new CodePropertyReferenceExpression (new CodeThisReferenceExpression (), "Errors");
|
||||
|
||||
var compilerErrorTypeRef = TypeRef<CompilerError> ();
|
||||
var errorMeth = new CodeMemberMethod () {
|
||||
Name = "Error",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
errorMeth.Parameters.Add (new CodeParameterDeclarationExpression (stringTypeRef, "message"));
|
||||
errorMeth.Statements.Add (new CodeMethodInvokeExpression (errorsPropRef, "Add",
|
||||
new CodeObjectCreateExpression (compilerErrorTypeRef, nullPrim, minusOnePrim, minusOnePrim, nullPrim,
|
||||
new CodeArgumentReferenceExpression ("message"))));
|
||||
|
||||
var warningMeth = new CodeMemberMethod () {
|
||||
Name = "Warning",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
warningMeth.Parameters.Add (new CodeParameterDeclarationExpression (stringTypeRef, "message"));
|
||||
warningMeth.Statements.Add (new CodeVariableDeclarationStatement (compilerErrorTypeRef, "val",
|
||||
new CodeObjectCreateExpression (compilerErrorTypeRef, nullPrim, minusOnePrim, minusOnePrim, nullPrim,
|
||||
new CodeArgumentReferenceExpression ("message"))));
|
||||
warningMeth.Statements.Add (new CodeAssignStatement (new CodePropertyReferenceExpression (
|
||||
new CodeVariableReferenceExpression ("val"), "IsWarning"), new CodePrimitiveExpression (true)));
|
||||
warningMeth.Statements.Add (new CodeMethodInvokeExpression (errorsPropRef, "Add",
|
||||
new CodeVariableReferenceExpression ("val")));
|
||||
|
||||
type.Members.Add (errorsField);
|
||||
type.Members.Add (errorMeth);
|
||||
type.Members.Add (warningMeth);
|
||||
type.Members.Add (errorsProp);
|
||||
}
|
||||
|
||||
static void AddIndentHelpers (CodeTypeDeclaration type, TemplateSettings settings)
|
||||
{
|
||||
var stringTypeRef = TypeRef<string> ();
|
||||
var thisRef = new CodeThisReferenceExpression ();
|
||||
var zeroPrim = new CodePrimitiveExpression (0);
|
||||
var stringEmptyRef = new CodeFieldReferenceExpression (new CodeTypeReferenceExpression (stringTypeRef), "Empty");
|
||||
var intTypeRef = TypeRef<int> ();
|
||||
var stackIntTypeRef = TypeRef<Stack<int>> ();
|
||||
|
||||
var indentsField = PrivateField (stackIntTypeRef, "indents");
|
||||
var indentsFieldRef = new CodeFieldReferenceExpression (thisRef, indentsField.Name);
|
||||
|
||||
var indentsProp = GenerateGetterProperty ("Indents", indentsField);
|
||||
indentsProp.Attributes = MemberAttributes.Private;
|
||||
AddPropertyGetterInitializationIfFieldIsNull (indentsProp, indentsFieldRef, TypeRef<Stack<int>> ());
|
||||
|
||||
var indentsPropRef = new CodeFieldReferenceExpression (thisRef, indentsProp.Name);
|
||||
|
||||
var currentIndentField = PrivateField (stringTypeRef, "currentIndent");
|
||||
currentIndentField.InitExpression = stringEmptyRef;
|
||||
var currentIndentFieldRef = new CodeFieldReferenceExpression (thisRef, currentIndentField.Name);
|
||||
|
||||
var popIndentMeth = new CodeMemberMethod () {
|
||||
Name = "PopIndent",
|
||||
ReturnType = stringTypeRef,
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
popIndentMeth.Statements.Add (new CodeConditionStatement (
|
||||
new CodeBinaryOperatorExpression (new CodePropertyReferenceExpression (indentsPropRef, "Count"),
|
||||
CodeBinaryOperatorType.ValueEquality, zeroPrim),
|
||||
new CodeMethodReturnStatement (stringEmptyRef)));
|
||||
popIndentMeth.Statements.Add (new CodeVariableDeclarationStatement (intTypeRef, "lastPos",
|
||||
new CodeBinaryOperatorExpression (
|
||||
new CodePropertyReferenceExpression (currentIndentFieldRef, "Length"),
|
||||
CodeBinaryOperatorType.Subtract,
|
||||
new CodeMethodInvokeExpression (indentsPropRef, "Pop"))));
|
||||
popIndentMeth.Statements.Add (new CodeVariableDeclarationStatement (stringTypeRef, "last",
|
||||
new CodeMethodInvokeExpression (currentIndentFieldRef, "Substring", new CodeVariableReferenceExpression ("lastPos"))));
|
||||
popIndentMeth.Statements.Add (new CodeAssignStatement (currentIndentFieldRef,
|
||||
new CodeMethodInvokeExpression (currentIndentFieldRef, "Substring", zeroPrim, new CodeVariableReferenceExpression ("lastPos"))));
|
||||
popIndentMeth.Statements.Add (new CodeMethodReturnStatement (new CodeVariableReferenceExpression ("last")));
|
||||
|
||||
var pushIndentMeth = new CodeMemberMethod () {
|
||||
Name = "PushIndent",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
pushIndentMeth.Parameters.Add (new CodeParameterDeclarationExpression (stringTypeRef, "indent"));
|
||||
pushIndentMeth.Statements.Add (new CodeMethodInvokeExpression (indentsPropRef, "Push",
|
||||
new CodePropertyReferenceExpression (new CodeArgumentReferenceExpression ("indent"), "Length")));
|
||||
pushIndentMeth.Statements.Add (new CodeAssignStatement (currentIndentFieldRef,
|
||||
new CodeBinaryOperatorExpression (currentIndentFieldRef, CodeBinaryOperatorType.Add, new CodeArgumentReferenceExpression ("indent"))));
|
||||
|
||||
var clearIndentMeth = new CodeMemberMethod () {
|
||||
Name = "ClearIndent",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
clearIndentMeth.Statements.Add (new CodeAssignStatement (currentIndentFieldRef, stringEmptyRef));
|
||||
clearIndentMeth.Statements.Add (new CodeMethodInvokeExpression (indentsPropRef, "Clear"));
|
||||
|
||||
var currentIndentProp = GenerateGetterProperty ("CurrentIndent", currentIndentField);
|
||||
type.Members.Add (currentIndentField);
|
||||
type.Members.Add (indentsField);
|
||||
type.Members.Add (popIndentMeth);
|
||||
type.Members.Add (pushIndentMeth);
|
||||
type.Members.Add (clearIndentMeth);
|
||||
type.Members.Add (currentIndentProp);
|
||||
type.Members.Add (indentsProp);
|
||||
}
|
||||
|
||||
static void AddWriteHelpers (CodeTypeDeclaration type, TemplateSettings settings)
|
||||
{
|
||||
var stringTypeRef = TypeRef<string> ();
|
||||
var thisRef = new CodeThisReferenceExpression ();
|
||||
var genEnvPropRef = new CodePropertyReferenceExpression (thisRef, "GenerationEnvironment");
|
||||
var currentIndentFieldRef = new CodeFieldReferenceExpression (thisRef, "currentIndent");
|
||||
|
||||
var textToAppendParam = new CodeParameterDeclarationExpression (stringTypeRef, "textToAppend");
|
||||
var formatParam = new CodeParameterDeclarationExpression (stringTypeRef, "format");
|
||||
var argsParam = new CodeParameterDeclarationExpression (TypeRef<object[]> (), "args");
|
||||
argsParam.CustomAttributes.Add (new CodeAttributeDeclaration (TypeRef<System.ParamArrayAttribute> ()));
|
||||
|
||||
var textToAppendParamRef = new CodeArgumentReferenceExpression ("textToAppend");
|
||||
var formatParamRef = new CodeArgumentReferenceExpression ("format");
|
||||
var argsParamRef = new CodeArgumentReferenceExpression ("args");
|
||||
|
||||
var writeMeth = new CodeMemberMethod () {
|
||||
Name = "Write",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
writeMeth.Parameters.Add (textToAppendParam);
|
||||
writeMeth.Statements.Add (new CodeMethodInvokeExpression (genEnvPropRef, "Append", new CodeArgumentReferenceExpression ("textToAppend")));
|
||||
|
||||
var writeArgsMeth = new CodeMemberMethod () {
|
||||
Name = "Write",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
writeArgsMeth.Parameters.Add (formatParam);
|
||||
writeArgsMeth.Parameters.Add (argsParam);
|
||||
writeArgsMeth.Statements.Add (new CodeMethodInvokeExpression (genEnvPropRef, "AppendFormat", formatParamRef, argsParamRef));
|
||||
|
||||
var writeLineMeth = new CodeMemberMethod () {
|
||||
Name = "WriteLine",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
writeLineMeth.Parameters.Add (textToAppendParam);
|
||||
writeLineMeth.Statements.Add (new CodeMethodInvokeExpression (genEnvPropRef, "Append", currentIndentFieldRef));
|
||||
writeLineMeth.Statements.Add (new CodeMethodInvokeExpression (genEnvPropRef, "AppendLine", textToAppendParamRef));
|
||||
|
||||
var writeLineArgsMeth = new CodeMemberMethod () {
|
||||
Name = "WriteLine",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
};
|
||||
writeLineArgsMeth.Parameters.Add (formatParam);
|
||||
writeLineArgsMeth.Parameters.Add (argsParam);
|
||||
writeLineArgsMeth.Statements.Add (new CodeMethodInvokeExpression (genEnvPropRef, "Append", currentIndentFieldRef));
|
||||
writeLineArgsMeth.Statements.Add (new CodeMethodInvokeExpression (genEnvPropRef, "AppendFormat", formatParamRef, argsParamRef));
|
||||
writeLineArgsMeth.Statements.Add (new CodeMethodInvokeExpression (genEnvPropRef, "AppendLine"));
|
||||
|
||||
type.Members.Add (writeMeth);
|
||||
type.Members.Add (writeArgsMeth);
|
||||
type.Members.Add (writeLineMeth);
|
||||
type.Members.Add (writeLineArgsMeth);
|
||||
}
|
||||
|
||||
static void AddToStringHelper (CodeTypeDeclaration type, TemplateSettings settings)
|
||||
{
|
||||
var helperCls = new CodeTypeDeclaration ("ToStringInstanceHelper") {
|
||||
IsClass = true,
|
||||
TypeAttributes = System.Reflection.TypeAttributes.NestedPublic,
|
||||
};
|
||||
|
||||
var formatProviderField = PrivateField (TypeRef<IFormatProvider> (), "formatProvider");
|
||||
formatProviderField.InitExpression = new CodePropertyReferenceExpression (
|
||||
new CodeTypeReferenceExpression (TypeRef<System.Globalization.CultureInfo> ()), "InvariantCulture");
|
||||
var formatProviderFieldRef = new CodeFieldReferenceExpression (new CodeThisReferenceExpression (), formatProviderField.Name);
|
||||
|
||||
var formatProviderProp = GenerateGetterSetterProperty ("FormatProvider", formatProviderField);
|
||||
AddSetterNullCheck (formatProviderProp, formatProviderFieldRef);
|
||||
|
||||
helperCls.Members.Add (formatProviderField);
|
||||
helperCls.Members.Add (formatProviderProp);
|
||||
|
||||
var meth = new CodeMemberMethod () {
|
||||
Name = "ToStringWithCulture",
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
ReturnType = TypeRef<string> (),
|
||||
};
|
||||
meth.Parameters.Add (new CodeParameterDeclarationExpression (TypeRef<object> (), "objectToConvert"));
|
||||
var paramRef = new CodeArgumentReferenceExpression ("objectToConvert");
|
||||
|
||||
meth.Statements.Add (NullCheck (paramRef, paramRef.ParameterName));
|
||||
|
||||
var typeLocal = new CodeVariableDeclarationStatement (TypeRef<Type> (), "type", new CodeMethodInvokeExpression (paramRef, "GetType"));
|
||||
var typeLocalRef = new CodeVariableReferenceExpression (typeLocal.Name);
|
||||
meth.Statements.Add (typeLocal);
|
||||
|
||||
var iConvertibleTypeLocal = new CodeVariableDeclarationStatement (TypeRef<Type> (), "iConvertibleType",
|
||||
new CodeTypeOfExpression (TypeRef<IConvertible> ()));
|
||||
var iConvertibleTypeLocalRef = new CodeVariableReferenceExpression (iConvertibleTypeLocal.Name);
|
||||
meth.Statements.Add (iConvertibleTypeLocal);
|
||||
|
||||
meth.Statements.Add (new CodeConditionStatement (
|
||||
new CodeMethodInvokeExpression (iConvertibleTypeLocalRef, "IsAssignableFrom", typeLocalRef),
|
||||
new CodeMethodReturnStatement (new CodeMethodInvokeExpression (
|
||||
new CodeCastExpression (TypeRef<IConvertible> (), paramRef), "ToString", formatProviderFieldRef))));
|
||||
|
||||
var methInfoLocal = new CodeVariableDeclarationStatement (TypeRef<MethodInfo> (), "methInfo",
|
||||
new CodeMethodInvokeExpression (typeLocalRef, "GetMethod",
|
||||
new CodePrimitiveExpression ("ToString"),
|
||||
new CodeArrayCreateExpression (TypeRef<Type> (), new CodeExpression [] { iConvertibleTypeLocalRef })));
|
||||
meth.Statements.Add (methInfoLocal);
|
||||
var methInfoLocalRef = new CodeVariableReferenceExpression (methInfoLocal.Name);
|
||||
meth.Statements.Add (new CodeConditionStatement (NotNull (methInfoLocalRef),
|
||||
new CodeMethodReturnStatement (new CodeCastExpression (TypeRef<string> (),
|
||||
new CodeMethodInvokeExpression (
|
||||
methInfoLocalRef, "Invoke", paramRef,
|
||||
new CodeArrayCreateExpression (TypeRef<object> (), new CodeExpression [] { formatProviderFieldRef } ))))));
|
||||
|
||||
meth.Statements.Add (new CodeMethodReturnStatement (new CodeMethodInvokeExpression (paramRef, "ToString")));
|
||||
|
||||
helperCls.Members.Add (meth);
|
||||
|
||||
|
||||
var helperFieldName = settings.Provider.CreateValidIdentifier ("_toStringHelper");
|
||||
var helperField = PrivateField (new CodeTypeReference (helperCls.Name), helperFieldName);
|
||||
helperField.InitExpression = new CodeObjectCreateExpression (helperField.Type);
|
||||
type.Members.Add (helperField);
|
||||
type.Members.Add (GenerateGetterProperty ("ToStringHelper", helperField));
|
||||
type.Members.Add (helperCls);
|
||||
}
|
||||
|
||||
#region CodeDom helpers
|
||||
|
||||
static CodeTypeReference TypeRef<T> ()
|
||||
{
|
||||
return new CodeTypeReference (typeof (T), CodeTypeReferenceOptions.GlobalReference);
|
||||
}
|
||||
|
||||
static CodeMemberProperty GenerateGetterSetterProperty (string propertyName, CodeMemberField field)
|
||||
{
|
||||
var prop = new CodeMemberProperty () {
|
||||
Name = propertyName,
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
Type = field.Type
|
||||
};
|
||||
var fieldRef = new CodeFieldReferenceExpression (new CodeThisReferenceExpression (), field.Name);
|
||||
AddGetter (prop, fieldRef);
|
||||
AddSetter (prop, fieldRef);
|
||||
return prop;
|
||||
}
|
||||
|
||||
static CodeMemberProperty GenerateGetterProperty (string propertyName, CodeMemberField field)
|
||||
{
|
||||
var prop = new CodeMemberProperty () {
|
||||
Name = propertyName,
|
||||
Attributes = MemberAttributes.Public | MemberAttributes.Final,
|
||||
HasSet = false,
|
||||
Type = field.Type
|
||||
};
|
||||
var fieldRef = new CodeFieldReferenceExpression (new CodeThisReferenceExpression (), field.Name);
|
||||
AddGetter (prop, fieldRef);
|
||||
return prop;
|
||||
}
|
||||
|
||||
static void AddSetter (CodeMemberProperty property, CodeFieldReferenceExpression fieldRef)
|
||||
{
|
||||
property.HasSet = true;
|
||||
property.SetStatements.Add (new CodeAssignStatement (fieldRef, new CodePropertySetValueReferenceExpression ()));
|
||||
}
|
||||
|
||||
static void AddGetter (CodeMemberProperty property, CodeFieldReferenceExpression fieldRef)
|
||||
{
|
||||
property.HasGet = true;
|
||||
property.GetStatements.Add (new CodeMethodReturnStatement (fieldRef));
|
||||
}
|
||||
|
||||
static void MakeGetterLazy (CodeMemberProperty property, CodeFieldReferenceExpression fieldRef, CodeExpression initExpression)
|
||||
{
|
||||
property.GetStatements.Insert (0, new CodeConditionStatement (
|
||||
NotNull (fieldRef),
|
||||
new CodeAssignStatement (fieldRef, initExpression))
|
||||
);
|
||||
}
|
||||
|
||||
static void AddSetterNullCheck (CodeMemberProperty property, CodeFieldReferenceExpression fieldRef)
|
||||
{
|
||||
property.SetStatements.Insert (0, NullCheck (fieldRef, fieldRef.FieldName));
|
||||
}
|
||||
|
||||
static CodeStatement NullCheck (CodeExpression expr, string exceptionMessage)
|
||||
{
|
||||
return new CodeConditionStatement (
|
||||
IsNull (expr),
|
||||
new CodeThrowExceptionStatement (new CodeObjectCreateExpression (
|
||||
new CodeTypeReference (typeof (ArgumentNullException), CodeTypeReferenceOptions.GlobalReference),
|
||||
new CodePrimitiveExpression (exceptionMessage)))
|
||||
);
|
||||
}
|
||||
|
||||
static CodeBinaryOperatorExpression NotNull (CodeExpression reference)
|
||||
{
|
||||
return new CodeBinaryOperatorExpression (reference, CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression (null));
|
||||
}
|
||||
|
||||
static CodeBinaryOperatorExpression IsNull (CodeExpression reference)
|
||||
{
|
||||
return new CodeBinaryOperatorExpression (reference, CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression (null));
|
||||
}
|
||||
|
||||
static CodeBinaryOperatorExpression IsFalse (CodeExpression expr)
|
||||
{
|
||||
return new CodeBinaryOperatorExpression (expr, CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression (false));
|
||||
}
|
||||
|
||||
static CodeBinaryOperatorExpression BooleanAnd (CodeExpression expr1, CodeExpression expr2)
|
||||
{
|
||||
return new CodeBinaryOperatorExpression (expr1, CodeBinaryOperatorType.BooleanAnd, expr2);
|
||||
}
|
||||
|
||||
static CodeStatement ArgNullCheck (CodeExpression value, params CodeExpression[] argNullExcArgs)
|
||||
{
|
||||
return new CodeConditionStatement (
|
||||
new CodeBinaryOperatorExpression (value,
|
||||
CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression (null)),
|
||||
new CodeThrowExceptionStatement (new CodeObjectCreateExpression (typeof (ArgumentNullException), argNullExcArgs)));
|
||||
}
|
||||
|
||||
static CodeMemberField PrivateField (CodeTypeReference typeRef, string name)
|
||||
{
|
||||
return new CodeMemberField (typeRef, name) {
|
||||
Attributes = MemberAttributes.Private
|
||||
};
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,295 +0,0 @@
|
|||
//
|
||||
// Tokeniser.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
|
||||
public class Tokeniser
|
||||
{
|
||||
string content;
|
||||
int position = 0;
|
||||
string value;
|
||||
State nextState = State.Content;
|
||||
Location nextStateLocation;
|
||||
Location nextStateTagStartLocation;
|
||||
|
||||
public Tokeniser (string fileName, string content)
|
||||
{
|
||||
State = State.Content;
|
||||
this.content = content;
|
||||
this.Location = this.nextStateLocation = this.nextStateTagStartLocation = new Location (fileName, 1, 1);
|
||||
}
|
||||
|
||||
public bool Advance ()
|
||||
{
|
||||
value = null;
|
||||
State = nextState;
|
||||
Location = nextStateLocation;
|
||||
TagStartLocation = nextStateTagStartLocation;
|
||||
if (nextState == State.EOF)
|
||||
return false;
|
||||
nextState = GetNextStateAndCurrentValue ();
|
||||
return true;
|
||||
}
|
||||
|
||||
State GetNextStateAndCurrentValue ()
|
||||
{
|
||||
switch (State) {
|
||||
case State.Block:
|
||||
case State.Expression:
|
||||
case State.Helper:
|
||||
return GetBlockEnd ();
|
||||
|
||||
case State.Directive:
|
||||
return NextStateInDirective ();
|
||||
|
||||
case State.Content:
|
||||
return NextStateInContent ();
|
||||
|
||||
case State.DirectiveName:
|
||||
return GetDirectiveName ();
|
||||
|
||||
case State.DirectiveValue:
|
||||
return GetDirectiveValue ();
|
||||
|
||||
default:
|
||||
throw new InvalidOperationException ("Unexpected state '" + State.ToString () + "'");
|
||||
}
|
||||
}
|
||||
|
||||
State GetBlockEnd ()
|
||||
{
|
||||
int start = position;
|
||||
for (; position < content.Length; position++) {
|
||||
char c = content[position];
|
||||
nextStateTagStartLocation = nextStateLocation;
|
||||
nextStateLocation = nextStateLocation.AddCol ();
|
||||
if (c == '\r') {
|
||||
if (position + 1 < content.Length && content[position + 1] == '\n')
|
||||
position++;
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
} else if (c == '\n') {
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
} else if (c =='>' && content[position-1] == '#' && content[position-2] != '\\') {
|
||||
value = content.Substring (start, position - start - 1);
|
||||
position++;
|
||||
TagEndLocation = nextStateLocation;
|
||||
|
||||
//skip newlines directly after blocks, unless they're expressions
|
||||
if (State != State.Expression && (position += IsNewLine()) > 0) {
|
||||
nextStateLocation = nextStateLocation.AddLine ();
|
||||
}
|
||||
return State.Content;
|
||||
}
|
||||
}
|
||||
throw new ParserException ("Unexpected end of file.", nextStateLocation);
|
||||
}
|
||||
|
||||
State GetDirectiveName ()
|
||||
{
|
||||
int start = position;
|
||||
for (; position < content.Length; position++) {
|
||||
char c = content[position];
|
||||
if (!Char.IsLetterOrDigit (c)) {
|
||||
value = content.Substring (start, position - start);
|
||||
return State.Directive;
|
||||
} else {
|
||||
nextStateLocation = nextStateLocation.AddCol ();
|
||||
}
|
||||
}
|
||||
throw new ParserException ("Unexpected end of file.", nextStateLocation);
|
||||
}
|
||||
|
||||
State GetDirectiveValue ()
|
||||
{
|
||||
int start = position;
|
||||
int delimiter = '\0';
|
||||
for (; position < content.Length; position++) {
|
||||
char c = content[position];
|
||||
nextStateLocation = nextStateLocation.AddCol ();
|
||||
if (c == '\r') {
|
||||
if (position + 1 < content.Length && content[position + 1] == '\n')
|
||||
position++;
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
} else if (c == '\n')
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
if (delimiter == '\0') {
|
||||
if (c == '\'' || c == '"') {
|
||||
start = position;
|
||||
delimiter = c;
|
||||
} else if (!Char.IsWhiteSpace (c)) {
|
||||
throw new ParserException ("Unexpected character '" + c + "'. Expecting attribute value.", nextStateLocation);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (c == delimiter) {
|
||||
value = content.Substring (start + 1, position - start - 1);
|
||||
position++;
|
||||
return State.Directive;
|
||||
}
|
||||
}
|
||||
throw new ParserException ("Unexpected end of file.", nextStateLocation);;
|
||||
}
|
||||
|
||||
State NextStateInContent ()
|
||||
{
|
||||
int start = position;
|
||||
for (; position < content.Length; position++) {
|
||||
char c = content[position];
|
||||
nextStateTagStartLocation = nextStateLocation;
|
||||
nextStateLocation = nextStateLocation.AddCol ();
|
||||
if (c == '\r') {
|
||||
if (position + 1 < content.Length && content[position + 1] == '\n')
|
||||
position++;
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
} else if (c == '\n') {
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
} else if (c =='<' && position + 2 < content.Length && content[position+1] == '#') {
|
||||
TagEndLocation = nextStateLocation;
|
||||
char type = content[position+2];
|
||||
if (type == '@') {
|
||||
nextStateLocation = nextStateLocation.AddCols (2);
|
||||
value = content.Substring (start, position - start);
|
||||
position += 3;
|
||||
return State.Directive;
|
||||
} else if (type == '=') {
|
||||
nextStateLocation = nextStateLocation.AddCols (2);
|
||||
value = content.Substring (start, position - start);
|
||||
position += 3;
|
||||
return State.Expression;
|
||||
} else if (type == '+') {
|
||||
nextStateLocation = nextStateLocation.AddCols (2);
|
||||
value = content.Substring (start, position - start);
|
||||
position += 3;
|
||||
return State.Helper;
|
||||
} else {
|
||||
value = content.Substring (start, position - start);
|
||||
nextStateLocation = nextStateLocation.AddCol ();
|
||||
position += 2;
|
||||
return State.Block;
|
||||
}
|
||||
}
|
||||
}
|
||||
//EOF is only valid when we're in content
|
||||
value = content.Substring (start);
|
||||
return State.EOF;
|
||||
}
|
||||
|
||||
int IsNewLine() {
|
||||
int found = 0;
|
||||
|
||||
if (position < content.Length && content[position] == '\r') {
|
||||
found++;
|
||||
}
|
||||
if (position+found < content.Length && content[position+found] == '\n') {
|
||||
found++;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
State NextStateInDirective () {
|
||||
for (; position < content.Length; position++) {
|
||||
char c = content[position];
|
||||
if (c == '\r') {
|
||||
if (position + 1 < content.Length && content[position + 1] == '\n')
|
||||
position++;
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
} else if (c == '\n') {
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
} else if (Char.IsLetter (c)) {
|
||||
return State.DirectiveName;
|
||||
} else if (c == '=') {
|
||||
nextStateLocation = nextStateLocation.AddCol ();
|
||||
position++;
|
||||
return State.DirectiveValue;
|
||||
} else if (c == '#' && position + 1 < content.Length && content[position+1] == '>') {
|
||||
position+=2;
|
||||
TagEndLocation = nextStateLocation.AddCols (2);
|
||||
nextStateLocation = nextStateLocation.AddCols (3);
|
||||
|
||||
//skip newlines directly after directives
|
||||
if ((position += IsNewLine()) > 0) {
|
||||
nextStateLocation = nextStateLocation.AddLine();
|
||||
}
|
||||
|
||||
return State.Content;
|
||||
} else if (!Char.IsWhiteSpace (c)) {
|
||||
throw new ParserException ("Directive ended unexpectedly with character '" + c + "'", nextStateLocation);
|
||||
} else {
|
||||
nextStateLocation = nextStateLocation.AddCol ();
|
||||
}
|
||||
}
|
||||
throw new ParserException ("Unexpected end of file.", nextStateLocation);
|
||||
}
|
||||
|
||||
public State State {
|
||||
get; private set;
|
||||
}
|
||||
|
||||
public int Position {
|
||||
get { return position; }
|
||||
}
|
||||
|
||||
public string Content {
|
||||
get { return content; }
|
||||
}
|
||||
|
||||
public string Value {
|
||||
get { return value; }
|
||||
}
|
||||
|
||||
public Location Location { get; private set; }
|
||||
public Location TagStartLocation { get; private set; }
|
||||
public Location TagEndLocation { get; private set; }
|
||||
}
|
||||
|
||||
public enum State
|
||||
{
|
||||
Content = 0,
|
||||
Directive,
|
||||
Expression,
|
||||
Block,
|
||||
Helper,
|
||||
DirectiveName,
|
||||
DirectiveValue,
|
||||
Name,
|
||||
EOF
|
||||
}
|
||||
|
||||
public class ParserException : Exception
|
||||
{
|
||||
public ParserException (string message, Location location) : base (message)
|
||||
{
|
||||
Location = location;
|
||||
}
|
||||
|
||||
public Location Location { get; private set; }
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
TextTemplating
|
||||
==============
|
||||
|
||||
This is the TextTemplating tool inluded in MonoDevelop.
|
||||
The original location of these files is
|
||||
https://github.com/mono/monodevelop/tree/master/main/src/addins/TextTemplating
|
||||
|
||||
Building on Windows
|
||||
-------------------
|
||||
|
||||
Run build.cmd or open TextTemplating.sln in visual studio 2010
|
||||
Dotnet framework 4 must be installed.
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Licensed under the MIT/X11 license: http://www.opensource.org/licenses/mit-license.php
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.TextTemplating", "Mono.TextTemplating\Mono.TextTemplating.csproj", "{A2364D6A-00EF-417C-80A6-815726C70032}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextTransform", "TextTransform\TextTransform.csproj", "{D1D35409-C814-47F6-B038-B9B5BF0FE490}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A2364D6A-00EF-417C-80A6-815726C70032}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A2364D6A-00EF-417C-80A6-815726C70032}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A2364D6A-00EF-417C-80A6-815726C70032}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A2364D6A-00EF-417C-80A6-815726C70032}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1D35409-C814-47F6-B038-B9B5BF0FE490}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D1D35409-C814-47F6-B038-B9B5BF0FE490}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D1D35409-C814-47F6-B038-B9B5BF0FE490}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1D35409-C814-47F6-B038-B9B5BF0FE490}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,39 +0,0 @@
|
|||
//
|
||||
// AssemblyInfo.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
// Information about this assembly is defined by the following attributes.
|
||||
// Change them to the values specific to your project.
|
||||
|
||||
[assembly: AssemblyTitle("TextTransform")]
|
||||
[assembly: AssemblyDescription("T4 text transformation tool")]
|
||||
[assembly: AssemblyCompany("The Mono Project")]
|
||||
[assembly: AssemblyProduct("MonoDevelop")]
|
||||
[assembly: AssemblyCopyright("MIT/X11")]
|
||||
|
||||
//[assembly: AssemblyVersion("1.0.0.0")]
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
2009-08-12 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Makefile.am:
|
||||
* TextTransform.csproj: Include the ASP.NET MVC and
|
||||
TextTemplating addins in the main solution and build.
|
||||
|
||||
2009-03-13 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* TextTransform.csproj: Move output dir from ../bin to
|
||||
../build.
|
||||
|
||||
2009-03-05 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* TextTransform.csproj: Updated.
|
||||
|
||||
* TextTransform.cs: Complete the runner implementation.
|
||||
|
||||
2009-03-04 Michael Hutchinson <mhutchinson@novell.com>
|
||||
|
||||
* Options.cs:
|
||||
* AssemblyInfo.cs:
|
||||
* TextTransform.cs:
|
||||
* TextTransform.csproj: Stub out the command-line
|
||||
TextTransform tool.
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
ADDIN_BUILD = $(top_builddir)/build/AddIns/MonoDevelop.TextTemplating
|
||||
ASSEMBLY = $(ADDIN_BUILD)/TextTransform.exe
|
||||
|
||||
DEPS = $(top_builddir)/build/AddIns/MonoDevelop.TextTemplating/Mono.TextTemplating.dll
|
||||
|
||||
REFS = \
|
||||
-r:System \
|
||||
-r:System.Core
|
||||
|
||||
FILES = \
|
||||
AssemblyInfo.cs \
|
||||
Options.cs \
|
||||
TextTransform.cs
|
||||
|
||||
RES =
|
||||
|
||||
all: $(ASSEMBLY) $(ASSEMBLY).mdb $(DATA_FILE_BUILD)
|
||||
|
||||
$(ASSEMBLY): $(build_sources) $(build_resources) $(DEPS)
|
||||
mkdir -p $(ADDIN_BUILD)
|
||||
$(CSC) $(CSC_FLAGS) -debug -out:$@ -target:exe $(REFS) $(build_deps) \
|
||||
$(build_resources:%=/resource:%) $(build_sources)
|
||||
|
||||
$(ASSEMBLY).mdb: $(ASSEMBLY)
|
||||
|
||||
check: all
|
||||
|
||||
assemblydir = $(MD_ADDIN_DIR)/MonoDevelop.TextTemplating
|
||||
assembly_DATA = $(ASSEMBLY) $(ASSEMBLY).mdb
|
||||
|
||||
CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb
|
||||
EXTRA_DIST = $(FILES) $(RES)
|
||||
|
||||
include $(top_srcdir)/Makefile.include
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,174 +0,0 @@
|
|||
//
|
||||
// Main.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Hutchinson <mhutchinson@novell.com>
|
||||
//
|
||||
// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using Mono.Options;
|
||||
|
||||
namespace Mono.TextTemplating
|
||||
{
|
||||
class TextTransform
|
||||
{
|
||||
static OptionSet optionSet;
|
||||
const string name ="TextTransform.exe";
|
||||
|
||||
public static int Main (string[] args)
|
||||
{
|
||||
if (args.Length == 0) {
|
||||
ShowHelp (true);
|
||||
}
|
||||
|
||||
var generator = new TemplateGenerator ();
|
||||
string outputFile = null, inputFile = null;
|
||||
var directives = new List<string> ();
|
||||
var parameters = new List<string> ();
|
||||
var session = new Microsoft.VisualStudio.TextTemplating.TextTemplatingSession ();
|
||||
string preprocess = null;
|
||||
|
||||
optionSet = new OptionSet () {
|
||||
{ "o=|out=", "The name of the output {file}", s => outputFile = s },
|
||||
{ "r=", "Assemblies to reference", s => generator.Refs.Add (s) },
|
||||
{ "u=", "Namespaces to import <{0:namespace}>", s => generator.Imports.Add (s) },
|
||||
{ "I=", "Paths to search for included files", s => generator.IncludePaths.Add (s) },
|
||||
{ "P=", "Paths to search for referenced assemblies", s => generator.ReferencePaths.Add (s) },
|
||||
{ "dp=", "Directive processor (name!class!assembly)", s => directives.Add (s) },
|
||||
{ "a=", "Parameters ([processorName]![directiveName]!name!value)", s => parameters.Add (s) },
|
||||
{ "h|?|help", "Show help", s => ShowHelp (false) },
|
||||
// { "k=,", "Session {key},{value} pairs", (s, t) => session.Add (s, t) },
|
||||
{ "c=", "Preprocess the template into {0:class}", (s) => preprocess = s },
|
||||
};
|
||||
|
||||
var remainingArgs = optionSet.Parse (args);
|
||||
|
||||
if (string.IsNullOrEmpty (outputFile)) {
|
||||
Console.Error.WriteLine ("No output file specified.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (remainingArgs.Count != 1) {
|
||||
Console.Error.WriteLine ("No input file specified.");
|
||||
return -1;
|
||||
}
|
||||
inputFile = remainingArgs [0];
|
||||
|
||||
if (!File.Exists (inputFile)) {
|
||||
Console.Error.WriteLine ("Input file '{0}' does not exist.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
//FIXME: implement quoting and escaping for values
|
||||
foreach (var par in parameters) {
|
||||
var split = par.Split ('!');
|
||||
if (split.Length < 2) {
|
||||
Console.Error.WriteLine ("Parameter does not have enough values: {0}", par);
|
||||
return -1;
|
||||
}
|
||||
if (split.Length > 2) {
|
||||
Console.Error.WriteLine ("Parameter has too many values: {0}", par);
|
||||
return -1;
|
||||
}
|
||||
string name = split[split.Length-2];
|
||||
string val = split[split.Length-1];
|
||||
if (string.IsNullOrEmpty (name)) {
|
||||
Console.Error.WriteLine ("Parameter has no name: {0}", par);
|
||||
return -1;
|
||||
}
|
||||
generator.AddParameter (split.Length > 3? split[0] : null, split.Length > 2? split[split.Length-3] : null, name, val);
|
||||
}
|
||||
|
||||
foreach (var dir in directives) {
|
||||
var split = dir.Split ('!');
|
||||
if (split.Length != 3) {
|
||||
Console.Error.WriteLine ("Directive does not have correct number of values: {0}", dir);
|
||||
return -1;
|
||||
}
|
||||
foreach (var s in split) {
|
||||
if (string.IsNullOrEmpty (s)) {
|
||||
Console.Error.WriteLine ("Directive has missing value: {0}", dir);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
generator.AddDirectiveProcessor (split[0], split[1], split[2]);
|
||||
}
|
||||
|
||||
if (preprocess == null) {
|
||||
Console.Write ("Processing '{0}'... ", inputFile);
|
||||
generator.ProcessTemplate (inputFile, outputFile);
|
||||
if (generator.Errors.HasErrors) {
|
||||
Console.WriteLine ("failed.");
|
||||
} else {
|
||||
Console.WriteLine ("completed successfully.");
|
||||
}
|
||||
} else {
|
||||
string className = preprocess;
|
||||
string classNamespace = null;
|
||||
int s = preprocess.LastIndexOf ('.');
|
||||
if (s > 0) {
|
||||
classNamespace = preprocess.Substring (0, s);
|
||||
className = preprocess.Substring (s + 1);
|
||||
}
|
||||
|
||||
Console.Write ("Preprocessing '{0}' into class '{1}.{2}'... ", inputFile, classNamespace, className);
|
||||
string language;
|
||||
string[] references;
|
||||
generator.PreprocessTemplate (inputFile, className, classNamespace, outputFile, System.Text.Encoding.UTF8,
|
||||
out language, out references);
|
||||
if (generator.Errors.HasErrors) {
|
||||
Console.WriteLine ("failed.");
|
||||
} else {
|
||||
Console.WriteLine ("completed successfully:");
|
||||
Console.WriteLine (" Language: {0}", language);
|
||||
if (references != null && references.Length > 0) {
|
||||
Console.WriteLine (" References:");
|
||||
foreach (string r in references)
|
||||
Console.WriteLine (" {0}", r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (System.CodeDom.Compiler.CompilerError err in generator.Errors)
|
||||
Console.Error.WriteLine ("{0}({1},{2}): {3} {4}", err.FileName, err.Line, err.Column,
|
||||
err.IsWarning? "WARNING" : "ERROR", err.ErrorText);
|
||||
|
||||
return generator.Errors.HasErrors? -1 : 0;
|
||||
}
|
||||
|
||||
static void ShowHelp (bool concise)
|
||||
{
|
||||
Console.WriteLine ("TextTransform command line T4 processor");
|
||||
Console.WriteLine ("Usage: {0} [options] input-file", name);
|
||||
if (concise) {
|
||||
Console.WriteLine ("Use --help to display options.");
|
||||
} else {
|
||||
Console.WriteLine ("Options:");
|
||||
optionSet.WriteOptionDescriptions (System.Console.Out);
|
||||
}
|
||||
Console.WriteLine ();
|
||||
Environment.Exit (0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{D1D35409-C814-47F6-B038-B9B5BF0FE490}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AssemblyName>TextTransform</AssemblyName>
|
||||
<RootNamespace>Mono.TextTemplating</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\bin</OutputPath>
|
||||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Commandlineparameters>-o:out.txt in.tt</Commandlineparameters>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\bin</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="TextTransform.cs" />
|
||||
<Compile Include="AssemblyInfo.cs" />
|
||||
<Compile Include="Options.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Mono.TextTemplating\Mono.TextTemplating.csproj">
|
||||
<Project>{A2364D6A-00EF-417C-80A6-815726C70032}</Project>
|
||||
<Name>Mono.TextTemplating</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ProjectExtensions>
|
||||
<MonoDevelop>
|
||||
<Properties>
|
||||
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="true" RelativeMakefileName="Makefile.am" BuildTargetName="" CleanTargetName="" SyncReferences="true" IsAutotoolsProject="true" RelativeConfigureInPath="..">
|
||||
<BuildFilesVar Sync="true" Name="FILES" />
|
||||
<DeployFilesVar />
|
||||
<ResourcesVar Sync="true" Name="RES" />
|
||||
<OthersVar />
|
||||
<GacRefVar Sync="true" Name="REFS" Prefix="-r:" />
|
||||
<AsmRefVar Sync="true" Name="REFS" Prefix="-r:" />
|
||||
<ProjectRefVar Sync="true" Name="DEPS" />
|
||||
</MonoDevelop.Autotools.MakefileInfo>
|
||||
</Properties>
|
||||
</MonoDevelop>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
|
@ -1,5 +0,0 @@
|
|||
@echo off
|
||||
set WinDirNet=%WinDir%\Microsoft.NET\Framework
|
||||
set msbuild="%WinDirNet%\v4.0.30319\msbuild.exe"
|
||||
|
||||
%msbuild% /t:Rebuild /p:Configuration=Release /p:Platform="Any CPU" "%~dp0\TextTemplating.sln"
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
|
||||
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
|
||||
exclude-result-prefixes="msxsl"
|
||||
>
|
||||
<xsl:output method="xml" indent="yes"/>
|
||||
|
||||
<xsl:template match="@* | node()">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@* | node()"/>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="wix:DirectoryRef">
|
||||
<xsl:copy>
|
||||
<xsl:attribute name="DiskId">2</xsl:attribute>
|
||||
<xsl:apply-templates select="@* | node()"/>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -1,67 +0,0 @@
|
|||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{C4B4300B-5B96-4F43-BD7D-517A29693B30}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Gettext.Cs.Tests</RootNamespace>
|
||||
<AssemblyName>Gettext.Cs.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Data.DataSetExtensions">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="PoParserTest.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Gettext.Cs\Gettext.Cs.csproj">
|
||||
<Project>{D8869765-AB47-4C03-B2C5-E5498A55CA79}</Project>
|
||||
<Name>Gettext.Cs</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,64 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
using Gettext.Cs;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Gettext.Cs.Tests
|
||||
{
|
||||
/// <summary>
|
||||
///This is a test class for PoParserTest and is intended
|
||||
///to contain all PoParserTest Unit Tests
|
||||
///</summary>
|
||||
[TestClass()]
|
||||
public class PoParserTest
|
||||
{
|
||||
///<summary>
|
||||
/// Tests slashes in parsed strings
|
||||
/// <see href="http://code.google.com/p/gettext-cs-utils/issues/detail?id=1"/>
|
||||
///</summary>
|
||||
[TestMethod()]
|
||||
public void ParseIntoDictionaryStringWithSlashesTest()
|
||||
{
|
||||
string msgid = @"The type of parameter \""${0}\"" is not supported";
|
||||
string msgstr = @"Il tipo del parametro \""${0}\"" non è supportato";
|
||||
|
||||
string parsedMsgid = @"The type of parameter ""${0}"" is not supported";
|
||||
string parsedMsgstr = @"Il tipo del parametro ""${0}"" non è supportato";
|
||||
|
||||
PoParser target = new PoParser();
|
||||
TextReader reader = new StringReader(String.Format(@"
|
||||
msgid ""{0}""
|
||||
msgstr ""{1}""
|
||||
", msgid, msgstr));
|
||||
|
||||
var actual = target.ParseIntoDictionary(reader);
|
||||
|
||||
Assert.AreEqual(1, actual.Count, "Parsed dictionary entries count do not match");
|
||||
Assert.AreEqual(parsedMsgid, actual.Keys.ToArray()[0], "Key does not match");
|
||||
Assert.AreEqual(parsedMsgstr, actual.Values.ToArray()[0], "Value does not match");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Gettext.Cs.Tests")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Microsoft")]
|
||||
[assembly: AssemblyProduct("Gettext.Cs.Tests")]
|
||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM componenets. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("532f2d56-549a-474c-b46b-82fc90f1db64")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -1,48 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System.Web.UI;
|
||||
|
||||
|
||||
namespace Gettext.Cs.Web
|
||||
{
|
||||
[ParseChildren(false)]
|
||||
public abstract class AspTranslate : Control
|
||||
{
|
||||
string content;
|
||||
|
||||
protected override void AddParsedSubObject(object obj)
|
||||
{
|
||||
if (obj is LiteralControl)
|
||||
{
|
||||
content = Translate(((LiteralControl)obj).Text);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Render(HtmlTextWriter writer)
|
||||
{
|
||||
writer.Write(content);
|
||||
}
|
||||
|
||||
protected abstract string Translate(string text);
|
||||
}
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{38474466-DA21-4D19-A4D8-E2E7918480D6}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Gettext.Cs.Web</RootNamespace>
|
||||
<AssemblyName>Gettext.Cs.Web</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.DataSetExtensions">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Controls\AspTranslate.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,58 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Gettext.Cs.Web")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Microsoft")]
|
||||
[assembly: AssemblyProduct("Gettext.Cs.Web")]
|
||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("efc9a6d8-33cd-4cc5-8984-90847fea390e")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -1,83 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{D8869765-AB47-4C03-B2C5-E5498A55CA79}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Gettext.Cs</RootNamespace>
|
||||
<AssemblyName>Gettext.Cs</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\..\..\..\..\..\bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\..\..\..\..\..\bin\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.DataSetExtensions">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Resource\DatabaseResourceManager.cs" />
|
||||
<Compile Include="Resource\DatabaseResourceReader.cs" />
|
||||
<Compile Include="Resource\DatabaseResourceSet.cs" />
|
||||
<Compile Include="Resource\FileBasedResourceManager.cs" />
|
||||
<Compile Include="Parser\ParserRequestor.cs" />
|
||||
<Compile Include="Parser\PoParser.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Resource\GettextResourceManager.cs" />
|
||||
<Compile Include="Resource\GettextResourceReader.cs" />
|
||||
<Compile Include="Resource\GettextResourceSet.cs" />
|
||||
<Compile Include="Templates\Strings.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Strings.tt</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Templates\Strings.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>Strings.cs</LastGenOutput>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,55 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface for retrieving data from the parser.
|
||||
/// </summary>
|
||||
public interface IGettextParserRequestor
|
||||
{
|
||||
/// <summary>
|
||||
/// Handles a key value pair parsed from the po file.
|
||||
/// </summary>
|
||||
void Handle(string key, string value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Collects data from the parser into a dictionary.
|
||||
/// </summary>
|
||||
public class DictionaryGettextParserRequestor : Dictionary<String, String>, IGettextParserRequestor
|
||||
{
|
||||
#region IGettextParserRequestor Members
|
||||
|
||||
public void Handle(string key, string value)
|
||||
{
|
||||
this[key] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,149 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
/// <summary>
|
||||
/// Parses standard po files.
|
||||
/// </summary>
|
||||
public class PoParser
|
||||
{
|
||||
/// <summary>
|
||||
/// Parses an input po file.
|
||||
/// </summary>
|
||||
public void Parse(TextReader reader, IGettextParserRequestor requestor)
|
||||
{
|
||||
const int StateWaitingKey = 1;
|
||||
const int StateConsumingKey = 2;
|
||||
const int StateConsumingValue = 3;
|
||||
|
||||
int state = StateWaitingKey;
|
||||
|
||||
StringBuilder currentKey = null;
|
||||
StringBuilder currentValue = null;
|
||||
|
||||
string line;
|
||||
while(true) {
|
||||
line = reader.ReadLine();
|
||||
line = line == null ? null : line.Trim();
|
||||
if (line == null || line.Length == 0)
|
||||
{
|
||||
if (state == StateConsumingValue &&
|
||||
currentKey != null &&
|
||||
currentValue != null)
|
||||
{
|
||||
requestor.Handle(currentKey.ToString().Replace("\\n", "\n").Replace("\\\"", "\""),
|
||||
currentValue.ToString().Replace("\\n", "\n").Replace("\\\"", "\""));
|
||||
currentKey = null;
|
||||
currentValue = null;
|
||||
}
|
||||
|
||||
if (line == null)
|
||||
break;
|
||||
|
||||
state = StateWaitingKey;
|
||||
continue;
|
||||
}
|
||||
else if (line[0] == '#')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool isMsgId = line.StartsWith("msgid ");
|
||||
bool isMsgStr = !isMsgId && line.StartsWith("msgstr ");
|
||||
|
||||
if (isMsgId || isMsgStr)
|
||||
{
|
||||
state = isMsgId ? StateConsumingKey : StateConsumingValue;
|
||||
|
||||
int firstQuote = line.IndexOf('"');
|
||||
if (firstQuote == -1)
|
||||
continue;
|
||||
|
||||
int secondQuote = line.IndexOf('"', firstQuote + 1);
|
||||
while (secondQuote != -1 && line[secondQuote - 1] == '\\')
|
||||
secondQuote = line.IndexOf('"', secondQuote + 1);
|
||||
if (secondQuote == -1)
|
||||
continue;
|
||||
|
||||
string piece = line.Substring(firstQuote + 1, secondQuote - firstQuote - 1);
|
||||
|
||||
if (isMsgId)
|
||||
{
|
||||
currentKey = new StringBuilder();
|
||||
currentKey.Append(piece);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentValue = new StringBuilder();
|
||||
currentValue.Append(piece);
|
||||
}
|
||||
}
|
||||
else if (line[0] == '"')
|
||||
{
|
||||
if (line[line.Length - 1] == '"')
|
||||
{
|
||||
line = line.Substring(1, line.Length - 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
line = line.Substring(1, line.Length - 1);
|
||||
}
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case StateConsumingKey:
|
||||
currentKey.Append(line);
|
||||
break;
|
||||
case StateConsumingValue:
|
||||
currentValue.Append(line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses an input po file.
|
||||
/// </summary>
|
||||
public void Parse(string text, IGettextParserRequestor requestor)
|
||||
{
|
||||
Parse(new StringReader(text), requestor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses an input po file into a dictionary.
|
||||
/// </summary>
|
||||
public Dictionary<String, String> ParseIntoDictionary(TextReader reader)
|
||||
{
|
||||
var requestor = new DictionaryGettextParserRequestor();
|
||||
Parse(reader, requestor);
|
||||
return requestor;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Gettext.Cs")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Microsoft")]
|
||||
[assembly: AssemblyProduct("Gettext.Cs")]
|
||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("1c3b8e32-0c8d-4d0f-ae9b-d38e4b45690a")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -1,86 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using System.Resources;
|
||||
using System.Configuration;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
public class DatabaseResourceManager : System.Resources.ResourceManager
|
||||
{
|
||||
private string dsn;
|
||||
private string sp;
|
||||
|
||||
public DatabaseResourceManager()
|
||||
: base()
|
||||
{
|
||||
this.dsn = ConfigurationManager.AppSettings["Gettext.ConnectionString"] ?? ConfigurationManager.ConnectionStrings["Gettext"].ConnectionString;
|
||||
ResourceSets = new System.Collections.Hashtable();
|
||||
}
|
||||
|
||||
public DatabaseResourceManager(string storedProcedure)
|
||||
: this()
|
||||
{
|
||||
this.sp = storedProcedure;
|
||||
}
|
||||
|
||||
// Hack: kept for compatibility
|
||||
public DatabaseResourceManager(string name, string path, string fileformat)
|
||||
: this()
|
||||
{
|
||||
}
|
||||
|
||||
protected override ResourceSet InternalGetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents)
|
||||
{
|
||||
DatabaseResourceSet rs = null;
|
||||
|
||||
if (ResourceSets.Contains(culture.Name))
|
||||
{
|
||||
rs = ResourceSets[culture.Name] as DatabaseResourceSet;
|
||||
}
|
||||
else
|
||||
{
|
||||
lock (ResourceSets)
|
||||
{
|
||||
// Check hash table once again after lock is set
|
||||
if (ResourceSets.Contains(culture.Name))
|
||||
{
|
||||
rs = ResourceSets[culture.Name] as DatabaseResourceSet;
|
||||
}
|
||||
else
|
||||
{
|
||||
rs = new DatabaseResourceSet(dsn, culture, sp);
|
||||
ResourceSets.Add(culture.Name, rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rs;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,121 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Resources;
|
||||
using System.Collections;
|
||||
using System.Data.SqlClient;
|
||||
using System.Globalization;
|
||||
using System.Configuration;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
public class DatabaseResourceReader : IResourceReader
|
||||
{
|
||||
private string dsn;
|
||||
private string language;
|
||||
private string sp;
|
||||
|
||||
public DatabaseResourceReader(string dsn, CultureInfo culture)
|
||||
{
|
||||
this.dsn = dsn;
|
||||
this.language = culture.Name;
|
||||
}
|
||||
|
||||
public DatabaseResourceReader(string dsn, CultureInfo culture, string sp)
|
||||
{
|
||||
this.sp = sp;
|
||||
this.dsn = dsn;
|
||||
this.language = culture.Name;
|
||||
}
|
||||
|
||||
public System.Collections.IDictionaryEnumerator GetEnumerator()
|
||||
{
|
||||
Hashtable dict = new Hashtable();
|
||||
|
||||
SqlConnection connection = new SqlConnection(dsn);
|
||||
SqlCommand command = connection.CreateCommand();
|
||||
|
||||
if (language == "")
|
||||
language = CultureInfo.InvariantCulture.Name;
|
||||
|
||||
// Use stored procedure or plain text
|
||||
if (sp == null)
|
||||
{
|
||||
command.CommandText = string.Format("SELECT MessageKey, MessageValue FROM Message WHERE Culture = '{0}'", language);
|
||||
}
|
||||
else
|
||||
{
|
||||
command.CommandText = sp;
|
||||
command.CommandType = System.Data.CommandType.StoredProcedure;
|
||||
command.Parameters.AddWithValue("@culture", language);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
connection.Open();
|
||||
|
||||
using (SqlDataReader reader = command.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.GetValue(1) != System.DBNull.Value)
|
||||
{
|
||||
dict[reader.GetString(0)] = reader.GetString(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
bool raise = false;
|
||||
if (bool.TryParse(ConfigurationManager.AppSettings["Gettext.Throw"], out raise) && raise)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
connection.Close();
|
||||
}
|
||||
|
||||
return dict.GetEnumerator();
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return this.GetEnumerator();
|
||||
}
|
||||
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Resources;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
public class DatabaseResourceSet : ResourceSet
|
||||
{
|
||||
internal DatabaseResourceSet(string dsn, CultureInfo culture)
|
||||
: base (new DatabaseResourceReader(dsn, culture))
|
||||
{
|
||||
}
|
||||
|
||||
internal DatabaseResourceSet(string dsn, CultureInfo culture, string sp)
|
||||
: base(new DatabaseResourceReader(dsn, culture, sp))
|
||||
{
|
||||
}
|
||||
|
||||
public override Type GetDefaultReader()
|
||||
{
|
||||
return typeof(DatabaseResourceReader);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,295 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.IO;
|
||||
using System.Collections;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
/// <summary>
|
||||
/// Extendable file based resource manager.
|
||||
/// </summary>
|
||||
public class FileBasedResourceManager : System.Resources.ResourceManager
|
||||
{
|
||||
#region Properties
|
||||
|
||||
string path;
|
||||
string fileformat;
|
||||
|
||||
/// <summary>
|
||||
/// Path to retrieve the files from.
|
||||
/// </summary>
|
||||
public string Path
|
||||
{
|
||||
get { return path; }
|
||||
set { path = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Format of the resource set po file based on {{culture}} and {{resource}} placeholders.
|
||||
/// </summary>
|
||||
public string FileFormat
|
||||
{
|
||||
get { return fileformat; }
|
||||
set { fileformat = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Notification Events
|
||||
|
||||
/// <summary>
|
||||
/// Arguments for events related to the creation, successful or not, of a resource set.
|
||||
/// </summary>
|
||||
public class ResourceSetCreationEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Exception in case of error, null on success.
|
||||
/// </summary>
|
||||
public Exception Exception { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// FileName from where the resource set was loaded.
|
||||
/// </summary>
|
||||
public String FileName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Type of the resource set being initialized.
|
||||
/// </summary>
|
||||
public Type ResourceSetType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Instance of the resource set created, may be null on error.
|
||||
/// </summary>
|
||||
public System.Resources.ResourceSet ResourceSet { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the creation was successful.
|
||||
/// </summary>
|
||||
public bool Success { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event that notifies the successful creation of a resource set.
|
||||
/// </summary>
|
||||
public event EventHandler<ResourceSetCreationEventArgs> CreatedResourceSet;
|
||||
|
||||
/// <summary>
|
||||
/// Event that notifies an error creating a resource set.
|
||||
/// </summary>
|
||||
public event EventHandler<ResourceSetCreationEventArgs> FailedResourceSet;
|
||||
|
||||
protected void RaiseCreatedResourceSet(string filename, System.Resources.ResourceSet set)
|
||||
{
|
||||
var handler = CreatedResourceSet;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, new ResourceSetCreationEventArgs
|
||||
{
|
||||
FileName = filename,
|
||||
ResourceSet = set,
|
||||
ResourceSetType = this.ResourceSetType,
|
||||
Success = true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected void RaiseFailedResourceSet(string filename, Exception ex)
|
||||
{
|
||||
var handler = FailedResourceSet;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, new ResourceSetCreationEventArgs
|
||||
{
|
||||
FileName = filename,
|
||||
ResourceSet = null,
|
||||
ResourceSetType = this.ResourceSetType,
|
||||
Success = false,
|
||||
Exception = ex
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance.
|
||||
/// </summary>
|
||||
/// <param name="name">Name of the resource</param>
|
||||
/// <param name="path">Path to retrieve the files from</param>
|
||||
/// <param name="fileformat">Format of the file name using {{resource}} and {{culture}} placeholders.</param>
|
||||
public FileBasedResourceManager(string name, string path, string fileformat)
|
||||
: base()
|
||||
{
|
||||
this.path = path;
|
||||
this.fileformat = fileformat;
|
||||
this.BaseNameField = name;
|
||||
|
||||
base.IgnoreCase = false;
|
||||
base.ResourceSets = new System.Collections.Hashtable();
|
||||
}
|
||||
|
||||
protected override string GetResourceFileName(System.Globalization.CultureInfo culture)
|
||||
{
|
||||
return fileformat.Replace("{{culture}}", culture.Name).Replace("{{resource}}", BaseNameField);
|
||||
}
|
||||
|
||||
protected override System.Resources.ResourceSet InternalGetResourceSet(System.Globalization.CultureInfo culture, bool createIfNotExists, bool tryParents)
|
||||
{
|
||||
if (path == null && fileformat == null) return null;
|
||||
if (culture == null || culture.Equals(CultureInfo.InvariantCulture)) return null;
|
||||
|
||||
System.Resources.ResourceSet rs = null;
|
||||
Hashtable resourceSets = this.ResourceSets;
|
||||
|
||||
if (!TryFetchResourceSet(resourceSets, culture, out rs))
|
||||
{
|
||||
string resourceFileName = this.FindResourceFile(culture);
|
||||
if (resourceFileName == null)
|
||||
{
|
||||
if (tryParents)
|
||||
{
|
||||
CultureInfo parent = culture.Parent;
|
||||
rs = this.InternalGetResourceSet(parent, createIfNotExists, tryParents);
|
||||
AddResourceSet(resourceSets, culture, ref rs);
|
||||
return rs;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rs = this.CreateResourceSet(resourceFileName);
|
||||
AddResourceSet(resourceSets, culture, ref rs);
|
||||
return rs;
|
||||
}
|
||||
}
|
||||
|
||||
return rs;
|
||||
}
|
||||
|
||||
protected virtual System.Resources.ResourceSet InternalCreateResourceSet(string resourceFileName)
|
||||
{
|
||||
object[] args = new object[] { resourceFileName };
|
||||
return (System.Resources.ResourceSet)Activator.CreateInstance(this.ResourceSetType, args);
|
||||
}
|
||||
|
||||
private System.Resources.ResourceSet CreateResourceSet(string resourceFileName)
|
||||
{
|
||||
System.Resources.ResourceSet set = null;
|
||||
|
||||
try
|
||||
{
|
||||
set = InternalCreateResourceSet(resourceFileName);
|
||||
RaiseCreatedResourceSet(resourceFileName, set);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RaiseFailedResourceSet(resourceFileName, ex);
|
||||
}
|
||||
|
||||
return set;
|
||||
}
|
||||
|
||||
private string FindResourceFile(CultureInfo culture)
|
||||
{
|
||||
string resourceFileName = this.GetResourceFileName(culture);
|
||||
string path = this.path ?? String.Empty;
|
||||
|
||||
// Try with simple path + filename combination
|
||||
string fullpath = System.IO.Path.Combine(path, resourceFileName);
|
||||
if (File.Exists(fullpath)) return fullpath;
|
||||
|
||||
// If path is relative, attempt different directories
|
||||
if (path == String.Empty || !System.IO.Path.IsPathRooted(path))
|
||||
{
|
||||
// Try the entry assembly dir
|
||||
if (Assembly.GetEntryAssembly() != null)
|
||||
{
|
||||
string dir = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), path);
|
||||
fullpath = System.IO.Path.Combine(dir, resourceFileName);
|
||||
if (File.Exists(fullpath)) return fullpath;
|
||||
}
|
||||
|
||||
// Else try the executing assembly dir
|
||||
if (Assembly.GetExecutingAssembly() != null)
|
||||
{
|
||||
if (Assembly.GetEntryAssembly() == null || System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) != System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
|
||||
{
|
||||
string dir = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path);
|
||||
fullpath = System.IO.Path.Combine(dir, resourceFileName);
|
||||
if (File.Exists(fullpath)) return fullpath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void AddResourceSet(Hashtable localResourceSets, CultureInfo culture, ref System.Resources.ResourceSet rs)
|
||||
{
|
||||
lock (localResourceSets)
|
||||
{
|
||||
if (localResourceSets.Contains(culture))
|
||||
{
|
||||
var existing = (System.Resources.ResourceSet)localResourceSets[culture];
|
||||
|
||||
if (existing != null && !object.Equals(existing, rs))
|
||||
{
|
||||
rs.Dispose();
|
||||
rs = existing;
|
||||
var a = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
localResourceSets.Add(culture, rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryFetchResourceSet(Hashtable localResourceSets, CultureInfo culture, out System.Resources.ResourceSet set)
|
||||
{
|
||||
lock (localResourceSets)
|
||||
{
|
||||
if (ResourceSets.Contains(culture))
|
||||
{
|
||||
set = (System.Resources.ResourceSet)ResourceSets[culture];
|
||||
return true;
|
||||
}
|
||||
|
||||
set = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private bool ValidateGetResourceSet(CultureInfo culture)
|
||||
{
|
||||
return !(culture == null || culture.Equals(CultureInfo.InvariantCulture) || String.IsNullOrEmpty(culture.Name));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,150 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Configuration;
|
||||
using System.Collections.Specialized;
|
||||
using System.Security.Permissions;
|
||||
using System.Collections;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
/// <summary>
|
||||
/// Gettext based resource manager that reads from po files.
|
||||
/// </summary>
|
||||
public class GettextResourceManager : FileBasedResourceManager
|
||||
{
|
||||
#region Defaults
|
||||
|
||||
const string defaultFileFormat = "{{culture}}\\{{resource}}.po";
|
||||
const string defaultPath = "";
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Returns the Gettext resource set type used.
|
||||
/// </summary>
|
||||
public override Type ResourceSetType
|
||||
{
|
||||
get { return typeof(GettextResourceSet); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructos
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance.
|
||||
/// </summary>
|
||||
/// <param name="name">Name of the resource</param>
|
||||
/// <param name="path">Path to retrieve the files from</param>
|
||||
/// <param name="fileformat">Format of the file name using {{resource}} and {{culture}} placeholders.</param>
|
||||
public GettextResourceManager(string name, string path, string fileformat)
|
||||
: base(name, path, fileformat)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance using local path and "{{culture}}\{{resource}}.po" file format.
|
||||
/// </summary>
|
||||
/// <param name="name">Name of the resource</param>
|
||||
public GettextResourceManager(string name)
|
||||
: base(name, defaultPath, defaultFileFormat)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Configuration
|
||||
|
||||
/// <summary>
|
||||
/// Loads the named configuration section and retrieves file format and path from "fileformat" and "path" settings.
|
||||
/// </summary>
|
||||
/// <param name="section">Name of the section to retrieve.</param>
|
||||
/// <returns>True if the configuration section was loaded.</returns>
|
||||
public bool LoadConfiguration(string section)
|
||||
{
|
||||
var config = ConfigurationManager.GetSection(section) as NameValueCollection;
|
||||
|
||||
if (config == null) return false;
|
||||
|
||||
this.FileFormat = config["fileformat"] ?? FileFormat;
|
||||
this.Path = config["path"] ?? Path;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance retrieving path and fileformat from the specified configuration section.
|
||||
/// </summary>
|
||||
/// <param name="name">Name of the resource</param>
|
||||
/// <param name="section">Name of the configuration section</param>
|
||||
/// <returns>New instance of ResourceManager</returns>
|
||||
public static FileBasedResourceManager CreateFromConfiguration(string name, string section)
|
||||
{
|
||||
return CreateFromConfiguration(name, section, defaultFileFormat, defaultPath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance retrieving path and fileformat from the specified configuration section.
|
||||
/// </summary>
|
||||
/// <param name="name">Name of the resource</param>
|
||||
/// <param name="section">Name of the configuration section with fileformat and path settings</param>
|
||||
/// <param name="fallbackFileFormat">File format to be used if configuration could not be retrieved</param>
|
||||
/// <param name="fallbackPath">Path to be used if configuration could not be retrieved</param>
|
||||
/// <returns>New instance of ResourceManager</returns>
|
||||
public static FileBasedResourceManager CreateFromConfiguration(string name, string section, string fallbackFileFormat, string fallbackPath)
|
||||
{
|
||||
var config = ConfigurationManager.GetSection(section) as NameValueCollection;
|
||||
|
||||
string fileformat = null;
|
||||
string path = null;
|
||||
|
||||
if (config == null)
|
||||
{
|
||||
fileformat = fallbackFileFormat;
|
||||
path = fallbackPath;
|
||||
}
|
||||
else
|
||||
{
|
||||
fileformat = config["fileformat"] ?? fallbackFileFormat;
|
||||
path = config["path"] ?? fallbackPath;
|
||||
}
|
||||
|
||||
return new FileBasedResourceManager(name, path, fileformat);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Resources;
|
||||
using System.IO;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
public class GettextResourceReader : IResourceReader
|
||||
{
|
||||
Stream stream;
|
||||
|
||||
public GettextResourceReader(Stream stream)
|
||||
{
|
||||
this.stream = stream;
|
||||
}
|
||||
|
||||
#region IResourceReader Members
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (stream != null)
|
||||
{
|
||||
this.stream.Close();
|
||||
}
|
||||
}
|
||||
|
||||
public System.Collections.IDictionaryEnumerator GetEnumerator()
|
||||
{
|
||||
if (stream == null)
|
||||
{
|
||||
throw new ArgumentNullException("Input stream cannot be null");
|
||||
}
|
||||
|
||||
using (var reader = new StreamReader(stream))
|
||||
{
|
||||
return new PoParser().ParseIntoDictionary(reader).GetEnumerator();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IEnumerable Members
|
||||
|
||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
|
||||
{
|
||||
return this.GetEnumerator();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (stream != null)
|
||||
{
|
||||
stream.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Gettext.Cs
|
||||
{
|
||||
public class GettextResourceSet : System.Resources.ResourceSet
|
||||
{
|
||||
public GettextResourceSet(string filename)
|
||||
: base(new GettextResourceReader(File.OpenRead(filename)))
|
||||
{
|
||||
}
|
||||
|
||||
public GettextResourceSet(Stream stream)
|
||||
: base(new GettextResourceReader(stream))
|
||||
{
|
||||
}
|
||||
|
||||
public override Type GetDefaultReader()
|
||||
{
|
||||
return typeof(Gettext.Cs.GettextResourceReader);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,166 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
// <autogenerated>
|
||||
// This code was generated by a tool. Any changes made manually will be lost
|
||||
// the next time this code is regenerated.
|
||||
// </autogenerated>
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Gettext
|
||||
{
|
||||
public class Strings
|
||||
{
|
||||
private static Object resourceManLock = new Object();
|
||||
private static System.Resources.ResourceManager resourceMan;
|
||||
private static System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
public const string ResourceName = "Strings";
|
||||
|
||||
private static string resourcesDir = GetSetting("ResourcesDir", "Po");
|
||||
private static string fileFormat = GetSetting("ResourcesFileFormat", "{{culture}}/{{resource}}.po");
|
||||
|
||||
private static string GetSetting(string setting, string defaultValue)
|
||||
{
|
||||
var section = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");
|
||||
if (section == null) return defaultValue;
|
||||
else return section[setting] ?? defaultValue;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Resources directory used to retrieve files from.
|
||||
/// </summary>
|
||||
public static string ResourcesDirectory
|
||||
{
|
||||
get { return resourcesDir; }
|
||||
set { resourcesDir = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Format of the file based on culture and resource name.
|
||||
/// </summary>
|
||||
public static string FileFormat
|
||||
{
|
||||
get { return fileFormat; }
|
||||
set { fileFormat = value; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
public static System.Resources.ResourceManager ResourceManager
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
if (object.ReferenceEquals(resourceMan, null))
|
||||
{
|
||||
lock (resourceManLock)
|
||||
{
|
||||
if (object.ReferenceEquals(resourceMan, null))
|
||||
{
|
||||
var directory = resourcesDir;
|
||||
var mgr = new global::Gettext.Cs.GettextResourceManager(ResourceName, directory, fileFormat);
|
||||
resourceMan = mgr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
public static System.Globalization.CultureInfo Culture
|
||||
{
|
||||
get { return resourceCulture; }
|
||||
set { resourceCulture = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(string t)
|
||||
{
|
||||
return T(null, t);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(CultureInfo info, string t)
|
||||
{
|
||||
if (String.IsNullOrEmpty(t)) return t;
|
||||
var translated = ResourceManager.GetString(t, info ?? resourceCulture);
|
||||
return String.IsNullOrEmpty(translated) ? t : translated;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string and formats it with the parameters provided; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(string t, params object[] parameters)
|
||||
{
|
||||
return T(null, t, parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string and formats it with the parameters provided; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(CultureInfo info, string t, params object[] parameters)
|
||||
{
|
||||
if (String.IsNullOrEmpty(t)) return t;
|
||||
return String.Format(T(info, t), parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Marks a string for future translation, does not translate it now.
|
||||
/// </summary>
|
||||
public static string M(string t)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the resource set available for the specified culture.
|
||||
/// </summary>
|
||||
public static System.Resources.ResourceSet GetResourceSet(CultureInfo culture)
|
||||
{
|
||||
return ResourceManager.GetResourceSet(culture, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,196 +0,0 @@
|
|||
<#@ template language="C#v3.5" hostspecific="True" #>
|
||||
// <autogenerated>
|
||||
// This code was generated by a tool. Any changes made manually will be lost
|
||||
// the next time this code is regenerated.
|
||||
// </autogenerated>
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
|
||||
namespace <#= this.NamespaceName #>
|
||||
{
|
||||
public class <#= this.ClassName #>
|
||||
{
|
||||
private static Object resourceManLock = new Object();
|
||||
private static System.Resources.ResourceManager resourceMan;
|
||||
private static System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
public const string ResourceName = "<#= this.ResourceName #>";
|
||||
|
||||
<# if (!UseDatabase) { #>
|
||||
private static string resourcesDir = GetSetting("ResourcesDir", "<#= this.DefaultResourceDir #>");
|
||||
private static string fileFormat = GetSetting("ResourcesFileFormat", "<#= this.DefaultFileFormat #>");
|
||||
<# } #>
|
||||
|
||||
private static string GetSetting(string setting, string defaultValue)
|
||||
{
|
||||
var section = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("<#= this.ConfigurationSection #>");
|
||||
if (section == null) return defaultValue;
|
||||
else return section[setting] ?? defaultValue;
|
||||
}
|
||||
|
||||
<# if (!UseDatabase) { #>
|
||||
/// <summary>
|
||||
/// Resources directory used to retrieve files from.
|
||||
/// </summary>
|
||||
public static string ResourcesDirectory
|
||||
{
|
||||
get { return resourcesDir; }
|
||||
set { resourcesDir = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Format of the file based on culture and resource name.
|
||||
/// </summary>
|
||||
public static string FileFormat
|
||||
{
|
||||
get { return fileFormat; }
|
||||
set { fileFormat = value; }
|
||||
}
|
||||
<# } #>
|
||||
|
||||
<# if (ResourceManagerExpires) { #>
|
||||
private static DateTime resourceManagerLoadedAt = DateTime.Now;
|
||||
<# } #>
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
public static System.Resources.ResourceManager ResourceManager
|
||||
{
|
||||
get
|
||||
{
|
||||
<# if (ResourceManagerExpires) { #>
|
||||
if (resourceMan != null && DateTime.Now.Subtract(resourceManagerLoadedAt).TotalMinutes >= <#= ResourceManagerTTL #>)
|
||||
{
|
||||
lock (resourceManLock)
|
||||
{
|
||||
if (resourceMan != null && DateTime.Now.Subtract(resourceManagerLoadedAt).TotalMinutes >= <#= ResourceManagerTTL #>)
|
||||
{
|
||||
resourceMan.ReleaseAllResources();
|
||||
resourceMan = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
<# } #>
|
||||
|
||||
if (object.ReferenceEquals(resourceMan, null))
|
||||
{
|
||||
lock (resourceManLock)
|
||||
{
|
||||
if (object.ReferenceEquals(resourceMan, null))
|
||||
{
|
||||
<# if (UseDatabase) { #>
|
||||
var mgr = new global::Gettext.Cs.DatabaseResourceManager("<#= this.StoredProcedureName #>");
|
||||
<# } else { #>
|
||||
var directory = resourcesDir;
|
||||
<# if (ServerMapPath) { #>
|
||||
if (System.Web.HttpContext.Current != null)
|
||||
directory = System.Web.HttpContext.Current.Server.MapPath(directory);
|
||||
<# } #>
|
||||
var mgr = <#= String.Format(this.ResourceManagerCtor, this.ResourceManagerType) #>;
|
||||
<# if (ResourceManagerExpires) { #>
|
||||
resourceManagerLoadedAt = DateTime.Now;
|
||||
<# } #>
|
||||
<# } #>
|
||||
resourceMan = mgr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
public static System.Globalization.CultureInfo Culture
|
||||
{
|
||||
get { return resourceCulture; }
|
||||
set { resourceCulture = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(string t)
|
||||
{
|
||||
return T(null, t);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(CultureInfo info, string t)
|
||||
{
|
||||
if (String.IsNullOrEmpty(t)) return t;
|
||||
var translated = ResourceManager.GetString(t, info ?? resourceCulture);
|
||||
return String.IsNullOrEmpty(translated) ? t : translated;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string and formats it with the parameters provided; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(string t, params object[] parameters)
|
||||
{
|
||||
return T(null, t, parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string and formats it with the parameters provided; used to mark string for translation as well.
|
||||
/// </summary>
|
||||
public static string T(CultureInfo info, string t, params object[] parameters)
|
||||
{
|
||||
if (String.IsNullOrEmpty(t)) return t;
|
||||
return String.Format(T(info, t), parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Marks a string for future translation, does not translate it now.
|
||||
/// </summary>
|
||||
public static string M(string t)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the resource set available for the specified culture.
|
||||
/// </summary>
|
||||
public static System.Resources.ResourceSet GetResourceSet(CultureInfo culture)
|
||||
{
|
||||
return ResourceManager.GetResourceSet(culture, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<#+
|
||||
// Template parameters
|
||||
|
||||
string ClassName = "Strings";
|
||||
string ResourceName = "Strings";
|
||||
string NamespaceName = "Gettext";
|
||||
|
||||
string ResourceManagerType = "global::Gettext.Cs.GettextResourceManager";
|
||||
string ResourceManagerCtor = "new {0}(ResourceName, directory, fileFormat)";
|
||||
string DefaultResourceDir = "Po";
|
||||
string DefaultFileFormat = "{{culture}}/{{resource}}.po";
|
||||
|
||||
string ConfigurationSection = "appSettings";
|
||||
bool ServerMapPath = false;
|
||||
|
||||
bool ResourceManagerExpires = false;
|
||||
int ResourceManagerTTL = 0;
|
||||
|
||||
bool UseDatabase = false;
|
||||
string StoredProcedureName = "GettextGetResourceSet";
|
||||
#>
|
|
@ -1,125 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual Studio 2008
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{FD8EF9F6-9B97-456A-98E0-E94DB2BD3EED}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lib", "Lib", "{64737816-54EF-4891-A58D-0642F07F09AD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gnu.Getopt", "Lib\Gnu.Getopt\Gnu.Getopt.csproj", "{379BC478-7D84-4E0E-A4B8-197905C824AE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.AspExtract", "Tools\Gettext.AspExtract\Gettext.AspExtract.csproj", "{88A09FE2-5DE0-4C6E-9C4C-BB5E8A490CF5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Msgfmt", "Tools\Gettext.Msgfmt\Gettext.Msgfmt.csproj", "{F72A7CBA-E656-4ECA-97F9-2B601E0BCDF9}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.ResourcesReplacer", "Tools\Gettext.ResourcesReplacer\Gettext.ResourcesReplacer.csproj", "{11BDD346-EDFA-439D-A42D-A1D4FDB64C9A}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{380A3584-88CB-4153-9BC1-C18CFAE9EF26}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Cs", "Core\Gettext.Cs\Gettext.Cs.csproj", "{D8869765-AB47-4C03-B2C5-E5498A55CA79}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gnu.Gettext", "Lib\Gnu.Gettext\Gnu.Gettext.csproj", "{859A653A-7728-4F02-BAF2-A5CD8F991916}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Cs.Web", "Core\Gettext.Cs.Web\Gettext.Cs.Web.csproj", "{38474466-DA21-4D19-A4D8-E2E7918480D6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.DatabaseResourceGenerator", "Tools\Gettext.DatabaseResourceGenerator\Gettext.DatabaseResourceGenerator.csproj", "{B19D8863-C5C2-4A13-B24A-566EB7498D17}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{DF21B331-8022-4958-AEF7-D7897814038A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Samples.Console", "Samples\Gettext.Samples.Console\Gettext.Samples.Console.csproj", "{470FDBA5-04E5-4A9F-80EA-987D1F8D9074}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Cs.Tests", "Core\Gettext.Cs.Tests\Gettext.Cs.Tests.csproj", "{C4B4300B-5B96-4F43-BD7D-517A29693B30}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Iconv", "Tools\Gettext.Iconv\Gettext.Iconv.csproj", "{7578444A-E104-4D72-94B5-DDCB1DA0D63F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Samples.Mvc", "Samples\Gettext.Samples.Mvc\Gettext.Samples.Mvc.csproj", "{208D43F3-84E6-45B9-B6CC-6E3F48E42A82}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Samples.Database", "Samples\Gettext.Samples.Database\Gettext.Samples.Database.csproj", "{9FBD5BA7-BCE6-48FE-9FB7-396F377D1313}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gettext.Samples.Spanish", "Samples\Gettext.Samples.Spanish\Gettext.Samples.Spanish.csproj", "{7404A86D-53FA-4B1B-B6FC-D84EB6F5E2D5}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(TestCaseManagementSettings) = postSolution
|
||||
CategoryFile = Gettext.CsUtils.vsmdi
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{379BC478-7D84-4E0E-A4B8-197905C824AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{379BC478-7D84-4E0E-A4B8-197905C824AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{379BC478-7D84-4E0E-A4B8-197905C824AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{379BC478-7D84-4E0E-A4B8-197905C824AE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{88A09FE2-5DE0-4C6E-9C4C-BB5E8A490CF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{88A09FE2-5DE0-4C6E-9C4C-BB5E8A490CF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{88A09FE2-5DE0-4C6E-9C4C-BB5E8A490CF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{88A09FE2-5DE0-4C6E-9C4C-BB5E8A490CF5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F72A7CBA-E656-4ECA-97F9-2B601E0BCDF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F72A7CBA-E656-4ECA-97F9-2B601E0BCDF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F72A7CBA-E656-4ECA-97F9-2B601E0BCDF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F72A7CBA-E656-4ECA-97F9-2B601E0BCDF9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{11BDD346-EDFA-439D-A42D-A1D4FDB64C9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{11BDD346-EDFA-439D-A42D-A1D4FDB64C9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{11BDD346-EDFA-439D-A42D-A1D4FDB64C9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{11BDD346-EDFA-439D-A42D-A1D4FDB64C9A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D8869765-AB47-4C03-B2C5-E5498A55CA79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D8869765-AB47-4C03-B2C5-E5498A55CA79}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D8869765-AB47-4C03-B2C5-E5498A55CA79}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D8869765-AB47-4C03-B2C5-E5498A55CA79}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{859A653A-7728-4F02-BAF2-A5CD8F991916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{859A653A-7728-4F02-BAF2-A5CD8F991916}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{859A653A-7728-4F02-BAF2-A5CD8F991916}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{859A653A-7728-4F02-BAF2-A5CD8F991916}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{38474466-DA21-4D19-A4D8-E2E7918480D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{38474466-DA21-4D19-A4D8-E2E7918480D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{38474466-DA21-4D19-A4D8-E2E7918480D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{38474466-DA21-4D19-A4D8-E2E7918480D6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B19D8863-C5C2-4A13-B24A-566EB7498D17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B19D8863-C5C2-4A13-B24A-566EB7498D17}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B19D8863-C5C2-4A13-B24A-566EB7498D17}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B19D8863-C5C2-4A13-B24A-566EB7498D17}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{470FDBA5-04E5-4A9F-80EA-987D1F8D9074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{470FDBA5-04E5-4A9F-80EA-987D1F8D9074}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{470FDBA5-04E5-4A9F-80EA-987D1F8D9074}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{470FDBA5-04E5-4A9F-80EA-987D1F8D9074}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C4B4300B-5B96-4F43-BD7D-517A29693B30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C4B4300B-5B96-4F43-BD7D-517A29693B30}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C4B4300B-5B96-4F43-BD7D-517A29693B30}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C4B4300B-5B96-4F43-BD7D-517A29693B30}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7578444A-E104-4D72-94B5-DDCB1DA0D63F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7578444A-E104-4D72-94B5-DDCB1DA0D63F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7578444A-E104-4D72-94B5-DDCB1DA0D63F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7578444A-E104-4D72-94B5-DDCB1DA0D63F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{208D43F3-84E6-45B9-B6CC-6E3F48E42A82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{208D43F3-84E6-45B9-B6CC-6E3F48E42A82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{208D43F3-84E6-45B9-B6CC-6E3F48E42A82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{208D43F3-84E6-45B9-B6CC-6E3F48E42A82}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9FBD5BA7-BCE6-48FE-9FB7-396F377D1313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9FBD5BA7-BCE6-48FE-9FB7-396F377D1313}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9FBD5BA7-BCE6-48FE-9FB7-396F377D1313}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9FBD5BA7-BCE6-48FE-9FB7-396F377D1313}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7404A86D-53FA-4B1B-B6FC-D84EB6F5E2D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7404A86D-53FA-4B1B-B6FC-D84EB6F5E2D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7404A86D-53FA-4B1B-B6FC-D84EB6F5E2D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7404A86D-53FA-4B1B-B6FC-D84EB6F5E2D5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{88A09FE2-5DE0-4C6E-9C4C-BB5E8A490CF5} = {FD8EF9F6-9B97-456A-98E0-E94DB2BD3EED}
|
||||
{F72A7CBA-E656-4ECA-97F9-2B601E0BCDF9} = {FD8EF9F6-9B97-456A-98E0-E94DB2BD3EED}
|
||||
{11BDD346-EDFA-439D-A42D-A1D4FDB64C9A} = {FD8EF9F6-9B97-456A-98E0-E94DB2BD3EED}
|
||||
{B19D8863-C5C2-4A13-B24A-566EB7498D17} = {FD8EF9F6-9B97-456A-98E0-E94DB2BD3EED}
|
||||
{7578444A-E104-4D72-94B5-DDCB1DA0D63F} = {FD8EF9F6-9B97-456A-98E0-E94DB2BD3EED}
|
||||
{379BC478-7D84-4E0E-A4B8-197905C824AE} = {64737816-54EF-4891-A58D-0642F07F09AD}
|
||||
{859A653A-7728-4F02-BAF2-A5CD8F991916} = {64737816-54EF-4891-A58D-0642F07F09AD}
|
||||
{D8869765-AB47-4C03-B2C5-E5498A55CA79} = {380A3584-88CB-4153-9BC1-C18CFAE9EF26}
|
||||
{38474466-DA21-4D19-A4D8-E2E7918480D6} = {380A3584-88CB-4153-9BC1-C18CFAE9EF26}
|
||||
{C4B4300B-5B96-4F43-BD7D-517A29693B30} = {380A3584-88CB-4153-9BC1-C18CFAE9EF26}
|
||||
{470FDBA5-04E5-4A9F-80EA-987D1F8D9074} = {DF21B331-8022-4958-AEF7-D7897814038A}
|
||||
{208D43F3-84E6-45B9-B6CC-6E3F48E42A82} = {DF21B331-8022-4958-AEF7-D7897814038A}
|
||||
{9FBD5BA7-BCE6-48FE-9FB7-396F377D1313} = {DF21B331-8022-4958-AEF7-D7897814038A}
|
||||
{7404A86D-53FA-4B1B-B6FC-D84EB6F5E2D5} = {DF21B331-8022-4958-AEF7-D7897814038A}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,88 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Permissions;
|
||||
|
||||
//
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
//
|
||||
[assembly: AssemblyTitle("GNU Getopt Argument Parser")]
|
||||
[assembly: AssemblyDescription("This is a C# port of a Java port of GNU " +
|
||||
"Getopt, a class for parsing command line arguments passed to programs. " +
|
||||
"It is based on the C getopt() functions in glibc 2.0.6 and should " +
|
||||
"parse options in a 100% compatible manner.")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Free Software Foundation, Inc.")]
|
||||
[assembly: AssemblyProduct("GNU Getopt")]
|
||||
[assembly: AssemblyCopyright("Copyright (c) 1987-1997 Free Software " +
|
||||
"Foundation, Inc., Java Port Copyright (c) 1998 by Aaron M. Renn " +
|
||||
"(arenn@urbanophile.com), C#.NET Port of the Java Port Copyright (c) " +
|
||||
"2004 by Klaus Prückl (klaus.prueckl@aon.at)")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
//
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
|
||||
[assembly: AssemblyVersion("0.9.1.*")]
|
||||
|
||||
//
|
||||
// In order to sign your assembly you must specify a key to use. Refer to the
|
||||
// Microsoft .NET Framework documentation for more information on assembly signing.
|
||||
//
|
||||
// Use the attributes below to control which key is used for signing.
|
||||
//
|
||||
// Notes:
|
||||
// (*) If no key is specified, the assembly is not signed.
|
||||
// (*) KeyName refers to a key that has been installed in the Crypto Service
|
||||
// Provider (CSP) on your machine. KeyFile refers to a file which contains
|
||||
// a key.
|
||||
// (*) If the KeyFile and the KeyName values are both specified, the
|
||||
// following processing occurs:
|
||||
// (1) If the KeyName can be found in the CSP, that key is used.
|
||||
// (2) If the KeyName does not exist and the KeyFile does exist, the key
|
||||
// in the KeyFile is installed into the CSP and used.
|
||||
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
|
||||
// When specifying the KeyFile, the location of the KeyFile should be
|
||||
// relative to the project output directory which is
|
||||
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
|
||||
// located in the project directory, you would specify the AssemblyKeyFile
|
||||
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
|
||||
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
|
||||
// documentation for more information on this.
|
||||
//
|
||||
[assembly:CLSCompliant(true)]
|
||||
[assembly:ComVisible(true)]
|
File diff suppressed because it is too large
Load diff
|
@ -1,122 +0,0 @@
|
|||
<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectType>Local</ProjectType>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{379BC478-7D84-4E0E-A4B8-197905C824AE}</ProjectGuid>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
<AssemblyKeyContainerName>
|
||||
</AssemblyKeyContainerName>
|
||||
<AssemblyName>Gnu.Getopt</AssemblyName>
|
||||
<AssemblyOriginatorKeyFile>
|
||||
</AssemblyOriginatorKeyFile>
|
||||
<DefaultClientScript>JScript</DefaultClientScript>
|
||||
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
|
||||
<DefaultTargetSchema>IE50</DefaultTargetSchema>
|
||||
<DelaySign>false</DelaySign>
|
||||
<OutputType>Library</OutputType>
|
||||
<RootNamespace>Gnu.Getopt</RootNamespace>
|
||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||
<StartupObject>
|
||||
</StartupObject>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<OldToolsVersion>0.0</OldToolsVersion>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DocumentationFile>bin\Debug\Gnu.Getopt.XML</DocumentationFile>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>false</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>full</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DocumentationFile>bin\Release\Gnu.Getopt.XML</DocumentationFile>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>true</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>none</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System">
|
||||
<Name>System</Name>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Getopt.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="LongOpt.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="MessagesBundle.cs.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MessagesBundle.de.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MessagesBundle.fr.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MessagesBundle.hu.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MessagesBundle.ja.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MessagesBundle.nl.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MessagesBundle.no.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MessagesBundle.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,239 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
/* LongOpt.cs -- C#.NET port of Long option object for Getopt
|
||||
/*
|
||||
/* Copyright (c) 1998 by Aaron M. Renn (arenn@urbanophile.com)
|
||||
/* C#.NET Port Copyright (c) 2004 by Klaus Prückl (klaus.prueckl@aon.at)
|
||||
/*
|
||||
/* This program is free software; you can redistribute it and/or modify
|
||||
/* it under the terms of the GNU Library General Public License as published
|
||||
/* by the Free Software Foundation; either version 2 of the License or
|
||||
/* (at your option) any later version.
|
||||
/*
|
||||
/* This program is distributed in the hope that it will be useful, but
|
||||
/* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
/* GNU Library General Public License for more details.
|
||||
/*
|
||||
/* You should have received a copy of the GNU Library General Public License
|
||||
/* along with this program; see the file COPYING.LIB. If not, write to
|
||||
/* the Free Software Foundation Inc., 59 Temple Place - Suite 330,
|
||||
/* Boston, MA 02111-1307 USA
|
||||
/**************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Resources;
|
||||
using System.Text;
|
||||
|
||||
namespace Gnu.Getopt
|
||||
{
|
||||
/// <summary>
|
||||
/// Constant enumeration values used for the LongOpt <c>hasArg</c>
|
||||
/// constructor argument.
|
||||
/// </summary>
|
||||
public enum Argument
|
||||
{
|
||||
/// <summary>
|
||||
/// This value indicates that the option takes no argument.
|
||||
/// </summary>
|
||||
No = 0,
|
||||
/// <summary>
|
||||
/// This value indicates that the option takes an argument that is
|
||||
/// required.
|
||||
/// </summary>
|
||||
Required = 1,
|
||||
/// <summary>
|
||||
/// This value indicates that the option takes an argument that is
|
||||
/// optional.
|
||||
/// </summary>
|
||||
Optional = 2
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This object represents the definition of a long option in the C# port
|
||||
/// of GNU getopt. An array of LongOpt objects is passed to the
|
||||
/// <see cref="Getopt"/> object to define the list of valid long options
|
||||
/// for a given parsing session. Refer to the <see cref="Getopt"/>
|
||||
/// documentation for details on the format of long options.
|
||||
/// </summary>
|
||||
/// <seealso cref="Getopt">Getopt</seealso>
|
||||
/// <author>Aaron M. Renn (arenn@urbanophile.com)</author>
|
||||
/// <author>Klaus Prückl (klaus.prueckl@aon.at)</author>
|
||||
public class LongOpt
|
||||
{
|
||||
#region Instance Variables
|
||||
/// <summary>
|
||||
/// The name of the long option.
|
||||
/// </summary>
|
||||
private string name;
|
||||
|
||||
/// <summary>
|
||||
/// Indicates whether the option has no argument, a required argument,
|
||||
/// or an optional argument.
|
||||
/// </summary>
|
||||
private Argument hasArg;
|
||||
|
||||
/// <summary>
|
||||
/// If this variable is not null, then the value stored in <c>val</c>
|
||||
/// is stored here when this long option is encountered. If this is
|
||||
/// null, the value stored in <c>val</c> is treated as the name of an
|
||||
/// equivalent short option.
|
||||
/// </summary>
|
||||
private StringBuilder flag;
|
||||
|
||||
/// <summary>
|
||||
/// The value to store in <c>flag</c> if flag is not null, otherwise
|
||||
/// the equivalent short option character for this long option.
|
||||
/// </summary>
|
||||
private int val;
|
||||
|
||||
/// <summary>
|
||||
/// The localized strings are kept in the resources, which can be
|
||||
/// accessed by the <see cref="ResourceManager"/> class.
|
||||
/// </summary>
|
||||
private ResourceManager resManager = new ResourceManager(
|
||||
"Gnu.Getopt.MessagesBundle", Assembly.GetExecutingAssembly());
|
||||
|
||||
/// <summary>
|
||||
/// The current UI culture (set to en-US when posixly correctness is
|
||||
/// enabled).
|
||||
/// </summary>
|
||||
private CultureInfo cultureInfo = CultureInfo.CurrentUICulture;
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
/// <summary>
|
||||
/// Create a new LongOpt object with the given parameter values. If the
|
||||
/// value passed as <paramref name="hasArg"/> is not valid, then an
|
||||
/// <see cref="ArgumentException"/> is thrown.
|
||||
/// </summary>
|
||||
/// <param name="name">
|
||||
/// The long option string.
|
||||
/// </param>
|
||||
/// <param name="hasArg">
|
||||
/// Indicates whether the option has no argument
|
||||
/// (<see cref="Argument.No"/>), a required argument
|
||||
/// (<see cref="Argument.Required"/>) or an optional argument
|
||||
/// (<see cref="Argument.Optional"/>).
|
||||
/// </param>
|
||||
/// <param name="flag">
|
||||
/// If non-null, this is a location to store the value of
|
||||
/// <paramref name="val"/> when this option is encountered, otherwise
|
||||
/// <paramref name="val"/> is treated as the equivalent short option
|
||||
/// character.
|
||||
/// </param>
|
||||
/// <param name="val">
|
||||
/// The value to return for this long option, or the equivalent single
|
||||
/// letter option to emulate if flag is null.
|
||||
/// </param>
|
||||
/// <exception cref="System.ArgumentException">
|
||||
/// Is thrown if the <paramref name="hasArg"/> param is not one of
|
||||
/// <see cref="Argument.No"/>, <see cref="Argument.Required"/> or
|
||||
/// <see cref="Argument.Optional"/>.
|
||||
/// </exception>
|
||||
public LongOpt(string name, Argument hasArg, StringBuilder flag,
|
||||
int val)
|
||||
{
|
||||
// Check for application setting "Gnu.PosixlyCorrect" to determine
|
||||
// whether to strictly follow the POSIX standard. This replaces the
|
||||
// "POSIXLY_CORRECT" environment variable in the C version
|
||||
try
|
||||
{
|
||||
if((bool) new AppSettingsReader().GetValue(
|
||||
"Gnu.PosixlyCorrect", typeof(bool)))
|
||||
{
|
||||
this.cultureInfo = new CultureInfo("en-US");
|
||||
}
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
}
|
||||
|
||||
// Validate hasArg
|
||||
if ((hasArg != Argument.No) && (hasArg != Argument.Required) &&
|
||||
(hasArg != Argument.Optional))
|
||||
{
|
||||
object[] msgArgs = new object[]{hasArg};
|
||||
throw new System.ArgumentException(string.Format(
|
||||
this.resManager.GetString("getopt.invalidValue",
|
||||
this.cultureInfo), msgArgs));
|
||||
}
|
||||
|
||||
// Store off values
|
||||
this.name = name;
|
||||
this.hasArg = hasArg;
|
||||
this.flag = flag;
|
||||
this.val = val;
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Returns the name of this LongOpt as a string
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// The name of the long option
|
||||
/// </returns>
|
||||
public string Name
|
||||
{
|
||||
get { return this.name; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the value set for the <c>hasArg</c> field for this long
|
||||
/// option.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// The value of <c>hasArg</c>.
|
||||
/// </returns>
|
||||
public Argument HasArg
|
||||
{
|
||||
get { return this.hasArg; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the value of the <c>flag</c> field for this long option.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// The value of <c>flag</c>.
|
||||
/// </returns>
|
||||
public StringBuilder Flag
|
||||
{
|
||||
get { return this.flag; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the value of the <c>val</c> field for this long option.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// The value of <c>val</c>.
|
||||
/// </returns>
|
||||
public int Val
|
||||
{
|
||||
get { return this.val; }
|
||||
}
|
||||
} // Class LongOpt
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: volba ''{1}'' je nejednoznaèná</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: volba ''--{1}'' nepøipou¹tí argument</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: volba ''{1}{2}'' nepøipou¹tí argument</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: volba ''{1}'' vy¾aduje argument</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: nepøípustná volba ''--{1}''</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: nepøípustná volba ''{1}{2}''</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: nepøípustná volba -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: neplatná volba -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: volba vy¾aduje argument -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>Neplatná hodnota {0} parameteru 'has_arg' </value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: Option ''{1}'' ist zweideutig</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: Option ''--{1}'' erlaubt kein Argument</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: Option ''{1}{2}'' erlaubt kein Argument</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: Option ''{1}'' benötigt ein Argument</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: Unbekannte Option ''--{1}''</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: Unbekannte Option ''{1}{2}''</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: Verbotene Option -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: Ungültige Option -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: Option benötigt ein Argument -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>Ungültiger Wert {0} für Parameter 'has_arg' </value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: l'option ''{1}'' est ambiguë</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: l'option ''--{1}'' ne permet pas de paramètre</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: l'option ''{1}{2}'' ne permet pas de paramètre</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: l'option ''{1}'' requiert un paramètre</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: option non reconnue ''--{1}''</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: option non reconnue ''{1}{2}''</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: option illégale -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: option invalide -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: cette option requiert un paramètre -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>Valeur invalide {0} pour le paramètre 'has_arg'</value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: opció ''{1}'' félreérthetõ</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: opció ''--{1}'' nem enged meg argumentumot</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: opció ''{1}{2}'' nem enged meg argumentumot</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: opció ''{1}'' argumentumot igényel</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: ismeretlen opció ''--{1}''</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: ismeretlen opció ''{1}{2}''</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: illegális opció -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: érvénytelen opció -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: az opció argumentumot igényel -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>Érvénytelen érték {0} a következõ paraméterhez 'has_arg' </value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: ''{1}'' \u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u66d6\u6627\u3067\u3059\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: ''--{1}'' \u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u3082\u3061\u307e\u305b\u3093\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: ''{1}{2}'' \u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u3082\u3061\u307e\u305b\u3093\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: ''{1}'' \u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u5fc5\u8981\u3067\u3059\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: ''--{1}'' \u306f\u7121\u52b9\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: ''{1}{2}'' \u306f\u7121\u52b9\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: -- {1} \u306f\u4e0d\u6b63\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: -- {1} \u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: -- {1} \u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u5fc5\u8981\u3067\u3059\u3002</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>{0} \u306f\u3001'has_arg' \u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u4e0d\u6b63\u306a\u5024\u3067\u3059\u3002</value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: optie ''{1}'' is ambigue</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: optie ''--{1}'' staat geen argumenten toe</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: optie ''{1}{2}'' staat geen argumenten toe</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: optie ''{1}'' heeft een argument nodig</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: onbekende optie ''--{1}''</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: onbekende optie ''{1}{2}''</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: niet-toegestane optie -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: onjuiste optie -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: optie heeft een argument nodig -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>Ongeldige waarde {0} voor parameter 'has_arg' </value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: flagget ''{1}'' er flertydig</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: flagget ''--{1}'' tillater ikke et argument</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: flagget ''{1}{2}'' tillater ikke et argument</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: flagget ''{1}'' krever et argument</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: ukjent flagg ''--{1}''</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: ukjent flagg ''{1}{2}''</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: ugyldig flagg -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: ugyldig flagg -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: flagget krever et argument -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>Ugyldig verdi {0} for parameter 'has_arg' </value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="ResMimeType">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="Version">
|
||||
<value>1.0.0.0</value>
|
||||
</resheader>
|
||||
<resheader name="Reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="Writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="getopt.ambigious">
|
||||
<value>{0}: option ''{1}'' is ambiguous</value>
|
||||
</data>
|
||||
<data name="getopt.arguments1">
|
||||
<value>{0}: option ''--{1}'' doesn't allow an argument</value>
|
||||
</data>
|
||||
<data name="getopt.arguments2">
|
||||
<value>{0}: option ''{1}{2}'' doesn't allow an argument</value>
|
||||
</data>
|
||||
<data name="getopt.requires">
|
||||
<value>{0}: option ''{1}'' requires an argument</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized">
|
||||
<value>{0}: unrecognized option ''--{1}''</value>
|
||||
</data>
|
||||
<data name="getopt.unrecognized2">
|
||||
<value>{0}: unrecognized option ''{1}{2}''</value>
|
||||
</data>
|
||||
<data name="getopt.invalid">
|
||||
<value>{0}: invalid option -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.illegal">
|
||||
<value>{0}: illegal option -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.requires2">
|
||||
<value>{0}: option requires an argument -- {1}</value>
|
||||
</data>
|
||||
<data name="getopt.invalidValue">
|
||||
<value>Invalid value {0} for parameter 'has_arg' </value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{859A653A-7728-4F02-BAF2-A5CD8F991916}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>GNU.Gettext</RootNamespace>
|
||||
<AssemblyName>GNU.Gettext</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.DataSetExtensions">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="intl.cs" />
|
||||
<Compile Include="msgfmt.cs" />
|
||||
<Compile Include="msgunfmt.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,58 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Gettext")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Microsoft")]
|
||||
[assembly: AssemblyProduct("Gettext")]
|
||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("3be71b7d-867c-46de-bb4d-d12215f0ae67")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -1,520 +0,0 @@
|
|||
/**
|
||||
* gettext-cs-utils
|
||||
*
|
||||
* Copyright 2011 Manas Technology Solutions
|
||||
* http://www.manas.com.ar/
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
/* GNU gettext for C#
|
||||
* Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
* Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Library General Public License as published
|
||||
* by the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Using the GNU gettext approach, compiled message catalogs are assemblies
|
||||
* containing just one class, a subclass of GettextResourceSet. They are thus
|
||||
* interoperable with standard ResourceManager based code.
|
||||
*
|
||||
* The main differences between the common .NET resources approach and the
|
||||
* GNU gettext approach are:
|
||||
* - In the .NET resource approach, the keys are abstract textual shortcuts.
|
||||
* In the GNU gettext approach, the keys are the English/ASCII version
|
||||
* of the messages.
|
||||
* - In the .NET resource approach, the translation files are called
|
||||
* "Resource.locale.resx" and are UTF-8 encoded XML files. In the GNU gettext
|
||||
* approach, the translation files are called "Resource.locale.po" and are
|
||||
* in the encoding the translator has chosen. There are at least three GUI
|
||||
* translating tools (Emacs PO mode, KDE KBabel, GNOME gtranslator).
|
||||
* - In the .NET resource approach, the function ResourceManager.GetString
|
||||
* returns an empty string or throws an InvalidOperationException when no
|
||||
* translation is found. In the GNU gettext approach, the GetString function
|
||||
* returns the (English) message key in that case.
|
||||
* - In the .NET resource approach, there is no support for plural handling.
|
||||
* In the GNU gettext approach, we have the GetPluralString function.
|
||||
*
|
||||
* To compile GNU gettext message catalogs into C# assemblies, the msgfmt
|
||||
* program can be used.
|
||||
*/
|
||||
|
||||
using System; /* String, InvalidOperationException, Console */
|
||||
using System.Globalization; /* CultureInfo */
|
||||
using System.Resources; /* ResourceManager, ResourceSet, IResourceReader */
|
||||
using System.Reflection; /* Assembly, ConstructorInfo */
|
||||
using System.Collections; /* Hashtable, ICollection, IEnumerator, IDictionaryEnumerator */
|
||||
using System.IO; /* Path, FileNotFoundException, Stream */
|
||||
using System.Text; /* StringBuilder */
|
||||
|
||||
namespace GNU.Gettext {
|
||||
|
||||
/// <summary>
|
||||
/// Each instance of this class can be used to lookup translations for a
|
||||
/// given resource name. For each <c>CultureInfo</c>, it performs the lookup
|
||||
/// in several assemblies, from most specific over territory-neutral to
|
||||
/// language-neutral.
|
||||
/// </summary>
|
||||
public class GettextResourceManager : ResourceManager {
|
||||
|
||||
// ======================== Public Constructors ========================
|
||||
|
||||
/// <summary>
|
||||
/// Constructor.
|
||||
/// </summary>
|
||||
/// <param name="baseName">the resource name, also the assembly base
|
||||
/// name</param>
|
||||
public GettextResourceManager (String baseName)
|
||||
: base (baseName, Assembly.GetCallingAssembly(), typeof (GettextResourceSet)) {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor.
|
||||
/// </summary>
|
||||
/// <param name="baseName">the resource name, also the assembly base
|
||||
/// name</param>
|
||||
public GettextResourceManager (String baseName, Assembly assembly)
|
||||
: base (baseName, assembly, typeof (GettextResourceSet)) {
|
||||
}
|
||||
|
||||
// ======================== Implementation ========================
|
||||
|
||||
/// <summary>
|
||||
/// Loads and returns a satellite assembly.
|
||||
/// </summary>
|
||||
// This is like Assembly.GetSatelliteAssembly, but uses resourceName
|
||||
// instead of assembly.GetName().Name, and works around a bug in
|
||||
// mono-0.28.
|
||||
private static Assembly GetSatelliteAssembly (Assembly assembly, String resourceName, CultureInfo culture) {
|
||||
String satelliteExpectedLocation =
|
||||
Path.GetDirectoryName(assembly.Location)
|
||||
+ Path.DirectorySeparatorChar + culture.Name
|
||||
+ Path.DirectorySeparatorChar + resourceName + ".resources.dll";
|
||||
return Assembly.LoadFrom(satelliteExpectedLocation);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads and returns the satellite assembly for a given culture.
|
||||
/// </summary>
|
||||
private Assembly MySatelliteAssembly (CultureInfo culture) {
|
||||
return GetSatelliteAssembly(MainAssembly, BaseName, culture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a resource name to a class name.
|
||||
/// </summary>
|
||||
/// <returns>a nonempty string consisting of alphanumerics and underscores
|
||||
/// and starting with a letter or underscore</returns>
|
||||
private static String ConstructClassName (String resourceName) {
|
||||
// We could just return an arbitrary fixed class name, like "Messages",
|
||||
// assuming that every assembly will only ever contain one
|
||||
// GettextResourceSet subclass, but this assumption would break the day
|
||||
// we want to support multi-domain PO files in the same format...
|
||||
bool valid = (resourceName.Length > 0);
|
||||
for (int i = 0; valid && i < resourceName.Length; i++) {
|
||||
char c = resourceName[i];
|
||||
if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c == '_')
|
||||
|| (i > 0 && c >= '0' && c <= '9')))
|
||||
valid = false;
|
||||
}
|
||||
if (valid)
|
||||
return resourceName;
|
||||
else {
|
||||
// Use hexadecimal escapes, using the underscore as escape character.
|
||||
String hexdigit = "0123456789abcdef";
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.Append("__UESCAPED__");
|
||||
for (int i = 0; i < resourceName.Length; i++) {
|
||||
char c = resourceName[i];
|
||||
if (c >= 0xd800 && c < 0xdc00
|
||||
&& i+1 < resourceName.Length
|
||||
&& resourceName[i+1] >= 0xdc00 && resourceName[i+1] < 0xe000) {
|
||||
// Combine two UTF-16 words to a character.
|
||||
char c2 = resourceName[i+1];
|
||||
int uc = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
|
||||
b.Append('_');
|
||||
b.Append('U');
|
||||
b.Append(hexdigit[(uc >> 28) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 24) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 20) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 16) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 12) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 8) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 4) & 0x0f]);
|
||||
b.Append(hexdigit[uc & 0x0f]);
|
||||
i++;
|
||||
} else if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')
|
||||
|| (c >= '0' && c <= '9'))) {
|
||||
int uc = c;
|
||||
b.Append('_');
|
||||
b.Append('u');
|
||||
b.Append(hexdigit[(uc >> 12) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 8) & 0x0f]);
|
||||
b.Append(hexdigit[(uc >> 4) & 0x0f]);
|
||||
b.Append(hexdigit[uc & 0x0f]);
|
||||
} else
|
||||
b.Append(c);
|
||||
}
|
||||
return b.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a resource set for a given culture.
|
||||
/// </summary>
|
||||
/// <exception cref="ArgumentException">
|
||||
/// The expected type name is not valid.
|
||||
/// </exception>
|
||||
/// <exception cref="ReflectionTypeLoadException">
|
||||
/// satelliteAssembly does not contain the expected type.
|
||||
/// </exception>
|
||||
/// <exception cref="NullReferenceException">
|
||||
/// The type has no no-arguments constructor.
|
||||
/// </exception>
|
||||
private static GettextResourceSet InstantiateResourceSet (Assembly satelliteAssembly, String resourceName, CultureInfo culture) {
|
||||
// We expect a class with a culture dependent class name.
|
||||
Type clazz = satelliteAssembly.GetType(ConstructClassName(resourceName)+"_"+culture.Name.Replace('-','_'));
|
||||
// We expect it has a no-argument constructor, and invoke it.
|
||||
ConstructorInfo constructor = clazz.GetConstructor(Type.EmptyTypes);
|
||||
return constructor.Invoke(null) as GettextResourceSet;
|
||||
}
|
||||
|
||||
private static GettextResourceSet[] EmptyResourceSetArray = new GettextResourceSet[0];
|
||||
|
||||
// Cache for already loaded GettextResourceSet cascades.
|
||||
private Hashtable /* CultureInfo -> GettextResourceSet[] */ Loaded = new Hashtable();
|
||||
|
||||
/// <summary>
|
||||
/// Returns the array of <c>GettextResourceSet</c>s for a given culture,
|
||||
/// loading them if necessary, and maintaining the cache.
|
||||
/// </summary>
|
||||
private GettextResourceSet[] GetResourceSetsFor (CultureInfo culture) {
|
||||
//Console.WriteLine(">> GetResourceSetsFor "+culture);
|
||||
// Look up in the cache.
|
||||
GettextResourceSet[] result = Loaded[culture] as GettextResourceSet[];
|
||||
if (result == null) {
|
||||
lock(this) {
|
||||
// Look up again - maybe another thread has filled in the entry
|
||||
// while we slept waiting for the lock.
|
||||
result = Loaded[culture] as GettextResourceSet[];
|
||||
if (result == null) {
|
||||
// Determine the GettextResourceSets for the given culture.
|
||||
if (culture.Parent == null || culture.Equals(CultureInfo.InvariantCulture))
|
||||
// Invariant culture.
|
||||
result = EmptyResourceSetArray;
|
||||
else {
|
||||
// Use a satellite assembly as primary GettextResourceSet, and
|
||||
// the result for the parent culture as fallback.
|
||||
GettextResourceSet[] parentResult = GetResourceSetsFor(culture.Parent);
|
||||
Assembly satelliteAssembly;
|
||||
try {
|
||||
satelliteAssembly = MySatelliteAssembly(culture);
|
||||
} catch (FileNotFoundException e) {
|
||||
satelliteAssembly = null;
|
||||
}
|
||||
if (satelliteAssembly != null) {
|
||||
GettextResourceSet satelliteResourceSet;
|
||||
try {
|
||||
satelliteResourceSet = InstantiateResourceSet(satelliteAssembly, BaseName, culture);
|
||||
} catch (Exception e) {
|
||||
Console.Error.WriteLine(e);
|
||||
Console.Error.WriteLine(e.StackTrace);
|
||||
satelliteResourceSet = null;
|
||||
}
|
||||
if (satelliteResourceSet != null) {
|
||||
result = new GettextResourceSet[1+parentResult.Length];
|
||||
result[0] = satelliteResourceSet;
|
||||
Array.Copy(parentResult, 0, result, 1, parentResult.Length);
|
||||
} else
|
||||
result = parentResult;
|
||||
} else
|
||||
result = parentResult;
|
||||
}
|
||||
// Put the result into the cache.
|
||||
Loaded.Add(culture, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Console.WriteLine("<< GetResourceSetsFor "+culture);
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
/// <summary>
|
||||
/// Releases all loaded <c>GettextResourceSet</c>s and their assemblies.
|
||||
/// </summary>
|
||||
// TODO: No way to release an Assembly?
|
||||
public override void ReleaseAllResources () {
|
||||
...
|
||||
}
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// Returns the translation of <paramref name="msgid"/> in a given culture.
|
||||
/// </summary>
|
||||
/// <param name="msgid">the key string to be translated, an ASCII
|
||||
/// string</param>
|
||||
/// <returns>the translation of <paramref name="msgid"/>, or
|
||||
/// <paramref name="msgid"/> if none is found</returns>
|
||||
public override String GetString (String msgid, CultureInfo culture) {
|
||||
foreach (GettextResourceSet rs in GetResourceSetsFor(culture)) {
|
||||
String translation = rs.GetString(msgid);
|
||||
if (translation != null)
|
||||
return translation;
|
||||
}
|
||||
// Fallback.
|
||||
return msgid;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the translation of <paramref name="msgid"/> and
|
||||
/// <paramref name="msgidPlural"/> in a given culture, choosing the right
|
||||
/// plural form depending on the number <paramref name="n"/>.
|
||||
/// </summary>
|
||||
/// <param name="msgid">the key string to be translated, an ASCII
|
||||
/// string</param>
|
||||
/// <param name="msgidPlural">the English plural of <paramref name="msgid"/>,
|
||||
/// an ASCII string</param>
|
||||
/// <param name="n">the number, should be >= 0</param>
|
||||
/// <returns>the translation, or <paramref name="msgid"/> or
|
||||
/// <paramref name="msgidPlural"/> if none is found</returns>
|
||||
public virtual String GetPluralString (String msgid, String msgidPlural, long n, CultureInfo culture) {
|
||||
foreach (GettextResourceSet rs in GetResourceSetsFor(culture)) {
|
||||
String translation = rs.GetPluralString(msgid, msgidPlural, n);
|
||||
if (translation != null)
|
||||
return translation;
|
||||
}
|
||||
// Fallback: Germanic plural form.
|
||||
return (n == 1 ? msgid : msgidPlural);
|
||||
}
|
||||
|
||||
// ======================== Public Methods ========================
|
||||
|
||||
/// <summary>
|
||||
/// Returns the translation of <paramref name="msgid"/> in the current
|
||||
/// culture.
|
||||
/// </summary>
|
||||
/// <param name="msgid">the key string to be translated, an ASCII
|
||||
/// string</param>
|
||||
/// <returns>the translation of <paramref name="msgid"/>, or
|
||||
/// <paramref name="msgid"/> if none is found</returns>
|
||||
public override String GetString (String msgid) {
|
||||
return GetString(msgid, CultureInfo.CurrentUICulture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the translation of <paramref name="msgid"/> and
|
||||
/// <paramref name="msgidPlural"/> in the current culture, choosing the
|
||||
/// right plural form depending on the number <paramref name="n"/>.
|
||||
/// </summary>
|
||||
/// <param name="msgid">the key string to be translated, an ASCII
|
||||
/// string</param>
|
||||
/// <param name="msgidPlural">the English plural of <paramref name="msgid"/>,
|
||||
/// an ASCII string</param>
|
||||
/// <param name="n">the number, should be >= 0</param>
|
||||
/// <returns>the translation, or <paramref name="msgid"/> or
|
||||
/// <paramref name="msgidPlural"/> if none is found</returns>
|
||||
public virtual String GetPluralString (String msgid, String msgidPlural, long n) {
|
||||
return GetPluralString(msgid, msgidPlural, n, CultureInfo.CurrentUICulture);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>
|
||||
/// Each instance of this class encapsulates a single PO file.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// This API of this class is not meant to be used directly; use
|
||||
/// <c>GettextResourceManager</c> instead.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
// We need this subclass of ResourceSet, because the plural formula must come
|
||||
// from the same ResourceSet as the object containing the plural forms.
|
||||
public class GettextResourceSet : ResourceSet {
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new message catalog. When using this constructor, you
|
||||
/// must override the <c>ReadResources</c> method, in order to initialize
|
||||
/// the <c>Table</c> property. The message catalog will support plural
|
||||
/// forms only if the <c>ReadResources</c> method installs values of type
|
||||
/// <c>String[]</c> and if the <c>PluralEval</c> method is overridden.
|
||||
/// </summary>
|
||||
protected GettextResourceSet ()
|
||||
: base (DummyResourceReader) {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new message catalog, by reading the string/value pairs from
|
||||
/// the given <paramref name="reader"/>. The message catalog will support
|
||||
/// plural forms only if the reader can produce values of type
|
||||
/// <c>String[]</c> and if the <c>PluralEval</c> method is overridden.
|
||||
/// </summary>
|
||||
public GettextResourceSet (IResourceReader reader)
|
||||
: base (reader) {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new message catalog, by reading the string/value pairs from
|
||||
/// the given <paramref name="stream"/>, which should have the format of
|
||||
/// a <c>.resources</c> file. The message catalog will not support plural
|
||||
/// forms.
|
||||
/// </summary>
|
||||
public GettextResourceSet (Stream stream)
|
||||
: base (stream) {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new message catalog, by reading the string/value pairs from
|
||||
/// the file with the given <paramref name="fileName"/>. The file should
|
||||
/// be in the format of a <c>.resources</c> file. The message catalog will
|
||||
/// not support plural forms.
|
||||
/// </summary>
|
||||
public GettextResourceSet (String fileName)
|
||||
: base (fileName) {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the translation of <paramref name="msgid"/>.
|
||||
/// </summary>
|
||||
/// <param name="msgid">the key string to be translated, an ASCII
|
||||
/// string</param>
|
||||
/// <returns>the translation of <paramref name="msgid"/>, or <c>null</c> if
|
||||
/// none is found</returns>
|
||||
// The default implementation essentially does (String)Table[msgid].
|
||||
// Here we also catch the plural form case.
|
||||
public override String GetString (String msgid) {
|
||||
Object value = GetObject(msgid);
|
||||
if (value == null || value is String)
|
||||
return (String)value;
|
||||
else if (value is String[])
|
||||
// A plural form, but no number is given.
|
||||
// Like the C implementation, return the first plural form.
|
||||
return (value as String[])[0];
|
||||
else
|
||||
throw new InvalidOperationException("resource for \""+msgid+"\" in "+GetType().FullName+" is not a string");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the translation of <paramref name="msgid"/>, with possibly
|
||||
/// case-insensitive lookup.
|
||||
/// </summary>
|
||||
/// <param name="msgid">the key string to be translated, an ASCII
|
||||
/// string</param>
|
||||
/// <returns>the translation of <paramref name="msgid"/>, or <c>null</c> if
|
||||
/// none is found</returns>
|
||||
// The default implementation essentially does (String)Table[msgid].
|
||||
// Here we also catch the plural form case.
|
||||
public override String GetString (String msgid, bool ignoreCase) {
|
||||
Object value = GetObject(msgid, ignoreCase);
|
||||
if (value == null || value is String)
|
||||
return (String)value;
|
||||
else if (value is String[])
|
||||
// A plural form, but no number is given.
|
||||
// Like the C implementation, return the first plural form.
|
||||
return (value as String[])[0];
|
||||
else
|
||||
throw new InvalidOperationException("resource for \""+msgid+"\" in "+GetType().FullName+" is not a string");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the translation of <paramref name="msgid"/> and
|
||||
/// <paramref name="msgidPlural"/>, choosing the right plural form
|
||||
/// depending on the number <paramref name="n"/>.
|
||||
/// </summary>
|
||||
/// <param name="msgid">the key string to be translated, an ASCII
|
||||
/// string</param>
|
||||
/// <param name="msgidPlural">the English plural of <paramref name="msgid"/>,
|
||||
/// an ASCII string</param>
|
||||
/// <param name="n">the number, should be >= 0</param>
|
||||
/// <returns>the translation, or <c>null</c> if none is found</returns>
|
||||
public virtual String GetPluralString (String msgid, String msgidPlural, long n) {
|
||||
Object value = GetObject(msgid);
|
||||
if (value == null || value is String)
|
||||
return (String)value;
|
||||
else if (value is String[]) {
|
||||
String[] choices = value as String[];
|
||||
long index = PluralEval(n);
|
||||
return choices[index >= 0 && index < choices.Length ? index : 0];
|
||||
} else
|
||||
throw new InvalidOperationException("resource for \""+msgid+"\" in "+GetType().FullName+" is not a string");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the index of the plural form to be chosen for a given number.
|
||||
/// The default implementation is the Germanic plural formula:
|
||||
/// zero for <paramref name="n"/> == 1, one for <paramref name="n"/> != 1.
|
||||
/// </summary>
|
||||
protected virtual long PluralEval (long n) {
|
||||
return (n == 1 ? 0 : 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the keys of this resource set, i.e. the strings for which
|
||||
/// <c>GetObject()</c> can return a non-null value.
|
||||
/// </summary>
|
||||
public virtual ICollection Keys {
|
||||
get {
|
||||
return Table.Keys;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A trivial instance of <c>IResourceReader</c> that does nothing.
|
||||
/// </summary>
|
||||
// Needed by the no-arguments constructor.
|
||||
private static IResourceReader DummyResourceReader = new DummyIResourceReader();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A trivial <c>IResourceReader</c> implementation.
|
||||
/// </summary>
|
||||
class DummyIResourceReader : IResourceReader {
|
||||
|
||||
// Implementation of IDisposable.
|
||||
void System.IDisposable.Dispose () {
|
||||
}
|
||||
|
||||
// Implementation of IEnumerable.
|
||||
IEnumerator System.Collections.IEnumerable.GetEnumerator () {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Implementation of IResourceReader.
|
||||
void System.Resources.IResourceReader.Close () {
|
||||
}
|
||||
IDictionaryEnumerator System.Resources.IResourceReader.GetEnumerator () {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue