Browse Source

Update juce

tags/1.9.7
falkTX 9 years ago
parent
commit
c03aefaeee
20 changed files with 167 additions and 83 deletions
  1. +34
    -14
      source/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp
  2. +1
    -1
      source/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp
  3. +1
    -1
      source/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp
  4. +1
    -1
      source/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h
  5. +2
    -2
      source/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm
  6. +1
    -1
      source/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
  7. +2
    -2
      source/modules/juce_core/containers/juce_Variant.cpp
  8. +8
    -11
      source/modules/juce_core/maths/juce_Expression.cpp
  9. +1
    -1
      source/modules/juce_core/native/juce_win32_SystemStats.cpp
  10. +21
    -5
      source/modules/juce_core/network/juce_MACAddress.cpp
  11. +13
    -4
      source/modules/juce_core/network/juce_MACAddress.h
  12. +10
    -5
      source/modules/juce_core/streams/juce_MemoryInputStream.cpp
  13. +4
    -0
      source/modules/juce_data_structures/values/juce_Value.h
  14. +19
    -9
      source/modules/juce_graphics/native/juce_mac_Fonts.mm
  15. +2
    -2
      source/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h
  16. +1
    -1
      source/modules/juce_gui_basics/menus/juce_MenuBarModel.h
  17. +40
    -17
      source/modules/juce_gui_basics/native/juce_win32_Windowing.cpp
  18. +1
    -1
      source/modules/juce_gui_basics/widgets/juce_Label.cpp
  19. +3
    -3
      source/modules/juce_gui_basics/windows/juce_AlertWindow.cpp
  20. +2
    -2
      source/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h

+ 34
- 14
source/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp View File

