1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Use the project line ending setting for auto-generated JUCE files and write the IDE project files using the native line endings

This commit is contained in:
ed 2018-11-28 15:32:15 +00:00
parent 3948e56486
commit 1f40a7b10e
14 changed files with 121 additions and 77 deletions

View file

@ -66,16 +66,10 @@ void SourceCodeDocument::reloadInternal()
auto fileContent = getFile().loadFileAsString(); auto fileContent = getFile().loadFileAsString();
auto lineFeed = [&]() -> const char* auto lineFeed = getLineFeedForFile (fileContent);
{
if (fileContent.contains ("\r\n"))
return "\r\n";
if (fileContent.contains ("\n")) if (lineFeed.isEmpty())
return "\n"; lineFeed = project->getProjectLineFeed();
return project->getProjectLineFeed().toRawUTF8();
}();
codeDoc->setNewLineCharacters (lineFeed); codeDoc->setNewLineCharacters (lineFeed);

View file

@ -98,7 +98,7 @@ void JucerDocument::timerCallback()
stopTimer(); stopTimer();
beginTransaction(); beginTransaction();
flushChangesToDocuments (nullptr); flushChangesToDocuments (nullptr, false);
} }
} }
@ -513,23 +513,7 @@ bool JucerDocument::findTemplateFiles (String& headerContent, String& cppContent
return true; return true;
} }
static String fixLineEndings (const String& s, const char* lineFeed) bool JucerDocument::flushChangesToDocuments (Project* project, bool isInitial)
{
StringArray lines;
lines.addLines (s);
for (int i = 0; i < lines.size(); ++i)
lines.set (i, lines[i].trimEnd());
while (lines.size() > 0 && lines [lines.size() - 1].trim().isEmpty())
lines.remove (lines.size() - 1);
lines.add (String());
return lines.joinIntoString (lineFeed);
}
bool JucerDocument::flushChangesToDocuments (Project* project)
{ {
String headerTemplate, cppTemplate; String headerTemplate, cppTemplate;
if (! findTemplateFiles (headerTemplate, cppTemplate)) if (! findTemplateFiles (headerTemplate, cppTemplate))
@ -554,10 +538,20 @@ bool JucerDocument::flushChangesToDocuments (Project* project)
generated.applyToCode (cppTemplate, headerFile.withFileExtension (".cpp"), generated.applyToCode (cppTemplate, headerFile.withFileExtension (".cpp"),
existingCpp, project); existingCpp, project);
auto* lineFeed = project->getProjectLineFeed().toRawUTF8(); if (isInitial)
{
jassert (project != nullptr);
headerTemplate = fixLineEndings (headerTemplate, lineFeed); auto lineFeed = project->getProjectLineFeed();
cppTemplate = fixLineEndings (cppTemplate, lineFeed);
headerTemplate = replaceLineFeeds (headerTemplate, lineFeed);
cppTemplate = replaceLineFeeds (cppTemplate, lineFeed);
}
else
{
headerTemplate = replaceLineFeeds (headerTemplate, getLineFeedForFile (existingHeader));
cppTemplate = replaceLineFeeds (cppTemplate, getLineFeedForFile (existingCpp));
}
if (header->getCodeDocument().getAllContent() != headerTemplate) if (header->getCodeDocument().getAllContent() != headerTemplate)
header->getCodeDocument().replaceAllContent (headerTemplate); header->getCodeDocument().replaceAllContent (headerTemplate);
@ -780,7 +774,7 @@ struct NewGUIComponentWizard : public NewFileWizard::Type
{ {
jucerDoc->setClassName (newFile.getFileNameWithoutExtension()); jucerDoc->setClassName (newFile.getFileNameWithoutExtension());
jucerDoc->flushChangesToDocuments (&project); jucerDoc->flushChangesToDocuments (&project, true);
jucerDoc.reset(); jucerDoc.reset();
cpp->save(); cpp->save();

View file

@ -58,7 +58,7 @@ public:
File getCppFile() const { return cpp->getFile(); } File getCppFile() const { return cpp->getFile(); }
File getHeaderFile() const { return getCppFile().withFileExtension (".h"); } File getHeaderFile() const { return getCppFile().withFileExtension (".h"); }
bool flushChangesToDocuments (Project*); bool flushChangesToDocuments (Project*, bool);
bool reloadFromDocument(); bool reloadFromDocument();
//============================================================================== //==============================================================================

View file

@ -253,6 +253,8 @@ public:
void writeFile (const File& gradleProjectFolder, const String& filePath, const String& fileContent) const void writeFile (const File& gradleProjectFolder, const String& filePath, const String& fileContent) const
{ {
MemoryOutputStream outStream; MemoryOutputStream outStream;
outStream.setNewLineString ("\n");
outStream << fileContent; outStream << fileContent;
overwriteFileIfDifferentOrThrow (gradleProjectFolder.getChildFile (filePath), outStream); overwriteFileIfDifferentOrThrow (gradleProjectFolder.getChildFile (filePath), outStream);
} }
@ -260,6 +262,8 @@ public:
void writeBinaryFile (const File& gradleProjectFolder, const String& filePath, const char* binaryData, const int binarySize) const void writeBinaryFile (const File& gradleProjectFolder, const String& filePath, const char* binaryData, const int binarySize) const
{ {
MemoryOutputStream outStream; MemoryOutputStream outStream;
outStream.setNewLineString ("\n");
outStream.write (binaryData, static_cast<size_t> (binarySize)); outStream.write (binaryData, static_cast<size_t> (binarySize));
overwriteFileIfDifferentOrThrow (gradleProjectFolder.getChildFile (filePath), outStream); overwriteFileIfDifferentOrThrow (gradleProjectFolder.getChildFile (filePath), outStream);
} }
@ -350,6 +354,7 @@ private:
void writeCmakeFile (const File& file) const void writeCmakeFile (const File& file) const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << "# Automatically generated makefile, created by the Projucer" << newLine mo << "# Automatically generated makefile, created by the Projucer" << newLine
<< "# Don't edit this file! Your changes will be overwritten when you re-save the Projucer project!" << newLine << "# Don't edit this file! Your changes will be overwritten when you re-save the Projucer project!" << newLine
@ -544,6 +549,7 @@ private:
String getProjectBuildGradleFileContent() const String getProjectBuildGradleFileContent() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << "buildscript {" << newLine; mo << "buildscript {" << newLine;
mo << " repositories {" << newLine; mo << " repositories {" << newLine;
@ -581,6 +587,8 @@ private:
String getAppBuildGradleFileContent (const OwnedArray<LibraryModule>& modules) const String getAppBuildGradleFileContent (const OwnedArray<LibraryModule>& modules) const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << "apply plugin: 'com.android." << (isLibrary() ? "library" : "application") << "'" << newLine << newLine; mo << "apply plugin: 'com.android." << (isLibrary() ? "library" : "application") << "'" << newLine << newLine;
mo << "android {" << newLine; mo << "android {" << newLine;
@ -610,6 +618,7 @@ private:
String getAndroidProductFlavours() const String getAndroidProductFlavours() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << " flavorDimensions \"default\"" << newLine; mo << " flavorDimensions \"default\"" << newLine;
mo << " productFlavors {" << newLine; mo << " productFlavors {" << newLine;
@ -653,6 +662,7 @@ private:
String getAndroidSigningConfig() const String getAndroidSigningConfig() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
auto keyStoreFilePath = androidKeyStore.get().toString().replace ("${user.home}", "${System.properties['user.home']}") auto keyStoreFilePath = androidKeyStore.get().toString().replace ("${user.home}", "${System.properties['user.home']}")
.replace ("/", "${File.separator}"); .replace ("/", "${File.separator}");
@ -680,6 +690,7 @@ private:
auto targetSdkVersion = static_cast<int> (androidTargetSDK.get()); auto targetSdkVersion = static_cast<int> (androidTargetSDK.get());
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << " defaultConfig {" << newLine; mo << " defaultConfig {" << newLine;
@ -710,6 +721,7 @@ private:
String getAndroidBuildTypes() const String getAndroidBuildTypes() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << " buildTypes {" << newLine; mo << " buildTypes {" << newLine;
@ -740,6 +752,7 @@ private:
String getAndroidVariantFilter() const String getAndroidVariantFilter() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << " variantFilter { variant ->" << newLine; mo << " variantFilter { variant ->" << newLine;
mo << " def names = variant.flavors*.name" << newLine; mo << " def names = variant.flavors*.name" << newLine;
@ -762,6 +775,7 @@ private:
String getAndroidRepositories() const String getAndroidRepositories() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
auto repositories = StringArray::fromLines (androidRepositories.get().toString()); auto repositories = StringArray::fromLines (androidRepositories.get().toString());
@ -778,6 +792,8 @@ private:
String getAndroidDependencies() const String getAndroidDependencies() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << " dependencies {" << newLine; mo << " dependencies {" << newLine;
for (auto& d : StringArray::fromLines (androidDependencies.get().toString())) for (auto& d : StringArray::fromLines (androidDependencies.get().toString()))
@ -800,6 +816,7 @@ private:
String getApplyPlugins() const String getApplyPlugins() const
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
if (androidEnableRemoteNotifications.get()) if (androidEnableRemoteNotifications.get())
mo << "apply plugin: 'com.google.gms.google-services'" << newLine; mo << "apply plugin: 'com.google.gms.google-services'" << newLine;
@ -834,6 +851,8 @@ private:
} }
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
mo << " sourceSets {" << newLine; mo << " sourceSets {" << newLine;
mo << getSourceSetStringFor ("main.java.srcDirs", javaSourceSets); mo << getSourceSetStringFor ("main.java.srcDirs", javaSourceSets);
mo << newLine; mo << newLine;
@ -888,7 +907,7 @@ private:
s << "]" << newLine; s << "]" << newLine;
return s; return replaceLineFeeds (s, "\n");
} }
//============================================================================== //==============================================================================
@ -899,7 +918,7 @@ private:
props << "ndk.dir=" << sanitisePath (getAppSettings().getStoredPath (Ids::androidNDKPath, TargetOS::getThisOS()).get().toString()) << newLine props << "ndk.dir=" << sanitisePath (getAppSettings().getStoredPath (Ids::androidNDKPath, TargetOS::getThisOS()).get().toString()) << newLine
<< "sdk.dir=" << sanitisePath (getAppSettings().getStoredPath (Ids::androidSDKPath, TargetOS::getThisOS()).get().toString()) << newLine; << "sdk.dir=" << sanitisePath (getAppSettings().getStoredPath (Ids::androidSDKPath, TargetOS::getThisOS()).get().toString()) << newLine;
return props; return replaceLineFeeds (props, "\n");
} }
String getGradleWrapperPropertiesFileContent() const String getGradleWrapperPropertiesFileContent() const
@ -1186,7 +1205,9 @@ private:
createDirectoryOrThrow (file.getParentDirectory()); createDirectoryOrThrow (file.getParentDirectory());
PNGImageFormat png; PNGImageFormat png;
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
if (! png.writeImageToStream (im, mo)) if (! png.writeImageToStream (im, mo))
throw SaveError ("Can't generate Android icon file"); throw SaveError ("Can't generate Android icon file");

