diff --git a/Nuclex.Support (x86).csproj b/Nuclex.Support (x86).csproj
index d3bcbc8..4f22580 100644
--- a/Nuclex.Support (x86).csproj
+++ b/Nuclex.Support (x86).csproj
@@ -177,6 +177,8 @@
+
+
diff --git a/Source/FloatHelper.Test.cs b/Source/FloatHelper.Test.cs
index bae8a02..01402ec 100644
--- a/Source/FloatHelper.Test.cs
+++ b/Source/FloatHelper.Test.cs
@@ -1,4 +1,24 @@
-using System;
+#region CPL License
+/*
+Nuclex Framework
+Copyright (C) 2002-2008 Nuclex Development Labs
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the IBM Common Public License as
+published by the IBM Corporation; either version 1.0 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
+IBM Common Public License for more details.
+
+You should have received a copy of the IBM Common Public
+License along with this library
+*/
+#endregion
+
+using System;
using System.Collections.Generic;
#if UNITTEST
diff --git a/Source/FloatHelper.cs b/Source/FloatHelper.cs
index e6e568b..431eb96 100644
--- a/Source/FloatHelper.cs
+++ b/Source/FloatHelper.cs
@@ -1,4 +1,24 @@
-using System;
+#region CPL License
+/*
+Nuclex Framework
+Copyright (C) 2002-2008 Nuclex Development Labs
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the IBM Common Public License as
+published by the IBM Corporation; either version 1.0 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
+IBM Common Public License for more details.
+
+You should have received a copy of the IBM Common Public
+License along with this library
+*/
+#endregion
+
+using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
diff --git a/Source/IntegerHelper.Test.cs b/Source/IntegerHelper.Test.cs
index de6b9f0..438b66e 100644
--- a/Source/IntegerHelper.Test.cs
+++ b/Source/IntegerHelper.Test.cs
@@ -1,4 +1,24 @@
-using System;
+#region CPL License
+/*
+Nuclex Framework
+Copyright (C) 2002-2008 Nuclex Development Labs
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the IBM Common Public License as
+published by the IBM Corporation; either version 1.0 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
+IBM Common Public License for more details.
+
+You should have received a copy of the IBM Common Public
+License along with this library
+*/
+#endregion
+
+using System;
using System.Collections.Generic;
using NUnit.Framework;
diff --git a/Source/IntegerHelper.cs b/Source/IntegerHelper.cs
index 840d744..6b35e52 100644
--- a/Source/IntegerHelper.cs
+++ b/Source/IntegerHelper.cs
@@ -1,4 +1,24 @@
-using System;
+#region CPL License
+/*
+Nuclex Framework
+Copyright (C) 2002-2008 Nuclex Development Labs
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the IBM Common Public License as
+published by the IBM Corporation; either version 1.0 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
+IBM Common Public License for more details.
+
+You should have received a copy of the IBM Common Public
+License along with this library
+*/
+#endregion
+
+using System;
using System.Collections.Generic;
namespace Nuclex.Support {
diff --git a/Source/PathHelper.cs b/Source/PathHelper.cs
index e1c6147..38ba520 100644
--- a/Source/PathHelper.cs
+++ b/Source/PathHelper.cs
@@ -1,3 +1,23 @@
+#region CPL License
+/*
+Nuclex Framework
+Copyright (C) 2002-2008 Nuclex Development Labs
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the IBM Common Public License as
+published by the IBM Corporation; either version 1.0 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
+IBM Common Public License for more details.
+
+You should have received a copy of the IBM Common Public
+License along with this library
+*/
+#endregion
+
using System;
using System.Collections.Generic;
using System.Text;
diff --git a/Source/StringHelper.Test.cs b/Source/StringHelper.Test.cs
new file mode 100644
index 0000000..5e18edc
--- /dev/null
+++ b/Source/StringHelper.Test.cs
@@ -0,0 +1,40 @@
+#region CPL License
+/*
+Nuclex Framework
+Copyright (C) 2002-2008 Nuclex Development Labs
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the IBM Common Public License as
+published by the IBM Corporation; either version 1.0 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
+IBM Common Public License for more details.
+
+You should have received a copy of the IBM Common Public
+License along with this library
+*/
+#endregion
+
+using System;
+using System.IO;
+
+#if UNITTEST
+
+using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
+
+namespace Nuclex.Support {
+
+ /// Unit Test for the string helper class
+ [TestFixture]
+ public class PathHelperTest {
+
+
+ }
+
+} // namespace Nuclex.Support
+
+#endif // UNITTEST
diff --git a/Source/StringHelper.cs b/Source/StringHelper.cs
new file mode 100644
index 0000000..75d60d7
--- /dev/null
+++ b/Source/StringHelper.cs
@@ -0,0 +1,169 @@
+#region CPL License
+/*
+Nuclex Framework
+Copyright (C) 2002-2008 Nuclex Development Labs
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the IBM Common Public License as
+published by the IBM Corporation; either version 1.0 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
+IBM Common Public License for more details.
+
+You should have received a copy of the IBM Common Public
+License along with this library
+*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace Nuclex.Support {
+
+ /// Helper routines for working with strings
+ public static class StringHelper {
+
+ ///
+ /// Searches for the first occurence of a character other than the characters
+ /// listed in the parameter
+ ///
+ /// String that will be scanned in
+ /// Characters to not look for in the scanned string
+ ///
+ /// The index of the first occurence of a character not in the
+ /// array or -1 if all characters in the string were
+ /// present in the array.
+ ///
+ public static int IndexNotOfAny(string haystack, char[] anyNotOf) {
+ return IndexNotOfAny(haystack, anyNotOf, 0, haystack.Length);
+ }
+
+ ///
+ /// Searches for the first occurence of a character other than the characters
+ /// listed in the parameter
+ ///
+ /// String that will be scanned in
+ /// Characters to not look for in the scanned string
+ ///
+ /// Index of the character in the haystack at which to start scanning
+ ///
+ ///
+ /// The index of the first occurence of a character not in the
+ /// array or -1 if all characters in the string were
+ /// present in the array.
+ ///
+ public static int IndexNotOfAny(string haystack, char[] anyNotOf, int startIndex) {
+ return IndexNotOfAny(haystack, anyNotOf, startIndex, haystack.Length - startIndex);
+ }
+
+ ///
+ /// Searches for the first occurence of a character other than the characters
+ /// listed in the parameter
+ ///
+ /// String that will be scanned in
+ /// Characters to not look for in the scanned string
+ ///
+ /// Index of the character in the haystack at which to start scanning
+ ///
+ /// Number of characters in the haystack to scan
+ ///
+ /// The index of the first occurence of a character not in the
+ /// array or -1 if all characters in the string were
+ /// present in the array.
+ ///
+ public static int IndexNotOfAny(
+ string haystack, char[] anyNotOf, int startIndex, int count
+ ) {
+ int anyLength = anyNotOf.Length;
+
+ count += startIndex;
+ while(startIndex < count) {
+ char character = haystack[startIndex];
+
+ for(int anyIndex = 0; anyIndex < anyLength; ++anyIndex) {
+ if(character != anyNotOf[anyIndex]) {
+ return startIndex;
+ }
+ }
+
+ ++startIndex;
+ }
+
+ return -1;
+ }
+
+ ///
+ /// Searches backwards for the first occurence of a character other than the
+ /// characters listed in the parameter
+ ///
+ /// String that will be scanned in
+ /// Characters to not look for in the scanned string
+ ///
+ /// The index of the first occurence of a character not in the
+ /// array or -1 if all characters in the string were
+ /// present in the array.
+ ///
+ public static int LastIndexNotOfAny(string haystack, char[] anyNotOf) {
+ return LastIndexNotOfAny(haystack, anyNotOf, haystack.Length - 1, haystack.Length);
+ }
+
+ ///
+ /// Searches backwards for the first occurence of a character other than the
+ /// characters listed in the parameter
+ ///
+ /// String that will be scanned in
+ /// Characters to not look for in the scanned string
+ ///
+ /// Index of the character in the haystack at which to start scanning
+ ///
+ ///
+ /// The index of the first occurence of a character not in the
+ /// array or -1 if all characters in the string were
+ /// present in the array.
+ ///
+ public static int LastIndexNotOfAny(string haystack, char[] anyNotOf, int startIndex) {
+ return LastIndexNotOfAny(haystack, anyNotOf, startIndex, startIndex + 1);
+ }
+
+ ///
+ /// Searches backwards for the first occurence of a character other than the
+ /// characters listed in the parameter
+ ///
+ /// String that will be scanned in
+ /// Characters to not look for in the scanned string
+ ///
+ /// Index of the character in the haystack at which to start scanning
+ ///
+ /// Number of characters in the haystack to scan
+ ///
+ /// The index of the first occurence of a character not in the
+ /// array or -1 if all characters in the string were
+ /// present in the array.
+ ///
+ public static int LastIndexNotOfAny(
+ string haystack, char[] anyNotOf, int startIndex, int count
+ ) {
+ int anyLength = anyNotOf.Length;
+
+ count = startIndex - count;
+ while(startIndex > count) {
+ char character = haystack[startIndex];
+
+ for(int anyIndex = 0; anyIndex < anyLength; ++anyIndex) {
+ if(character != anyNotOf[anyIndex]) {
+ return startIndex;
+ }
+ }
+
+ --startIndex;
+ }
+
+ return -1;
+ }
+
+ }
+
+} // namespace Nuclex.Support