# HG changeset patch # User Jerome LAFORGE # Date 1345558732 -7200 # Node ID 8a30a2f803ce686a1eb6d8dc2f4be99ca3fbf476 # Parent c0540f310854a758c3fb57e8aa4a76c586e00f15 Override global strip.trailing.spaces with strip.trailing.spaces by pattern files. Feature #3556320. diff -r c0540f310854 -r 8a30a2f803ce src/PropSetFile.cxx --- a/src/PropSetFile.cxx mer. août 08 23:38:24 2012 +1000 +++ b/src/PropSetFile.cxx mar. août 21 16:18:52 2012 +0200 @@ -507,7 +507,7 @@ } // Match file names to patterns allowing for a '*' suffix or prefix. -static bool MatchWild(const char *pattern, size_t lenPattern, const char *fileName, bool caseSensitive) { +bool PropSetFile::MatchWild(const char *pattern, size_t lenPattern, const char *fileName, bool caseSensitive) { size_t lenFileName = strlen(fileName); if (lenFileName == lenPattern) { if (StringEqual(pattern, fileName, lenFileName, caseSensitive)) { diff -r c0540f310854 -r 8a30a2f803ce src/PropSetFile.h --- a/src/PropSetFile.h mer. août 08 23:38:24 2012 +1000 +++ b/src/PropSetFile.h mar. août 21 16:18:52 2012 +0200 @@ -34,6 +34,7 @@ void Unset(const char *key, int lenKey=-1); void SetMultiple(const char *s); bool Exists(const char *key) const; + bool MatchWild(const char *pattern, size_t lenPattern, const char *fileName, bool caseSensitive); SString Get(const char *key) const; SString Evaluate(const char *key) const; SString GetExpanded(const char *key) const; diff -r c0540f310854 -r 8a30a2f803ce src/SciTEIO.cxx --- a/src/SciTEIO.cxx mer. août 08 23:38:24 2012 +1000 +++ b/src/SciTEIO.cxx mar. août 21 16:18:52 2012 +0200 @@ -921,7 +921,34 @@ bool retVal = false; // Perform clean ups on text before saving wEditor.Call(SCI_BEGINUNDOACTION); - if (props.GetInt("strip.trailing.spaces")) + SString stringTrailingSpacePrefix = "strip.trailing.spaces."; + const char *currentKey; + const char *currentValue; + bool isFound = false; + PropSetFile *currentProp = &CurrentBuffer()->props; + do { + bool b = currentProp->GetFirst(currentKey, currentValue); + while (b) { + if (0 == strncmp(stringTrailingSpacePrefix.c_str(), currentKey, stringTrailingSpacePrefix.length())) { + SString tmp(currentProp->Expand(currentKey).substr(stringTrailingSpacePrefix.length())); + tmp.substitute(';', '\0'); + int length = tmp.length(); + const char *pattern = tmp.c_str(); + while (length > 0) { + if (isFound = currentProp->MatchWild(pattern, strlen(pattern), saveName.Name().AsUTF8().c_str(), true)) + break; + length -= strlen(pattern) + 1; + pattern += strlen(pattern) + 1; + } + } + b = !isFound && currentProp->GetNext(currentKey, currentValue); + } + currentProp = currentProp->superPS; + } while (!isFound && currentProp != NULL); + if (isFound) { + if (atoi(currentValue)) + StripTrailingSpaces(); + } else if (props.GetInt("strip.trailing.spaces")) StripTrailingSpaces(); if (props.GetInt("ensure.final.line.end")) EnsureFinalNewLine();