View file

@ -169,6 +169,7 @@ public:
void create (const OwnedArray<LibraryModule>&) const override void create (const OwnedArray<LibraryModule>&) const override
{ {
MemoryOutputStream out; MemoryOutputStream out;
out.setNewLineString ("\n");
out << "# Automatically generated CMakeLists, created by the Projucer" << newLine out << "# Automatically generated CMakeLists, created by the Projucer" << newLine
<< "# Don't edit this file! Your changes will be overwritten when you re-save the Projucer project!" << newLine << "# Don't edit this file! Your changes will be overwritten when you re-save the Projucer project!" << newLine
@ -198,7 +199,9 @@ public:
MemoryBlock existingContent; MemoryBlock existingContent;
getTargetFolder().getChildFile ("CMakeLists.txt").loadFileAsData (existingContent); getTargetFolder().getChildFile ("CMakeLists.txt").loadFileAsData (existingContent);
MemoryOutputStream out (existingContent, true); MemoryOutputStream out (existingContent, true);
out.setNewLineString ("\n");
out << "###############################################################################" << newLine out << "###############################################################################" << newLine
<< "# " << exporter->getName() << newLine << "# " << exporter->getName() << newLine

View file

@ -150,7 +150,7 @@ public:
XmlElement xml ("CodeBlocks_project_file"); XmlElement xml ("CodeBlocks_project_file");
addVersion (xml); addVersion (xml);
createProject (*xml.createNewChildElement ("Project")); createProject (*xml.createNewChildElement ("Project"));
writeXmlOrThrow (xml, cbpFile, "UTF-8", 10); writeXmlOrThrow (xml, cbpFile, "UTF-8", 10, true);
} }
//============================================================================== //==============================================================================

