Merge branch 'release' into dev
This commit is contained in:
commit
7b50ea39da
|
|
@ -100,117 +100,8 @@ namespace Microsoft.AspNetCore.Mvc.Localization
|
||||||
throw new ArgumentNullException(nameof(encoder));
|
throw new ArgumentNullException(nameof(encoder));
|
||||||
}
|
}
|
||||||
|
|
||||||
FormatValue(writer, encoder, Value, _arguments);
|
var formattableString = new HtmlFormattableString(Value, _arguments);
|
||||||
}
|
formattableString.WriteTo(writer, encoder);
|
||||||
|
|
||||||
private static void FormatValue(
|
|
||||||
TextWriter writer,
|
|
||||||
HtmlEncoder encoder,
|
|
||||||
string resourceString,
|
|
||||||
object[] arguments)
|
|
||||||
{
|
|
||||||
var position = 0;
|
|
||||||
var length = resourceString.Length;
|
|
||||||
StringBuilder tokenBuffer = null;
|
|
||||||
var isToken = false;
|
|
||||||
|
|
||||||
while (position < length)
|
|
||||||
{
|
|
||||||
var currentCharacter = resourceString[position];
|
|
||||||
position++;
|
|
||||||
|
|
||||||
if (currentCharacter == '}')
|
|
||||||
{
|
|
||||||
if (position < length && resourceString[position] == '}')
|
|
||||||
{
|
|
||||||
// Escaped curly brace: "}}".
|
|
||||||
AppendCurlyBrace(isToken, currentCharacter, tokenBuffer, writer);
|
|
||||||
position++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// End of a token.
|
|
||||||
Append(isToken, '}', tokenBuffer, writer);
|
|
||||||
if (position == length)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
AppendToOutput(tokenBuffer, arguments, writer, encoder);
|
|
||||||
|
|
||||||
isToken = false;
|
|
||||||
tokenBuffer = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (currentCharacter == '{')
|
|
||||||
{
|
|
||||||
if (position < length && resourceString[position] == '{')
|
|
||||||
{
|
|
||||||
// Escaped curly brace: "{{".
|
|
||||||
AppendCurlyBrace(isToken, currentCharacter, tokenBuffer, writer);
|
|
||||||
position++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Start of a new token.
|
|
||||||
tokenBuffer = new StringBuilder();
|
|
||||||
tokenBuffer.Append('{');
|
|
||||||
isToken = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Append(isToken, currentCharacter, tokenBuffer, writer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AppendToOutput(tokenBuffer, arguments, writer, encoder);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void Append(
|
|
||||||
bool isToken,
|
|
||||||
char value,
|
|
||||||
StringBuilder tokenBuffer,
|
|
||||||
TextWriter writer)
|
|
||||||
{
|
|
||||||
if (isToken)
|
|
||||||
{
|
|
||||||
tokenBuffer.Append(value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
writer.Write(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void AppendCurlyBrace(
|
|
||||||
bool isToken,
|
|
||||||
char curlyBrace,
|
|
||||||
StringBuilder tokenBuffer,
|
|
||||||
TextWriter writer)
|
|
||||||
{
|
|
||||||
if (isToken)
|
|
||||||
{
|
|
||||||
tokenBuffer
|
|
||||||
.Append(curlyBrace)
|
|
||||||
.Append(curlyBrace);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
writer.Write(curlyBrace);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void AppendToOutput(
|
|
||||||
StringBuilder tokenBuffer,
|
|
||||||
object[] arguments,
|
|
||||||
TextWriter writer,
|
|
||||||
HtmlEncoder encoder)
|
|
||||||
{
|
|
||||||
if (tokenBuffer != null && tokenBuffer.Length > 0)
|
|
||||||
{
|
|
||||||
encoder.Encode(writer, string.Format(tokenBuffer.ToString(), arguments));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -76,10 +76,15 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
|
||||||
new object[] { 10, new DateTime(2015, 10, 10) },
|
new object[] { 10, new DateTime(2015, 10, 10) },
|
||||||
"Bonjour {HtmlEncode[[x}]] Bienvenue {1:yyyy}"
|
"Bonjour {HtmlEncode[[x}]] Bienvenue {1:yyyy}"
|
||||||
};
|
};
|
||||||
yield return new object[] {
|
yield return new object[] { // padding happens after encoding
|
||||||
"Bonjour {0,6} Bienvenue {{1:yyyy}}",
|
"Bonjour {0,6} Bienvenue {{1:yyyy}}",
|
||||||
new object[] { 10, new DateTime(2015, 10, 10) },
|
new object[] { 10, new DateTime(2015, 10, 10) },
|
||||||
"Bonjour HtmlEncode[[ 10]] Bienvenue {1:yyyy}"
|
"Bonjour HtmlEncode[[10]] Bienvenue {1:yyyy}"
|
||||||
|
};
|
||||||
|
yield return new object[] { // padding happens after encoding
|
||||||
|
"Bonjour {0,20} Bienvenue {{1:yyyy}}",
|
||||||
|
new object[] { 10, new DateTime(2015, 10, 10) },
|
||||||
|
"Bonjour HtmlEncode[[10]] Bienvenue {1:yyyy}"
|
||||||
};
|
};
|
||||||
if (!TestPlatformHelper.IsMono)
|
if (!TestPlatformHelper.IsMono)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue