Skip to content

Commit a374041

Browse files
authored
Merge pull request DomCR#799 from DomCR/issue-724_invalid-characters-dxf
Issue 724 invalid characters dxf
2 parents 68dbe72 + 1f157f8 commit a374041

File tree

4 files changed

+58
-19
lines changed

4 files changed

+58
-19
lines changed

src/ACadSharp.Tests/Tables/TableEntryCommonTests.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public abstract class TableEntryCommonTests<T>
1111
{
1212
public static string DefaultName = "table_entry";
1313

14-
[Fact()]
14+
[Fact]
1515
public void ChangeName()
1616
{
1717
T entry = this.createEntry();
@@ -43,6 +43,17 @@ public void DetachCloneEvents()
4343
Assert.False(doc.Layers.Contains(name));
4444
}
4545

46+
[Fact]
47+
public void IsValidNameTest()
48+
{
49+
for (int i = 0; i < INamedCadObjectExtensions.InvalidCharacters.Length; i++)
50+
{
51+
var entry = this.createEntry($"{DefaultName}{INamedCadObjectExtensions.InvalidCharacters[i]}");
52+
53+
Assert.False(entry.IsValidDxfName());
54+
}
55+
}
56+
4657
[Fact]
4758
public void SetFlagUsingMapper()
4859
{
@@ -54,11 +65,16 @@ public void SetFlagUsingMapper()
5465
Assert.True(entry.Flags.HasFlag(StandardFlags.XrefResolved));
5566
}
5667

57-
protected abstract Table<T> getTable(CadDocument document);
68+
protected T createEntry()
69+
{
70+
return this.createEntry(DefaultName);
71+
}
5872

59-
protected virtual T createEntry()
73+
protected virtual T createEntry(string name)
6074
{
61-
return (T)Activator.CreateInstance(typeof(T), DefaultName);
75+
return (T)Activator.CreateInstance(typeof(T), name);
6276
}
77+
78+
protected abstract Table<T> getTable(CadDocument document);
6379
}
6480
}

src/ACadSharp/ACadSharp.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<PropertyGroup>
1818
<GenerateDocumentationFile>true</GenerateDocumentationFile>
1919
<PackageReadmeFile>README.md</PackageReadmeFile>
20-
<Version>3.2.8</Version>
20+
<Version>3.2.9</Version>
2121
<PackageOutputPath>../nupkg</PackageOutputPath>
2222
</PropertyGroup>
2323

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
namespace ACadSharp.Extensions
2+
{
3+
public static class INamedCadObjectExtensions
4+
{
5+
public static readonly char[] InvalidCharacters = { '\\', '/', ':', '*', '?', '"', '<', '>', '|', ';', ',', '=', '`' };
6+
7+
/// <summary>
8+
/// Check if the name of the object is valid for dxf format.
9+
/// </summary>
10+
/// <param name="namedCadObject"></param>
11+
/// <param name="version"></param>
12+
/// <returns></returns>
13+
public static bool IsValidDxfName(this INamedCadObject namedCadObject, ACadVersion version = ACadVersion.AC1032)
14+
{
15+
if (string.IsNullOrEmpty(namedCadObject.Name))
16+
{
17+
return false;
18+
}
19+
20+
if (version <= ACadVersion.AC1015 && namedCadObject.Name.Length > 31)
21+
{
22+
return false;
23+
}
24+
else if (namedCadObject.Name.Length > 255)
25+
{
26+
return false;
27+
}
28+
29+
return namedCadObject.Name.IndexOfAny(InvalidCharacters) == -1;
30+
}
31+
}
32+
}

src/ACadSharp/IO/DXF/DxfWriter.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class DxfWriter : CadWriterBase<DxfWriterConfiguration>
2323
/// <param name="filename">The file to write into.</param>
2424
/// <param name="document"></param>
2525
/// <param name="binary"></param>
26-
public DxfWriter(string filename, CadDocument document, bool binary)
26+
public DxfWriter(string filename, CadDocument document, bool binary = false)
2727
: this(File.Create(filename), document, binary)
2828
{
2929
}
@@ -34,7 +34,7 @@ public DxfWriter(string filename, CadDocument document, bool binary)
3434
/// <param name="stream">The stream to write into</param>
3535
/// <param name="document"></param>
3636
/// <param name="binary"></param>
37-
public DxfWriter(Stream stream, CadDocument document, bool binary) : base(stream, document)
37+
public DxfWriter(Stream stream, CadDocument document, bool binary = false) : base(stream, document)
3838
{
3939
this.IsBinary = binary;
4040
}
@@ -86,18 +86,9 @@ public override void Dispose()
8686
/// <param name="binary"></param>
8787
/// <param name="configuration"></param>
8888
/// <param name="notification"></param>
89-
public static void Write(string filename, CadDocument document, bool binary, DxfWriterConfiguration configuration = null, NotificationEventHandler notification = null)
89+
public static void Write(string filename, CadDocument document, bool binary = false, DxfWriterConfiguration configuration = null, NotificationEventHandler notification = null)
9090
{
91-
using (DxfWriter writer = new DxfWriter(filename, document, binary))
92-
{
93-
if (configuration != null)
94-
{
95-
writer.Configuration = configuration;
96-
}
97-
98-
writer.OnNotification += notification;
99-
writer.Write();
100-
}
91+
Write(File.Create(filename), document, binary, configuration, notification);
10192
}
10293

10394
/// <summary>
@@ -108,7 +99,7 @@ public static void Write(string filename, CadDocument document, bool binary, Dxf
10899
/// <param name="binary"></param>
109100
/// <param name="configuration"></param>
110101
/// <param name="notification"></param>
111-
public static void Write(Stream stream, CadDocument document, bool binary, DxfWriterConfiguration configuration = null, NotificationEventHandler notification = null)
102+
public static void Write(Stream stream, CadDocument document, bool binary = false, DxfWriterConfiguration configuration = null, NotificationEventHandler notification = null)
112103
{
113104
using (DxfWriter writer = new DxfWriter(stream, document, binary))
114105
{

0 commit comments

Comments
 (0)