diff options
Diffstat (limited to 'toolkit/components/find/nsFind.h')
-rw-r--r-- | toolkit/components/find/nsFind.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/toolkit/components/find/nsFind.h b/toolkit/components/find/nsFind.h new file mode 100644 index 0000000000..bf431a2d2f --- /dev/null +++ b/toolkit/components/find/nsFind.h @@ -0,0 +1,62 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsFind_h__ +#define nsFind_h__ + +#include "nsIFind.h" + +#include "nsCOMPtr.h" +#include "nsCycleCollectionParticipant.h" +#include "nsINode.h" + +#define NS_FIND_CONTRACTID "@mozilla.org/embedcomp/rangefind;1" + +#define NS_FIND_CID \ + { \ + 0x471f4944, 0x1dd2, 0x11b2, { \ + 0x87, 0xac, 0x90, 0xbe, 0x0a, 0x51, 0xd6, 0x09 \ + } \ + } + +class nsFind : public nsIFind { + public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_NSIFIND + NS_DECL_CYCLE_COLLECTION_CLASS(nsFind) + + protected: + virtual ~nsFind() = default; + + // Parameters set from the interface: + bool mFindBackward = false; + bool mCaseSensitive = false; + bool mMatchDiacritics = false; + + // Use "find entire words" mode by setting mEntireWord to true; or false to + // disable "entire words" mode. + bool mEntireWord = false; + + struct State; + class StateRestorer; + + // Extract a character from a string, handling surrogate pairs and + // incrementing the index if a surrogate pair is encountered + char32_t DecodeChar(const char16_t* t2b, int32_t* index) const; + + // Determine if a line break can occur between two characters + // + // This could be improved because some languages require more context than two + // characters to determine where line breaks can occur + bool BreakInBetween(char32_t x, char32_t y) const; + + // Get the first character from the next node (last if mFindBackward). + // + // This will mutate the state, but then restore it afterwards. + char32_t PeekNextChar(State&, bool aAlreadyMatching) const; +}; + +#endif // nsFind_h__ |