Fixed multiline comment saving

This commit is contained in:
Ben Wallis 2017-12-07 22:22:26 +00:00
parent 523a9553d9
commit 9cf4d86cb0
7 changed files with 52 additions and 24 deletions

View File

@ -471,11 +471,15 @@ namespace Filtration.Parser.Services
public string TranslateItemFilterBlockBaseToString(IItemFilterBlockBase itemFilterBlockBase)
{
var itemFilterBlock = itemFilterBlockBase as IItemFilterBlock;
if (itemFilterBlock != null) return TranslateItemFilterBlockToString(itemFilterBlock);
if (itemFilterBlockBase is IItemFilterBlock itemFilterBlock)
{
return TranslateItemFilterBlockToString(itemFilterBlock);
}
var itemFilterCommentBlock = itemFilterBlockBase as IItemFilterCommentBlock;
if (itemFilterCommentBlock != null) return TranslateItemFilterCommentBlockToString(itemFilterCommentBlock);
if (itemFilterBlockBase is IItemFilterCommentBlock itemFilterCommentBlock)
{
return TranslateItemFilterCommentBlockToString(itemFilterCommentBlock);
}
throw new InvalidOperationException("Unable to translate unknown ItemFilterBlock type");
}
@ -483,10 +487,18 @@ namespace Filtration.Parser.Services
// TODO: Private
public string TranslateItemFilterCommentBlockToString(IItemFilterCommentBlock itemFilterCommentBlock)
{
// TODO: Handle multi-line
// TODO: Tests
// TODO: # Section: text?
return $"#{itemFilterCommentBlock.Comment}";
var commentWithHashes = string.Empty;
// Add "# " to the beginning of each line of the comment before saving it
foreach (var line in new LineReader(() => new StringReader(itemFilterCommentBlock.Comment)))
{
commentWithHashes += $"# {line.TrimStart(' ')}{Environment.NewLine}";
}
// Remove trailing newline
return commentWithHashes.TrimEnd('\r', '\n');
}
// This method converts an ItemFilterBlock object into a string. This is used for copying a ItemFilterBlock

View File

