|
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2022 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- By using JUCE, you agree to the terms of both the JUCE 7 End-User License
- Agreement and JUCE Privacy Policy.
-
- End User License Agreement: www.juce.com/juce-7-licence
- Privacy Policy: www.juce.com/juce-privacy-policy
-
- Or: You may also use this code under the terms of the GPL v3 (see
- www.gnu.org/licenses).
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- #include "../../Application/jucer_Headers.h"
- #include "jucer_CodeHelpers.h"
-
- //==============================================================================
- namespace FileHelpers
- {
- bool containsAnyNonHiddenFiles (const File& folder)
- {
- for (const auto& di : RangedDirectoryIterator (folder, false))
- if (! di.getFile().isHidden())
- return true;
-
- return false;
- }
-
- bool shouldPathsBeRelative (String path1, String path2)
- {
- path1 = build_tools::unixStylePath (path1);
- path2 = build_tools::unixStylePath (path2);
-
- const int len = jmin (path1.length(), path2.length());
- int commonBitLength = 0;
-
- for (int i = 0; i < len; ++i)
- {
- if (CharacterFunctions::toLowerCase (path1[i]) != CharacterFunctions::toLowerCase (path2[i]))
- break;
-
- ++commonBitLength;
- }
-
- return path1.substring (0, commonBitLength).removeCharacters ("/:").isNotEmpty();
- }
-
- // removes "/../" bits from the middle of the path
- String simplifyPath (String::CharPointerType p)
- {
- #if JUCE_WINDOWS
- if (CharacterFunctions::indexOf (p, CharPointer_ASCII ("/../")) >= 0
- || CharacterFunctions::indexOf (p, CharPointer_ASCII ("\\..\\")) >= 0)
- #else
- if (CharacterFunctions::indexOf (p, CharPointer_ASCII ("/../")) >= 0)
- #endif
- {
- StringArray toks;
-
- #if JUCE_WINDOWS
- toks.addTokens (p, "\\/", StringRef());
- #else
- toks.addTokens (p, "/", StringRef());
- #endif
-
- while (toks[0] == ".")
- toks.remove (0);
-
- for (int i = 1; i < toks.size(); ++i)
- {
- if (toks[i] == ".." && toks [i - 1] != "..")
- {
- toks.removeRange (i - 1, 2);
- i = jmax (0, i - 2);
- }
- }
-
- return toks.joinIntoString ("/");
- }
-
- return p;
- }
-
- String simplifyPath (const String& path)
- {
- #if JUCE_WINDOWS
- if (path.contains ("\\..\\") || path.contains ("/../"))
- #else
- if (path.contains ("/../"))
- #endif
- return simplifyPath (path.getCharPointer());
-
- return path;
- }
- }
|