diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9dc4a94 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.html -linguist-detectable +*.css -linguist-detectable +*.js -linguist-detectable diff --git a/.gitignore b/.gitignore index 478a1b5..4444e8b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,25 +7,6 @@ *.o *.obj -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - # Executables *.exe *.out @@ -36,6 +17,3 @@ x64 Debug Release - -# CppStrings specifics -archive diff --git a/README.md b/README.md index edd5347..0b23e67 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,111 @@ -# cpp-strings -What if c++ strings where as easy to use as Python strings? +[Library banner] + + [![license](http://img.shields.io/github/license/schmouk/pythonic-cpp-strings.svg?style=plastic&labelColor=blueviolet&color=lightblue)](https://github.com/schmouk/pythonic-cpp-strings/license) [![Latest release](http://img.shields.io/github/release/schmouk/pythonic-cpp-strings.svg?style=plastic&labelColor=blueviolet&color=success)](https://github.com/schmouk/pythonic-cpp-strings/releases) [![code_coverage](https://img.shields.io/badge/code_coverage-100%25-success?style=plastic&labelColor=blueviolet)]() [![tests](https://img.shields.io/badge/tests-passing-success?style=plastic&labelColor=blueviolet)]() + +### What if c++ strings were as easy to use as Python strings? + +Let's just use c++ strings as are Python ones, with same API or as similar API as possible. +Library **cpp-strings** is fully templated. Just download header file `cppstrings.h` and put it anywhere in your project. Notice: all of its stuff is declared and defined in namespace `pcs` - which stands for **P**ythonic **C**++ **S**trings. + +* The templated class `pcs::CppStringT<>` defines all constructors and methods that implement the equivalent of Python strings API. +* Class `pcs::CppString` specializes the templated class with `char` characters. +* Class `pcs::CppWString` specializes the templated class with `wchar_t` characters. + +The cpp-strings **HTML documentation** is available in subdirectory `cpp-strings/html`. Click on file `index.html` there from your local file manager to browse its content. + +Library **cpp-strings** is implemented with the currently most recent c++ standard available with gcc, clang and msvc c++ compilers, i.e. standard **c++20**. + +* directory `cpp-strings` contains the header file `cppstring.h`. +This is the header file to include in your projects. +* directory `cpp-strings-tests` contains the unit-tests file `cpp-strings-tests.cpp` +This file tests all the library stuff. It is a valuable code container with so many examples of use of the library, the classes, the methods and the functions it defines. + +The code has been developed using VS2022 IDE. As such, unitary tests have been coded using Microsoft Visual Studio Cpp Unit Test Framework. The related VS project is provided with this library. + +Notice: no clang, gcc or msvc specific declarations or goodies have been use to code library **cpp-strings**. It should then be compilable with any of these compilers. To be able to use it with your project, just ensure that the c++ standard used with you favorite compiler is **c++20**: +* options `-std=c++20` or `-std=c++latest` for clang and gcc (v. 10 and above), +or option `-std=c++2a` for clang and gcc (v. 9 and earlier); +* options `/std=c++20` or `/std=c++latest` for Visual Studio 2019 and later. + +If you want to run the unitary tests, well, use the last version of Visual Studio (i.e. VS 2022, by July 2025). The Community free version will truly be fine. +The vcproject associated with the unit tests in **cpp-strings** is already configured to use the option flag `/std:c++latest` since the implemented code uses a very few but very useful c++23 goodies. + +github repository: [https://github.com/schmouk/pythonic-cpp-strings](https://github.com/schmouk/pythonic-cpp-strings) +pythonic-cpp-strings github web pages: [https://schmouk.github.io/pythonic-cpp-strings/](https://schmouk.github.io/pythonic-cpp-strings/) + + +--- +## License + + Library cpp-strings + "What if c++ strings where as easy to use as Python strings?" + + Copyright (C) 2023-2025 Philippe Schmouker + contact - ph (dot) schmouker (at) gmail (dot) com + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + +--- +## Intro +The creation of this library has been started with the aim at easing the use of strings in c++. Other projects exist, even aiming also to implement a Python-like strings API, but the only ones we have found were either started but not completed, or were not implementing the whole Python API. + +So, we started to work on **Pythonic c++ strings**. Library **cpp-strings** is now ready. It fully implements the Python API (even with a c++ implementation of *slices*) and it is fully tested with *unitary tests*. + +The implementation of library **cpp-strings** is fully templated and is contained into a single header file: `cpp-strings/cppstrings.h`. To take a whole benefit of it, just add this header file to your project and include it in your own files. It very fastly compiles. That's all! + +Header file `cpp-strings/cppstrings.h` defines: +* templated class `template class pcs::CppStringT` which implements all the stuff about pythonic c++ strings. It inherits from c++ STL class `std::basic_string`, so it gets access to all c++ STL methods, functions and goodies about strings; +* this class is specialized by: `using pcs::CppString> = pcs::CppStringT` for pythonic c++ strings based on `char` characters; +* it is also specialized by: `using pcs::CppWString> = pcs::CppStringT` for pythonic c++ strings based on `wchar_t` characters. + +The unitary tests are provided in directory `cpp-strings-tests/`. File `cpp-strings-tests/cpp-strings-tests.cpp` contains the related code. Tests have been coded using VS2022 IDE and as such, are using the Microsoft Visual Studio Cpp Unit Test Framework. The related VS project can be found in the same directory. It is already configured to create code for Release as well as for Debug configurations, and for 32-bits or 64-bits platforms at your choice. +This `.cpp` file is a great place to see **cpp-strings** code in action. Each structure, class, method, litteral operator and function being unitary tested in here, you should find there many examples of its use for all **cpp-strings** stuff. + + +--- +## Latest Release - Release 1.0 (1.0.4 - 2025/10) + +The coding of this project started by March 2023 and had been put in standby mode for some months - no time to work on it. The very first release is now availble (since July 2025), as **Release 1.0.4**. + +This release has been fully tested. Code coverage is 100%. + +Release 1.0 implements all Python strings API but one feature (see below). + +Python *slices* are implemented via c++ `operator()` as declared and defined in the templated class `pcs::CppStringT<>`. Python slices have next specific notation: `[start : stop : step]` and allow the running step by step through range [start, stop) (notice: stop is excluded from the range). Operator `(start, stop, step)` acts the same way while running through the content of pythonic c++ strings. A dedicated base class `Slice` is also provided and can be passed as argument to `operator()`. It is derived in many simpler slices classes, since Python slices may not define either `start`, `stop` or `step` which then get default values (resp. 0, *end-of-sequence*, and 1). + +Notice: Python 3.14 (released by Oct. 2025) implements Template Strings (T-Strings), see [string.templatelib — Support for template string literals](https://docs.python.org/3/library/string.templatelib.html) in Python 3.14 documentation and [PEP 750](https://peps.python.org/pep-0750/) for full explanations. Meanwhile, T-strings are not implemented in CppStrings library: the templates concept is already available in c++ language. The "translation" of T-Strings into CppStrings library is then left as an (easy) exercice to the user. + + +### Missing parts in Release 1.0 +Python strings are based on Unicode chars. This is currently not the case for pythonic c++ strings in **cpp-strings**. +Unicode encoding allows for a specific comparison mode on strings, the **casefold** mode. There, Unicode chars are transformed into their lower equivalent char in a standardized manner which is more "agressive" than the simpler lowering method `lower()`. Comparing strings without taking into account the case of their chars is then performed in a far more accurate manner. +This feature is currently NOT implemented in library **cpp-strings**. + +So up to now, if you want to compare pythonic c++ strings from **cpp-strings** on whatever the case is for each of their chars, compare them applying method `.lower()` to both strings. This will do the job for chars and for wchar_t also for a majority of languages (but might fail for very few signs of specific languages in this last case). + +Notice: dealing with Unicode chars and implementing method `casefold()` as it is the case in Python is planned for a next release of library **cpp-strings**. +N.B. "*planned for a next release*" does not imply that a fixed date is planned either. + + +--- +## Documentation + +The **cpp-strings** HTML documentation is available in subdirectory `./documentation`. Click on file `index.html` there from your local file manager to browse its content. + +It has then been produced with the great utility **doxygen** developed by Vicente Hernando (the doxygen Github repository can be accessed [here](https://github.com/doxygen/doxygen), and the utility can be downloaded from there: [https://www.doxygen.nl/download.html](https://www.doxygen.nl/download.html)). + +This is a short documentation of the library. For some of its part it is a copy of the Python original documentation on strings. For its other part it documents the c++ implementation of **cpp-strings**. + +And remember: to better understand how to use this pythonic c++ strings library, have a look also at [`cpp-strings-tests/cpp-strings-tests.cpp`](cpp-strings-tests/cpp-strings-tests.cpp) to see **cpp-strings** library code in action! diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..431aabd --- /dev/null +++ b/_config.yml @@ -0,0 +1,3 @@ +theme: jekyll-theme-slate +show_downloads: true + diff --git a/banner-image.jpg b/banner-image.jpg new file mode 100644 index 0000000..1b341f4 Binary files /dev/null and b/banner-image.jpg differ diff --git a/cpp-strings.cfg b/cpp-strings.cfg new file mode 100644 index 0000000..84af6c7 --- /dev/null +++ b/cpp-strings.cfg @@ -0,0 +1,101 @@ +# Doxyfile 1.14.0 + +# This file describes the settings to be used by the documentation system +# Doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use Doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use Doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "cpp-strings" +PROJECT_NUMBER = "1.0.4" +PROJECT_BRIEF = "Pythonic c++ strings" +OUTPUT_DIRECTORY = + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +ALWAYS_DETAILED_SEC = YES +FULL_PATH_NAMES = NO +BUILTIN_STL_SUPPORT = YES +TIMESTAMP = DATE ##YES ##NO ##DATETIME ## + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +HIDE_UNDOC_NAMESPACES = NO +SORT_BRIEF_DOCS = YES +WARN_NO_PARAMDOC = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ./cpp-strings +INPUT_ENCODING = UTF-8 +USE_MDFILE_AS_MAINPAGE = ./README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = ./documentation +HTML_FILE_EXTENSION = .html +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_CODE_FOLDING = NO ##YES +HTML_COPY_CLIPBOARD = YES +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_TREEVIEW = YES +FULL_SIDEBAR = NO +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SORT_GROUP_NAMES = YES +SOURCE_BROWSER = NO +VERBATIM_HEADERS = NO +WARN_IF_INCOMPLETE_DOC = NO +WARN_IF_UNDOCUMENTED = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO diff --git a/cpp-strings/cpp-strings.vcxproj b/cpp-strings/cpp-strings.vcxproj index 7b32c1d..3245b81 100644 --- a/cpp-strings/cpp-strings.vcxproj +++ b/cpp-strings/cpp-strings.vcxproj @@ -141,10 +141,6 @@ - - - - diff --git a/cpp-strings/cpp-strings.vcxproj.filters b/cpp-strings/cpp-strings.vcxproj.filters index 2461996..0899904 100644 --- a/cpp-strings/cpp-strings.vcxproj.filters +++ b/cpp-strings/cpp-strings.vcxproj.filters @@ -14,11 +14,6 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - Source Files - - Header Files diff --git a/cpp-strings/cppstrings.cpp b/cpp-strings/cppstrings.cpp deleted file mode 100644 index 253031d..0000000 --- a/cpp-strings/cppstrings.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/** - Library cppstrings - "What if c++ strings where as easy to use as Python strings?" - - Copyright (C) 2023-2025 Philippe Schmouker - contact - ph (dot) schmouker (at) gmail (dot) com - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include - -#include "cppstrings.h" -using namespace pcs; - -/** -* Notice: this module is for tests and validation purposes only. -*/ -int main() -{ - CppString s = "-5.1"_cs; - CppWString ws{ L"-5.2"_cs }; - - std::cout << ws.isupper() << std::endl; - std::cout << s.zfill(10).c_str() << std::endl; - - s.format("{} {}", 1, 3.14); - ws.format(L"{} abc", 2); - - std::cout << s.c_str() << " / "; - std::wcout << ws.c_str() << std::endl; - - return 0; -} diff --git a/cpp-strings/cppstrings.h b/cpp-strings/cppstrings.h index e368f9f..82f275e 100644 --- a/cpp-strings/cppstrings.h +++ b/cpp-strings/cppstrings.h @@ -835,7 +835,7 @@ namespace pcs // i.e. "pythonic c++ strings" * * Decimal characters are those that can be used to form numbers in * base 10, e.g. U+0660, ARABIC-INDIC DIGIT ZERO. Formally a decimal - * character is a character in the Unicode General Category “Nd”. + * character is a character in the Unicode General Category �Nd�. */ [[nodiscard]] inline const bool isdecimal() const noexcept @@ -883,7 +883,7 @@ namespace pcs // i.e. "pythonic c++ strings" * the currently implemented rule is this simpler one: * * identifier ::= ID_Start id_continue* - * id_continue ::= ID_Start | + * id_continue ::= ID_Start | decimal_number */ [[nodiscard]] inline const bool isidentifier() const noexcept @@ -1654,18 +1654,18 @@ namespace pcs // i.e. "pythonic c++ strings" * Line breaks are not included in the resulting list unless keepends is given and true. * * This method splits on the following line boundaries. In particular, the boundaries are a superset of universal newlines: - * \n Line Feed - * \r Carriage Return - * \r\n Carriage Return + Line Feed - * \v or \x0b Line Tabulation - * \f or \x0c Form Feed - * \x1c File Separator - * \x1d Group Separator - * \x1e Record Separator + * '\n' Line Feed + * '\r' Carriage Return + * '\r\n' Carriage Return + Line Feed + * '\v' or '\x0b' Line Tabulation + * '\f' or '\x0c' Form Feed + * '\x1c' File Separator + * '\x1d' Group Separator + * '\x1e' Record Separator * Next separators values, detected by Python method splitlines(), are currently NOT detected by CppStrings - * \x85 Next Line (C1 Control Code) - * \u2028 Line Separator - * \u2029 Paragraph Separator + * '\x85' Next Line (C1 Control Code) + * '\u2028' Line Separator + * '\u2029' Paragraph Separator */ [[nodiscard]] std::vector splitlines(const bool keep_end = false) const noexcept diff --git a/documentation/annotated.html b/documentation/annotated.html new file mode 100644 index 0000000..9b9a678 --- /dev/null +++ b/documentation/annotated.html @@ -0,0 +1,117 @@ + + + + + + + +cpp-strings: Class List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + +
 Npcs
 CCppStringTThis is the templated base class for all CppString classes
 CNotFoundException
 CTransTableThe internal class of translation tables, used with methods CppStringT::maketrans and CppStringT::translate
 CSliceBase class for slices, with start, stop and step specified values
 CStartSliceBase class for slices, with start, stop and step specified values
 CStartStepSliceStruct of slices with default step values
 CStartStopSliceStruct of slices with default start and stop values
 CStepSliceStruct of slices with default start and step values
 CStopSliceStruct of slices with default stop and step values
 CStopStepSliceStruct of slices with default stop values
+
+
+
+
+ + + + diff --git a/documentation/annotated_dup.js b/documentation/annotated_dup.js new file mode 100644 index 0000000..328bcbb --- /dev/null +++ b/documentation/annotated_dup.js @@ -0,0 +1,13 @@ +var annotated_dup = +[ + [ "pcs", "namespacepcs.html", [ + [ "CppStringT", "classpcs_1_1_cpp_string_t.html", "classpcs_1_1_cpp_string_t" ], + [ "Slice", "classpcs_1_1_slice.html", "classpcs_1_1_slice" ], + [ "StartSlice", "structpcs_1_1_start_slice.html", "structpcs_1_1_start_slice" ], + [ "StartStepSlice", "structpcs_1_1_start_step_slice.html", "structpcs_1_1_start_step_slice" ], + [ "StartStopSlice", "structpcs_1_1_start_stop_slice.html", "structpcs_1_1_start_stop_slice" ], + [ "StepSlice", "structpcs_1_1_step_slice.html", "structpcs_1_1_step_slice" ], + [ "StopSlice", "structpcs_1_1_stop_slice.html", "structpcs_1_1_stop_slice" ], + [ "StopStepSlice", "structpcs_1_1_stop_step_slice.html", "structpcs_1_1_stop_step_slice" ] + ] ] +]; \ No newline at end of file diff --git a/documentation/classes.html b/documentation/classes.html new file mode 100644 index 0000000..b5312f5 --- /dev/null +++ b/documentation/classes.html @@ -0,0 +1,117 @@ + + + + + + + +cpp-strings: Class Index + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+ +
+
+ + + + diff --git a/documentation/classpcs_1_1_cpp_string_t-members.html b/documentation/classpcs_1_1_cpp_string_t-members.html new file mode 100644 index 0000000..9ce290e --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t-members.html @@ -0,0 +1,235 @@ + + + + + + + +cpp-strings: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::CppStringT< CharT, TraitsT, AllocatorT > Member List
+
+
+ +