@@ -397,11 +397,9 @@ public:
if (OK (AudioObjectGetPropertyData (deviceID, &pa, 0, nullptr, &size, &isAlive)) && isAlive == 0)
return;
Float64 sr;
size = sizeof (sr);
pa.mSelector = kAudioDevicePropertyNominalSampleRate;
if (OK (AudioObjectGetPropertyData (deviceID, &pa, 0, nullptr, &size, &sr)))
sampleRate = sr;
const double currentRate = getNominalSampleRate();
if (currentRate > 0)
sampleRate = currentRate;
UInt32 framesPerBuf = (UInt32) bufferSize;
size = sizeof (framesPerBuf);
@@ -525,6 +523,30 @@ public:
}
}
double getNominalSampleRate() const
{
AudioObjectPropertyAddress pa;
pa.mSelector = kAudioDevicePropertyNominalSampleRate;
pa.mScope = kAudioObjectPropertyScopeGlobal;
pa.mElement = kAudioObjectPropertyElementMaster;
Float64 sr = 0;
UInt32 size = (UInt32) sizeof (sr);
return OK (AudioObjectGetPropertyData (deviceID, &pa, 0, nullptr, &size, &sr)) ? (double) sr : 0.0;
}
bool setNominalSampleRate (double newSampleRate) const
{
if (std::abs (getNominalSampleRate() - newSampleRate) < 1.0)
return true;
AudioObjectPropertyAddress pa;
pa.mSelector = kAudioDevicePropertyNominalSampleRate;
pa.mScope = kAudioObjectPropertyScopeGlobal;
pa.mElement = kAudioObjectPropertyElementMaster;
Float64 sr = newSampleRate;
return OK (AudioObjectSetPropertyData (deviceID, &pa, 0, 0, sizeof (sr), &sr));
}
//==============================================================================
String reopen (const BigInteger& inputChannels,
const BigInteger& outputChannels,
@@ -549,25 +571,23 @@ public:
numInputChans = activeInputChans.countNumberOfSetBits();
numOutputChans = activeOutputChans.countNumberOfSetBits();
// set sample rate
AudioObjectPropertyAddress pa;
pa.mSelector = kAudioDevicePropertyNominalSampleRate;
pa.mScope = kAudioObjectPropertyScopeGlobal;
pa.mElement = kAudioObjectPropertyElementMaster;
Float64 sr = newSampleRate;
if (! OK (AudioObjectSetPropertyData (deviceID, &pa, 0, 0, sizeof (sr), &sr)))
if (! setNominalSampleRate (newSampleRate))
{
updateDetailsFromDevice();
error = "Couldn't change sample rate";
}
else
{
// change buffer size
UInt32 framesPerBuf = (UInt32) bufferSizeSamples;
AudioObjectPropertyAddress pa;
pa.mSelector = kAudioDevicePropertyBufferFrameSize;
pa.mScope = kAudioObjectPropertyScopeGlobal;
pa.mElement = kAudioObjectPropertyElementMaster;
UInt32 framesPerBuf = (UInt32) bufferSizeSamples;
if (! OK (AudioObjectSetPropertyData (deviceID, &pa, 0, 0, sizeof (framesPerBuf), &framesPerBuf)))
{
updateDetailsFromDevice();
error = "Couldn't change buffer size";
}
else


+ 1
- 1
source/modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp View File

@@ -643,7 +643,7 @@ public:
if (metadataValues.size() > 0)
{
// The meta data should have been santised for the AIFF format.
// The meta data should have been sanitised for the AIFF format.
// If it was originally sourced from a WAV file the MetaDataSource
// key should be removed (or set to "AIFF") once this has been done
jassert (metadataValues.getValue ("MetaDataSource", "None") != "WAV");


+ 1
- 1
source/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp View File

@@ -1024,7 +1024,7 @@ public:
if (metadataValues.size() > 0)
{
// The meta data should have been santised for the WAV format.
// The meta data should have been sanitised for the WAV format.
// If it was originally sourced from an AIFF file the MetaDataSource
// key should be removed (or set to "WAV") once this has been done
jassert (metadataValues.getValue ("MetaDataSource", "None") != "AIFF");


+ 1
- 1
source/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h View File

@@ -42,7 +42,7 @@ public:
bool fileMightContainThisPluginType (const String& fileOrIdentifier) override;
String getNameOfPluginFromIdentifier (const String& fileOrIdentifier) override;
bool pluginNeedsRescanning (const PluginDescription&) override;
StringArray searchPathsForPlugins (const FileSearchPath&, bool recursive);
StringArray searchPathsForPlugins (const FileSearchPath&, bool recursive) override;
bool doesPluginStillExist (const PluginDescription&) override;
FileSearchPath getDefaultLocationsToSearch() override;
bool canScanForPlugins() const override { return true; }


+ 2
- 2
source/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm View File

@@ -840,9 +840,9 @@ public:
if (audioUnit != nullptr)
{
UInt32 paramListSize = 0;
UInt32 dummy = 0, paramListSize = 0;
AudioUnitGetProperty (audioUnit, kAudioUnitProperty_ParameterList, kAudioUnitScope_Global,
0, 0, &paramListSize);
0, &dummy, &paramListSize);
if (paramListSize > 0)
{


+ 1
- 1
source/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp View File

@@ -1145,7 +1145,7 @@ public:
}
//==============================================================================
int getNumParameters() { return effect != nullptr ? effect->numParams : 0; }
int getNumParameters() override { return effect != nullptr ? effect->numParams : 0; }
float getParameter (int index) override
{


+ 2
- 2
source/modules/juce_core/containers/juce_Variant.cpp View File

@@ -49,7 +49,7 @@ public:
virtual int toInt (const ValueUnion&) const noexcept { return 0; }
virtual int64 toInt64 (const ValueUnion&) const noexcept { return 0; }
virtual double toDouble (const ValueUnion&) const noexcept { return 0; }
virtual String toString (const ValueUnion&) const { return String::empty; }
virtual String toString (const ValueUnion&) const { return String(); }
virtual bool toBool (const ValueUnion&) const noexcept { return false; }
virtual ReferenceCountedObject* toObject (const ValueUnion&) const noexcept { return nullptr; }
virtual Array<var>* toArray (const ValueUnion&) const noexcept { return nullptr; }
@@ -274,7 +274,7 @@ public:
}
String toString (const ValueUnion& data) const override { return "Object 0x" + String::toHexString ((int) (pointer_sized_int) data.objectValue); }
bool toBool (const ValueUnion& data) const noexcept override { return data.objectValue != 0; }
bool toBool (const ValueUnion& data) const noexcept override { return data.objectValue != nullptr; }
ReferenceCountedObject* toObject (const ValueUnion& data) const noexcept override { return data.objectValue; }
bool isObject() const noexcept override { return true; }


+ 8
- 11
source/modules/juce_core/maths/juce_Expression.cpp View File

@@ -992,7 +992,8 @@ double Expression::evaluate() const
double Expression::evaluate (const Expression::Scope& scope) const
{
return term->resolve (scope, 0)->toDouble();
String err;
return evaluate (scope, err);
}
double Expression::evaluate (const Scope& scope, String& evaluationError) const
@@ -1038,20 +1039,16 @@ Expression Expression::adjustedToGiveNewResult (const double targetValue, const
jassert (termToAdjust != nullptr);
const Term* const parent = Helpers::findDestinationFor (newTerm, termToAdjust);
if (parent == nullptr)
if (const Term* parent = Helpers::findDestinationFor (newTerm, termToAdjust))
{
termToAdjust->value = targetValue;
if (const Helpers::TermPtr reverseTerm = parent->createTermToEvaluateInput (scope, termToAdjust, targetValue, newTerm))
termToAdjust->value = Expression (reverseTerm).evaluate (scope);
else
return Expression (targetValue);
}
else
{
const Helpers::TermPtr reverseTerm (parent->createTermToEvaluateInput (scope, termToAdjust, targetValue, newTerm));
if (reverseTerm == nullptr)
return Expression (targetValue);
termToAdjust->value = reverseTerm->resolve (scope, 0)->toDouble();
termToAdjust->value = targetValue;
}
return Expression (newTerm.release());


+ 1
- 1
source/modules/juce_core/native/juce_win32_SystemStats.cpp View File

@@ -429,7 +429,7 @@ String SystemStats::getFullUserName()
String SystemStats::getComputerName()
{
TCHAR text [MAX_COMPUTERNAME_LENGTH + 1] = { 0 };
TCHAR text[128] = { 0 };
DWORD len = (DWORD) numElementsInArray (text) - 1;
GetComputerName (text, &len);
return String (text, len);


+ 21
- 5
source/modules/juce_core/network/juce_MACAddress.cpp View File

@@ -26,28 +26,44 @@
==============================================================================
*/
MACAddress::MACAddress()
MACAddress::MACAddress() noexcept
{
zeromem (address, sizeof (address));
}
MACAddress::MACAddress (const MACAddress& other)
MACAddress::MACAddress (const MACAddress& other) noexcept
{
memcpy (address, other.address, sizeof (address));
}
MACAddress& MACAddress::operator= (const MACAddress& other)
MACAddress& MACAddress::operator= (const MACAddress& other) noexcept
{
memcpy (address, other.address, sizeof (address));
return *this;
}
MACAddress::MACAddress (const uint8 bytes[6])
MACAddress::MACAddress (const uint8 bytes[6]) noexcept
{
memcpy (address, bytes, sizeof (address));
}
MACAddress::MACAddress (StringRef addressString)
{
MemoryBlock hex;
hex.loadFromHexString (addressString);
if (hex.getSize() == sizeof (address))
memcpy (address, hex.getData(), sizeof (address));
else
zeromem (address, sizeof (address));
}
String MACAddress::toString() const
{
return toString ("-");
}
String MACAddress::toString (StringRef separator) const
{
String s;
@@ -56,7 +72,7 @@ String MACAddress::toString() const
s << String::toHexString ((int) address[i]).paddedLeft ('0', 2);
if (i < sizeof (address) - 1)
s << '-';
s << separator;
}
return s;


+ 13
- 4
source/modules/juce_core/network/juce_MACAddress.h View File

@@ -43,16 +43,22 @@ public:
//==============================================================================
/** Creates a null address (00-00-00-00-00-00). */
MACAddress();
MACAddress() noexcept;
/** Creates a copy of another address. */
MACAddress (const MACAddress&);
MACAddress (const MACAddress&) noexcept;
/** Creates a copy of another address. */
MACAddress& operator= (const MACAddress&);
MACAddress& operator= (const MACAddress&) noexcept;
/** Creates an address from 6 bytes. */
explicit MACAddress (const uint8 bytes[6]);
explicit MACAddress (const uint8 bytes[6]) noexcept;
/** Creates an address from a hex string.
If the string isn't a 6-byte hex value, this will just default-initialise
the object.
*/
explicit MACAddress (StringRef address);
/** Returns a pointer to the 6 bytes that make up this address. */
const uint8* getBytes() const noexcept { return address; }
@@ -60,6 +66,9 @@ public:
/** Returns a dash-separated string in the form "11-22-33-44-55-66" */
String toString() const;
/** Returns a hex string of this address, using a custom separator between each byte. */
String toString (StringRef separator) const;
/** Returns the address in the lower 6 bytes of an int64.
This uses a little-endian arrangement, with the first byte of the address being


+ 10
- 5
source/modules/juce_core/streams/juce_MemoryInputStream.cpp View File

@@ -67,13 +67,18 @@ int MemoryInputStream::read (void* const buffer, const int howMany)
{
jassert (buffer != nullptr && howMany >= 0);
const int num = jmin (howMany, (int) (dataSize - position));
if (num <= 0)
if (howMany <= 0 || position >= dataSize)
return 0;
memcpy (buffer, addBytesToPointer (data, position), (size_t) num);
position += (unsigned int) num;
return num;
const size_t num = jmin ((size_t) howMany, dataSize - position);
if (num > 0)
{
memcpy (buffer, addBytesToPointer (data, position), num);
position += num;
}
return (int) num;
}
bool MemoryInputStream::isExhausted()


+ 4
- 0
source/modules/juce_data_structures/values/juce_Value.h View File

@@ -40,6 +40,10 @@
When you create a Value with its default constructor, it acts as a wrapper around a
simple var object, but by creating a Value that refers to a custom subclass of ValueSource,
you can map the Value onto any kind of underlying data.
Important note! The Value class is not thread-safe! If you're accessing one from
multiple threads, then you'll need to use your own synchronisation around any code
that accesses it.
*/
class JUCE_API Value
{


+ 19
- 9
source/modules/juce_graphics/native/juce_mac_Fonts.mm View File

@@ -222,20 +222,21 @@ namespace CoreTextTypeLayout
CFStringRef cfText = text.getText().toCFString();
CFMutableAttributedStringRef attribString = CFAttributedStringCreateMutable (kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attribString, CFRangeMake(0, 0), cfText);
CFAttributedStringReplaceString (attribString, CFRangeMake (0, 0), cfText);
CFRelease (cfText);
const int numCharacterAttributes = text.getNumAttributes();
const CFIndex attribStringLen = CFAttributedStringGetLength (attribString);
for (int i = 0; i < numCharacterAttributes; ++i)
{
const AttributedString::Attribute& attr = *text.getAttribute (i);
const int rangeStart = attr.range.getStart();
if (attr.range.getStart() > CFAttributedStringGetLength (attribString))
if (rangeStart >= attribStringLen)
continue;
Range<int> range (attr.range);
range.setEnd (jmin (range.getEnd(), (int) CFAttributedStringGetLength (attribString)));
CFRange range = CFRangeMake (rangeStart, jmin (attr.range.getEnd(), (int) attribStringLen) - rangeStart);
if (const Font* const f = attr.getFont())
{
@@ -243,8 +244,19 @@ namespace CoreTextTypeLayout
{
ctFontRef = getFontWithPointSize (ctFontRef, f->getHeight() * getHeightToPointsFactor (ctFontRef));
CFAttributedStringSetAttribute (attribString, CFRangeMake (range.getStart(), range.getLength()),
kCTFontAttributeName, ctFontRef);
CFAttributedStringSetAttribute (attribString, range, kCTFontAttributeName, ctFontRef);
float extraKerning = f->getExtraKerningFactor();
if (extraKerning != 0.0f)
{
extraKerning *= f->getHeight();
CFNumberRef numberRef = CFNumberCreate (0, kCFNumberFloatType, &extraKerning);
CFAttributedStringSetAttribute (attribString, range, kCTKernAttributeName, numberRef);
CFRelease (numberRef);
}
CFRelease (ctFontRef);
}
}
@@ -264,9 +276,7 @@ namespace CoreTextTypeLayout
col->getFloatAlpha());
#endif
CFAttributedStringSetAttribute (attribString,
CFRangeMake (range.getStart(), range.getLength()),
kCTForegroundColorAttributeName, colour);
CFAttributedStringSetAttribute (attribString, range, kCTForegroundColorAttributeName, colour);
CGColorRelease (colour);
}
}


+ 2
- 2
source/modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h View File

@@ -51,10 +51,10 @@ public:
Remember that when the target component is resized, it'll need to move and
resize this component to keep it in place, as this won't happen automatically.
If the constrainer parameter is non-zero, then this object will be used to enforce
If a constrainer object is provided, then this object will be used to enforce
limits on the size and position that the component can be stretched to. Make sure
that the constrainer isn't deleted while still in use by this object. If you
pass a zero in here, no limits will be put on the sizes it can be stretched to.
pass a nullptr in here, no limits will be put on the sizes it can be stretched to.
@see ComponentBoundsConstrainer
*/


+ 1
- 1
source/modules/juce_gui_basics/menus/juce_MenuBarModel.h View File

@@ -131,7 +131,7 @@ public:
/** OSX ONLY - Sets the model that is currently being shown as the main
menu bar at the top of the screen on the Mac.
You can pass 0 to stop the current model being displayed. Be careful
You can pass nullptr to stop the current model being displayed. Be careful
not to delete a model while it is being used.
An optional extra menu can be specified, containing items to add to the top of


+ 40
- 17
source/modules/juce_gui_basics/native/juce_win32_Windowing.cpp View File

@@ -39,6 +39,14 @@
#define WM_APPCOMMAND 0x0319
#endif
#ifndef MI_WP_SIGNATURE
#define MI_WP_SIGNATURE 0xFF515700
#endif
#ifndef SIGNATURE_MASK
#define SIGNATURE_MASK 0xFFFFFF00
#endif
extern void juce_repeatLastProcessPriority();
extern void juce_checkCurrentlyFocusedTopLevelWindow(); // in juce_TopLevelWindow.cpp
extern bool juce_isRunningInWine();
@@ -1706,8 +1714,22 @@ private:
return 1000 / 60; // Throttling the incoming mouse-events seems to still be needed in XP..
}
bool isTouchEvent() noexcept
{
if (registerTouchWindow == nullptr)
return false;
LPARAM dw = GetMessageExtraInfo();
// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms703320(v=vs.85).aspx
return (dw & SIGNATURE_MASK) == MI_WP_SIGNATURE;
}
void doMouseMove (Point<float> position)
{
// this will be handled by WM_TOUCH
if (isTouchEvent())
return;
if (! isMouseOver)
{
isMouseOver = true;
@@ -1744,6 +1766,10 @@ private:
void doMouseDown (Point<float> position, const WPARAM wParam)
{
// this will be handled by WM_TOUCH
if (isTouchEvent())
return;
if (GetCapture() != hwnd)
SetCapture (hwnd);
@@ -1760,6 +1786,10 @@ private:
void doMouseUp (Point<float> position, const WPARAM wParam)
{
// this will be handled by WM_TOUCH
if (isTouchEvent())
return;
updateModifiersFromWParam (wParam);
const bool wasDragging = isDragging;
isDragging = false;
@@ -1879,8 +1909,7 @@ private:
const DWORD flags = inputInfo[i].dwFlags;
if ((flags & (TOUCHEVENTF_DOWN | TOUCHEVENTF_MOVE | TOUCHEVENTF_UP)) != 0)
if (! handleTouchInput (inputInfo[i], (flags & TOUCHEVENTF_PRIMARY) != 0,
(flags & TOUCHEVENTF_DOWN) != 0, (flags & TOUCHEVENTF_UP) != 0))
if (! handleTouchInput (inputInfo[i], (flags & TOUCHEVENTF_DOWN) != 0, (flags & TOUCHEVENTF_UP) != 0))
return 0; // abandon method if this window was deleted by the callback
}
}
@@ -1889,7 +1918,7 @@ private:
return 0;
}
bool handleTouchInput (const TOUCHINPUT& touch, const bool isPrimary, const bool isDown, const bool isUp)
bool handleTouchInput (const TOUCHINPUT& touch, const bool isDown, const bool isUp)
{
bool isCancel = false;
const int touchIndex = currentTouches.getIndexOfTouch (touch.dwID);
@@ -1903,13 +1932,10 @@ private:
currentModifiers = currentModifiers.withoutMouseButtons().withFlags (ModifierKeys::leftButtonModifier);
modsToSend = currentModifiers;
if (! isPrimary)
{
// this forces a mouse-enter/up event, in case for some reason we didn't get a mouse-up before.
handleMouseEvent (touchIndex, pos.toFloat(), modsToSend.withoutMouseButtons(), time);
if (! isValidPeer (this)) // (in case this component was deleted by the event)
return false;
}
// this forces a mouse-enter/up event, in case for some reason we didn't get a mouse-up before.
handleMouseEvent (touchIndex, pos.toFloat(), modsToSend.withoutMouseButtons(), time);
if (! isValidPeer (this)) // (in case this component was deleted by the event)
return false;
}
else if (isUp)
{
@@ -1930,14 +1956,11 @@ private:
currentModifiers = currentModifiers.withoutMouseButtons();
}
if (! isPrimary)
{
handleMouseEvent (touchIndex, pos.toFloat(), modsToSend, time);
if (! isValidPeer (this)) // (in case this component was deleted by the event)
return false;
}
handleMouseEvent (touchIndex, pos.toFloat(), modsToSend, time);
if (! isValidPeer (this)) // (in case this component was deleted by the event)
return false;
if ((isUp || isCancel) && ! isPrimary)
if (isUp || isCancel)
{
handleMouseEvent (touchIndex, Point<float> (-10.0f, -10.0f), currentModifiers, time);
if (! isValidPeer (this))


+ 1
- 1
source/modules/juce_gui_basics/widgets/juce_Label.cpp View File

@@ -309,7 +309,7 @@ TextEditor* Label::createEditorComponent()
copyColourIfSpecified (*this, *ed, textWhenEditingColourId, TextEditor::textColourId);
copyColourIfSpecified (*this, *ed, backgroundWhenEditingColourId, TextEditor::backgroundColourId);
copyColourIfSpecified (*this, *ed, outlineWhenEditingColourId, TextEditor::outlineColourId);
copyColourIfSpecified (*this, *ed, outlineWhenEditingColourId, TextEditor::focusedOutlineColourId);
return ed;
}


+ 3
- 3
source/modules/juce_gui_basics/windows/juce_AlertWindow.cpp View File

@@ -89,7 +89,7 @@ void AlertWindow::addButton (const String& name,
const KeyPress& shortcutKey1,
const KeyPress& shortcutKey2)
{
TextButton* const b = new TextButton (name, String::empty);
TextButton* const b = new TextButton (name, String());
buttons.add (b);
b->setWantsKeyboardFocus (true);
@@ -143,9 +143,9 @@ void AlertWindow::addTextEditor (const String& name,
ed->setColour (TextEditor::outlineColourId, findColour (ComboBox::outlineColourId));
ed->setFont (getLookAndFeel().getAlertWindowMessageFont());
addAndMakeVisible (ed);
ed->setText (initialContents);
ed->setCaretPosition (initialContents.length());
addAndMakeVisible (ed);
textboxNames.add (onScreenLabel);
updateLayout (false);
@@ -165,7 +165,7 @@ String AlertWindow::getTextEditorContents (const String& nameOfTextEditor) const
if (TextEditor* const t = getTextEditor (nameOfTextEditor))
return t->getText();
return String::empty;
return String();
}


+ 2
- 2
source/modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h View File

@@ -66,14 +66,14 @@ struct CppTokeniserFunctions
static const char* const keywords7Char[] =
{ "nullptr", "alignas", "alignof", "default", "mutable", "private",
"typedef", "virtual", "wchar_t", nullptr };
"typedef", "virtual", "wchar_t", "__cdecl", "_Pragma", "uint8_t", nullptr };
static const char* const keywordsOther[] =
{ "char16_t", "char32_t", "const_cast", "constexpr", "continue", "decltype", "dynamic_cast",
"explicit", "namespace", "noexcept", "operator", "protected", "register", "reinterpret_cast",
"static_assert", "static_cast", "template", "thread_local", "typename", "unsigned", "volatile",
"@class", "@dynamic", "@end", "@implementation", "@interface", "@public", "@private",
"@protected", "@property", "@synthesize", nullptr };
"@protected", "@property", "@synthesize", "__fastcall", "__stdcall", nullptr };
const char* const* k;


Loading…
Cancel
Save