View file

@ -422,6 +422,8 @@ public:
void create (const OwnedArray<LibraryModule>&) const override void create (const OwnedArray<LibraryModule>&) const override
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString ("\n");
writeMakefile (mo); writeMakefile (mo);
overwriteFileIfDifferentOrThrow (getTargetFolder().getChildFile ("Makefile"), mo); overwriteFileIfDifferentOrThrow (getTargetFolder().getChildFile ("Makefile"), mo);

View file

@ -443,18 +443,12 @@ protected:
static void writeXmlOrThrow (const XmlElement& xml, const File& file, const String& encoding, int maxCharsPerLine, bool useUnixNewLines = false) static void writeXmlOrThrow (const XmlElement& xml, const File& file, const String& encoding, int maxCharsPerLine, bool useUnixNewLines = false)
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
xml.writeToStream (mo, String(), false, true, encoding, maxCharsPerLine);
if (useUnixNewLines) if (useUnixNewLines)
{ mo.setNewLineString ("\n");
MemoryOutputStream mo2;
mo2 << mo.toString().replace ("\r\n", "\n"); xml.writeToStream (mo, String(), false, true, encoding, maxCharsPerLine);
overwriteFileIfDifferentOrThrow (file, mo2); overwriteFileIfDifferentOrThrow (file, mo);
}
else
{
overwriteFileIfDifferentOrThrow (file, mo);
}
} }
static Image rescaleImageForIcon (Drawable&, int iconSize); static Image rescaleImageForIcon (Drawable&, int iconSize);

