T4 шаблон контроля пробелов - PullRequest
4 голосов
/ 21 декабря 2011

Существуют ли какие-либо команды для простого управления пробелами вывода шаблона T4? Я получаю некоторые чрезмерные вкладки. Мне показалось, что я запомнил способ управления пробелами в шаблонах ...

Ответы [ 3 ]

5 голосов
/ 22 декабря 2011

PushIndent, PopIndent, ClearIndent http://msdn.microsoft.com/en-us/library/bb126474.aspx

Не форматируйте шаблон для удобства чтения.Любые пробелы, находящиеся вне блока управления, окажутся в выходных данных

for(int i=0; i < 10; i++) 
{
   #>
     Hello
    <#
}

и будут

   Hello
      Hello
      Hello
      Hello
      Hello
      Hello
2 голосов
/ 03 февраля 2017

только в том случае, если кто-то ищет добавление вкладок с помощью метода writeLine.Экранирующий символ работает.

<#
for(int i=0; i < 10; i++) 
{
  this.WriteLine("\tHello");
}
#>
2 голосов
/ 04 ноября 2015

Вероятно, нет большого исправления, это проблема с самим двигателем T4, IMO.Но если вы пытаетесь уменьшить начальные табуляции / пробелы в выходных данных при сохранении вложенности директив, вы можете сделать следующее:

До

<# for (...) { #>
    <# if (...) { #>
        SomeText
    <# } #>
<# } #> 

После

<# for (...) { #>
<#     if (...) { #>
        SomeText
<#     } #>
<# } #>

Например, начните свои директивы со столбца 0, сделайте отступ внутри самой директивы!В дополнение к этому, вы можете обрезать дополнительные строки:

private void TrimExtraneousLineBreaksAfterCommentsFromGeneratedFile(ref string fileText)
{
    Regex regex = new Regex(@"(//.+?)(?:\r?\n){2,}");

    // Replace multiple coniguous line breaks, after a comment, with a single line break.
    fileText = regex.Replace(fileText, "\r\n");
}

private void TrimExtraneousLineBreaksFromGeneratedFile(ref string fileText)
{
    Regex regex = new Regex(@"\r?\n(?:\s*?\r?\n)+");

    // Replace multiple coniguous line breaks with 2 line breaks.
    fileText = regex.Replace(fileText, "\r\n\r\n");

    // Remove spaces/line breaks from the file.
    fileText = fileText.Trim();
}

YMMV

...