@ -126,7 +126,11 @@ namespace Filtration.Parser.Services
// Process the script header
for (var i = 0; i < conditionBoundaries.Skip(1).First().StartLine; i++)
{
if (lines[i].StartsWith("#"))
if (lines[i].StartsWith("# EnableBlockGroups"))
{
script.ItemFilterScriptSettings.BlockGroupsEnabled = true;
}
else if (lines[i].StartsWith("#"))
{
script.Description += lines[i].Substring(1).Trim(' ') + Environment.NewLine;
}
@ -235,6 +239,11 @@ namespace Filtration.Parser.Services
outputString += "# Script edited with Filtration - https://github.com/ben-wallis/Filtration" +
Environment.NewLine;
if (script.ItemFilterScriptSettings.BlockGroupsEnabled)
{
outputString += "# EnableBlockGroups" + Environment.NewLine;
}
if (!string.IsNullOrEmpty(script.Description))
{
// ReSharper disable once LoopCanBeConvertedToQuery
@ -251,7 +260,7 @@ namespace Filtration.Parser.Services
// ReSharper disable once LoopCanBeConvertedToQuery
foreach (var block in script.ItemFilterBlocks)
{
outputString += _blockTranslator.TranslateItemFilterBlockToString(block as ItemFilterBlock) + Environment.NewLine;
outputString += _blockTranslator.TranslateItemFilterBlockBaseToString(block) + Environment.NewLine;
if (Settings.Default.ExtraLineBetweenBlocks)
{

View File

@ -536,6 +536,8 @@
<None Include="Resources\AlertSounds\SH22Vaal.wav">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<Resource Include="Resources\Icons\redo_icon.png" />
<Resource Include="Resources\Icons\undo_icon.png" />
<Content Include="Resources\ItemBaseTypes.txt" />
<Content Include="Resources\ItemClasses.txt" />
</ItemGroup>

View File

@ -50,7 +50,7 @@ using System.Windows;
// 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("0.15")]
[assembly: AssemblyVersion("0.16")]
[assembly: InternalsVisibleTo("Filtration.Tests")]
[assembly: InternalsVisibleTo("Filtration.ItemFilterPreview.Tests")]

View File

@ -7,7 +7,10 @@ namespace Filtration.UserControls
{
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
ScrollIntoView(e.AddedItems[0]);
if (e.AddedItems.Count > 0)
{
ScrollIntoView(e.AddedItems[0]);
}
base.OnSelectionChanged(e);
}

View File

@ -32,23 +32,29 @@
<StackPanel Grid.Row="0" Grid.Column="1">
<TextBlock FontWeight="Black">Filtration</TextBlock>
<TextBlock Text="{Binding Version}" />
<TextBlock>Copyright © 2015</TextBlock>
<TextBlock>Copyright © 2017</TextBlock>
<TextBlock>Created by Ben Wallis</TextBlock>
<TextBlock>
<Hyperlink NavigateUri="https://github.com/ben-wallis/Filtration/" extensions:HyperlinkExtensions.IsExternal="True">https://github.com/ben-wallis/Filtration/</Hyperlink>
<LineBreak />
</TextBlock>
</StackPanel>
<TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" TextWrapping="Wrap">
<TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" TextWrapping="Wrap" Margin="0,0,20,0">
As you may be able to tell from the MSPaint logo that I have expertly applied a lens flare to, I am not an artist. If you'd like to create a swanky logo for Filtration please
get in touch via e-mail or IRC.
</TextBlock>
</Grid>
<StackPanel Grid.Row="0" Grid.Column="1">
<TextBlock FontWeight="Bold">Contact</TextBlock>
<TextBlock TextWrapping="Wrap">IRC: irc.freenode.net #filtration</TextBlock>
<TextBlock TextWrapping="Wrap">E-mail: ben-wallis@users.noreply.github.com</TextBlock>
<TextBlock TextWrapping="Wrap">In-Game: AtomYcX</TextBlock>
<StackPanel>
<TextBlock FontWeight="Bold">Contact</TextBlock>
<TextBlock TextWrapping="Wrap">IRC: irc.freenode.net #filtration</TextBlock>
<TextBlock TextWrapping="Wrap">E-mail: ben-wallis@users.noreply.github.com</TextBlock>
<TextBlock TextWrapping="Wrap">In-Game: AtomYcX</TextBlock>
</StackPanel>
<StackPanel>
<TextBlock FontWeight="Bold"><LineBreak/>Special Thanks</TextBlock>
<TextBlock TextWrapping="Wrap">GlenCFL - Implemented support for the item filter 3.1 changes</TextBlock>
</StackPanel>
</StackPanel>
<ScrollViewer Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Margin="0,20,0,0" >
<TextBlock TextWrapping="Wrap" FontStyle="Italic">

View File

@ -19,10 +19,8 @@
<KeyBinding Command="{Binding SaveCommand}" Modifiers="Control" Key="S" />
<KeyBinding Command="{Binding OpenScriptCommand}" Modifiers="Control" Key="O" />
<KeyBinding Command="{Binding NewScriptCommand}" Modifiers="Control" Key="N" />
<!-- Undo/Redo support incomplete -->
<!--<KeyBinding Command="{Binding UndoCommand}" Modifiers="Control" Key="Z" />
<KeyBinding Command="{Binding RedoCommand}" Modifiers="Control" Key="Y" />-->
<KeyBinding Command="{Binding UndoCommand}" Modifiers="Control" Key="Z" />
<KeyBinding Command="{Binding RedoCommand}" Modifiers="Control" Key="Y" />
</fluent:RibbonWindow.InputBindings>
<utility:RoutedCommandHandlers.Commands>
<utility:RoutedCommandHandler RoutedCommand="{StaticResource OpenScriptRoutedCommand}" Command="{Binding OpenScriptCommand}" />
@ -89,12 +87,10 @@
<fluent:Button Header="Paste Style" Command="{Binding PasteBlockStyleCommand}" Icon="{StaticResource PasteStyleIcon}" LargeIcon="{StaticResource PasteIcon}" SizeDefinition="Middle" ToolTip="Paste Style (Ctrl+Shift+V)" />
<fluent:Button Header="Copy Script" Command="{Binding CopyScriptCommand}" Icon="{StaticResource CopyIcon}" LargeIcon="{StaticResource PasteIcon}" SizeDefinition="Middle" />
</fluent:RibbonGroupBox>
<!-- Undo/Redo support incomplete -->
<!--<fluent:RibbonGroupBox Header="Undo">
<fluent:RibbonGroupBox Header="Undo">
<fluent:Button Header="Undo" Command="{Binding UndoCommand}" ToolTip="Undo" SizeDefinition="Middle" Icon="{StaticResource UndoIcon}" />
<fluent:Button Header="Redo" Command="{Binding RedoCommand}" ToolTip="Redo" SizeDefinition="Middle" Icon="{StaticResource RedoIcon}" />
</fluent:RibbonGroupBox>-->
</fluent:RibbonGroupBox>
<fluent:RibbonGroupBox Header="Blocks">
<fluent:Button Header="Add Block" Command="{Binding AddBlockCommand}" SizeDefinition="Middle" Icon="{StaticResource AddBlockIcon}" />
<fluent:Button Header="Add Section" Command="{Binding AddSectionCommand}" SizeDefinition="Middle" Icon="{StaticResource AddSectionIcon}" />