View file

@ -136,6 +136,7 @@ void ProjectSaver::writePluginCharacteristicsFile()
} }
MemoryOutputStream mem; MemoryOutputStream mem;
mem.setNewLineString (projectLineFeed);
mem << "//==============================================================================" << newLine mem << "//==============================================================================" << newLine
<< "// Audio plugin settings.." << newLine << "// Audio plugin settings.." << newLine

View file

@ -76,6 +76,8 @@ public:
return thread.result; return thread.result;
} }
projectLineFeed = project.getProjectLineFeed();
auto appConfigUserContent = loadUserContentFromAppConfig(); auto appConfigUserContent = loadUserContentFromAppConfig();
auto oldFile = project.getFile(); auto oldFile = project.getFile();
@ -269,6 +271,7 @@ private:
File appConfigFile; File appConfigFile;
bool hasBinaryData = false; bool hasBinaryData = false;
String projectLineFeed = "\r\n";
// Recursively clears out any files in a folder that we didn't create, but avoids // Recursively clears out any files in a folder that we didn't create, but avoids
// any folders containing hidden files that might be used by version-control systems. // any folders containing hidden files that might be used by version-control systems.
@ -325,6 +328,8 @@ private:
if (xml != nullptr) if (xml != nullptr)
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString (projectLineFeed);
xml->writeToStream (mo, String()); xml->writeToStream (mo, String());
replaceFileIfDifferent (projectFile, mo); replaceFileIfDifferent (projectFile, mo);
} }
@ -367,7 +372,7 @@ private:
userContent.add ({}); userContent.add ({});
} }
return userContent.joinIntoString (newLine) + newLine; return userContent.joinIntoString (projectLineFeed) + projectLineFeed;
} }
void checkModuleValidity (OwnedArray<LibraryModule>& modules) void checkModuleValidity (OwnedArray<LibraryModule>& modules)
@ -516,6 +521,8 @@ private:
appConfigFile = getAppConfigFile(); appConfigFile = getAppConfigFile();
MemoryOutputStream mem; MemoryOutputStream mem;
mem.setNewLineString (projectLineFeed);
writeAppConfig (mem, modules, userContent); writeAppConfig (mem, modules, userContent);
saveGeneratedFile (project.getAppConfigFilename(), mem); saveGeneratedFile (project.getAppConfigFilename(), mem);
} }
@ -570,6 +577,8 @@ private:
void writeAppHeader (const OwnedArray<LibraryModule>& modules) void writeAppHeader (const OwnedArray<LibraryModule>& modules)
{ {
MemoryOutputStream mem; MemoryOutputStream mem;
mem.setNewLineString (projectLineFeed);
writeAppHeader (mem, modules); writeAppHeader (mem, modules);
saveGeneratedFile (project.getJuceSourceHFilename(), mem); saveGeneratedFile (project.getJuceSourceHFilename(), mem);
} }
@ -581,6 +590,7 @@ private:
for (auto& cu : module->getAllCompileUnits()) for (auto& cu : module->getAllCompileUnits())
{ {
MemoryOutputStream mem; MemoryOutputStream mem;
mem.setNewLineString (projectLineFeed);
writeAutoGenWarningComment (mem); writeAutoGenWarningComment (mem);
@ -650,6 +660,8 @@ private:
void writeReadmeFile() void writeReadmeFile()
{ {
MemoryOutputStream out; MemoryOutputStream out;
out.setNewLineString (projectLineFeed);
out << newLine out << newLine
<< " Important Note!!" << newLine << " Important Note!!" << newLine
<< " ================" << newLine << " ================" << newLine
@ -676,7 +688,8 @@ private:
void writeUnityScriptFile() void writeUnityScriptFile()
{ {
String unityScriptContents (BinaryData::jucer_UnityPluginGUIScript_cs); auto unityScriptContents = replaceLineFeeds (BinaryData::jucer_UnityPluginGUIScript_cs,
projectLineFeed);
auto projectName = Project::addUnityPluginPrefixIfNecessary (project.getProjectNameString()); auto projectName = Project::addUnityPluginPrefixIfNecessary (project.getProjectNameString());

View file

@ -96,23 +96,20 @@ int64 ResourceFile::getTotalDataSize() const
return total; return total;
} }
static String getComment() static void writeComment (MemoryOutputStream& mo)
{ {
String comment; mo << newLine << newLine
comment << newLine << newLine << " This is an auto-generated file: Any edits you make may be overwritten!" << newLine
<< " This is an auto-generated file: Any edits you make may be overwritten!" << newLine << newLine
<< newLine << "*/" << newLine
<< "*/" << newLine << newLine;
<< newLine;
return comment;
} }
Result ResourceFile::writeHeader (MemoryOutputStream& header) Result ResourceFile::writeHeader (MemoryOutputStream& header)
{ {
header << "/* =========================================================================================" header << "/* =========================================================================================";
<< getComment() writeComment (header);
<< "#pragma once" << newLine header << "#pragma once" << newLine
<< newLine << newLine
<< "namespace " << className << newLine << "namespace " << className << newLine
<< "{" << newLine; << "{" << newLine;
@ -167,9 +164,9 @@ Result ResourceFile::writeCpp (MemoryOutputStream& cpp, const File& headerFile,
{ {
bool isFirstFile = (i == 0); bool isFirstFile = (i == 0);
cpp << "/* ==================================== " << resourceFileIdentifierString << " ====================================" cpp << "/* ==================================== " << resourceFileIdentifierString << " ====================================";
<< getComment() writeComment (cpp);
<< "namespace " << className << newLine cpp << "namespace " << className << newLine
<< "{" << newLine; << "{" << newLine;
bool containsAnyImages = false; bool containsAnyImages = false;
@ -275,10 +272,14 @@ Result ResourceFile::writeCpp (MemoryOutputStream& cpp, const File& headerFile,
Result ResourceFile::write (Array<File>& filesCreated, const int maxFileSize) Result ResourceFile::write (Array<File>& filesCreated, const int maxFileSize)
{ {
auto projectLineFeed = project.getProjectLineFeed();
auto headerFile = project.getBinaryDataHeaderFile(); auto headerFile = project.getBinaryDataHeaderFile();
{ {
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString (projectLineFeed);
auto r = writeHeader (mo); auto r = writeHeader (mo);
if (r.failed()) if (r.failed())
@ -298,6 +299,7 @@ Result ResourceFile::write (Array<File>& filesCreated, const int maxFileSize)
auto cpp = project.getBinaryDataCppFile (fileIndex); auto cpp = project.getBinaryDataCppFile (fileIndex);
MemoryOutputStream mo; MemoryOutputStream mo;
mo.setNewLineString (projectLineFeed);
auto r = writeCpp (mo, headerFile, i, maxFileSize); auto r = writeCpp (mo, headerFile, i, maxFileSize);

View file

@ -39,6 +39,32 @@ String joinLinesIntoSourceFile (StringArray& lines)
return lines.joinIntoString (getPreferredLineFeed()) + getPreferredLineFeed(); return lines.joinIntoString (getPreferredLineFeed()) + getPreferredLineFeed();
} }
String replaceLineFeeds (const String& content, const String& lineFeed)
{
StringArray lines;
lines.addLines (content);
return lines.joinIntoString (lineFeed);
}
String getLineFeedForFile (const String& fileContent)
{
auto t = fileContent.getCharPointer();
while (! t.isEmpty())
{
switch (t.getAndAdvance())
{
case 0: break;
case '\n': return "\n";
case '\r': if (*t == '\n') return "\r\n";
default: continue;
}
}
return {};
}
String trimCommentCharsFromStartOfLine (const String& line) String trimCommentCharsFromStartOfLine (const String& line)
{ {
return line.trimStart().trimCharactersAtStart ("*/").trimStart(); return line.trimStart().trimCharactersAtStart ("*/").trimStart();

View file

@ -30,6 +30,8 @@
//============================================================================== //==============================================================================
const char* getPreferredLineFeed(); const char* getPreferredLineFeed();
String joinLinesIntoSourceFile (StringArray& lines); String joinLinesIntoSourceFile (StringArray& lines);
String replaceLineFeeds (const String& content, const String& lineFeed);
String getLineFeedForFile (const String& fileContent);
var parseJUCEHeaderMetadata (const File&); var parseJUCEHeaderMetadata (const File&);

View file

@ -32,22 +32,14 @@ NewFileWizard::Type* createGUIComponentWizard();
//============================================================================== //==============================================================================
namespace namespace
{ {
String addPreferredProjectLineFeed (const String& content, const String& lineFeed)
{
if (lineFeed != "\r\n")
return content.replace ("\r\n", lineFeed);
return content;
}
static String fillInBasicTemplateFields (const File& file, const Project::Item& item, const char* templateName) static String fillInBasicTemplateFields (const File& file, const Project::Item& item, const char* templateName)
{ {
return addPreferredProjectLineFeed (item.project.getFileTemplate (templateName) return replaceLineFeeds (item.project.getFileTemplate (templateName)
.replace ("%%filename%%", file.getFileName(), false) .replace ("%%filename%%", file.getFileName(), false)
.replace ("%%date%%", Time::getCurrentTime().toString (true, true, true), false) .replace ("%%date%%", Time::getCurrentTime().toString (true, true, true), false)
.replace ("%%author%%", SystemStats::getFullUserName(), false) .replace ("%%author%%", SystemStats::getFullUserName(), false)
.replace ("%%include_corresponding_header%%", CodeHelpers::createIncludeStatement (file.withFileExtension (".h"), file)), .replace ("%%include_corresponding_header%%", CodeHelpers::createIncludeStatement (file.withFileExtension (".h"), file)),
item.project.getProjectLineFeed()); item.project.getProjectLineFeed());
} }
static bool fillInNewCppFileTemplate (const File& file, const Project::Item& item, const char* templateName) static bool fillInNewCppFileTemplate (const File& file, const Project::Item& item, const char* templateName)
@ -180,7 +172,7 @@ public:
.replace ("%%component_class%%", className) .replace ("%%component_class%%", className)
.replace ("%%include_juce%%", CodeHelpers::createIncludeStatement (parent.project.getAppIncludeFile(), newFile)); .replace ("%%include_juce%%", CodeHelpers::createIncludeStatement (parent.project.getAppIncludeFile(), newFile));
addPreferredProjectLineFeed (content, parent.project.getProjectLineFeed()); content = replaceLineFeeds (content, parent.project.getProjectLineFeed());
if (FileHelpers::overwriteFileWithNewDataIfDifferent (newFile, content)) if (FileHelpers::overwriteFileWithNewDataIfDifferent (newFile, content))
{ {