This is the complete list of members for pcs::CppStringT< CharT, TraitsT, AllocatorT >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
capitalize() noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
center(const size_type width, const value_type fillch=value_type(' ')) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
const_iterator typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
const_pointer typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
const_reference typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
const_reverse_iterator typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
contains(const CppStringT &substr) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
contains_n(const CppStringT &sub, const size_type start, const size_type count=-1) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
count(const CppStringT &sub, const size_type start=0, const size_type end=-1) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
count_n(const CppStringT &sub, const size_type start, const size_type length) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
count_n(const CppStringT &sub, const size_type length) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT() (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const CppStringT &other) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const CppStringT &other, const AllocatorT &alloc) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(CppStringT &&other) noexcept (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(CppStringT &&other, const AllocatorT &alloc) noexcept (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(MyBaseClass::size_type count, CharT ch) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const CppStringT &other, size_type pos) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const CppStringT &other, size_type pos, size_type count) noexcept (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const CharT *s) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const CharT *s, size_type count) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(std::initializer_list< CharT > ilist) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const CharT ch) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const MyBaseClass &other) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(const MyBaseClass &other, const AllocatorT &alloc) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(MyBaseClass &&other) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(MyBaseClass &&other, const AllocatorT &alloc) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(InputIt first, InputIt last) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
CppStringT(StringViewLike &svl) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inlineexplicit
CppStringT(StringViewLike &svl, size_type pos, size_type n) (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
difference_type typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
endswith(const CppStringT &suffix, const size_type start, const size_type end) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
endswith(const CppStringT &suffix, const size_type end) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
endswith(const CppStringT &suffix) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
endswith(const std::initializer_list< CppStringT > &suffixes, const size_type start, const size_type end) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
endswith_n(const CppStringT &suffix, const size_type start, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
endswith_n(const CppStringT &suffix, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
endswith_n(const std::initializer_list< CppStringT > &suffixes, const size_type start, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
expand_tabs(const size_type tabsize=8) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
find(const CppStringT &sub, const size_type start=0, const size_type end=-1) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
find_n(const CppStringT &sub, const size_type start, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
find_n(const CppStringT &sub, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
format(const std::basic_format_string< T, std::type_identity_t< ArgsT >... > frmt, ArgsT &&... args)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
format(const std::basic_format_string< char, std::type_identity_t< ArgsT >... > frmt, ArgsT &&... args)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
format(const std::basic_format_string< wchar_t, std::type_identity_t< ArgsT >... > frmt, ArgsT &&... args)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
index(const CppStringT &sub, const size_type start=0, const size_type end=-1) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
index_n(const CppStringT &sub, const size_type start, const size_type count) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
index_n(const CppStringT &sub, const size_type count) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
is_words_sep() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isalnum() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isalpha() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isascii() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isdecimal() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isdigit() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isidentifier() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
islower() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isnumeric() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isprintable() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
ispunctuation() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isspace() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
istitle() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
isupper() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
iterator typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
join(const std::array< CppStringT, N > &strs) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
join(const std::vector< CppStringT > &strs) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
join(const CppStringT &first, const NextCppStringsT &... others) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
join(const CppStringT &s) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
join() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
ljust(const size_type width, const value_type fillch=value_type(' ')) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
lower() noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
lower(const value_type ch) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inlinestatic
lstrip(const CppStringT &removedchars) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
lstrip() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
MyBaseClass typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
operator()(Slice< IntT > slice) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
operator()(const long long start, const long long stop, const long long step=1) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
operator*(std::int64_t count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
operator=(const CppStringT &) noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >
operator=(CppStringT &&) noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >
partition(const CppStringT &sep) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
pointer typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
reference typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
removeprefix(const CppStringT &prefix) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
removesuffix(const CppStringT &suffix) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
replace(const CppStringT &old, const CppStringT &new_, size_type count=-1) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
reverse_iterator typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
rfind(const CppStringT &sub, const size_type start, const size_type end) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rfind(const CppStringT &sub, const size_type start) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rfind(const CppStringT &sub) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rfind_n(const CppStringT &sub, const size_type start, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rfind_n(const CppStringT &sub, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rindex(const CppStringT &sub, const size_type start, const size_type end) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rindex(const CppStringT &sub, const size_type start) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rindex(const CppStringT &sub) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rindex_n(const CppStringT &sub, const size_type start, const size_type count) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rindex_n(const CppStringT &sub, const size_type count) constpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rjust(const size_type width, const value_type fillch=value_type(' ')) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rpartition(const CppStringT &sep) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rsplit() noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rsplit(const CppStringT &sep) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rsplit(const size_type maxsplit) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rsplit(const CppStringT &sep, const size_type maxsplit) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rstrip(const CppStringT &removedchars) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
rstrip() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
size_type typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
split() noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
split(const CppStringT &sep) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
split(const size_type maxsplit) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
split(const CppStringT &sep, const size_type maxsplit) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
splitlines(const bool keep_end=false) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
startswith(const CppStringT &prefix, const size_type start, const size_type end) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
startswith(const CppStringT &prefix, const size_type start) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
startswith(const CppStringT &prefix) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
startswith(const std::initializer_list< CppStringT > &prefixes, const size_type start, const size_type end) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
startswith_n(const CppStringT &prefix, const size_type start, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
startswith_n(const CppStringT &prefix, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
startswith_n(const std::initializer_list< CppStringT > &prefix, const size_type start, const size_type count) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
strip(const CppStringT &removedchars) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
strip() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
substr(const size_type start, const size_type count=-1) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
swapcase() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
title() const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
traits_type typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
translate(TransTable &table) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
upper() noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
upper(const value_type ch) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inlinestatic
value_type typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >
zfill(const size_type width) const noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >inline
~CppStringT() noexcept=default (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >)pcs::CppStringT< CharT, TraitsT, AllocatorT >inline
+
+
+ + + + diff --git a/documentation/classpcs_1_1_cpp_string_t.html b/documentation/classpcs_1_1_cpp_string_t.html new file mode 100644 index 0000000..9842fe3 --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t.html @@ -0,0 +1,3645 @@ + + + + + + + +cpp-strings: pcs::CppStringT< CharT, TraitsT, AllocatorT > Class Template Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::CppStringT< CharT, TraitsT, AllocatorT > Class Template Reference
+
+
+ +

This is the templated base class for all CppString classes. + More...

+ +

#include <cppstrings.h>

+
+Inheritance diagram for pcs::CppStringT< CharT, TraitsT, AllocatorT >:
+
+
+ +
+ + + + + +

+Classes

class  NotFoundException
class  TransTable
 The internal class of translation tables, used with methods CppStringT::maketrans and CppStringT::translate. More...
+ + + + + + + + + + + + + + + +

+Public Types

+using allocator_type = MyBaseClass::allocator_type
+using const_iterator = MyBaseClass::const_iterator
+using const_pointer = MyBaseClass::const_pointer
+using const_reference = MyBaseClass::const_reference
+using const_reverse_iterator = MyBaseClass::const_reverse_iterator
+using difference_type = MyBaseClass::difference_type
+using iterator = MyBaseClass::iterator
+using MyBaseClass = std::basic_string<CharT, TraitsT, AllocatorT>
+using pointer = MyBaseClass::pointer
+using reference = MyBaseClass::reference
+using reverse_iterator = MyBaseClass::reverse_iterator
+using size_type = MyBaseClass::size_type
+using traits_type = MyBaseClass::traits_type
+using value_type = MyBaseClass::value_type
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

CppStringT capitalize () noexcept
 Returns a copy of the string with its first character capitalized and the rest lowercased.
CppStringT center (const size_type width, const value_type fillch=value_type(' ')) const noexcept
 Returns a copy of the string centered in a string of length width.
constexpr bool contains (const CppStringT &substr) const noexcept
 Returns true if this string contains the passed string, or false otherwise.
constexpr bool contains_n (const CppStringT &sub, const size_type start, const size_type count=-1) const noexcept
 Returns true if the passed string is found within the slice str[start:start+count-1], or false otherwise.
constexpr size_type count (const CppStringT &sub, const size_type start=0, const size_type end=-1) const noexcept
 Returns the number of non-overlapping occurrences of substring sub in the range [start, end].
constexpr size_type count_n (const CppStringT &sub, const size_type length) const noexcept
 Returns the number of non-overlapping occurrences of substring sub in the range [0, length-1].
constexpr size_type count_n (const CppStringT &sub, const size_type start, const size_type length) const noexcept
 Returns the number of non-overlapping occurrences of substring sub in the range [start, start+length-1].
CppStringT (const CharT *s)
CppStringT (const CharT *s, size_type count)
CppStringT (const CharT ch)
CppStringT (const CppStringT &other)
CppStringT (const CppStringT &other, const AllocatorT &alloc)
CppStringT (const CppStringT &other, size_type pos)
CppStringT (const CppStringT &other, size_type pos, size_type count) noexcept
CppStringT (const MyBaseClass &other)
CppStringT (const MyBaseClass &other, const AllocatorT &alloc)
CppStringT (CppStringT &&other) noexcept
CppStringT (CppStringT &&other, const AllocatorT &alloc) noexcept
+template<class InputIt>
 CppStringT (InputIt first, InputIt last)
CppStringT (MyBaseClass &&other)
CppStringT (MyBaseClass &&other, const AllocatorT &alloc)
CppStringT (MyBaseClass::size_type count, CharT ch)
CppStringT (std::initializer_list< CharT > ilist)
+template<class StringViewLike>
 CppStringT (StringViewLike &svl)
+template<class StringViewLike>
 CppStringT (StringViewLike &svl, size_type pos, size_type n)
const bool endswith (const CppStringT &suffix) const noexcept
 Returns true if the string ends with the specified suffix, otherwise returns false. Test runs on the whole string.
const bool endswith (const CppStringT &suffix, const size_type end) const noexcept
 Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at start of string and stops at end position.
const bool endswith (const CppStringT &suffix, const size_type start, const size_type end) const noexcept
 Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at start position and stops at end position.
const bool endswith (const std::initializer_list< CppStringT > &suffixes, const size_type start, const size_type end) const noexcept
 Returns true if the string ends with any of the specified suffixes, otherwise returns false. Test begins at start position and stops at end position.
const bool endswith_n (const CppStringT &suffix, const size_type count) const noexcept
 Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at position 0 and stops after count positions.
const bool endswith_n (const CppStringT &suffix, const size_type start, const size_type count) const noexcept
 Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at start position and stops after count positions.
const bool endswith_n (const std::initializer_list< CppStringT > &suffixes, const size_type start, const size_type count) const noexcept
 Returns true if the string ends with any of the specified suffixes, otherwise returns false. Test begins at start position and stops after count positions.
CppStringT expand_tabs (const size_type tabsize=8) const noexcept
 Returns a copy of the string where all tab characters are replaced by one or more spaces, depending on the current column and the given tab size.
constexpr size_type find (const CppStringT &sub, const size_type start=0, const size_type end=-1) const noexcept
 Returns the lowest index in the string where substring sub is found within the slice str[start:end], or -1 (i.e. 'npos') if sub is not found.
constexpr size_type find_n (const CppStringT &sub, const size_type count) const noexcept
 Returns the lowest index in the string where substring sub is found within the slice str[0:count-1], or -1 (i.e. 'npos') if sub is not found.
constexpr size_type find_n (const CppStringT &sub, const size_type start, const size_type count) const noexcept
 Returns the lowest index in the string where substring sub is found within the slice str[start:start+count-1], or -1 (i.e. 'npos') if sub is not found.
template<class... ArgsT>
CppStringTformat (const std::basic_format_string< char, std::type_identity_t< ArgsT >... > frmt, ArgsT &&... args)
template<typename T, class... ArgsT>
CppStringTformat (const std::basic_format_string< T, std::type_identity_t< ArgsT >... > frmt, ArgsT &&... args)
 Formats this string according to c++20 std::format() specification. Returns this string.
template<class... ArgsT>
CppStringTformat (const std::basic_format_string< wchar_t, std::type_identity_t< ArgsT >... > frmt, ArgsT &&... args)
constexpr size_type index (const CppStringT &sub, const size_type start=0, const size_type end=-1) const
 Like find(const CppStringT&), but raises NotFoundException when the substring sub is not found.
constexpr size_type index_n (const CppStringT &sub, const size_type count) const
 Like find_n(sub, count), but raises NotFoundException when the substring is not found.
constexpr size_type index_n (const CppStringT &sub, const size_type start, const size_type count) const
 Like find_n(sub, start, count), but raises NotFoundException when the substring is not found.
const bool is_words_sep () const noexcept
 Returns true if there are only whitespace and punctuation characters in the string and there is at least one character, or false otherwise.
const bool isalnum () const noexcept
 Returns true if all characters in the string are alphanumeric and there is at least one character, or false otherwise.
const bool isalpha () const noexcept
 Returns true if all characters in the string are alphabetic and there is at least one character, or false otherwise.
const bool isascii () const noexcept
 Returns true if the string is empty or all characters in the string are ASCII, or false otherwise.
const bool isdecimal () const noexcept
 Returns true if all characters in the string are decimal characters and there is at least one character, or false otherwise.
const bool isdigit () const noexcept
 Returns true if all characters in the string are digits and there is at least one character, or false otherwise.
const bool isidentifier () const noexcept
 Returns true if the string is not empty and is a valid identifier according to the language definition, or false otherwise.
const bool islower () const noexcept
 Returns true if all cased characters in the string are lowercase and there is at least one cased character, or false otherwise.
const bool isnumeric () const noexcept
 Returns true if all characters in the string are numeric characters, and there is at least one character, or false otherwise.
const bool isprintable () const noexcept
 Returns true if all characters in the string are printable or if the string is empty, or false otherwise.
const bool ispunctuation () const noexcept
 Returns true if the string contains only one character and if this character belongs to the ASCII punctuation set.
const bool isspace () const noexcept
 Returns true if there are only whitespace characters in the string and there is at least one character, or false otherwise.
const bool istitle () const noexcept
 Returns true if the string is a titlecased string and there is at least one character, or false otherwise.
const bool isupper () const noexcept
 Returns true if all cased characters in the string are uppercase and there is at least one cased character, or false otherwise.
const CppStringT join () const noexcept
 Empty parameters list signature. Returns a copy of current string.
template<class... NextCppStringsT>
+requires (sizeof...(others) > 0)
CppStringT join (const CppStringT &first, const NextCppStringsT &... others) const noexcept
 Returns a string which is the concatenation of the strings in the parameters list.
CppStringT join (const CppStringT &s) const noexcept
 Single parameter signature. Returns a copy of this parameter.
template<const std::size_t N>
CppStringT join (const std::array< CppStringT, N > &strs) const noexcept
 Returns a string which is the concatenation of the strings in the array parameter.
CppStringT join (const std::vector< CppStringT > &strs) const noexcept
 Returns a string which is the concatenation of the strings in the vector parameter.
CppStringT ljust (const size_type width, const value_type fillch=value_type(' ')) const noexcept
 Returns the string left justified in a string of length width.
CppStringTlower () noexcept
 In-place replaces all characters of the string with their lowercase conversion. Returns a reference to string.
CppStringT lstrip () const noexcept
 Returns a copy of the string with leading whitespaces removed.
CppStringT lstrip (const CppStringT &removedchars) const noexcept
 Returns a copy of the string with leading characters removed.
CppStringT operator() (const long long start, const long long stop, const long long step=1) const noexcept
 Generates a new string according to the specified slicing values.
template<typename IntT>
+requires std::is_signed_v<IntT>
CppStringT operator() (Slice< IntT > slice) const noexcept
 Generates a new string according to the specified slice.
CppStringT operator* (std::int64_t count) const noexcept
 Generates a new string with count times the content of this string.
CppStringToperator= (const CppStringT &) noexcept=default
 Default copy assignment.
CppStringToperator= (CppStringT &&) noexcept=default
 Default move assignment.
std::vector< CppStringTpartition (const CppStringT &sep) const noexcept
 Splits the string at the first occurrence of sep, and returns a 3-items vector containing the part before the separator, the separator itself, and the part after the separator.
CppStringT removeprefix (const CppStringT &prefix) const noexcept
 If the string starts with the prefix string, returns a new string with the prefix removed. Otherwise, returns a copy of the original string.
CppStringT removesuffix (const CppStringT &suffix) const noexcept
 If the string ends with the suffix string, returns a new string with the suffix removed. Otherwise, returns a copy of the original string.
CppStringT replace (const CppStringT &old, const CppStringT &new_, size_type count=-1) const noexcept
 Returns a copy of the string with first count occurrences of substring 'old' replaced by 'new_'.
constexpr size_type rfind (const CppStringT &sub) const noexcept
 Returns the highest index in the string where C-substring sub is found in the whole string, or -1 (i.e. 'npos') if sub is not found.
constexpr size_type rfind (const CppStringT &sub, const size_type start) const noexcept
 Returns the highest index in the string where substring sub is found starting at start position in string, or -1 (i.e. 'npos') if sub is not found.
constexpr size_type rfind (const CppStringT &sub, const size_type start, const size_type end) const noexcept
 Returns the highest index in the string where substring sub is found within the slice str[start:end], or -1 (i.e. 'npos') if sub is not found.
constexpr size_type rfind_n (const CppStringT &sub, const size_type count) const noexcept
 Returns the highest index in the string where substring sub is found within the slice str[0:count-1], or -1 (i.e. 'npos') if sub is not found.
constexpr size_type rfind_n (const CppStringT &sub, const size_type start, const size_type count) const noexcept
 Returns the highest index in the string where substring sub is found within the slice str[start:start+count-1], or -1 (i.e. 'npos') if sub is not found.
constexpr size_type rindex (const CppStringT &sub) const
 Like rfind(sub), but raises NotFoundException when the substring is not found.
constexpr size_type rindex (const CppStringT &sub, const size_type start) const
 Like rfind(sub, start), but raises NotFoundException when the substring is not found.
constexpr size_type rindex (const CppStringT &sub, const size_type start, const size_type end) const
 Like rfind(sub, start, end), but raises NotFoundException when the substring is not found.
constexpr size_type rindex_n (const CppStringT &sub, const size_type count) const
 Like rfind_n(sub, count), but raises NotFoundException when the substring is not found.
constexpr size_type rindex_n (const CppStringT &sub, const size_type start, const size_type count) const
 Like rfind_n(sub, start, count), but raises NotFoundException when the substring is not found.
CppStringT rjust (const size_type width, const value_type fillch=value_type(' ')) const noexcept
 Returns the string right justified in a string of length width.
std::vector< CppStringTrpartition (const CppStringT &sep) const noexcept
 Splits the string at the last occurrence of sep, and returns a 3-items vector containing the part before the separator, the separator itself, and the part after the separator.
std::vector< CppStringTrsplit () noexcept
 Returns a vector of the words in the whole string, as seperated with whitespace strings.
std::vector< CppStringTrsplit (const CppStringT &sep) noexcept
 Returns a vector of the words in the whole string, using sep as the delimiter string.
std::vector< CppStringTrsplit (const CppStringT &sep, const size_type maxsplit) noexcept
 Returns a vector of the words in the string, using sep as the delimiter string. At most maxsplit splits are done, the rightmost ones.
std::vector< CppStringTrsplit (const size_type maxsplit) noexcept
 Returns a vector of the words in the string, as seperated with whitespace strings. At most maxsplit splits are done, the rightmost ones.
CppStringT rstrip () const noexcept
 Returns a copy of the string with trailing whitespaces removed.
CppStringT rstrip (const CppStringT &removedchars) const noexcept
 Returns a copy of the string with trailing characters removed.
std::vector< CppStringTsplit () noexcept
 Returns a vector of the words in the whole string, as seperated with whitespace strings.
std::vector< CppStringTsplit (const CppStringT &sep) noexcept
 Returns a vector of the words in the whole string, using sep as the delimiter string.
std::vector< CppStringTsplit (const CppStringT &sep, const size_type maxsplit) noexcept
 Returns a vector of the words in the string, using sep as the delimiter string. At most maxsplit splits are done, the leftmost ones.
std::vector< CppStringTsplit (const size_type maxsplit) noexcept
 Returns a vector of the words in the string, as seperated with whitespace strings. At most maxsplit splits are done, the leftmost ones.
std::vector< CppStringTsplitlines (const bool keep_end=false) const noexcept
 Return a list of the lines in the string, breaking at line boundaries.
const bool startswith (const CppStringT &prefix) const noexcept
 Returns true if the string starts with the specified prefix, otherwise returns false. Test runs on the whole string.
const bool startswith (const CppStringT &prefix, const size_type start) const noexcept
 Returns true if the string starts with the specified prefix, otherwise returns false. Test begins at start position and stops at end of string.
const bool startswith (const CppStringT &prefix, const size_type start, const size_type end) const noexcept
 Returns true if the string starts with the specified prefix, otherwise returns false. Test begins at start position and stops at end position.
const bool startswith (const std::initializer_list< CppStringT > &prefixes, const size_type start, const size_type end) const noexcept
 Returns true if the string starts with any of the specified prefixes, otherwise returns false. Test begins at start position and stops at end of string.
const bool startswith_n (const CppStringT &prefix, const size_type count) const noexcept
 Returns true if the string starts with the specified suffix, otherwise returns false. Test begins at position 0 and stops after count positions.
const bool startswith_n (const CppStringT &prefix, const size_type start, const size_type count) const noexcept
 Returns true if the string starts with the specified suffix, otherwise returns false. Test begins at start position and stops after count positions.
const bool startswith_n (const std::initializer_list< CppStringT > &prefix, const size_type start, const size_type count) const noexcept
 Returns true if the string starts with any of the specified suffixes, otherwise returns false. Test begins at start position and stops after count positions.
CppStringT strip () const noexcept
 Returns a copy of the string with the leading and trailing whitespaces removed.
CppStringT strip (const CppStringT &removedchars) const noexcept
 Returns a copy of the string with the leading and trailing characters removed.
CppStringT substr (const size_type start, const size_type count=-1) const noexcept
 Returns a copy of the string, starting at index start and ending after count characters.
CppStringT swapcase () const noexcept
 Returns a copy of the string with uppercase characters converted to lowercase and vice versa.
CppStringT title () const noexcept
 Returns a titlecased copy of the string where words start with an uppercase character and the remaining characters are lowercase.
CppStringT translate (TransTable &table) noexcept
 Returns a copy of the string in which each character has been mapped through the given translation table.
CppStringTupper () noexcept
 In-place replaces all characters of the string with their uppercase conversion. Returns a reference to string.
CppStringT zfill (const size_type width) const noexcept
 Returns a copy of the string left filled with ASCII '0' digits to make a string of length width.
+ + + + + +

+Static Public Member Functions

static const value_type lower (const value_type ch) noexcept
 Returns lowercase conversion of the character.
static const value_type upper (const value_type ch) noexcept
 Returns uppercase conversion of the character.
+

Detailed Description

+
template<class CharT, class TraitsT, class AllocatorT>
+class pcs::CppStringT< CharT, TraitsT, AllocatorT >

This is the templated base class for all CppString classes.

+

Users should instantiate any specialization of this base class rather than this base class itself:

+

Member Function Documentation

+ +

◆ capitalize()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::capitalize ()
+
+inlinenoexcept
+
+ +

Returns a copy of the string with its first character capitalized and the rest lowercased.

+ +
+
+ +

◆ center()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::center (const size_type width,
const value_type fillch = value_type(' ') ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string centered in a string of length width.

+

Padding is done using the specified fillchar (default is an ASCII space). A copy of the original string is returned if width is less than or equal to the length of the string. The original string remains unchanged.

+ +
+
+ +

◆ contains()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::contains (const CppStringT< CharT, TraitsT, AllocatorT > & substr) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns true if this string contains the passed string, or false otherwise.

+

This is a c++ implementation of Python keyword 'in' applied to strings.

+ +

Referenced by pcs::CppStringT< char >::contains_n().

+ +
+
+ +

◆ contains_n()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::contains_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type count = -1 ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns true if the passed string is found within the slice str[start:start+count-1], or false otherwise.

+

This is a c++ implementation of Python keyword 'in' applied to Python sliced strings.

+ +
+
+ +

◆ count()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::count (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start = 0,
const size_type end = -1 ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the number of non-overlapping occurrences of substring sub in the range [start, end].

+ +

Referenced by pcs::CppStringT< char >::count_n(), and pcs::CppStringT< char >::count_n().

+ +
+
+ +

◆ count_n() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::count_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type length ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the number of non-overlapping occurrences of substring sub in the range [0, length-1].

+ +
+
+ +

◆ count_n() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::count_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type length ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the number of non-overlapping occurrences of substring sub in the range [start, start+length-1].

+ +
+
+ +

◆ endswith() [1/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::endswith (const CppStringT< CharT, TraitsT, AllocatorT > & suffix) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string ends with the specified suffix, otherwise returns false. Test runs on the whole string.

+ +
+
+ +

◆ endswith() [2/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::endswith (const CppStringT< CharT, TraitsT, AllocatorT > & suffix,
const size_type end ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at start of string and stops at end position.

+ +
+
+ +

◆ endswith() [3/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::endswith (const CppStringT< CharT, TraitsT, AllocatorT > & suffix,
const size_type start,
const size_type end ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at start position and stops at end position.

+ +

Referenced by pcs::CppStringT< char >::endswith_n(), pcs::CppStringT< char >::endswith_n(), pcs::CppStringT< char >::endswith_n(), and pcs::CppStringT< char >::removesuffix().

+ +
+
+ +

◆ endswith() [4/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::endswith (const std::initializer_list< CppStringT< CharT, TraitsT, AllocatorT > > & suffixes,
const size_type start,
const size_type end ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string ends with any of the specified suffixes, otherwise returns false. Test begins at start position and stops at end position.

+ +
+
+ +

◆ endswith_n() [1/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::endswith_n (const CppStringT< CharT, TraitsT, AllocatorT > & suffix,
const size_type count ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at position 0 and stops after count positions.

+ +
+
+ +

◆ endswith_n() [2/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::endswith_n (const CppStringT< CharT, TraitsT, AllocatorT > & suffix,
const size_type start,
const size_type count ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string ends with the specified suffix, otherwise returns false. Test begins at start position and stops after count positions.

+ +
+
+ +

◆ endswith_n() [3/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::endswith_n (const std::initializer_list< CppStringT< CharT, TraitsT, AllocatorT > > & suffixes,
const size_type start,
const size_type count ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string ends with any of the specified suffixes, otherwise returns false. Test begins at start position and stops after count positions.

+ +
+
+ +

◆ expand_tabs()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::expand_tabs (const size_type tabsize = 8) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string where all tab characters are replaced by one or more spaces, depending on the current column and the given tab size.

+ +
+
+ +

◆ find()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::find (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start = 0,
const size_type end = -1 ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the lowest index in the string where substring sub is found within the slice str[start:end], or -1 (i.e. 'npos') if sub is not found.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains().

+

CAUTION: empty substrings are considered to be in the string if start and end positions are both less than the string size and if start <= end.

+
See also
find_n(), rfind() and rfind_n().
+
+index(), index_n(), rindex() and rindex_n().
+ +

Referenced by pcs::CppStringT< char >::count(), pcs::CppStringT< char >::index(), pcs::CppStringT< char >::partition(), pcs::CppStringT< char >::replace(), and pcs::CppStringT< char >::split().

+ +
+
+ +

◆ find_n() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::find_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type count ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the lowest index in the string where substring sub is found within the slice str[0:count-1], or -1 (i.e. 'npos') if sub is not found.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains_n().

+

CAUTION: empty substrings are considered to be in the string if start and end positions are both less than the string size and if start <= end. The returned position is 0.

+
See also
find(), rfind() and rfind_n().
+
+index(), index_n(), rindex() and rindex_n().
+ +
+
+ +

◆ find_n() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::find_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type count ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the lowest index in the string where substring sub is found within the slice str[start:start+count-1], or -1 (i.e. 'npos') if sub is not found.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains_n().

+

CAUTION: empty substrings are considered to be in the string if start and end positions are both less than the string size and if start <= end. The returned position is 0.

+
See also
find(), rfind() and rfind_n().
+
+index(), index_n(), rindex() and rindex_n().
+ +

Referenced by pcs::CppStringT< char >::find(), and pcs::CppStringT< char >::find_n().

+ +
+
+ +

◆ format() [1/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<class... ArgsT>
+ + + + + +
+ + + + + + + + + + + +
CppStringT & pcs::CppStringT< CharT, TraitsT, AllocatorT >::format (const std::basic_format_string< char, std::type_identity_t< ArgsT >... > frmt,
ArgsT &&... args )
+
+inline
+
+
Parameters
+ + +
frmtspecialzation for char's
+
+
+ +
+
+ +

◆ format() [2/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<typename T, class... ArgsT>
+ + + + + +
+ + + + + + + + + + + +
CppStringT & pcs::CppStringT< CharT, TraitsT, AllocatorT >::format (const std::basic_format_string< T, std::type_identity_t< ArgsT >... > frmt,
ArgsT &&... args )
+
+inline
+
+ +

Formats this string according to c++20 std::format() specification. Returns this string.

+ +
+
+ +

◆ format() [3/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<class... ArgsT>
+ + + + + +
+ + + + + + + + + + + +
CppStringT & pcs::CppStringT< CharT, TraitsT, AllocatorT >::format (const std::basic_format_string< wchar_t, std::type_identity_t< ArgsT >... > frmt,
ArgsT &&... args )
+
+inline
+
+
Parameters
+ + +
frmtspecialzation for wchar_t's
+
+
+ +
+
+ +

◆ index()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::index (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start = 0,
const size_type end = -1 ) const
+
+inlinenodiscardconstexpr
+
+ +

Like find(const CppStringT&), but raises NotFoundException when the substring sub is not found.

+
See also
index_n(), rindex() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +

Referenced by pcs::CppStringT< char >::index_n(), and pcs::CppStringT< char >::index_n().

+ +
+
+ +

◆ index_n() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::index_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type count ) const
+
+inlinenodiscardconstexpr
+
+ +

Like find_n(sub, count), but raises NotFoundException when the substring is not found.

+
See also
index_n(), rindex() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +
+
+ +

◆ index_n() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::index_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type count ) const
+
+inlinenodiscardconstexpr
+
+ +

Like find_n(sub, start, count), but raises NotFoundException when the substring is not found.

+
See also
index_n(), rindex() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +
+
+ +

◆ is_words_sep()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::is_words_sep () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if there are only whitespace and punctuation characters in the string and there is at least one character, or false otherwise.

+ +
+
+ +

◆ isalnum()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isalnum () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all characters in the string are alphanumeric and there is at least one character, or false otherwise.

+ +
+
+ +

◆ isalpha()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isalpha () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all characters in the string are alphabetic and there is at least one character, or false otherwise.

+ +
+
+ +

◆ isascii()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isascii () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string is empty or all characters in the string are ASCII, or false otherwise.

+ +
+
+ +

◆ isdecimal()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isdecimal () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all characters in the string are decimal characters and there is at least one character, or false otherwise.

+

Decimal characters are those that can be used to form numbers in base 10, e.g. U+0660, ARABIC-INDIC DIGIT ZERO. Formally a decimal character is a character in the Unicode General Category �Nd�.

+ +

Referenced by pcs::CppStringT< char >::isdigit(), and pcs::CppStringT< char >::isnumeric().

+ +
+
+ +

◆ isdigit()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isdigit () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all characters in the string are digits and there is at least one character, or false otherwise.

+

Digits include decimal characters and digits that need special handling, such as the compatibility superscript digits. This covers digits which cannot be used to form numbers in base 10, like the Kharosthi numbers. Formally, a digit is a character that has the property value Numeric_Type=Digit or Numeric_Type =Decimal.

+

CAUTION: current implementation of library cpp-strings does not implement above algorithm. It just returns the same result as 'isdecimal()' which is NOT what Python str library does.

+ +
+
+ +

◆ isidentifier()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isidentifier () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string is not empty and is a valid identifier according to the language definition, or false otherwise.

+

CAUTION: the current implementation of this method does not deal with the proper c++ defintiion of identifiers (see https://en.cppreference.com/w/cpp/language/identifiers and https://www.unicode.org/reports/tr31/#Table_Lexical_Classes_for_Identifiers).

+

While the specification of identifiers in c++ is this one:

+

identifier ::= XID_Start XID_Continue* XID_Start ::= ID_Start XID_Continue* ID_Start ::= <characters derived from the Unicode General_Category of uppercase letters, lowercase letters, titlecase letters, modifier letters, other letters, letter numbers, plus Other_ID_Start, minus Pattern_Syntax and Pattern_White_Space code points> XID_Continue ::= <characters derived from ID_Continue as per Unicode specs Section 5.1, NFKC Modifications (https://www.unicode.org/reports/tr31/#NFKC_Modifications)> ID_Continue ::= ID_Start | <characters having the Unicode General_Category of nonspacing marks, spacing combining marks, decimal number, connector punctuation, plus Other_ID_Continue, minus Pattern_Syntax and Pattern_White_Space code points>

+

the currently implemented rule is this simpler one:

+

identifier ::= ID_Start id_continue* id_continue ::= ID_Start | decimal_number

+ +
+
+ +

◆ islower()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::islower () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all cased characters in the string are lowercase and there is at least one cased character, or false otherwise.

+ +
+
+ +

◆ isnumeric()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isnumeric () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all characters in the string are numeric characters, and there is at least one character, or false otherwise.

+

CAUTION: current implementation just returns isdecimal() result, while the description of isnumeric() should be this one: Numeric characters include digit characters, and all characters that have the Unicode numeric value property. Formally, numeric characters are those with the property value Numeric_Type=Digit, Numeric_Type=Decimal or Numeric_Type=Numeric.

+ +
+
+ +

◆ isprintable()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isprintable () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all characters in the string are printable or if the string is empty, or false otherwise.

+

Nonprintable characters are those characters defined in the Unicode character database as "Other" or "Separator", excepting the ASCII space (0x20) which is considered printable.

+ +
+
+ +

◆ ispunctuation()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::ispunctuation () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string contains only one character and if this character belongs to the ASCII punctuation set.

+ +
+
+ +

◆ isspace()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isspace () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if there are only whitespace characters in the string and there is at least one character, or false otherwise.

+ +
+
+ +

◆ istitle()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::istitle () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string is a titlecased string and there is at least one character, or false otherwise.

+

For instance uppercase characters may only follow uncased characters and lowercase characters only cased ones.

+

CAUTION: current implementation only tests for uppercase characters following whitespaces and lowercase characters anywhere else.

+ +
+
+ +

◆ isupper()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::isupper () const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if all cased characters in the string are uppercase and there is at least one cased character, or false otherwise.

+ +
+
+ +

◆ join() [1/5]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::join () const
+
+inlinenodiscardnoexcept
+
+ +

Empty parameters list signature. Returns a copy of current string.

+ +

Referenced by pcs::CppStringT< char >::join().

+ +
+
+ +

◆ join() [2/5]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<class... NextCppStringsT>
+requires (sizeof...(others) > 0)
+ + + + + +
+ + + + + + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::join (const CppStringT< CharT, TraitsT, AllocatorT > & first,
const NextCppStringsT &... others ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a string which is the concatenation of the strings in the parameters list.

+

The separator between elements is the string to which this method is applied.

+ +
+
+ +

◆ join() [3/5]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::join (const CppStringT< CharT, TraitsT, AllocatorT > & s) const
+
+inlinenodiscardnoexcept
+
+ +

Single parameter signature. Returns a copy of this parameter.

+ +
+
+ +

◆ join() [4/5]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<const std::size_t N>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::join (const std::array< CppStringT< CharT, TraitsT, AllocatorT >, N > & strs) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a string which is the concatenation of the strings in the array parameter.

+

The separator between elements is the string to which this method is applied.

+ +

Referenced by pcs::CppStringT< char >::title().

+ +
+
+ +

◆ join() [5/5]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::join (const std::vector< CppStringT< CharT, TraitsT, AllocatorT > > & strs) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a string which is the concatenation of the strings in the vector parameter.

+

The separator between elements is the string to which this method is applied.

+ +
+
+ +

◆ ljust()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::ljust (const size_type width,
const value_type fillch = value_type(' ') ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns the string left justified in a string of length width.

+

Padding is done using the specified fillchar (default is an ASCII space). The original string is returned if width is less than or equal to len(s).

+ +

Referenced by pcs::CppStringT< char >::zfill().

+ +
+
+ +

◆ lower() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT & pcs::CppStringT< CharT, TraitsT, AllocatorT >::lower ()
+
+inlinenoexcept
+
+ +

In-place replaces all characters of the string with their lowercase conversion. Returns a reference to string.

+

Notice: uses the currently set std::locale, which is the "C" one by default or any other one as previously set by the user.

+ +

Referenced by pcs::CppStringT< char >::capitalize(), and pcs::CppStringT< char >::lower().

+ +
+
+ +

◆ lower() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const value_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::lower (const value_type ch)
+
+inlinestaticnodiscardnoexcept
+
+ +

Returns lowercase conversion of the character.

+

Notice: uses the currently set std::locale, which is the "C" one by default or any other one as previously set by the user.

+ +
+
+ +

◆ lstrip() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::lstrip () const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with leading whitespaces removed.

+ +
+
+ +

◆ lstrip() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::lstrip (const CppStringT< CharT, TraitsT, AllocatorT > & removedchars) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with leading characters removed.

+

The passed string specifies the set of characters to be removed. The chars argument is not a prefix; rather, all combinations of its values are stripped. To remove a prefix, rather call method 'removeprefix()'.

+ +

Referenced by pcs::CppStringT< char >::strip(), and pcs::CppStringT< char >::strip().

+ +
+
+ +

◆ operator()() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::operator() (const long long start,
const long long stop,
const long long step = 1 ) const
+
+inlinenodiscardnoexcept
+
+ +

Generates a new string according to the specified slicing values.

+ +
+
+ +

◆ operator()() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<typename IntT>
+requires std::is_signed_v<IntT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::operator() (Slice< IntT > slice) const
+
+inlinenodiscardnoexcept
+
+ +

Generates a new string according to the specified slice.

+

A slice is a range specified as [start, stop, step]. It may also be specified as [start, stop] in which case step = 1, or as [stop] in wich case start = 0 and step = 1. Values may be negative: negative step means reverse running and negative start or stop is relative to the end of the string. Notice: the stop value specifies an out of bounds index.

See also
class Slice and all its inheriting classes.
+ +
+
+ +

◆ operator*()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::operator* (std::int64_t count) const
+
+inlinenodiscardnoexcept
+
+ +

Generates a new string with count times the content of this string.

+ +
+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT & pcs::CppStringT< CharT, TraitsT, AllocatorT >::operator= (const CppStringT< CharT, TraitsT, AllocatorT > & )
+
+defaultnoexcept
+
+ +

Default copy assignment.

+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT & pcs::CppStringT< CharT, TraitsT, AllocatorT >::operator= (CppStringT< CharT, TraitsT, AllocatorT > && )
+
+defaultnoexcept
+
+ +

Default move assignment.

+ +
+
+ +

◆ partition()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::partition (const CppStringT< CharT, TraitsT, AllocatorT > & sep) const
+
+inlinenodiscardnoexcept
+
+ +

Splits the string at the first occurrence of sep, and returns a 3-items vector containing the part before the separator, the separator itself, and the part after the separator.

+

If the separator is not found, returns a 3-items vector containing the string itself, followed by two empty strings.

+ +
+
+ +

◆ removeprefix()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::removeprefix (const CppStringT< CharT, TraitsT, AllocatorT > & prefix) const
+
+inlinenodiscardnoexcept
+
+ +

If the string starts with the prefix string, returns a new string with the prefix removed. Otherwise, returns a copy of the original string.

+ +
+
+ +

◆ removesuffix()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::removesuffix (const CppStringT< CharT, TraitsT, AllocatorT > & suffix) const
+
+inlinenodiscardnoexcept
+
+ +

If the string ends with the suffix string, returns a new string with the suffix removed. Otherwise, returns a copy of the original string.

+ +
+
+ +

◆ replace()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::replace (const CppStringT< CharT, TraitsT, AllocatorT > & old,
const CppStringT< CharT, TraitsT, AllocatorT > & new_,
size_type count = -1 ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with first count occurrences of substring 'old' replaced by 'new_'.

+ +
+
+ +

◆ rfind() [1/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rfind (const CppStringT< CharT, TraitsT, AllocatorT > & sub) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the highest index in the string where C-substring sub is found in the whole string, or -1 (i.e. 'npos') if sub is not found.

+

Note that this is an offset from the start of the string, not the end.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains().

+

CAUTION: empty substrings are considered to be in the string if start and end positions are both less than the string size and if start <= end. The returned position is the size of the string.

+
See also
find(), find_n() and rfind_n().
+
+index(), index_n(), rindex() and rindex_n().
+ +
+
+ +

◆ rfind() [2/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rfind (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the highest index in the string where substring sub is found starting at start position in string, or -1 (i.e. 'npos') if sub is not found.

+

Note that this is an offset from the start of the string, not the end.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains().

+

CAUTION: empty substrings are considered to be in the string if start and end positions are both less than the string size and if start <= end. The returned position is the size of the string.

+
See also
find(), find_n() and rfind_n().
+
+index(), index_n(), rindex() and rindex_n().
+ +
+
+ +

◆ rfind() [3/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rfind (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type end ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the highest index in the string where substring sub is found within the slice str[start:end], or -1 (i.e. 'npos') if sub is not found.

+

Note that this is an offset from the start of the string, not the end.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains().

+

CAUTION: empty substrings are considered to be in the string if start and end positions are both less than the string size and if start <= end. The returned position is the size of the string.

+
See also
find(), find_n() and rfind_n().
+
+index(), index_n(), rindex() and rindex_n().
+ +

Referenced by pcs::CppStringT< char >::rfind(), pcs::CppStringT< char >::rfind(), pcs::CppStringT< char >::rfind_n(), pcs::CppStringT< char >::rfind_n(), pcs::CppStringT< char >::rindex(), pcs::CppStringT< char >::rpartition(), and pcs::CppStringT< char >::rsplit().

+ +
+
+ +

◆ rfind_n() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rfind_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type count ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the highest index in the string where substring sub is found within the slice str[0:count-1], or -1 (i.e. 'npos') if sub is not found.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains_n().

+
See also
find(), find_n() and rfind().
+
+index(), index_n(), rindex() and rindex_n().
+ +
+
+ +

◆ rfind_n() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rfind_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type count ) const
+
+inlinenodiscardconstexprnoexcept
+
+ +

Returns the highest index in the string where substring sub is found within the slice str[start:start+count-1], or -1 (i.e. 'npos') if sub is not found.

+

Note: this method should be used only if you need to know the position of sub. To check if sub is a substring or not, use the method contains_n().

+
See also
find(), find_n() and rfind().
+
+index(), index_n(), rindex() and rindex_n().
+ +
+
+ +

◆ rindex() [1/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rindex (const CppStringT< CharT, TraitsT, AllocatorT > & sub) const
+
+inlinenodiscardconstexpr
+
+ +

Like rfind(sub), but raises NotFoundException when the substring is not found.

+
See also
index(), index_n() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +
+
+ +

◆ rindex() [2/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rindex (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start ) const
+
+inlinenodiscardconstexpr
+
+ +

Like rfind(sub, start), but raises NotFoundException when the substring is not found.

+
See also
index(), index_n() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +
+
+ +

◆ rindex() [3/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rindex (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type end ) const
+
+inlinenodiscardconstexpr
+
+ +

Like rfind(sub, start, end), but raises NotFoundException when the substring is not found.

+
See also
index(), index_n() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +

Referenced by pcs::CppStringT< char >::rindex(), pcs::CppStringT< char >::rindex(), pcs::CppStringT< char >::rindex_n(), and pcs::CppStringT< char >::rindex_n().

+ +
+
+ +

◆ rindex_n() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rindex_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type count ) const
+
+inlinenodiscardconstexpr
+
+ +

Like rfind_n(sub, count), but raises NotFoundException when the substring is not found.

+
See also
index_n(), rindex() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +
+
+ +

◆ rindex_n() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
size_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::rindex_n (const CppStringT< CharT, TraitsT, AllocatorT > & sub,
const size_type start,
const size_type count ) const
+
+inlinenodiscardconstexpr
+
+ +

Like rfind_n(sub, start, count), but raises NotFoundException when the substring is not found.

+
See also
index_n(), rindex() and rindex_n().
+
+find(), find_n(), rfind() and rfind_n().
+ +
+
+ +

◆ rjust()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::rjust (const size_type width,
const value_type fillch = value_type(' ') ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns the string right justified in a string of length width.

+

Padding is done using the specified fillchar (default is an ASCII space). The original string is returned if width is less than or equal to len(s).

+ +
+
+ +

◆ rpartition()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::rpartition (const CppStringT< CharT, TraitsT, AllocatorT > & sep) const
+
+inlinenodiscardnoexcept
+
+ +

Splits the string at the last occurrence of sep, and returns a 3-items vector containing the part before the separator, the separator itself, and the part after the separator.

+

If the separator is not found, returns a 3-items vector containing the string itself, followed by two empty strings.

+ +
+
+ +

◆ rsplit() [1/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::rsplit ()
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the whole string, as seperated with whitespace strings.

+

Notice: consecutive whitespaces are each regarded as a single separator. So, they each separate empty strings.

+ +

Referenced by pcs::CppStringT< char >::rsplit().

+ +
+
+ +

◆ rsplit() [2/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::rsplit (const CppStringT< CharT, TraitsT, AllocatorT > & sep)
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the whole string, using sep as the delimiter string.

+ +
+
+ +

◆ rsplit() [3/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::rsplit (const CppStringT< CharT, TraitsT, AllocatorT > & sep,
const size_type maxsplit )
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the string, using sep as the delimiter string. At most maxsplit splits are done, the rightmost ones.

+ +
+
+ +

◆ rsplit() [4/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::rsplit (const size_type maxsplit)
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the string, as seperated with whitespace strings. At most maxsplit splits are done, the rightmost ones.

+ +
+
+ +

◆ rstrip() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::rstrip () const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with trailing whitespaces removed.

+ +

Referenced by pcs::CppStringT< char >::strip(), and pcs::CppStringT< char >::strip().

+ +
+
+ +

◆ rstrip() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::rstrip (const CppStringT< CharT, TraitsT, AllocatorT > & removedchars) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with trailing characters removed.

+

The passed string specifies the set of characters to be removed. The chars argument is not a prefix; rather, all combinations of its values are stripped. To remove a suffix, rather call method 'removesuffix()'.

+ +
+
+ +

◆ split() [1/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::split ()
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the whole string, as seperated with whitespace strings.

+

Notice: consecutive whitespaces are each regarded as a single separator. So, they each separate empty strings.

+ +

Referenced by pcs::CppStringT< char >::rsplit(), pcs::CppStringT< char >::rsplit(), pcs::CppStringT< char >::split(), and pcs::CppStringT< char >::title().

+ +
+
+ +

◆ split() [2/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::split (const CppStringT< CharT, TraitsT, AllocatorT > & sep)
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the whole string, using sep as the delimiter string.

+

Notice: consecutive delimiters are not grouped together and are deemed to delimit empty strings (for example, "1,,2".split(",") returns {"1", "", "2"}). The sep argument may consist of multiple characters (for example, "1<>2<>3".split("<>") returns {"1", "2", "3"]). Splitting an empty string with a specified separator returns {""}.

+ +
+
+ +

◆ split() [3/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::split (const CppStringT< CharT, TraitsT, AllocatorT > & sep,
const size_type maxsplit )
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the string, using sep as the delimiter string. At most maxsplit splits are done, the leftmost ones.

+ +
+
+ +

◆ split() [4/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::split (const size_type maxsplit)
+
+inlinenodiscardnoexcept
+
+ +

Returns a vector of the words in the string, as seperated with whitespace strings. At most maxsplit splits are done, the leftmost ones.

+ +
+
+ +

◆ splitlines()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::vector< CppStringT > pcs::CppStringT< CharT, TraitsT, AllocatorT >::splitlines (const bool keep_end = false) const
+
+inlinenodiscardnoexcept
+
+ +

Return a list of the lines in the string, breaking at line boundaries.

+

Line breaks are not included in the resulting list unless keepends is given and true.

+

This method splits on the following line boundaries. In particular, the boundaries are a superset of universal newlines: '
+' Line Feed '\r' Carriage Return '\r
+' Carriage Return + Line Feed '\v' or '\x0b' Line Tabulation '\f' or '\x0c' Form Feed '\x1c' File Separator '\x1d' Group Separator '\x1e' Record Separator Next separators values, detected by Python method splitlines(), are currently NOT detected by CppStrings '\x85' Next Line (C1 Control Code) '\u2028' Line Separator '\u2029' Paragraph Separator

+ +
+
+ +

◆ startswith() [1/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::startswith (const CppStringT< CharT, TraitsT, AllocatorT > & prefix) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string starts with the specified prefix, otherwise returns false. Test runs on the whole string.

+ +
+
+ +

◆ startswith() [2/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::startswith (const CppStringT< CharT, TraitsT, AllocatorT > & prefix,
const size_type start ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string starts with the specified prefix, otherwise returns false. Test begins at start position and stops at end of string.

+ +
+
+ +

◆ startswith() [3/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::startswith (const CppStringT< CharT, TraitsT, AllocatorT > & prefix,
const size_type start,
const size_type end ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string starts with the specified prefix, otherwise returns false. Test begins at start position and stops at end position.

+ +

Referenced by pcs::CppStringT< char >::removeprefix(), pcs::CppStringT< char >::startswith(), and pcs::CppStringT< char >::startswith_n().

+ +
+
+ +

◆ startswith() [4/4]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::startswith (const std::initializer_list< CppStringT< CharT, TraitsT, AllocatorT > > & prefixes,
const size_type start,
const size_type end ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string starts with any of the specified prefixes, otherwise returns false. Test begins at start position and stops at end of string.

+ +
+
+ +

◆ startswith_n() [1/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::startswith_n (const CppStringT< CharT, TraitsT, AllocatorT > & prefix,
const size_type count ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string starts with the specified suffix, otherwise returns false. Test begins at position 0 and stops after count positions.

+ +
+
+ +

◆ startswith_n() [2/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::startswith_n (const CppStringT< CharT, TraitsT, AllocatorT > & prefix,
const size_type start,
const size_type count ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string starts with the specified suffix, otherwise returns false. Test begins at start position and stops after count positions.

+ +
+
+ +

◆ startswith_n() [3/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
const bool pcs::CppStringT< CharT, TraitsT, AllocatorT >::startswith_n (const std::initializer_list< CppStringT< CharT, TraitsT, AllocatorT > > & prefix,
const size_type start,
const size_type count ) const
+
+inlinenodiscardnoexcept
+
+ +

Returns true if the string starts with any of the specified suffixes, otherwise returns false. Test begins at start position and stops after count positions.

+ +
+
+ +

◆ strip() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::strip () const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with the leading and trailing whitespaces removed.

+ +
+
+ +

◆ strip() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::strip (const CppStringT< CharT, TraitsT, AllocatorT > & removedchars) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with the leading and trailing characters removed.

+

The passed string specifies the set of characters to be removed. The chars argument is not a prefix; rather, all combinations of its values are stripped.

+ +
+
+ +

◆ substr()

+ + + +

◆ swapcase()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::swapcase () const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string with uppercase characters converted to lowercase and vice versa.

+

Note that it is not necessarily true that s.swapcase().swapcase() == s.

+ +
+
+ +

◆ title()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::title () const
+
+inlinenodiscardnoexcept
+
+ +

Returns a titlecased copy of the string where words start with an uppercase character and the remaining characters are lowercase.

+ +

Referenced by pcs::CppStringT< char >::istitle().

+ +
+
+ +

◆ translate()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::translate (TransTable & table)
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string in which each character has been mapped through the given translation table.

+

The table must be of type CppStringT::TransTable. When a character to be translated is not available as an entry in the tranlation table, it is set as is in the resulting string.

+ +
+
+ +

◆ upper() [1/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT & pcs::CppStringT< CharT, TraitsT, AllocatorT >::upper ()
+
+inlinenoexcept
+
+ +

In-place replaces all characters of the string with their uppercase conversion. Returns a reference to string.

+

Notice: uses the currently set std::locale, which is the "C" one by default or any other one as previously set by the user.

+ +

Referenced by pcs::CppStringT< char >::upper().

+ +
+
+ +

◆ upper() [2/2]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
const value_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::upper (const value_type ch)
+
+inlinestaticnodiscardnoexcept
+
+ +

Returns uppercase conversion of the character.

+

Notice: uses the currently set std::locale, which is the "C" one by default or any other one as previously set by the user.

+ +
+
+ +

◆ zfill()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
CppStringT pcs::CppStringT< CharT, TraitsT, AllocatorT >::zfill (const size_type width) const
+
+inlinenodiscardnoexcept
+
+ +

Returns a copy of the string left filled with ASCII '0' digits to make a string of length width.

+

A leading sign prefix ('+'/'-') is handled by inserting the padding after the sign character rather than before. The original string is returned if width is less than or equal to len(s).

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • cppstrings.h
  • +
+
+
+ +
+ + + + diff --git a/documentation/classpcs_1_1_cpp_string_t.js b/documentation/classpcs_1_1_cpp_string_t.js new file mode 100644 index 0000000..7ed5049 --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t.js @@ -0,0 +1,99 @@ +var classpcs_1_1_cpp_string_t = +[ + [ "NotFoundException", "classpcs_1_1_cpp_string_t_1_1_not_found_exception.html", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html", "classpcs_1_1_cpp_string_t_1_1_trans_table" ], + [ "capitalize", "classpcs_1_1_cpp_string_t.html#a48a00cca031b9c29d1912508e120a5f6", null ], + [ "center", "classpcs_1_1_cpp_string_t.html#af18311d8608e71627bc85f96581e4dd3", null ], + [ "contains", "classpcs_1_1_cpp_string_t.html#a0674e29327353aabf83d0e207fed31ed", null ], + [ "contains_n", "classpcs_1_1_cpp_string_t.html#a031b05f290f589b2df52bb84252c27c7", null ], + [ "count", "classpcs_1_1_cpp_string_t.html#a7beda74b4d5092845a970d51d01fe4bf", null ], + [ "count_n", "classpcs_1_1_cpp_string_t.html#a59839e3b5a186c2554224dbf4528c1b4", null ], + [ "count_n", "classpcs_1_1_cpp_string_t.html#a76f97d56e1713182d5e85d58cd445d10", null ], + [ "endswith", "classpcs_1_1_cpp_string_t.html#a3e9da0bfa54e84420e81668f6ce7f52c", null ], + [ "endswith", "classpcs_1_1_cpp_string_t.html#a6b23210d7d5eb07c9f942d62cc76b05e", null ], + [ "endswith", "classpcs_1_1_cpp_string_t.html#a42f1e87d7f1903536ee79aa058d5c867", null ], + [ "endswith", "classpcs_1_1_cpp_string_t.html#a87b25fce2a05421efd718c599a784a09", null ], + [ "endswith_n", "classpcs_1_1_cpp_string_t.html#a619935926ef961883e9bbd92b2fc23bd", null ], + [ "endswith_n", "classpcs_1_1_cpp_string_t.html#a7eca5636b598c6fc107452ddd04a2f17", null ], + [ "endswith_n", "classpcs_1_1_cpp_string_t.html#a4fd91047ab0126c823aa391a699e03bf", null ], + [ "expand_tabs", "classpcs_1_1_cpp_string_t.html#a2cc04d5062162ff5f7b6111d6f1e78e8", null ], + [ "find", "classpcs_1_1_cpp_string_t.html#a24c4b7a0f713373cb3287d92289562ad", null ], + [ "find_n", "classpcs_1_1_cpp_string_t.html#a6b0bc87b284120d0d3bfc685984997c0", null ], + [ "find_n", "classpcs_1_1_cpp_string_t.html#ac4c9351bb52eb9a62fa7fb2e2d5f054d", null ], + [ "format", "classpcs_1_1_cpp_string_t.html#a1a89389b38fd6af3ea8db3489dd82f70", null ], + [ "format", "classpcs_1_1_cpp_string_t.html#a5caecc371bf390272283ceb7a15c6c1d", null ], + [ "format", "classpcs_1_1_cpp_string_t.html#a944e066f3a863c354a5613a6eda17374", null ], + [ "index", "classpcs_1_1_cpp_string_t.html#a277a2b8a3b93951ccb94b6bf39daa582", null ], + [ "index_n", "classpcs_1_1_cpp_string_t.html#a19a51054b824add817f30c5ff03effe7", null ], + [ "index_n", "classpcs_1_1_cpp_string_t.html#aee94d4b52483021051b168e776b18569", null ], + [ "is_words_sep", "classpcs_1_1_cpp_string_t.html#a7565e4f2958e485ee2b0815be1faa0fa", null ], + [ "isalnum", "classpcs_1_1_cpp_string_t.html#a8fdf96ffee524d5b795c4aad26ece6ae", null ], + [ "isalpha", "classpcs_1_1_cpp_string_t.html#a447b7c58b4be1cdcba3aedf189acbce7", null ], + [ "isascii", "classpcs_1_1_cpp_string_t.html#a710631f31d4c63c2117e8f4804fad3f2", null ], + [ "isdecimal", "classpcs_1_1_cpp_string_t.html#a0b9d8a55419274e7cfd9badb4df704e3", null ], + [ "isdigit", "classpcs_1_1_cpp_string_t.html#a21316d00180377a3f48910a6c4c43b9c", null ], + [ "isidentifier", "classpcs_1_1_cpp_string_t.html#a91f72d425dbb4c53a066338d30683246", null ], + [ "islower", "classpcs_1_1_cpp_string_t.html#ae4ff448bb92e6499c0a76f7d8e11126c", null ], + [ "isnumeric", "classpcs_1_1_cpp_string_t.html#a578176ed20fd8da965afbcae1d99dd59", null ], + [ "isprintable", "classpcs_1_1_cpp_string_t.html#a6257a1832da550d4be32e9f272e51265", null ], + [ "ispunctuation", "classpcs_1_1_cpp_string_t.html#a2842f3a067fdc674709bed048d64e12d", null ], + [ "isspace", "classpcs_1_1_cpp_string_t.html#a959a8f56bb536f2474ffc649a7ad3290", null ], + [ "istitle", "classpcs_1_1_cpp_string_t.html#ad72611f339c2b9027a72fa26f25748c3", null ], + [ "isupper", "classpcs_1_1_cpp_string_t.html#af2784cbe9655bb8e23fe90375d79e69c", null ], + [ "join", "classpcs_1_1_cpp_string_t.html#aa3523b858357399995e4fb9ec796c96c", null ], + [ "join", "classpcs_1_1_cpp_string_t.html#a545d669bb9296b5695b01ac8680bf3f4", null ], + [ "join", "classpcs_1_1_cpp_string_t.html#a30860a043574996d85c80e49ef618594", null ], + [ "join", "classpcs_1_1_cpp_string_t.html#ac1b427d4cc4c2aed8252b3526b63f1b1", null ], + [ "join", "classpcs_1_1_cpp_string_t.html#a9eed3f6c5e09f98f3d5916cc5b3a4311", null ], + [ "ljust", "classpcs_1_1_cpp_string_t.html#aed96c44c384cab45342122cd7e2f02eb", null ], + [ "lower", "classpcs_1_1_cpp_string_t.html#ad5c765eaa85cb4a3e7a914d55a6a5175", null ], + [ "lstrip", "classpcs_1_1_cpp_string_t.html#ac1ad3018d38f291e6debad8d2de92be1", null ], + [ "lstrip", "classpcs_1_1_cpp_string_t.html#aee6e48d5b478d5bab239f54523d23c15", null ], + [ "operator()", "classpcs_1_1_cpp_string_t.html#a0daec57ccab4601f46e9d1c258407765", null ], + [ "operator()", "classpcs_1_1_cpp_string_t.html#a1fa8862a5f306553d6f0dae7e76fce83", null ], + [ "operator*", "classpcs_1_1_cpp_string_t.html#a0995f5b5a01af3f4a749949e23d0d780", null ], + [ "operator=", "classpcs_1_1_cpp_string_t.html#a30e26a3082ad50d01c7d0d98cb9e9c37", null ], + [ "operator=", "classpcs_1_1_cpp_string_t.html#a810a3a27ee7396f9c472648978327a76", null ], + [ "partition", "classpcs_1_1_cpp_string_t.html#ac5f88b0fc1f33cda23c30cb1f3bc560f", null ], + [ "removeprefix", "classpcs_1_1_cpp_string_t.html#a058704b7f4538ec9e1798c5348d37c7a", null ], + [ "removesuffix", "classpcs_1_1_cpp_string_t.html#ad6a8dc124ab8b7cab1cb328240763ed0", null ], + [ "replace", "classpcs_1_1_cpp_string_t.html#ad4f39683db649aa8a65907268c499f02", null ], + [ "rfind", "classpcs_1_1_cpp_string_t.html#ac00bb6f7d74bfdde0d4cc247e78ab20e", null ], + [ "rfind", "classpcs_1_1_cpp_string_t.html#a9f43f20029596abc1362d1242e68e5db", null ], + [ "rfind", "classpcs_1_1_cpp_string_t.html#af363308ba741b267641e1aa35669d603", null ], + [ "rfind_n", "classpcs_1_1_cpp_string_t.html#a790f663f51dfe6e9e15d4f5f025bf107", null ], + [ "rfind_n", "classpcs_1_1_cpp_string_t.html#a519a292eb3f0790d54a59a201f2d6410", null ], + [ "rindex", "classpcs_1_1_cpp_string_t.html#a546105cc9a8a9d493979c30607092cf1", null ], + [ "rindex", "classpcs_1_1_cpp_string_t.html#a2baca0ddff848de56a7b867f68d3efab", null ], + [ "rindex", "classpcs_1_1_cpp_string_t.html#a6693ec49258c6ac80a7875b3ebf3c916", null ], + [ "rindex_n", "classpcs_1_1_cpp_string_t.html#ac3079cbecbdf4151e66f602f39ece836", null ], + [ "rindex_n", "classpcs_1_1_cpp_string_t.html#afc08a4e91b93710838c8f0d6234e057e", null ], + [ "rjust", "classpcs_1_1_cpp_string_t.html#a61fd4215938ec9f0fce1f885d6bb4a2b", null ], + [ "rpartition", "classpcs_1_1_cpp_string_t.html#a61674ee4e97038d82ea7ecc30b1761f6", null ], + [ "rsplit", "classpcs_1_1_cpp_string_t.html#a8111cd357773d304fbb496571d7ee6be", null ], + [ "rsplit", "classpcs_1_1_cpp_string_t.html#a0419f46de6fa532372f3b97b4927ebab", null ], + [ "rsplit", "classpcs_1_1_cpp_string_t.html#ab0ace502f0b3026fefd2942a1e8a0456", null ], + [ "rsplit", "classpcs_1_1_cpp_string_t.html#a3aa66706e268bd570a0084d70dff5cde", null ], + [ "rstrip", "classpcs_1_1_cpp_string_t.html#a86f8c78b2eeb3541fb6b56b4f4ac237b", null ], + [ "rstrip", "classpcs_1_1_cpp_string_t.html#a89e850d45d6dec167e763cf748a06971", null ], + [ "split", "classpcs_1_1_cpp_string_t.html#a7ca47096b03baa0091c3b0349d210931", null ], + [ "split", "classpcs_1_1_cpp_string_t.html#acf4d923cfed55cfd90cf12651ce0ac3d", null ], + [ "split", "classpcs_1_1_cpp_string_t.html#a55a3fa32de834f644ac28d7c2495fa77", null ], + [ "split", "classpcs_1_1_cpp_string_t.html#a8fa2afe84d7fc26f96bbd55f4266df2a", null ], + [ "splitlines", "classpcs_1_1_cpp_string_t.html#a0bd53df14569c307b5ca50a2e1e62960", null ], + [ "startswith", "classpcs_1_1_cpp_string_t.html#ae2f755ae7903586a2086b7b7f943d96e", null ], + [ "startswith", "classpcs_1_1_cpp_string_t.html#ad2cfcc7bd22736ebd9f91f04e6a42f8c", null ], + [ "startswith", "classpcs_1_1_cpp_string_t.html#a5a131c385a01ccc5410d4cffa55cf700", null ], + [ "startswith", "classpcs_1_1_cpp_string_t.html#a326eb96e19c3559a84af86ff1bf54aa4", null ], + [ "startswith_n", "classpcs_1_1_cpp_string_t.html#ae0865e2c7f8a4871804bf71c1c982dc6", null ], + [ "startswith_n", "classpcs_1_1_cpp_string_t.html#a3b7955f9c7f9452a6a025caaaf0e6d73", null ], + [ "startswith_n", "classpcs_1_1_cpp_string_t.html#ab2b293c5f1b55af52ceb75b8f7e4d42e", null ], + [ "strip", "classpcs_1_1_cpp_string_t.html#a12bc043347f555b4701e0c70d972058d", null ], + [ "strip", "classpcs_1_1_cpp_string_t.html#a02919129cdf158e75eae1e9815a071bf", null ], + [ "substr", "classpcs_1_1_cpp_string_t.html#a9debc70420a3fbc7722e3111aeccd819", null ], + [ "swapcase", "classpcs_1_1_cpp_string_t.html#a6ab02b4d1c8093a5dfc089a45427f63c", null ], + [ "title", "classpcs_1_1_cpp_string_t.html#a179634aafb049e8604ca78f813684a28", null ], + [ "translate", "classpcs_1_1_cpp_string_t.html#a2a8c1e78b93da9a0abe471c7a8d85090", null ], + [ "upper", "classpcs_1_1_cpp_string_t.html#a689d2de98f28d131bb0c8b3c87f2f120", null ], + [ "zfill", "classpcs_1_1_cpp_string_t.html#ad3d2b94f37325096205e399b95e9fc5d", null ] +]; \ No newline at end of file diff --git a/documentation/classpcs_1_1_cpp_string_t.png b/documentation/classpcs_1_1_cpp_string_t.png new file mode 100644 index 0000000..ce95fd5 Binary files /dev/null and b/documentation/classpcs_1_1_cpp_string_t.png differ diff --git a/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception-members.html b/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception-members.html new file mode 100644 index 0000000..baeae4b --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception-members.html @@ -0,0 +1,108 @@ + + + + + + + +cpp-strings: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::CppStringT< CharT, TraitsT, AllocatorT >::NotFoundException Member List
+
+ +
+
+ + + + diff --git a/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception.html b/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception.html new file mode 100644 index 0000000..f2f0949 --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception.html @@ -0,0 +1,132 @@ + + + + + + + +cpp-strings: pcs::CppStringT< CharT, TraitsT, AllocatorT >::NotFoundException Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::CppStringT< CharT, TraitsT, AllocatorT >::NotFoundException Class Reference
+
+
+
+Inheritance diagram for pcs::CppStringT< CharT, TraitsT, AllocatorT >::NotFoundException:
+
+
+ +
+ + + +

+Public Types

+using MyBaseClass = std::logic_error
+ + + +

+Public Member Functions

NotFoundException (const char *what_arg)
NotFoundException (const std::string &what_arg)
+
The documentation for this class was generated from the following file:
    +
  • cppstrings.h
  • +
+
+
+ +
+ + + + diff --git a/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception.png b/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception.png new file mode 100644 index 0000000..55751e8 Binary files /dev/null and b/documentation/classpcs_1_1_cpp_string_t_1_1_not_found_exception.png differ diff --git a/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table-members.html b/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table-members.html new file mode 100644 index 0000000..c7461ac --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table-members.html @@ -0,0 +1,126 @@ + + + + + + + +cpp-strings: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable Member List
+
+
+ +

This is the complete list of members for pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
get_table() noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
key_type typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable
operator=(const TransTable &) noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
operator=(TransTable &&) noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
operator=(const std::map< key_type, value_type > &trans_table) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
operator[](const key_type ch) noexceptpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const std::map< key_type, value_type > trans_table)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const CppStringT &keys, const CppStringT &values)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const CppStringT &keys, const CppStringT &values, const CppStringT &not_translated)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const CppStringT &keys, const std::initializer_list< CppStringT > &values)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const CppStringT &keys, const std::initializer_list< CppStringT > values, const CppStringT &not_translated)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const CharT *keys, const CharT *values)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const CharT *keys, const CharT *values, const CharT *not_translated)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(KeyIt first_key, KeyIt last_key, ValueIt first_value, ValueIt last_value)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(Key1It first_key, Key1It last_key, ValueIt first_value, ValueIt last_value, Key2It first_not_translated, Key2It last_not_translated)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const StringViewLike &keys, const StringViewLike &values)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinlineexplicit
TransTable() noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(const TransTable &) noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
TransTable(TransTable &&) noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
value_type typedef (defined in pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable)pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable
~TransTable() noexcept=defaultpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableinline
+
+
+ + + + diff --git a/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table.html b/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table.html new file mode 100644 index 0000000..8fb7d87 --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table.html @@ -0,0 +1,836 @@ + + + + + + + +cpp-strings: pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable Class Reference
+
+
+ +

The internal class of translation tables, used with methods CppStringT::maketrans and CppStringT::translate. + More...

+ +

#include <cppstrings.h>

+ + + + +

+Public Types

+using key_type = CharT
+using value_type = CppStringT
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

std::map< typename key_type, typename value_type > & get_table () noexcept
 < for tests purposes
TransTableoperator= (const std::map< key_type, value_type > &trans_table) noexcept
 Assignment operator with a standard map.
TransTableoperator= (const TransTable &) noexcept=default
 Default copy assignment.
TransTableoperator= (TransTable &&) noexcept=default
 Default move assignment.
value_type operator[] (const key_type ch) noexcept
 Indexing operator.
 TransTable () noexcept=default
 Default empty constructor.
 TransTable (const CharT *keys, const CharT *values)
 Creates a TransTable from two pointers to null-terminated lists of characters (#6).
 TransTable (const CharT *keys, const CharT *values, const CharT *not_translated)
 Creates a TransTable from three pointers to null-terminated lists of characters (#7).
 TransTable (const CppStringT &keys, const CppStringT &values)
 Creates a TransTable from two strings (#2).
 TransTable (const CppStringT &keys, const CppStringT &values, const CppStringT &not_translated)
 Creates a TransTable from three strings (#3).
 TransTable (const CppStringT &keys, const std::initializer_list< CppStringT > &values)
 Creates a TransTable from a string and an initalization list (#4).
 TransTable (const CppStringT &keys, const std::initializer_list< CppStringT > values, const CppStringT &not_translated)
 Creates a TransTable from a string, an initalization list and a string (#5).
 TransTable (const std::map< key_type, value_type > trans_table)
 Creates a TransTable from a standard map (#1).
template<class StringViewLike>
 TransTable (const StringViewLike &keys, const StringViewLike &values)
 Creates a TransTable from two string views (#10).
 TransTable (const TransTable &) noexcept=default
 Default copy constructor.
template<class Key1It, class ValueIt, class Key2It>
 TransTable (Key1It first_key, Key1It last_key, ValueIt first_value, ValueIt last_value, Key2It first_not_translated, Key2It last_not_translated)
 Creates a TransTable from three containers iterators (#9).
template<class KeyIt, class ValueIt>
 TransTable (KeyIt first_key, KeyIt last_key, ValueIt first_value, ValueIt last_value)
 Creates a TransTable from two containers iterators (#8).
 TransTable (TransTable &&) noexcept=default
 Default move constructor.
 ~TransTable () noexcept=default
 Default descrtuctor.
+

Detailed Description

+
template<class CharT, class TraitsT, class AllocatorT>
+class pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable

The internal class of translation tables, used with methods CppStringT::maketrans and CppStringT::translate.

+

Constructor & Destructor Documentation

+ +

◆ TransTable() [1/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const std::map< key_type, value_type > trans_table)
+
+inline
+
+ +

Creates a TransTable from a standard map (#1).

+ +

Referenced by operator=(), operator=(), operator=(), TransTable(), TransTable(), and ~TransTable().

+ +
+
+ +

◆ TransTable() [2/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const CppStringT & keys,
const CppStringT & values )
+
+inline
+
+ +

Creates a TransTable from two strings (#2).

+

Parameters keys and values must have the same size. The i-th character in key is associated in the translation table with the i-th character in values.

+ +
+
+ +

◆ TransTable() [3/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const CppStringT & keys,
const CppStringT & values,
const CppStringT & not_translated )
+
+inline
+
+ +

Creates a TransTable from three strings (#3).

+

Parameters keys and values must have the same size. The i-th character in key is associated in the translation table with the i -th character in values. Finally, the characters contained in string not_translated are associated in the translation table with the empty string.

+ +
+
+ +

◆ TransTable() [4/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const CppStringT & keys,
const std::initializer_list< CppStringT > & values )
+
+inline
+
+ +

Creates a TransTable from a string and an initalization list (#4).

+

Parameters keys and values must have the same size. The i-th character in key is associated in the translation table with the i-th character in values.

+ +
+
+ +

◆ TransTable() [5/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const CppStringT & keys,
const std::initializer_list< CppStringT > values,
const CppStringT & not_translated )
+
+inline
+
+ +

Creates a TransTable from a string, an initalization list and a string (#5).

+

Parameters keys and values must have the same size. The i-th character in key is associated in the translation table with the i -th character in values. Finally, the characters contained in string not_translated are associated in the translation table with the empty string.

+ +
+
+ +

◆ TransTable() [6/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const CharT * keys,
const CharT * values )
+
+inline
+
+ +

Creates a TransTable from two pointers to null-terminated lists of characters (#6).

+

Parameters keys and values must have the same size. The i-th character in key is associated in the translation table with the i-th character in values.

+ +
+
+ +

◆ TransTable() [7/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const CharT * keys,
const CharT * values,
const CharT * not_translated )
+
+inline
+
+ +

Creates a TransTable from three pointers to null-terminated lists of characters (#7).

+

Parameters keys and values must have the same size. The i-th character in key is associated in the translation table with the i -th entry in values. Finally, the characters contained in string not_translated are associated in the translation table with the empty string.

+ +
+
+ +

◆ TransTable() [8/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<class KeyIt, class ValueIt>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (KeyIt first_key,
KeyIt last_key,
ValueIt first_value,
ValueIt last_value )
+
+inline
+
+ +

Creates a TransTable from two containers iterators (#8).

+

Both containers should have the same size. The i-th character in key is associated in the translation table with the i-th entry in values.

+ +
+
+ +

◆ TransTable() [9/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<class Key1It, class ValueIt, class Key2It>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (Key1It first_key,
Key1It last_key,
ValueIt first_value,
ValueIt last_value,
Key2It first_not_translated,
Key2It last_not_translated )
+
+inline
+
+ +

Creates a TransTable from three containers iterators (#9).

+

Both containers should have the same size. The i-th character in key is associated in the translation table with the i -th character in values. Finally, the characters contained in string not_translated are associated in the translation table with the empty string.

+ +
+
+ +

◆ TransTable() [10/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+
+template<class StringViewLike>
+ + + + + +
+ + + + + + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const StringViewLike & keys,
const StringViewLike & values )
+
+inlineexplicit
+
+ +

Creates a TransTable from two string views (#10).

+

Parameters keys and values must have the same size. The i-th character in key is associated in the translation table with the i-th character in values.

+ +
+
+ +

◆ TransTable() [11/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable ()
+
+inlinedefaultnoexcept
+
+ +

Default empty constructor.

+ +
+
+ +

◆ TransTable() [12/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (const TransTable & )
+
+inlinedefaultnoexcept
+
+ +

Default copy constructor.

+ +

References TransTable().

+ +
+
+ +

◆ TransTable() [13/13]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::TransTable (TransTable && )
+
+inlinedefaultnoexcept
+
+ +

Default move constructor.

+ +

References TransTable().

+ +
+
+ +

◆ ~TransTable()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::~TransTable ()
+
+inlinedefaultnoexcept
+
+ +

Default descrtuctor.

+ +

References TransTable().

+ +
+
+

Member Function Documentation

+ +

◆ get_table()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
std::map< typename key_type, typename value_type > & pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::get_table ()
+
+inlinenoexcept
+
+ +

< for tests purposes

+ +
+
+ +

◆ operator=() [1/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
TransTable & pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::operator= (const std::map< key_type, value_type > & trans_table)
+
+inlinenoexcept
+
+ +

Assignment operator with a standard map.

+ +

References TransTable().

+ +
+
+ +

◆ operator=() [2/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
TransTable & pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::operator= (const TransTable & )
+
+inlinedefaultnoexcept
+
+ +

Default copy assignment.

+ +

References TransTable().

+ +
+
+ +

◆ operator=() [3/3]

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
TransTable & pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::operator= (TransTable && )
+
+inlinedefaultnoexcept
+
+ +

Default move assignment.

+ +

References TransTable().

+ +
+
+ +

◆ operator[]()

+ +
+
+
+template<class CharT, class TraitsT, class AllocatorT>
+ + + + + +
+ + + + + + + +
value_type pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable::operator[] (const key_type ch)
+
+inlinenodiscardnoexcept
+
+ +

Indexing operator.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • cppstrings.h
  • +
+
+
+ +
+ + + + diff --git a/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table.js b/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table.js new file mode 100644 index 0000000..0e992a7 --- /dev/null +++ b/documentation/classpcs_1_1_cpp_string_t_1_1_trans_table.js @@ -0,0 +1,22 @@ +var classpcs_1_1_cpp_string_t_1_1_trans_table = +[ + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a1fea49a165ebb7cda36c1bfdcbe95ee0", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a5efa34c2e8b016458388693a7ab8f590", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#aa99c6a9fafac1361cd8a0fc4578fa084", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#aae6cedd7e9c8409e76787c910476813e", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#abf0efc2e493b5c0347327b7c1f175ed8", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a9d7651fe71544575150ebc08022cb885", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a78d8ac95a740d405c761c73166c9b787", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a551b96c6c0ab2bf9183de0bfcc6770a2", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a1c10bb78e74942f88247cde65a03d557", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a21791e46266edb8eea13876559b352a2", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a7da38829b171a7a9147b43086e067454", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a69a3ab2775d7e6537528a3eba3c4134a", null ], + [ "TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#aa9182c3323cdba7f6dd30bfa56ebb8fe", null ], + [ "~TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#abbbcd9cf0c3ac0a364864f734363dd4c", null ], + [ "get_table", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#ab7a09175127849e20aa8aa5b999b4413", null ], + [ "operator=", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a4f1dd7fb1ede54aa662c808eb84cda41", null ], + [ "operator=", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#addccd32880c403ee20a6a8423d8d3f8b", null ], + [ "operator=", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a3efc5aab74f3a0594a9e88562d57867d", null ], + [ "operator[]", "classpcs_1_1_cpp_string_t_1_1_trans_table.html#a90ac2a729fc715870e7f32ea9c6536f9", null ] +]; \ No newline at end of file diff --git a/documentation/classpcs_1_1_slice-members.html b/documentation/classpcs_1_1_slice-members.html new file mode 100644 index 0000000..3ec7eae --- /dev/null +++ b/documentation/classpcs_1_1_slice-members.html @@ -0,0 +1,116 @@ + + + + + + + +cpp-strings: Member List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::Slice< IntT > Member List
+
+
+ +

This is the complete list of members for pcs::Slice< IntT >, including all inherited members.

+ + + + + + + + + + + + +
begin(const CppStringT< CharT > &str) noexceptpcs::Slice< IntT >inline
DEFAULT (defined in pcs::Slice< IntT >)pcs::Slice< IntT >static
end() const noexceptpcs::Slice< IntT >inline
operator*() noexceptpcs::Slice< IntT >inline
operator++() noexceptpcs::Slice< IntT >inline
operator++(int) noexceptpcs::Slice< IntT >inline
Slice(const IntT start=DEFAULT, const IntT stop=DEFAULT, const IntT step=DEFAULT) noexceptpcs::Slice< IntT >inline
start()pcs::Slice< IntT >inline
step()pcs::Slice< IntT >inline
stop()pcs::Slice< IntT >inline
~Slice() noexcept=defaultpcs::Slice< IntT >virtual
+
+
+ + + + diff --git a/documentation/classpcs_1_1_slice.html b/documentation/classpcs_1_1_slice.html new file mode 100644 index 0000000..5f6b5e7 --- /dev/null +++ b/documentation/classpcs_1_1_slice.html @@ -0,0 +1,485 @@ + + + + + + + +cpp-strings: pcs::Slice< IntT > Class Template Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pcs::Slice< IntT > Class Template Reference
+
+
+ +

Base class for slices, with start, stop and step specified values. + More...

+ +

#include <cppstrings.h>

+
+Inheritance diagram for pcs::Slice< IntT >:
+
+
+ + +pcs::StartSlice< IntT > +pcs::StartStepSlice< IntT > +pcs::StartStopSlice< IntT > +pcs::StepSlice< IntT > +pcs::StopSlice< IntT > +pcs::StopStepSlice< IntT > + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<typename CharT = char>
+requires std::is_same_v<CharT, char> || std::is_same_v<CharT, char16_t> || std::is_same_v<CharT, char32_t> || std::is_same_v<CharT, wchar_t>
const IntT begin (const CppStringT< CharT > &str) noexcept
 < starts iterating on specified CppString.
const bool end () const noexcept
 < returns true when iterating is over, or false otherwise.
const IntT operator* () noexcept
 < dereferences the slice.
Slice operator++ () noexcept
 < iterates one step, pre-increment. Caution: index may be out of bounds. Check '!end()' before dereferencing the slice.
Slice operator++ (int) noexcept
 < iterates one step, post-increment. Caution: index may be out of bounds. Check '!end()' before dereferencing the slice.
 Slice (const IntT start=DEFAULT, const IntT stop=DEFAULT, const IntT step=DEFAULT) noexcept
 < Valued constructor
IntT start ()
 Returns the start index of this slide.
IntT step ()
 Returns the step value of this slide.
IntT stop ()
 Returns the stop index of this slide.
virtual ~Slice () noexcept=default
 Default destructor.
+ + +

+Static Public Attributes

+static constexpr IntT DEFAULT { std::numeric_limits<IntT>::min() }
+

Detailed Description

+
template<typename IntT>
+requires std::is_signed_v<IntT>
+class pcs::Slice< IntT >

Base class for slices, with start, stop and step specified values.

+

Constructor & Destructor Documentation

+ +

◆ Slice()

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + + + + + + + + + + +
pcs::Slice< IntT >::Slice (const IntT start = DEFAULT,
const IntT stop = DEFAULT,
const IntT step = DEFAULT )
+
+inlinenoexcept
+
+ +

< Valued constructor

+ +

References start(), step(), and stop().

+ +

Referenced by operator++(), and operator++().

+ +
+
+ +

◆ ~Slice()

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
virtual pcs::Slice< IntT >::~Slice ()
+
+virtualdefaultnoexcept
+
+ +

Default destructor.

+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+
+template<typename IntT>
+
+template<typename CharT = char>
+requires std::is_same_v<CharT, char> || std::is_same_v<CharT, char16_t> || std::is_same_v<CharT, char32_t> || std::is_same_v<CharT, wchar_t>
+ + + + + +
+ + + + + + + +
const IntT pcs::Slice< IntT >::begin (const CppStringT< CharT > & str)
+
+inlinenoexcept
+
+ +

< starts iterating on specified CppString.

+ +
+
+ +

◆ end()

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
const bool pcs::Slice< IntT >::end () const
+
+inlinenodiscardnoexcept
+
+ +

< returns true when iterating is over, or false otherwise.

+ +
+
+ +

◆ operator*()

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
const IntT pcs::Slice< IntT >::operator* ()
+
+inlinenodiscardnoexcept
+
+ +

< dereferences the slice.

+ +
+
+ +

◆ operator++() [1/2]

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
Slice pcs::Slice< IntT >::operator++ ()
+
+inlinenoexcept
+
+ +

< iterates one step, pre-increment. Caution: index may be out of bounds. Check '!end()' before dereferencing the slice.

+ +

References Slice().

+ +
+
+ +

◆ operator++() [2/2]

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
Slice pcs::Slice< IntT >::operator++ (int )
+
+inlinenoexcept
+
+ +

< iterates one step, post-increment. Caution: index may be out of bounds. Check '!end()' before dereferencing the slice.

+ +

References Slice().

+ +
+
+ +

◆ start()

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
IntT pcs::Slice< IntT >::start ()
+
+inline
+
+
+ +

◆ step()

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
IntT pcs::Slice< IntT >::step ()
+
+inline
+
+
+ +

◆ stop()

+ +
+
+
+template<typename IntT>
+ + + + + +
+ + + + + + + +
IntT pcs::Slice< IntT >::stop ()
+
+inline
+
+
+
The documentation for this class was generated from the following file:
    +
  • cppstrings.h
  • +
+
+
+ +
+ + + + diff --git a/documentation/classpcs_1_1_slice.js b/documentation/classpcs_1_1_slice.js new file mode 100644 index 0000000..e725231 --- /dev/null +++ b/documentation/classpcs_1_1_slice.js @@ -0,0 +1,13 @@ +var classpcs_1_1_slice = +[ + [ "Slice", "classpcs_1_1_slice.html#ab51c3b03351e495729545f2fdaebb888", null ], + [ "~Slice", "classpcs_1_1_slice.html#abdb6694913ed37cf4efc5d85e990c7b5", null ], + [ "begin", "classpcs_1_1_slice.html#ab55cf50ae2018337b942e7b9e08e3e6d", null ], + [ "end", "classpcs_1_1_slice.html#aee5b0e0110ef1ee32763da9b2386b59c", null ], + [ "operator*", "classpcs_1_1_slice.html#afa6b7dc85e796da20dd5933d49400996", null ], + [ "operator++", "classpcs_1_1_slice.html#a79edb1eb4e6bce136f730d82f7afeaff", null ], + [ "operator++", "classpcs_1_1_slice.html#aa3e4bcf5cfd5917cc10e0641030984c2", null ], + [ "start", "classpcs_1_1_slice.html#a5280a9d6974217c94de5d9027e10d4e1", null ], + [ "step", "classpcs_1_1_slice.html#a55f046a5343a6ea1bbff8686d2e72d78", null ], + [ "stop", "classpcs_1_1_slice.html#a0fed0ac66885187eb64d1982e0461916", null ] +]; \ No newline at end of file diff --git a/documentation/classpcs_1_1_slice.png b/documentation/classpcs_1_1_slice.png new file mode 100644 index 0000000..85e73c3 Binary files /dev/null and b/documentation/classpcs_1_1_slice.png differ diff --git a/documentation/clipboard.js b/documentation/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/documentation/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/documentation/cookie.js b/documentation/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/documentation/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/documentation/dir_04560ed86add89973319438dcdff07f6.html b/documentation/dir_04560ed86add89973319438dcdff07f6.html new file mode 100644 index 0000000..499a1c7 --- /dev/null +++ b/documentation/dir_04560ed86add89973319438dcdff07f6.html @@ -0,0 +1,110 @@ + + + + + + + +cpp-strings: cpp-strings Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
cpp-strings Directory Reference
+
+
+
+
+ +
+ + + + diff --git a/documentation/doxygen.css b/documentation/doxygen.css new file mode 100644 index 0000000..11fe334 --- /dev/null +++ b/documentation/doxygen.css @@ -0,0 +1,2468 @@ +/* The standard CSS for doxygen 1.14.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #3D578C; +--page-external-link-color: #334975; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--group-header-separator-color: #D9E0EE; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 75px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #C4CFE5; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #C4CFE5; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +/* +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg');*/ +--icon-folder-open-fill-color: #C4CFE5; +--icon-folder-fill-color: #D8DFEE; +--icon-folder-border-color: #4665A2; +--icon-doc-fill-color: #D8DFEE; +--icon-doc-border-color: #4665A2; + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; +--memdecl-border-color: #D5DDEC; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-proto-background-color: #EEF1F7; +--memdef-proto-text-color: #253555; +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-border-color: #C4CFE5; +--nav-breadcrumb-separator-color: #C4CFE5; +--nav-breadcrumb-active-bg: #EEF1F7; +--nav-breadcrumb-color: #354C7B; +--nav-breadcrumb-border-color: #E1E7F2; +--nav-splitbar-bg-color: #DCE2EF; +--nav-splitbar-handle-color: #9CAFD4; +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-active-bg: #DCE2EF; +--nav-menu-active-color: #9CAFD4; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #B6C4DF; +--nav-arrow-selected-color: #90A5CE; + +/* sync icon */ +--sync-icon-border-color: #C4CFE5; +--sync-icon-background-color: #F9FAFC; +--sync-icon-selected-background-color: #EEF1F7; +--sync-icon-color: #C4CFE5; +--sync-icon-selected-color: #6884BD; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-active-color: black; +--search-filter-background-color: rgba(255,255,255,.7); +--search-filter-backdrop-filter: blur(4px); +--search-filter-foreground-color: black; +--search-filter-border-color: rgba(150,150,150,.4); +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: rgba(255,255,255,.8); +--search-results-backdrop-filter: blur(4px); +--search-results-border-color: rgba(150,150,150,.4); +--search-box-border-color: #B6C4DF; +--search-close-icon-bg-color: #A0A0A0; +--search-close-icon-fg-color: white; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: rgba(255,255,255,0.8); +--tooltip-arrow-background-color: white; +--tooltip-border-color: rgba(150,150,150,0.7); +--tooltip-backdrop-filter: blur(3px); +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 0 4px 8px 0 rgba(0,0,0,.25); +--fold-line-color: #808080; + +/** font-family */ +--font-family-normal: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #90A5CE; +--page-external-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--group-header-separator-color: #1D2A43; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #212F4B; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #2C3F65; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-folder-open-fill-color: #4665A2; +--icon-folder-fill-color: #5373B4; +--icon-folder-border-color: #C4CFE5; +--icon-doc-fill-color: #6884BD; +--icon-doc-border-color: #C4CFE5; + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; +--memdecl-border-color: #233250; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-border-color: #212F4B; +--nav-breadcrumb-separator-color: #212F4B; +--nav-breadcrumb-active-bg: #1D2A43; +--nav-breadcrumb-color: #90A5CE; +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-bg-color: #283A5D; +--nav-splitbar-handle-color: #4665A2; +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-active-bg: #1D2A43; +--nav-menu-active-color: #C9D3E7; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #4665A2; +--nav-arrow-selected-color: #6884BD; + +/* sync icon */ +--sync-icon-border-color: #212F4B; +--sync-icon-background-color: #101826; +--sync-icon-selected-background-color: #1D2A43; +--sync-icon-color: #4665A2; +--sync-icon-selected-color: #5373B4; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-active-color: #F5F5F5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-backdrop-filter: none; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: black; +--search-results-foreground-color: #90A5CE; +--search-results-backdrop-filter: none; +--search-results-border-color: #334975; +--search-box-border-color: #334975; +--search-close-icon-bg-color: #909090; +--search-close-icon-fg-color: black; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-arrow-background-color: #202020; +--tooltip-backdrop-filter: none; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; + +/** font-family */ +--font-family-normal: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +body.resizing { + user-select: none; + -webkit-user-select: none; +} + +#doc-content { + scrollbar-width: thin; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 160%; + font-weight: 400; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + box-shadow: 12px 0 var(--page-background-color), + -12px 0 var(--page-background-color), + 12px 1px var(--group-header-separator-color), + -12px 1px var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +td h2.groupheader { + box-shadow: 13px 0 var(--page-background-color), + -13px 0 var(--page-background-color), + 13px 1px var(--group-header-separator-color), + -13px 1px var(--group-header-separator-color); +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + margin-right: 6px; + padding-right: 6px; + text-align: right; + line-height: 110%; + background-color: var(--nav-background-color); +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + padding-right: 6px; + padding-left: 6px; + border-radius: 0 6px 6px 0; + background-color: var(--nav-menu-active-bg); +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +span.label a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.el, a.el:visited, a.code, a.code:visited, a.line, a.line:visited { + color: var(--page-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--page-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +span.tt { + white-space: pre; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: wrap; + word-break: break-all; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -62px; + padding-left: 62px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + display: inline-block; + width: 12px; + height: 12px; + margin-left: 4px; + margin-right: 1px; +} + +span.foldnone { + display: inline-block; + position: relative; + cursor: pointer; + user-select: none; +} + +span.fold.plus, span.fold.minus { + width: 10px; + height: 10px; + background-color: var(--fragment-background-color); + position: relative; + border: 1px solid var(--fold-line-color); + margin-right: 1px; +} + +span.fold.plus::before, span.fold.minus::before { + content: ''; + position: absolute; + background-color: var(--fold-line-color); +} + +span.fold.plus::before { + width: 2px; + height: 6px; + top: 2px; + left: 4px; +} + +span.fold.plus::after { + content: ''; + position: absolute; + width: 6px; + height: 2px; + top: 4px; + left: 2px; + background-color: var(--fold-line-color); +} + +span.fold.minus::before { + width: 6px; + height: 2px; + top: 4px; + left: 2px; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + box-shadow: 13px 0 var(--page-background-color), + -13px 0 var(--page-background-color), + 13px 1px var(--group-header-separator-color), + -13px 1px var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 110%; + font-weight: 500; + margin-left: 0px; + margin-top: 0em; + margin-bottom: 6px; + padding-top: 8px; + padding-bottom: 4px; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 12px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + border: none; + margin-top: 16px; + margin-bottom: 16px; + height: 1px; + box-shadow: 13px 0 var(--page-background-color), + -13px 0 var(--page-background-color), + 13px 1px var(--group-header-separator-color), + -13px 1px var(--group-header-separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight { + padding-top: 2px; + padding-bottom: 2px; +} + +.memTemplParams { + padding-left: 10px; + padding-top: 5px; +} + +.memItemLeft, .memItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +tr[class^='memdesc'] { + box-shadow: inset 0px 1px 3px 0px rgba(0,0,0,.075); +} + +.mdescLeft { + border-left: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); +} + +.mdescRight { + border-right: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; + border-left: 1px solid var(--memdecl-border-color); + border-right: 1px solid var(--memdecl-border-color); +} + +td.ititle { + border: 1px solid var(--memdecl-border-color); + border-top-left-radius: 4px; + border-top-right-radius: 4px; + padding-left: 10px; +} + +tr:not(:first-child) > td.ititle { + border-top: 0; + border-radius: 0; +} + +.memItemLeft { + white-space: nowrap; + border-left: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); + padding-left: 10px; + transition: none; +} + +.memItemRight { + width: 100%; + border-right: 1px solid var(--memdecl-border-color); + border-bottom: 1px solid var(--memdecl-border-color); + padding-right: 10px; + transition: none; +} + +tr.heading + tr[class^='memitem'] td.memItemLeft, +tr.groupHeader + tr[class^='memitem'] td.memItemLeft, +tr.inherit_header + tr[class^='memitem'] td.memItemLeft { + border-top: 1px solid var(--memdecl-border-color); + border-top-left-radius: 4px; +} + +tr.heading + tr[class^='memitem'] td.memItemRight, +tr.groupHeader + tr[class^='memitem'] td.memItemRight, +tr.inherit_header + tr[class^='memitem'] td.memItemRight { + border-top: 1px solid var(--memdecl-border-color); + border-top-right-radius: 4px; +} + +tr.heading + tr[class^='memitem'] td.memTemplParams, +tr.heading + tr td.ititle, +tr.groupHeader + tr[class^='memitem'] td.memTemplParams, +tr.groupHeader + tr td.ititle, +tr.inherit_header + tr[class^='memitem'] td.memTemplParams { + border-top: 1px solid var(--memdecl-border-color); + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +table.memberdecls tr:last-child td.memItemLeft, +table.memberdecls tr:last-child td.mdescLeft, +table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemLeft, +table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemLeft, +table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescLeft, +table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescLeft { + border-bottom-left-radius: 4px; +} + +table.memberdecls tr:last-child td.memItemRight, +table.memberdecls tr:last-child td.mdescRight, +table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemRight, +table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemRight, +table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescRight, +table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescRight { + border-bottom-right-radius: 4px; +} + +tr.template .memItemLeft, tr.template .memItemRight { + border-top: none; + padding-top: 0; +} + + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-color: var(--memdef-proto-background-color); + line-height: 1.25; + font-family: var(--font-family-monospace); + font-weight: 500; + font-size: 16px; + float:left; + box-shadow: 0 10px 0 -1px var(--memdef-proto-background-color), + 0 2px 8px 0 rgba(0,0,0,.075); + position: relative; +} + +.memtitle:after { + content: ''; + display: block; + background: var(--memdef-proto-background-color); + height: 10px; + bottom: -10px; + left: 0px; + right: -14px; + position: absolute; + border-top-right-radius: 6px; +} + +.permalink +{ + font-family: var(--font-family-monospace); + font-weight: 500; + line-height: 1.25; + font-size: 16px; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-family: var(--font-family-monospace); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + display: table !important; + width: 100%; + box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + border-radius: 4px; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-family: var(--font-family-monospace); + font-size: 13px; + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + background-color: var(--memdef-proto-background-color); + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-background-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 14px; + transition: opacity 0.3s ease; +} + +span.arrowhead { + position: relative; + padding: 0; + margin: 0 0 0 2px; + display: inline-block; + width: 5px; + height: 5px; + border-right: 2px solid var(--nav-arrow-color); + border-bottom: 2px solid var(--nav-arrow-color); + transform: rotate(-45deg); + transition: transform 0.3s ease; +} + +span.arrowhead.opened { + transform: rotate(45deg); +} + +.selected span.arrowhead { + border-right: 2px solid var(--nav-arrow-selected-color); + border-bottom: 2px solid var(--nav-arrow-selected-color); +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfolder { + width: 24px; + height: 18px; + margin-top: 6px; + vertical-align:top; + display: inline-block; + position: relative; +} + +.icondoc { + width: 24px; + height: 18px; + margin-top: 3px; + vertical-align:top; + display: inline-block; + position: relative; +} + +.folder-icon { + width: 16px; + height: 11px; + background-color: var(--icon-folder-fill-color); + border: 1px solid var(--icon-folder-border-color); + border-radius: 0 2px 2px 2px; + position: relative; + box-sizing: content-box; +} + +.folder-icon::after { + content: ''; + position: absolute; + top: 2px; + left: -1px; + width: 16px; + height: 7px; + background-color: var(--icon-folder-open-fill-color); + border: 1px solid var(--icon-folder-border-color); + border-radius: 7px 7px 2px 2px; + transform-origin: top left; + opacity: 0; + transition: all 0.3s linear; +} + +.folder-icon::before { + content: ''; + position: absolute; + top: -3px; + left: -1px; + width: 6px; + height: 2px; + background-color: var(--icon-folder-fill-color); + border-top: 1px solid var(--icon-folder-border-color); + border-left: 1px solid var(--icon-folder-border-color); + border-right: 1px solid var(--icon-folder-border-color); + border-radius: 2px 2px 0 0; +} + +.folder-icon.open::after { + top: 3px; + opacity: 1; +} + +.doc-icon { + left: 6px; + width: 12px; + height: 16px; + background-color: var(--icon-doc-border-color); + clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%); + position: relative; + display: inline-block; +} +.doc-icon::before { + content: ""; + left: 1px; + top: 1px; + width: 10px; + height: 14px; + background-color: var(--icon-doc-fill-color); + clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%); + position: absolute; + box-sizing: border-box; +} +.doc-icon::after { + content: ""; + left: 7px; + top: 0px; + width: 3px; + height: 3px; + background-color: transparent; + position: absolute; + border: 1px solid var(--icon-doc-border-color); +} + + + + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +span.dynarrow { + position: relative; + display: inline-block; + width: 12px; + bottom: 1px; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + +/* ----------- navigation breadcrumb styling ----------- */ + +#nav-path ul { + height: 30px; + line-height: 30px; + color: var(--nav-text-normal-color); + overflow: hidden; + margin: 0px; + padding-left: 4px; + background-image: none; + background: var(--page-background-color); + border-bottom: 1px solid var(--nav-breadcrumb-separator-color); + font-size: var(--nav-font-size-level1); + font-family: var(--font-family-nav); + position: relative; + z-index: 100; +} + +#main-nav { + border-bottom: 1px solid var(--nav-border-color); +} + +.navpath li { + list-style-type:none; + float:left; + color: var(--nav-foreground-color); +} + +.navpath li.footer { + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + font-size: 8pt; + color: var(--footer-foreground-color); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; + padding-left: 15px; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--nav-breadcrumb-color); + position: relative; + top: 0px; + height: 30px; + margin-right: -20px; +} + +#nav-path li.navelem:after { + content: ''; + display: inline-block; + position: relative; + top: 0; + right: -15px; + width: 30px; + height: 30px; + transform: scaleX(0.5) scale(0.707) rotate(45deg); + z-index: 10; + background: var(--page-background-color); + box-shadow: 2px -2px 0 2px var(--nav-breadcrumb-separator-color); + border-radius: 0 5px 0 50px; +} + +#nav-path li.navelem:first-child { + margin-left: -6px; +} + +#nav-path li.navelem:hover, +#nav-path li.navelem:hover:after { + background-color: var(--nav-breadcrumb-active-bg); +} + +/* ---------------------- */ + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + margin: 0px; + background-color: var(--header-background-color); + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl { + padding: 0 0 0 0; +} + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0; + padding: 0; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0 0 0 5px; + margin: 0px; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: 400; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0 2px 0; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 12px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + backdrop-filter: var(--tooltip-backdrop-filter); + -webkit-backdrop-filter: var(--tooltip-backdrop-filter); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-arrow-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-arrow-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + + +html { +--timestamp: 'Tue Oct 21 2025' +} +span.timestamp { content: ' '; } +span.timestamp:before { content: var(--timestamp); } + +:root { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/documentation/doxygen.svg b/documentation/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/documentation/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/doxygen_crawl.html b/documentation/doxygen_crawl.html new file mode 100644 index 0000000..b3bf7fc --- /dev/null +++ b/documentation/doxygen_crawl.html @@ -0,0 +1,223 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/dynsections.js b/documentation/dynsections.js new file mode 100644 index 0000000..0e15bd4 --- /dev/null +++ b/documentation/dynsections.js @@ -0,0 +1,191 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.slideUp('fast'); + summary.show(); + $(linkObj).find('.arrowhead').addClass('closed').removeClass('opened'); + } else { + content.slideDown('fast'); + summary.hide(); + $(linkObj).find('.arrowhead').removeClass('closed').addClass('opened'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').addClass('plus').removeClass('minus'); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/documentation/functions.html b/documentation/functions.html new file mode 100644 index 0000000..e84db14 --- /dev/null +++ b/documentation/functions.html @@ -0,0 +1,245 @@ + + + + + + + +cpp-strings: Class Members + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+ + +

- c -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- j -

+ + +

- l -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- z -

+ + +

- ~ -

+
+
+
+ + + + diff --git a/documentation/functions_func.html b/documentation/functions_func.html new file mode 100644 index 0000000..bec5f4e --- /dev/null +++ b/documentation/functions_func.html @@ -0,0 +1,245 @@ + + + + + + + +cpp-strings: Class Members - Functions + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- b -

+ + +

- c -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- j -

+ + +

- l -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- z -

+ + +

- ~ -

+
+
+
+ + + + diff --git a/documentation/hierarchy.html b/documentation/hierarchy.html new file mode 100644 index 0000000..fc6a8d7 --- /dev/null +++ b/documentation/hierarchy.html @@ -0,0 +1,121 @@ + + + + + + + +cpp-strings: Class Hierarchy + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + +
 Cstd::basic_string< Char >STL class
 Cpcs::CppStringT< char >
 Cpcs::CppStringT< wchar_t >
 Cpcs::CppStringT< CharT, TraitsT, AllocatorT >This is the templated base class for all CppString classes
 Cstd::exceptionSTL class
 Cstd::logic_errorSTL class
 Cpcs::CppStringT< CharT, TraitsT, AllocatorT >::NotFoundException
 Cpcs::Slice< IntT >Base class for slices, with start, stop and step specified values
 Cpcs::StartSlice< IntT >Base class for slices, with start, stop and step specified values
 Cpcs::StartStepSlice< IntT >Struct of slices with default step values
 Cpcs::StartStopSlice< IntT >Struct of slices with default start and stop values
 Cpcs::StepSlice< IntT >Struct of slices with default start and step values
 Cpcs::StopSlice< IntT >Struct of slices with default stop and step values
 Cpcs::StopStepSlice< IntT >Struct of slices with default stop values
 Cpcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTableThe internal class of translation tables, used with methods CppStringT::maketrans and CppStringT::translate
+
+
+
+
+ + + + diff --git a/documentation/hierarchy.js b/documentation/hierarchy.js new file mode 100644 index 0000000..252d447 --- /dev/null +++ b/documentation/hierarchy.js @@ -0,0 +1,22 @@ +var hierarchy = +[ + [ "std::basic_string< Char >", null, [ + [ "pcs::CppStringT< char >", "classpcs_1_1_cpp_string_t.html", null ], + [ "pcs::CppStringT< wchar_t >", "classpcs_1_1_cpp_string_t.html", null ], + [ "pcs::CppStringT< CharT, TraitsT, AllocatorT >", "classpcs_1_1_cpp_string_t.html", null ] + ] ], + [ "std::exception", null, [ + [ "std::logic_error", null, [ + [ "pcs::CppStringT< CharT, TraitsT, AllocatorT >::NotFoundException", "classpcs_1_1_cpp_string_t_1_1_not_found_exception.html", null ] + ] ] + ] ], + [ "pcs::Slice< IntT >", "classpcs_1_1_slice.html", [ + [ "pcs::StartSlice< IntT >", "structpcs_1_1_start_slice.html", null ], + [ "pcs::StartStepSlice< IntT >", "structpcs_1_1_start_step_slice.html", null ], + [ "pcs::StartStopSlice< IntT >", "structpcs_1_1_start_stop_slice.html", null ], + [ "pcs::StepSlice< IntT >", "structpcs_1_1_step_slice.html", null ], + [ "pcs::StopSlice< IntT >", "structpcs_1_1_stop_slice.html", null ], + [ "pcs::StopStepSlice< IntT >", "structpcs_1_1_stop_step_slice.html", null ] + ] ], + [ "pcs::CppStringT< CharT, TraitsT, AllocatorT >::TransTable", "classpcs_1_1_cpp_string_t_1_1_trans_table.html", null ] +]; \ No newline at end of file diff --git a/documentation/index.html b/documentation/index.html new file mode 100644 index 0000000..77773cd --- /dev/null +++ b/documentation/index.html @@ -0,0 +1,103 @@ + + + + + + + +cpp-strings: Main Page + + + + + + + + + + + + + + +
+
+ + + + + + +
+
cpp-strings 1.0.4 +
+
Pythonic c++ strings
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
cpp-strings Documentation
+
+
+ +
+
+
+ + + + diff --git a/documentation/jquery.js b/documentation/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/documentation/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/documentation/menu.js b/documentation/menu.js new file mode 100644 index 0000000..15f9c52 --- /dev/null +++ b/documentation/menu.js @@ -0,0 +1,131 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
'+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'+ + '
'+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + $('#main-menu').append('
  • '); + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/documentation/menudata.js b/documentation/menudata.js new file mode 100644 index 0000000..1f41ba2 --- /dev/null +++ b/documentation/menudata.js @@ -0,0 +1,80 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"o",url:"namespacemembers.html#index_o"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"t",url:"namespacemembers.html#index_t"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"i",url:"namespacemembers_func.html#index_i"}, +{text:"o",url:"namespacemembers_func.html#index_o"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"t",url:"namespacemembers_func.html#index_t"}]}, +{text:"Typedefs",url:"namespacemembers_type.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"i",url:"functions.html#index_i"}, +{text:"j",url:"functions.html#index_j"}, +{text:"l",url:"functions.html#index_l"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"z",url:"functions.html#index_z"}, +{text:"~",url:"functions.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"b",url:"functions_func.html#index_b"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"j",url:"functions_func.html#index_j"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"z",url:"functions_func.html#index_z"}, +{text:"~",url:"functions_func.html#index__7E"}]}]}]}]} diff --git a/documentation/namespacemembers.html b/documentation/namespacemembers.html new file mode 100644 index 0000000..bb12bb4 --- /dev/null +++ b/documentation/namespacemembers.html @@ -0,0 +1,159 @@ + + + + + + + +cpp-strings: Namespace Members + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    cpp-strings 1.0.4 +
    +
    Pythonic c++ strings
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - c -

      +
    • CppString : pcs
    • +
    • CppWString : pcs
    • +
    + + +

    - i -

      +
    • is_alpha() : pcs
    • +
    • is_alpha< char >() : pcs
    • +
    • is_alpha< wchar_t >() : pcs
    • +
    • is_ascii() : pcs
    • +
    • is_decimal() : pcs
    • +
    • is_decimal< char >() : pcs
    • +
    • is_decimal< wchar_t >() : pcs
    • +
    • is_digit() : pcs
    • +
    • is_digit< char >() : pcs
    • +
    • is_digit< wchar_t >() : pcs
    • +
    • is_id_continue() : pcs
    • +
    • is_id_start() : pcs
    • +
    • is_lower() : pcs
    • +
    • is_lower< char >() : pcs
    • +
    • is_lower< wchar_t >() : pcs
    • +
    • is_numeric() : pcs
    • +
    • is_numeric< char >() : pcs
    • +
    • is_numeric< wchar_t >() : pcs
    • +
    • is_printable() : pcs
    • +
    • is_printable< char >() : pcs
    • +
    • is_printable< wchar_t >() : pcs
    • +
    • is_punctuation() : pcs
    • +
    • is_punctuation< char >() : pcs
    • +
    • is_punctuation< wchar_t >() : pcs
    • +
    • is_space() : pcs
    • +
    • is_space< char >() : pcs
    • +
    • is_space< wchar_t >() : pcs
    • +
    • is_upper() : pcs
    • +
    • is_upper< char >() : pcs
    • +
    • is_upper< wchar_t >() : pcs
    • +
    + + +

    - o -

      +
    • operator""_cs() : pcs
    • +
    + + +

    - s -

      +
    • swap_case() : pcs
    • +
    + + +

    - t -

      +
    • to_lower() : pcs
    • +
    • to_lower< char >() : pcs
    • +
    • to_lower< wchar_t >() : pcs
    • +
    • to_upper() : pcs
    • +
    • to_upper< char >() : pcs
    • +
    • to_upper< wchar_t >() : pcs
    • +
    +
    +
    +
    + + + + diff --git a/documentation/namespacemembers_func.html b/documentation/namespacemembers_func.html new file mode 100644 index 0000000..af6e5ae --- /dev/null +++ b/documentation/namespacemembers_func.html @@ -0,0 +1,153 @@ + + + + + + + +cpp-strings: Namespace Members + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    cpp-strings 1.0.4 +
    +
    Pythonic c++ strings
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace functions with links to the namespaces they belong to:
    + +

    - i -

      +
    • is_alpha() : pcs
    • +
    • is_alpha< char >() : pcs
    • +
    • is_alpha< wchar_t >() : pcs
    • +
    • is_ascii() : pcs
    • +
    • is_decimal() : pcs
    • +
    • is_decimal< char >() : pcs
    • +
    • is_decimal< wchar_t >() : pcs
    • +
    • is_digit() : pcs
    • +
    • is_digit< char >() : pcs
    • +
    • is_digit< wchar_t >() : pcs
    • +
    • is_id_continue() : pcs
    • +
    • is_id_start() : pcs
    • +
    • is_lower() : pcs
    • +
    • is_lower< char >() : pcs
    • +
    • is_lower< wchar_t >() : pcs
    • +
    • is_numeric() : pcs
    • +
    • is_numeric< char >() : pcs
    • +
    • is_numeric< wchar_t >() : pcs
    • +
    • is_printable() : pcs
    • +
    • is_printable< char >() : pcs
    • +
    • is_printable< wchar_t >() : pcs
    • +
    • is_punctuation() : pcs
    • +
    • is_punctuation< char >() : pcs
    • +
    • is_punctuation< wchar_t >() : pcs
    • +
    • is_space() : pcs
    • +
    • is_space< char >() : pcs
    • +
    • is_space< wchar_t >() : pcs
    • +
    • is_upper() : pcs
    • +
    • is_upper< char >() : pcs
    • +
    • is_upper< wchar_t >() : pcs
    • +
    + + +

    - o -

      +
    • operator""_cs() : pcs
    • +
    + + +

    - s -

      +
    • swap_case() : pcs
    • +
    + + +

    - t -

      +
    • to_lower() : pcs
    • +
    • to_lower< char >() : pcs
    • +
    • to_lower< wchar_t >() : pcs
    • +
    • to_upper() : pcs
    • +
    • to_upper< char >() : pcs
    • +
    • to_upper< wchar_t >() : pcs
    • +
    +
    +
    +
    + + + + diff --git a/documentation/namespacemembers_type.html b/documentation/namespacemembers_type.html new file mode 100644 index 0000000..6c18b1d --- /dev/null +++ b/documentation/namespacemembers_type.html @@ -0,0 +1,103 @@ + + + + + + + +cpp-strings: Namespace Members + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    cpp-strings 1.0.4 +
    +
    Pythonic c++ strings
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace typedefs with links to the namespaces they belong to:
      +
    • CppString : pcs
    • +
    • CppWString : pcs
    • +
    +
    +
    +
    + + + + diff --git a/documentation/namespacepcs.html b/documentation/namespacepcs.html new file mode 100644 index 0000000..7bcffed --- /dev/null +++ b/documentation/namespacepcs.html @@ -0,0 +1,1493 @@ + + + + + + + +cpp-strings: pcs Namespace Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    cpp-strings 1.0.4 +
    +
    Pythonic c++ strings
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    pcs Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + +

    +Classes

    class  CppStringT
     This is the templated base class for all CppString classes. More...
    class  Slice
     Base class for slices, with start, stop and step specified values. More...
    struct  StartSlice
     Base class for slices, with start, stop and step specified values. More...
    struct  StartStepSlice
     struct of slices with default step values More...
    struct  StartStopSlice
     struct of slices with default start and stop values More...
    struct  StepSlice
     struct of slices with default start and step values More...
    struct  StopSlice
     struct of slices with default stop and step values More...
    struct  StopStepSlice
     struct of slices with default stop values More...
    + + + + + +

    +Typedefs

    using CppString = CppStringT<char>
     Specialization of basic class with template argument 'char'.
    using CppWString = CppStringT<wchar_t>
     Specialization of basic class with template argument 'wchar_t'.
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<class CharT>
    const bool is_alpha (const CharT ch) noexcept
     struct of slices with default start values
    template<>
    const bool is_alpha< char > (const char ch) noexcept
     Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.
    template<>
    const bool is_alpha< wchar_t > (const wchar_t ch) noexcept
     Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.
    template<class CharT>
    const bool is_ascii (const CharT ch) noexcept
     Returns true if character ch gets ASCII code, or false otherwise.
    template<class CharT>
    const bool is_decimal (const CharT ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<>
    const bool is_decimal< char > (const char ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<>
    const bool is_decimal< wchar_t > (const wchar_t ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<class CharT>
    const bool is_digit (const CharT ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<>
    const bool is_digit< char > (const char ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<>
    const bool is_digit< wchar_t > (const wchar_t ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<class CharT>
    const bool is_id_continue (const CharT ch) noexcept
     Returns true if character is a continuing char for identifiers, or false otherwise.
    template<class CharT>
    const bool is_id_start (const CharT ch) noexcept
     Returns true if character is a starting char for identifiers, or false otherwise.
    template<class CharT>
    const bool is_lower (const CharT ch) noexcept
     Returns true if character is lowercase, or false otherwise.
    template<>
    const bool is_lower< char > (const char ch) noexcept
     Returns true if character ch is lowercase, or false otherwise. Conforms to the current locale settings.
    template<>
    const bool is_lower< wchar_t > (const wchar_t ch) noexcept
     Returns true if character ch is lowercase, or false otherwise. Conforms to the current locale settings.
    template<class CharT>
    const bool is_numeric (const CharT ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<>
    const bool is_numeric< char > (const char ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<>
    const bool is_numeric< wchar_t > (const wchar_t ch) noexcept
     Returns true if character is a decimal digit, or false otherwise.
    template<class CharT>
    const bool is_printable (const CharT ch) noexcept
     Returns true if character ch is printable, or false otherwise.
    template<>
    const bool is_printable< char > (const char ch) noexcept
     Returns true if character ch is printable, or false otherwise.
    template<>
    const bool is_printable< wchar_t > (const wchar_t ch) noexcept
     Returns true if character ch is punctuation, or false otherwise. Conforms to the current locale settings.
    template<class CharT>
    const bool is_punctuation (const CharT ch) noexcept
     Returns true if character ch is punctuation, or false otherwise.
    template<>
    const bool is_punctuation< char > (const char ch) noexcept
     Returns true if character ch is punctuation, or false otherwise. Conforms to the current locale settings.
    template<>
    const bool is_punctuation< wchar_t > (const wchar_t ch) noexcept
     Returns true if character ch is punctuation, or false otherwise. Conforms to the current locale settings.
    template<class CharT>
    const bool is_space (const CharT ch) noexcept
     Returns true if character ch is white space, or false otherwise.
    template<>
    const bool is_space< char > (const char ch) noexcept
     Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.
    template<>
    const bool is_space< wchar_t > (const wchar_t ch) noexcept
     Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.
    template<class CharT>
    const bool is_upper (const CharT ch) noexcept
     Returns true if character is uppercase, or false otherwise.
    template<>
    const bool is_upper< char > (const char ch) noexcept
     Returns true if character ch is uppercase, or false otherwise. Conforms to the current locale settings.
    template<>
    const bool is_upper< wchar_t > (const wchar_t ch) noexcept
     Returns true if character ch is uppercase, or false otherwise. Conforms to the current locale settings.
    CppString operator""_cs (const char *str, std::size_t len)
     Forms a CppString literal.
    CppWString operator""_cs (const wchar_t *str, std::size_t len)
     Forms a CppWString literal.
    template<class CharT>
    const CharT swap_case (const CharT ch) noexcept
     Returns the swapped case form of character ch if it exists, or ch itself otherwise.
    template<class CharT>
    const CharT to_lower (const CharT ch) noexcept
     Returns the lowercase form of character ch if it exists, or ch itself otherwise.
    template<>
    const char to_lower< char > (const char ch) noexcept
     Returns the lowercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.
    template<>
    const wchar_t to_lower< wchar_t > (const wchar_t ch) noexcept
     Returns the lowercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.
    template<class CharT>
    const CharT to_upper (const CharT ch) noexcept
     Returns the uppercase form of character ch if it exists, or ch itself otherwise.
    template<>
    const char to_upper< char > (const char ch) noexcept
     Returns the uppercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.
    template<>
    const wchar_t to_upper< wchar_t > (const wchar_t ch) noexcept
     Returns the uppercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.
    +

    Detailed Description

    +

    Library cppstrings "What if c++ strings where as easy to use as Python strings?"

    +

    Copyright (C) 2023-2025 Philippe Schmouker contact - ph (dot) schmouker (at) gmail (dot) com

    +

    This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

    +

    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

    +

    You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

    +

    Typedef Documentation

    + +

    ◆ CppString

    + +
    +
    + + + + +
    using pcs::CppString = CppStringT<char>
    +
    + +

    Specialization of basic class with template argument 'char'.

    + +
    +
    + +

    ◆ CppWString

    + +
    +
    + + + + +
    using pcs::CppWString = CppStringT<wchar_t>
    +
    + +

    Specialization of basic class with template argument 'wchar_t'.

    + +
    +
    +

    Function Documentation

    + +

    ◆ is_alpha()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_alpha (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    struct of slices with default start values

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    +

    Returns true if character ch is alphabetic, or false otherwise.

    + +

    References is_alpha().

    + +

    Referenced by is_alpha(), is_id_start(), pcs::CppStringT< char >::isalnum(), and pcs::CppStringT< char >::isalpha().

    + +
    +
    + +

    ◆ is_alpha< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_alpha< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_alpha< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_alpha< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_ascii()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_ascii (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch gets ASCII code, or false otherwise.

    +

    Returns true if character has code point in the range U+0000-U+007F.

    + +

    Referenced by pcs::CppStringT< char >::isascii().

    + +
    +
    + +

    ◆ is_decimal()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_decimal (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by is_digit(), is_digit< char >(), is_digit< wchar_t >(), is_id_continue(), is_numeric(), is_numeric< char >(), is_numeric< wchar_t >(), pcs::CppStringT< char >::isalnum(), and pcs::CppStringT< char >::isdecimal().

    + +
    +
    + +

    ◆ is_decimal< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_decimal< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    + +
    +
    + +

    ◆ is_decimal< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_decimal< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    + +
    +
    + +

    ◆ is_digit()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_digit (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    References is_decimal().

    + +

    Referenced by pcs::CppStringT< char >::isalnum().

    + +
    +
    + +

    ◆ is_digit< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_digit< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    + +

    References is_decimal().

    + +
    +
    + +

    ◆ is_digit< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_digit< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    + +

    References is_decimal().

    + +
    +
    + +

    ◆ is_id_continue()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_id_continue (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a continuing char for identifiers, or false otherwise.

    + +

    References is_decimal(), and is_id_start().

    + +

    Referenced by pcs::CppStringT< char >::isidentifier().

    + +
    +
    + +

    ◆ is_id_start()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_id_start (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a starting char for identifiers, or false otherwise.

    + +

    References is_alpha().

    + +

    Referenced by is_id_continue(), and pcs::CppStringT< char >::isidentifier().

    + +
    +
    + +

    ◆ is_lower()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_lower (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is lowercase, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by pcs::CppStringT< char >::islower(), and swap_case().

    + +
    +
    + +

    ◆ is_lower< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_lower< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is lowercase, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_lower< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_lower< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is lowercase, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_numeric()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_numeric (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    References is_decimal().

    + +

    Referenced by pcs::CppStringT< char >::isalnum().

    + +
    +
    + +

    ◆ is_numeric< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_numeric< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    + +

    References is_decimal().

    + +
    +
    + +

    ◆ is_numeric< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_numeric< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is a decimal digit, or false otherwise.

    + +

    References is_decimal().

    + +
    +
    + +

    ◆ is_printable()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_printable (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is printable, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by pcs::CppStringT< char >::isprintable().

    + +
    +
    + +

    ◆ is_printable< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_printable< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is printable, or false otherwise.

    + +
    +
    + +

    ◆ is_printable< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_printable< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is punctuation, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_punctuation()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_punctuation (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is punctuation, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by pcs::CppStringT< char >::is_words_sep(), and pcs::CppStringT< char >::ispunctuation().

    + +
    +
    + +

    ◆ is_punctuation< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_punctuation< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is punctuation, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_punctuation< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_punctuation< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is punctuation, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_space()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_space (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is white space, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by pcs::CppStringT< char >::is_words_sep(), and pcs::CppStringT< char >::isspace().

    + +
    +
    + +

    ◆ is_space< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_space< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_space< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_space< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is alphabetic, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_upper()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_upper (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character is uppercase, or false otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by pcs::CppStringT< char >::isupper(), and swap_case().

    + +
    +
    + +

    ◆ is_upper< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_upper< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is uppercase, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ is_upper< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const bool pcs::is_upper< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns true if character ch is uppercase, or false otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ operator""_cs() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    CppString pcs::operator""_cs (const char * str,
    std::size_t len )
    +
    +inline
    +
    + +

    Forms a CppString literal.

    + +
    +
    + +

    ◆ operator""_cs() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    CppWString pcs::operator""_cs (const wchar_t * str,
    std::size_t len )
    +
    +inline
    +
    + +

    Forms a CppWString literal.

    + +
    +
    + +

    ◆ swap_case()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const CharT pcs::swap_case (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns the swapped case form of character ch if it exists, or ch itself otherwise.

    + +

    References is_lower(), is_upper(), to_lower(), and to_upper().

    + +

    Referenced by pcs::CppStringT< char >::swapcase().

    + +
    +
    + +

    ◆ to_lower()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const CharT pcs::to_lower (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns the lowercase form of character ch if it exists, or ch itself otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by swap_case().

    + +
    +
    + +

    ◆ to_lower< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const char pcs::to_lower< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns the lowercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ to_lower< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const wchar_t pcs::to_lower< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns the lowercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ to_upper()

    + +
    +
    +
    +template<class CharT>
    + + + + + +
    + + + + + + + +
    const CharT pcs::to_upper (const CharT ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns the uppercase form of character ch if it exists, or ch itself otherwise.

    +

    SHOULD NEVER BE USED. Use next specializations instead.

    + +

    Referenced by pcs::CppStringT< char >::capitalize(), and swap_case().

    + +
    +
    + +

    ◆ to_upper< char >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const char pcs::to_upper< char > (const char ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns the uppercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.

    + +
    +
    + +

    ◆ to_upper< wchar_t >()

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + +
    const wchar_t pcs::to_upper< wchar_t > (const wchar_t ch)
    +
    +inlinenodiscardnoexcept
    +
    + +

    Returns the uppercase form of character ch if it exists, or ch itself otherwise. Conforms to the current locale settings.

    + +
    +
    +
    +
    + +
    + + + + diff --git a/documentation/namespacepcs.js b/documentation/namespacepcs.js new file mode 100644 index 0000000..9151eae --- /dev/null +++ b/documentation/namespacepcs.js @@ -0,0 +1,52 @@ +var namespacepcs = +[ + [ "CppStringT", "classpcs_1_1_cpp_string_t.html", "classpcs_1_1_cpp_string_t" ], + [ "Slice", "classpcs_1_1_slice.html", "classpcs_1_1_slice" ], + [ "StartSlice", "structpcs_1_1_start_slice.html", "structpcs_1_1_start_slice" ], + [ "StartStepSlice", "structpcs_1_1_start_step_slice.html", "structpcs_1_1_start_step_slice" ], + [ "StartStopSlice", "structpcs_1_1_start_stop_slice.html", "structpcs_1_1_start_stop_slice" ], + [ "StepSlice", "structpcs_1_1_step_slice.html", "structpcs_1_1_step_slice" ], + [ "StopSlice", "structpcs_1_1_stop_slice.html", "structpcs_1_1_stop_slice" ], + [ "StopStepSlice", "structpcs_1_1_stop_step_slice.html", "structpcs_1_1_stop_step_slice" ], + [ "CppString", "namespacepcs.html#a08d21c458d61442667df24212920d0d9", null ], + [ "CppWString", "namespacepcs.html#a79a822cea8e301fd51d2ed51dff57286", null ], + [ "is_alpha", "namespacepcs.html#a40bc3d234e3c737f34d267151ca62014", null ], + [ "is_alpha< char >", "namespacepcs.html#ade5b26313fc856bb882109d6945629b8", null ], + [ "is_alpha< wchar_t >", "namespacepcs.html#a069625790af3ecf05a424c2c53eabfc0", null ], + [ "is_ascii", "namespacepcs.html#ac7822fd0c570f69d597936a24c38ba2a", null ], + [ "is_decimal", "namespacepcs.html#a9f0ba4e85fc273fad1a8b489f3be7fa8", null ], + [ "is_decimal< char >", "namespacepcs.html#a28f77929d599a862403a4471f6b73fc3", null ], + [ "is_decimal< wchar_t >", "namespacepcs.html#a60a2017b25d3d06b83e72f5ed5a93d09", null ], + [ "is_digit", "namespacepcs.html#a52b12f8beb4ab7d8b819ca24180e08d1", null ], + [ "is_digit< char >", "namespacepcs.html#af7c58514e3378a219904f22eb22e9072", null ], + [ "is_digit< wchar_t >", "namespacepcs.html#a01c6093b1a8ef52114f799635ff930d5", null ], + [ "is_id_continue", "namespacepcs.html#aef0240331a343bb1ad13eb613ca93fa4", null ], + [ "is_id_start", "namespacepcs.html#abfda7874fe5b1f72c1c5a9a04d5c7e42", null ], + [ "is_lower", "namespacepcs.html#aedd570e9ffa0572d56fce5085594bdbb", null ], + [ "is_lower< char >", "namespacepcs.html#a29893984c95e53a6efe01f74c2dcc03a", null ], + [ "is_lower< wchar_t >", "namespacepcs.html#ad1d1b13c16ce784055e93af9fa34fb5c", null ], + [ "is_numeric", "namespacepcs.html#af1b60c1081e8bc3b4cd91fbe240e9b87", null ], + [ "is_numeric< char >", "namespacepcs.html#a242e3c28e3d47d19d70ab70d83e74d35", null ], + [ "is_numeric< wchar_t >", "namespacepcs.html#acab7e7bb1ffd6e4ea1a8300b05478647", null ], + [ "is_printable", "namespacepcs.html#a51cd6883557ab31a1e0c8e7b5ab27351", null ], + [ "is_printable< char >", "namespacepcs.html#a1cd19ec212e3ada992a8effb8d5d872d", null ], + [ "is_printable< wchar_t >", "namespacepcs.html#a30ed0cd7942d081369f78a49a029d8b1", null ], + [ "is_punctuation", "namespacepcs.html#a02d340dd9c510eda0fbfed07a08d0792", null ], + [ "is_punctuation< char >", "namespacepcs.html#aa36d34c2227cde5856e8d61fa6e4af58", null ], + [ "is_punctuation< wchar_t >", "namespacepcs.html#a363e2bac9c403a623c5a410f7113edd3", null ], + [ "is_space", "namespacepcs.html#af089ceadbeaab27e12ad7f7edaaec72a", null ], + [ "is_space< char >", "namespacepcs.html#a714cfa835ef4db5180309829ee8e27a9", null ], + [ "is_space< wchar_t >", "namespacepcs.html#a57a765c6eb624107a2176a56cf2220a7", null ], + [ "is_upper", "namespacepcs.html#a8cb1cd0a1e39d92893eb7d22145f5d65", null ], + [ "is_upper< char >", "namespacepcs.html#ac25d471fa1d838401335776ad4b6ead1", null ], + [ "is_upper< wchar_t >", "namespacepcs.html#ab5077443809e9e4eb7bfa463728f398a", null ], + [ "operator\"\"_cs", "namespacepcs.html#afb8dd890fe893aba3264ac7df4fe7124", null ], + [ "operator\"\"_cs", "namespacepcs.html#acb7395de8ef88696d0c8c9772e172118", null ], + [ "swap_case", "namespacepcs.html#ac6e0b881e35c04e9b5bbe6e8b17ee1a7", null ], + [ "to_lower", "namespacepcs.html#a965f285db4253ce86ed59fccc2e8be61", null ], + [ "to_lower< char >", "namespacepcs.html#a4c4164fedd9cb659873a980fa855f4a2", null ], + [ "to_lower< wchar_t >", "namespacepcs.html#ab097a99126055ab4c843eb6efb573bb1", null ], + [ "to_upper", "namespacepcs.html#a607c82cc94f2b6473d8391334eed8c14", null ], + [ "to_upper< char >", "namespacepcs.html#ab823c7be920affd05f96a6ad8b99accf", null ], + [ "to_upper< wchar_t >", "namespacepcs.html#aaf8dcc64819cbf8631fc63e0dd522811", null ] +]; \ No newline at end of file diff --git a/documentation/namespaces.html b/documentation/namespaces.html new file mode 100644 index 0000000..1a59ece --- /dev/null +++ b/documentation/namespaces.html @@ -0,0 +1,107 @@ + + + + + + + +cpp-strings: Namespace List + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    cpp-strings 1.0.4 +
    +
    Pythonic c++ strings
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    + + +
     Npcs
    +
    +
    +
    +
    + + + + diff --git a/documentation/namespaces_dup.js b/documentation/namespaces_dup.js new file mode 100644 index 0000000..2c93f11 --- /dev/null +++ b/documentation/namespaces_dup.js @@ -0,0 +1,4 @@ +var namespaces_dup = +[ + [ "pcs", "namespacepcs.html", "namespacepcs" ] +]; \ No newline at end of file diff --git a/documentation/navtree.css b/documentation/navtree.css new file mode 100644 index 0000000..0ea3a07 --- /dev/null +++ b/documentation/navtree.css @@ -0,0 +1,327 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0; + padding:0; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + position: relative; + background-color: var(--nav-menu-active-bg); + border-radius: 0 6px 6px 0; + /*margin-right: 5px;*/ +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); + line-height: 22px; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--page-link-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin: 0 6px 0 -5px; + padding: 0 0 0 5px; + height: 22px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + transition: opacity 0.5s ease; + background-color: var(--nav-splitbar-bg-color); + opacity:0; + cursor:col-resize; + height:100%; + right:0; + top:0; + width:6px; + position: relative; +} + +.ui-resizable-e:after { + content: ''; + display: block; + top: 50%; + left: 1px; + width: 2px; + height: 15px; + border-left: 1px solid var(--nav-splitbar-handle-color); + border-right: 1px solid var(--nav-splitbar-handle-color); + position: absolute; +} + +.ui-resizable-e:hover { + opacity: 1; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ + scrollbar-width: thin; + border-right: 1px solid var(--nav-border-color); + padding-left: 5px; +} + +#nav-sync { + position:absolute; + top:0px; + right:0px; + z-index:1; +} + +#nav-sync img { + opacity:0.3; +} + +div.nav-sync-icon { + position: relative; + width: 24px; + height: 17px; + left: -6px; + top: -1px; + opacity: 0.7; + display: inline-block; + background-color: var(--sync-icon-background-color); + border: 1px solid var(--sync-icon-border-color); + box-sizing: content-box; +} + +div.nav-sync-icon:hover { + background-color: var(--sync-icon-selected-background-color); + opacity: 1.0; +} + +div.nav-sync-icon.active:after { + content: ''; + background-color: var(--sync-icon-background-color); + border-top: 2px solid var(--sync-icon-color); + position: absolute; + width: 16px; + height: 0px; + top: 7px; + left: 4px; +} + +div.nav-sync-icon.active:hover:after { + border-top: 2px solid var(--sync-icon-selected-color); +} + +span.sync-icon-left { + position: absolute; + padding: 0; + margin: 0; + top: 3px; + left: 4px; + display: inline-block; + width: 8px; + height: 8px; + border-left: 2px solid var(--sync-icon-color); + border-top: 2px solid var(--sync-icon-color); + transform: rotate(-45deg); +} + +span.sync-icon-right { + position: absolute; + padding: 0; + margin: 0; + top: 3px; + left: 10px; + display: inline-block; + width: 8px; + height: 8px; + border-right: 2px solid var(--sync-icon-color); + border-bottom: 2px solid var(--sync-icon-color); + transform: rotate(-45deg); +} + +div.nav-sync-icon:hover span.sync-icon-left { + border-left: 2px solid var(--sync-icon-selected-color); + border-top: 2px solid var(--sync-icon-selected-color); +} + +div.nav-sync-icon:hover span.sync-icon-right { + border-right: 2px solid var(--sync-icon-selected-color); + border-bottom: 2px solid var(--sync-icon-selected-color); +} + +#nav-path ul { + border-top: 1px solid var(--nav-breadcrumb-separator-color); +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + +/*---------------------------*/ +#container { + display: grid; + grid-template-columns: auto auto; + overflow: hidden; +} + +#page-nav { + background: var(--nav-background-color); + display: block; + width: 250px; + box-sizing: content-box; + position: relative; + border-left: 1px solid var(--nav-border-color); +} + +#page-nav-tree { + display: inline-block; +} + +#page-nav-resize-handle { + transition: opacity 0.5s ease; + background-color: var(--nav-splitbar-bg-color); + opacity:0; + cursor:col-resize; + height:100%; + right:0; + top:0; + width:6px; + position: relative; + z-index: 1; + user-select: none; +} + +#page-nav-resize-handle:after { + content: ''; + display: block; + top: 50%; + left: 1px; + width: 2px; + height: 15px; + border-left: 1px solid var(--nav-splitbar-handle-color); + border-right: 1px solid var(--nav-splitbar-handle-color); + position: absolute; +} + +#page-nav-resize-handle.dragging, +#page-nav-resize-handle:hover { + opacity: 1; +} + +#page-nav-contents { + padding: 0; + margin: 0; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + overflow: auto; + scrollbar-width: thin; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +ul.page-outline, +ul.page-outline ul { + text-indent: 0; + list-style: none outside none; + padding: 0 0 0 4px; +} + +ul.page-outline { + margin: 0 4px 4px 6px; +} + +ul.page-outline div.item { + font: 12px var(--font-family-nav); + line-height: 22px; +} + +ul.page-outline li { + white-space: nowrap; +} + +ul.page-outline li.vis { + background-color: var(--nav-breadcrumb-active-bg); +} + +#container.resizing { + cursor: col-resize; + user-select: none; +} diff --git a/documentation/navtree.js b/documentation/navtree.js new file mode 100644 index 0000000..4fcf6e3 --- /dev/null +++ b/documentation/navtree.js @@ -0,0 +1,899 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath,allMembersFile) { + let navTreeSubIndices = []; + const ARROW_DOWN = ''; + const ARROW_RIGHT = ''; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + const fullSidebar = typeof page_layout!=='undefined' && page_layout==1; + + function getScrollBarWidth () { + let outer = $('
    ').css({visibility: 'hidden', width: 100, overflow: 'scroll', scrollbarWidth: 'thin'}).appendTo('body'); + let widthWithScroll = $('
    ').css({width: '100%'}).appendTo(outer).outerWidth(); + outer.remove(); + return 100 - widthWithScroll; + } + const scrollbarWidth = getScrollBarWidth(); + + function adjustSyncIconPosition() { + if (!fullSidebar) { + const nt = document.getElementById("nav-tree"); + const hasVerticalScrollbar = nt.scrollHeight > nt.clientHeight; + $("#nav-sync").css({right:parseInt(hasVerticalScrollbar?scrollbarWidth:0)}); + } + } + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + const e = n.replace(/-/g,'_'); + return window[e]; + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = function() { func(); adjustSyncIconPosition(); } + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast",adjustSyncIconPosition); + $(node.plus_img.childNodes[0]).removeClass('opened').addClass('closed'); + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + function htmlToNode(html) { + const template = document.createElement('template'); + template.innerHTML = html; + const nNodes = template.content.childNodes.length; + if (nNodes !== 1) { + throw new Error(`html parameter must represent a single node; got ${nNodes}. `); + } + return template.content.firstChild; + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(htmlToNode(''+text+'')); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast",adjustSyncIconPosition); + $(node.plus_img.childNodes[0]).addClass('opened').removeClass('closed'); + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + $(node.plus_img.childNodes[0]).removeClass('closed').addClass('opened'); + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+10) { // try root page without hash as fallback + gotoUrl(o,root,'',relpath); + } else { + o.breadcrumbs = $.extend(true, [], nti); + if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index + navTo(o,NAVTREE[0][1],"",relpath); + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + } + if (o.breadcrumbs) { + o.breadcrumbs.unshift(0); // add 0 for root node + showNode(o, o.node, 0, hash); + } + } + } + + const gotoUrl = function(o,root,hash,relpath) { + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = window['NAVTREEINDEX'+i]; + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const navTo = function(o,root,hash,relpath) { + const link = cachedLink(); + if (link) { + const parts = link.split('#'); + root = parts[0]; + hash = parts.length>1 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + gotoUrl(o,root,hash,relpath); + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ try to keep right panel width + const shrinkLeft = Math.min(deficit, leftPanelWidth-minPanelWidth); + leftPanelWidth -= shrinkLeft; + const remainingDeficit = deficit - shrinkLeft; + const shrinkRight = Math.min(remainingDeficit, rightPanelWidth-minPanelWidth); + rightPanelWidth -= shrinkRight; + } else { // dragging right handle -> try to keep left panel width + const shrinkRight = Math.min(deficit, rightPanelWidth-minPanelWidth); + rightPanelWidth -= shrinkRight; + const remainingDeficit = deficit - shrinkRight; + const shrinkLeft = Math.min(remainingDeficit, leftPanelWidth-minPanelWidth); + leftPanelWidth -= shrinkLeft; + } + } else { + rightPanelWidth = pagenav.length ? Math.max(minPanelWidth,rightPanelWidth) : 0; + leftPanelWidth = Math.max(minPanelWidth,leftPanelWidth); + } + return { leftPanelWidth, rightPanelWidth } + } + + function updateWidths(sidenavWidth,pagenavWidth,dragLeft) + { + const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,dragLeft); + const widthStr = parseInt(widths.leftPanelWidth)+"px"; + content.css({marginLeft:widthStr}); + if (fullSidebar) { + footer.css({marginLeft:widthStr}); + if (mainnav) { + mainnav.css({marginLeft:widthStr}); + } + } + sidenav.css({width:widthStr}); + if (pagenav.length) { + container.css({gridTemplateColumns:'auto '+parseInt(widths.rightPanelWidth)+'px'}); + pagenav.css({width:parseInt(widths.rightPanelWidth-1)+'px'}); + } + return widths; + } + + function resizeWidth(dragLeft) { + const sidenavWidth = $(sidenav).outerWidth()-barWidth; + const pagenavWidth = pagenav.length ? $(pagenav).outerWidth() : 0; + const widths = updateWidths(sidenavWidth,pagenavWidth,dragLeft); + Cookie.writeSetting(RESIZE_COOKIE_NAME,widths.leftPanelWidth-barWidth); + if (pagenav.length) { + Cookie.writeSetting(PAGENAV_COOKIE_NAME,widths.rightPanelWidth); + } + } + + function restoreWidth(sidenavWidth,pagenavWidth) { + updateWidths(sidenavWidth,pagenavWidth,false); + showHideNavBar(); + } + + function resizeHeight() { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (!fullSidebar) { + contentHeight = windowHeight - headerHeight - footerHeight - 1; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (fullSidebar) { + contentHeight = windowHeight - footerHeight - 1; + navtreeHeight = windowHeight - headerHeight - 1; + sideNavHeight = windowHeight - 1; + if (mainnav) { + contentHeight -= mainnav.outerHeight(); + } + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + content.css({height:contentHeight + "px"}); + resizeWidth(false); + showHideNavBar(); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (document.getElementById('main-nav')) { + mainnav = $("#main-nav"); + } + navtree = $("#nav-tree"); + pagenav = $("#page-nav"); + container = $("#container"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(true); } }); + $(sidenav).resizable({ minWidth: 0 }); + if (pagenav.length) { + pagehandle = $("#page-nav-resize-handle"); + pagehandle.on('mousedown touchstart',function(e) { + $('body').addClass('resizing'); + pagehandle.addClass('dragging'); + $(document).on('mousemove touchmove',function(e) { + const clientX = e.clientX || e.originalEvent.touches[0].clientX; + let pagenavWidth = container[0].offsetWidth-clientX+barWidth/2; + const sidenavWidth = sidenav.width(); + const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,false); + container.css({gridTemplateColumns:'auto '+parseInt(widths.rightPanelWidth)+'px'}); + pagenav.css({width:parseInt(widths.rightPanelWidth-1)+'px'}); + content.css({marginLeft:parseInt(widths.leftPanelWidth)+'px'}); + Cookie.writeSetting(PAGENAV_COOKIE_NAME,pagenavWidth); + }); + $(document).on('mouseup touchend', function(e) { + $('body').removeClass('resizing'); + pagehandle.removeClass('dragging'); + $(document).off('mousemove mouseup touchmove touchend'); + }); + }); + } else { + container.css({gridTemplateColumns:'auto'}); + } + const width = parseInt(Cookie.readSetting(RESIZE_COOKIE_NAME,250)); + const pagenavWidth = parseInt(Cookie.readSetting(PAGENAV_COOKIE_NAME,250)); + if (width) { restoreWidth(width+barWidth,pagenavWidth); } else { resizeWidth(); } + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(window).ready(function() { + let lastWidth = -1; + let lastHeight = -1; + $(window).resize(function() { + const newWidth = $(this).width(), newHeight = $(this).height(); + if (newWidth!=lastWidth || newHeight!=lastHeight) { + resizeHeight(); + navtree_trampoline.updateContentTop(); + lastWidth = newWidth; + lastHeight = newHeight; + } + }); + resizeHeight(); + lastWidth = $(window).width(); + lastHeight = $(window).height(); + content.scroll(function() { + navtree_trampoline.updateContentTop(); + }); + }); + } + + + function initPageToc() { + const topMapping = []; + const toc_contents = $('#page-nav-contents'); + const content=$('