summaryrefslogtreecommitdiff
path: root/qtools
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2021-10-15 11:16:22 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2021-10-15 11:16:22 +0900
commit558fa54c62ec59357cb5c40a411f16f1c1754f33 (patch)
tree9468f1b169143cbb375fc223ca2f78539a908085 /qtools
parentce6f802772f02771c3bf86ccf78d0fc1731947c5 (diff)
downloaddoxygen-558fa54c62ec59357cb5c40a411f16f1c1754f33.tar.gz
doxygen-558fa54c62ec59357cb5c40a411f16f1c1754f33.tar.bz2
doxygen-558fa54c62ec59357cb5c40a411f16f1c1754f33.zip
Imported Upstream version 1.9.2upstream/1.9.2
Diffstat (limited to 'qtools')
-rw-r--r--qtools/CMakeLists.txt48
-rw-r--r--qtools/Doxyfile320
-rw-r--r--qtools/LICENSE.GPL349
-rw-r--r--qtools/LICENSE.QPL103
-rw-r--r--qtools/Makefile.in31
-rw-r--r--qtools/README4
-rw-r--r--qtools/qarray.doc486
-rw-r--r--qtools/qarray.h110
-rw-r--r--qtools/qasciidict.h107
-rw-r--r--qtools/qbuffer.cpp465
-rw-r--r--qtools/qbuffer.h98
-rw-r--r--qtools/qcollection.cpp182
-rw-r--r--qtools/qcollection.h73
-rw-r--r--qtools/qconfig.h1
-rw-r--r--qtools/qcstring.cpp686
-rw-r--r--qtools/qcstring.h518
-rw-r--r--qtools/qcstringlist.cpp192
-rw-r--r--qtools/qcstringlist.h51
-rw-r--r--qtools/qdatastream.cpp944
-rw-r--r--qtools/qdatastream.h173
-rw-r--r--qtools/qdatetime.cpp1455
-rw-r--r--qtools/qdatetime.h217
-rw-r--r--qtools/qdict.doc492
-rw-r--r--qtools/qdict.h49
-rw-r--r--qtools/qdir.cpp1200
-rw-r--r--qtools/qdir.h235
-rw-r--r--qtools/qdir_unix.cpp290
-rw-r--r--qtools/qdir_win32.cpp485
-rw-r--r--qtools/qfeatures.h978
-rw-r--r--qtools/qfile.cpp550
-rw-r--r--qtools/qfile.h128
-rw-r--r--qtools/qfile_unix.cpp669
-rw-r--r--qtools/qfile_win32.cpp678
-rw-r--r--qtools/qfiledefs_p.h268
-rw-r--r--qtools/qfileinfo.cpp458
-rw-r--r--qtools/qfileinfo.h138
-rw-r--r--qtools/qfileinfo_unix.cpp425
-rw-r--r--qtools/qfileinfo_win32.cpp357
-rw-r--r--qtools/qgarray.cpp747
-rw-r--r--qtools/qgarray.h120
-rw-r--r--qtools/qgdict.cpp1217
-rw-r--r--qtools/qgdict.h222
-rw-r--r--qtools/qgeneric.h43
-rw-r--r--qtools/qglist.cpp1203
-rw-r--r--qtools/qglist.h254
-rw-r--r--qtools/qglobal.cpp685
-rw-r--r--qtools/qglobal.h626
-rw-r--r--qtools/qgstring.cpp258
-rw-r--r--qtools/qgstring.h139
-rw-r--r--qtools/qintdict.doc475
-rw-r--r--qtools/qintdict.h102
-rw-r--r--qtools/qinternallist.h138
-rw-r--r--qtools/qiodevice.cpp638
-rw-r--r--qtools/qiodevice.h155
-rw-r--r--qtools/qlist.doc1035
-rw-r--r--qtools/qlist.h158
-rw-r--r--qtools/qmap.cpp254
-rw-r--r--qtools/qmap.h607
-rw-r--r--qtools/qmodules.h11
-rw-r--r--qtools/qptrdict.doc486
-rw-r--r--qtools/qptrdict.h103
-rw-r--r--qtools/qqueue.h70
-rw-r--r--qtools/qregexp.cpp1093
-rw-r--r--qtools/qregexp.h92
-rw-r--r--qtools/qshared.h57
-rw-r--r--qtools/qsortedlist.doc94
-rw-r--r--qtools/qsortedlist.h59
-rw-r--r--qtools/qstack.doc135
-rw-r--r--qtools/qstack.h71
-rw-r--r--qtools/qstring.cpp15426
-rw-r--r--qtools/qstring.h879
-rw-r--r--qtools/qstringlist.cpp307
-rw-r--r--qtools/qstringlist.h82
-rw-r--r--qtools/qstrlist.doc5
-rw-r--r--qtools/qstrlist.h109
-rw-r--r--qtools/qstrvec.h90
-rw-r--r--qtools/qtextcodec.cpp2071
-rw-r--r--qtools/qtextcodec.h104
-rw-r--r--qtools/qtextstream.cpp2237
-rw-r--r--qtools/qtextstream.h351
-rw-r--r--qtools/qtl.doc249
-rw-r--r--qtools/qtl.h223
-rw-r--r--qtools/qutfcodec.cpp276
-rw-r--r--qtools/qutfcodec.h71
-rw-r--r--qtools/qvaluelist.doc772
-rw-r--r--qtools/qvaluelist.h455
-rw-r--r--qtools/qvaluestack.h64
-rw-r--r--qtools/qxml.cpp6061
-rw-r--r--qtools/qxml.h671
89 files changed, 0 insertions, 55863 deletions
diff --git a/qtools/CMakeLists.txt b/qtools/CMakeLists.txt
deleted file mode 100644
index d49ca47..0000000
--- a/qtools/CMakeLists.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-include_directories(.)
-
-list(APPEND qtools_src
-qbuffer.cpp
-qcollection.cpp
-qcstring.cpp
-qdatastream.cpp
-qdatetime.cpp
-qdir.cpp
-qfile.cpp
-qfileinfo.cpp
-qgarray.cpp
-qgdict.cpp
-qglist.cpp
-qglobal.cpp
-qgstring.cpp
-qiodevice.cpp
-qregexp.cpp
-qstring.cpp
-qtextstream.cpp
-qtextcodec.cpp
-qstringlist.cpp
-qcstringlist.cpp
-qxml.cpp
-qmap.cpp
-qutfcodec.cpp
-)
-
-if (UNIX)
-list(APPEND qtools_src
-qfile_unix.cpp
-qdir_unix.cpp
-qfileinfo_unix.cpp
-)
-endif()
-
-if (WIN32)
-list(APPEND qtools_src
-qfile_win32.cpp
-qdir_win32.cpp
-qfileinfo_win32.cpp
-
-)
-endif()
-
-add_library(qtools STATIC
-${qtools_src}
-)
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
deleted file mode 100644
index d3ab25a..0000000
--- a/qtools/Doxyfile
+++ /dev/null
@@ -1,320 +0,0 @@
-# Doxyfile 1.8.14
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-DOXYFILE_ENCODING = UTF-8
-PROJECT_NAME = Qtools
-PROJECT_NUMBER =
-PROJECT_BRIEF =
-PROJECT_LOGO =
-OUTPUT_DIRECTORY = ../qtools_docs
-CREATE_SUBDIRS = YES
-ALLOW_UNICODE_NAMES = NO
-OUTPUT_LANGUAGE = English
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ABBREVIATE_BRIEF =
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = YES
-STRIP_FROM_PATH = $(PWD)/
-STRIP_FROM_INC_PATH =
-SHORT_NAMES = NO
-JAVADOC_AUTOBRIEF = YES
-QT_AUTOBRIEF = NO
-MULTILINE_CPP_IS_BRIEF = NO
-INHERIT_DOCS = YES
-SEPARATE_MEMBER_PAGES = NO
-TAB_SIZE = 8
-ALIASES =
-OPTIMIZE_OUTPUT_FOR_C = NO
-OPTIMIZE_OUTPUT_JAVA = NO
-OPTIMIZE_FOR_FORTRAN = NO
-OPTIMIZE_OUTPUT_VHDL = NO
-EXTENSION_MAPPING =
-MARKDOWN_SUPPORT = YES
-TOC_INCLUDE_HEADINGS = 0
-AUTOLINK_SUPPORT = YES
-BUILTIN_STL_SUPPORT = NO
-CPP_CLI_SUPPORT = NO
-SIP_SUPPORT = NO
-IDL_PROPERTY_SUPPORT = YES
-DISTRIBUTE_GROUP_DOC = NO
-GROUP_NESTED_COMPOUNDS = NO
-SUBGROUPING = YES
-INLINE_GROUPED_CLASSES = NO
-INLINE_SIMPLE_STRUCTS = NO
-TYPEDEF_HIDES_STRUCT = NO
-LOOKUP_CACHE_SIZE = 0
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-EXTRACT_ALL = YES
-EXTRACT_PRIVATE = YES
-EXTRACT_PACKAGE = NO
-EXTRACT_STATIC = YES
-EXTRACT_LOCAL_CLASSES = YES
-EXTRACT_LOCAL_METHODS = NO
-EXTRACT_ANON_NSPACES = NO
-HIDE_UNDOC_MEMBERS = NO
-HIDE_UNDOC_CLASSES = NO
-HIDE_FRIEND_COMPOUNDS = NO
-HIDE_IN_BODY_DOCS = NO
-INTERNAL_DOCS = NO
-CASE_SENSE_NAMES = NO
-HIDE_SCOPE_NAMES = NO
-HIDE_COMPOUND_REFERENCE= NO
-SHOW_INCLUDE_FILES = YES
-SHOW_GROUPED_MEMB_INC = NO
-FORCE_LOCAL_INCLUDES = NO
-INLINE_INFO = YES
-SORT_MEMBER_DOCS = YES
-SORT_BRIEF_DOCS = NO
-SORT_MEMBERS_CTORS_1ST = NO
-SORT_GROUP_NAMES = NO
-SORT_BY_SCOPE_NAME = NO
-STRICT_PROTO_MATCHING = NO
-GENERATE_TODOLIST = YES
-GENERATE_TESTLIST = YES
-GENERATE_BUGLIST = YES
-GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS =
-MAX_INITIALIZER_LINES = 30
-SHOW_USED_FILES = YES
-SHOW_FILES = YES
-SHOW_NAMESPACES = YES
-FILE_VERSION_FILTER =
-LAYOUT_FILE =
-CITE_BIB_FILES =
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET = NO
-WARNINGS = YES
-WARN_IF_UNDOCUMENTED = YES
-WARN_IF_DOC_ERROR = YES
-WARN_NO_PARAMDOC = NO
-WARN_AS_ERROR = NO
-WARN_FORMAT = "$file:$line: $text "
-WARN_LOGFILE =
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = .
-INPUT_ENCODING = UTF-8
-FILE_PATTERNS = *.h \
- *.cpp \
- *.doc
-RECURSIVE = NO
-EXCLUDE =
-EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
-EXCLUDE_SYMBOLS =
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS =
-EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
-FILTER_PATTERNS =
-FILTER_SOURCE_FILES = NO
-FILTER_SOURCE_PATTERNS =
-USE_MDFILE_AS_MAINPAGE =
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER = YES
-INLINE_SOURCES = NO
-STRIP_CODE_COMMENTS = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
-REFERENCES_LINK_SOURCE = YES
-SOURCE_TOOLTIPS = YES
-USE_HTAGS = NO
-VERBATIM_HEADERS = YES
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX = YES
-COLS_IN_ALPHA_INDEX = 4
-IGNORE_PREFIX = Q
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML = YES
-HTML_OUTPUT =
-HTML_FILE_EXTENSION = .html
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
-HTML_EXTRA_STYLESHEET =
-HTML_EXTRA_FILES =
-HTML_COLORSTYLE_HUE = 220
-HTML_COLORSTYLE_SAT = 100
-HTML_COLORSTYLE_GAMMA = 80
-HTML_TIMESTAMP = YES
-HTML_DYNAMIC_MENUS = YES
-HTML_DYNAMIC_SECTIONS = NO
-HTML_INDEX_NUM_ENTRIES = 100
-GENERATE_DOCSET = YES
-DOCSET_FEEDNAME = "Doxygen generated docs"
-DOCSET_BUNDLE_ID = org.doxygen.Project
-DOCSET_PUBLISHER_ID = org.doxygen.Publisher
-DOCSET_PUBLISHER_NAME = Publisher
-GENERATE_HTMLHELP = NO
-CHM_FILE =
-HHC_LOCATION =
-GENERATE_CHI = NO
-CHM_INDEX_ENCODING =
-BINARY_TOC = NO
-TOC_EXPAND = NO
-GENERATE_QHP = YES
-QCH_FILE =
-QHP_NAMESPACE = com.qtools
-QHP_VIRTUAL_FOLDER = doc
-QHP_CUST_FILTER_NAME =
-QHP_CUST_FILTER_ATTRS =
-QHP_SECT_FILTER_ATTRS =
-QHG_LOCATION =
-GENERATE_ECLIPSEHELP = YES
-ECLIPSE_DOC_ID = org.doxygen.qtools
-DISABLE_INDEX = NO
-GENERATE_TREEVIEW = NO
-ENUM_VALUES_PER_LINE = 4
-TREEVIEW_WIDTH = 250
-EXT_LINKS_IN_WINDOW = NO
-FORMULA_FONTSIZE = 10
-FORMULA_TRANSPARENT = YES
-USE_MATHJAX = NO
-MATHJAX_FORMAT = HTML-CSS
-MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/
-MATHJAX_EXTENSIONS =
-MATHJAX_CODEFILE =
-SEARCHENGINE = YES
-SERVER_BASED_SEARCH = NO
-EXTERNAL_SEARCH = NO
-SEARCHENGINE_URL = http://macbookpro/~dimitri/doxysearch.cgi
-SEARCHDATA_FILE = searchdata.xml
-EXTERNAL_SEARCH_ID =
-EXTRA_SEARCH_MAPPINGS =
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX = YES
-LATEX_OUTPUT =
-LATEX_CMD_NAME = latex
-MAKEINDEX_CMD_NAME = makeindex
-COMPACT_LATEX = NO
-PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
-LATEX_FOOTER =
-LATEX_EXTRA_STYLESHEET =
-LATEX_EXTRA_FILES =
-PDF_HYPERLINKS = YES
-USE_PDFLATEX = YES
-LATEX_BATCHMODE = NO
-LATEX_HIDE_INDICES = NO
-LATEX_SOURCE_CODE = YES
-LATEX_BIB_STYLE = plain
-LATEX_TIMESTAMP = NO
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF = NO
-RTF_OUTPUT =
-COMPACT_RTF = NO
-RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
-RTF_SOURCE_CODE = NO
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN = NO
-MAN_OUTPUT =
-MAN_EXTENSION = .3
-MAN_SUBDIR =
-MAN_LINKS = NO
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML = NO
-XML_OUTPUT = xml
-XML_PROGRAMLISTING = YES
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-GENERATE_DOCBOOK = NO
-DOCBOOK_OUTPUT = docbook
-DOCBOOK_PROGRAMLISTING = NO
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF = NO
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD = NO
-PERLMOD_LATEX = NO
-PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX =
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING = YES
-MACRO_EXPANSION = YES
-EXPAND_ONLY_PREDEF = YES
-SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED = Q_EXPORT=
-EXPAND_AS_DEFINED =
-SKIP_FUNCTION_MACROS = YES
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-TAGFILES =
-GENERATE_TAGFILE = ../qtools_docs/qtools.tag
-ALLEXTERNALS = NO
-EXTERNAL_GROUPS = YES
-EXTERNAL_PAGES = YES
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
-MSCGEN_PATH =
-DIA_PATH =
-HIDE_UNDOC_RELATIONS = YES
-HAVE_DOT = YES
-DOT_NUM_THREADS = 0
-DOT_FONTNAME =
-DOT_FONTSIZE = 10
-DOT_FONTPATH =
-CLASS_GRAPH = YES
-COLLABORATION_GRAPH = YES
-GROUP_GRAPHS = YES
-UML_LOOK = NO
-UML_LIMIT_NUM_FIELDS = 10
-TEMPLATE_RELATIONS = YES
-INCLUDE_GRAPH = YES
-INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = NO
-CALLER_GRAPH = NO
-GRAPHICAL_HIERARCHY = YES
-DIRECTORY_GRAPH = YES
-DOT_IMAGE_FORMAT = svg
-INTERACTIVE_SVG = YES
-DOT_PATH =
-DOTFILE_DIRS =
-MSCFILE_DIRS =
-DIAFILE_DIRS =
-PLANTUML_JAR_PATH =
-PLANTUML_CFG_FILE =
-PLANTUML_INCLUDE_PATH =
-DOT_GRAPH_MAX_NODES = 50
-MAX_DOT_GRAPH_DEPTH = 0
-DOT_TRANSPARENT = YES
-DOT_MULTI_TARGETS = NO
-GENERATE_LEGEND = YES
-DOT_CLEANUP = YES
diff --git a/qtools/LICENSE.GPL b/qtools/LICENSE.GPL
deleted file mode 100644
index 935a2a0..0000000
--- a/qtools/LICENSE.GPL
+++ /dev/null
@@ -1,349 +0,0 @@
-
- The Qt GUI Toolkit is Copyright (C) 1994-2000 Trolltech AS.
-
- You may use, distribute and copy the Qt GUI Toolkit under the terms of
- GNU General Public License version 2, which is display below.
-
--------------------------------------------------------------------------
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
--------------------------------------------------------------------------
diff --git a/qtools/LICENSE.QPL b/qtools/LICENSE.QPL
deleted file mode 100644
index ecdad6e..0000000
--- a/qtools/LICENSE.QPL
+++ /dev/null
@@ -1,103 +0,0 @@
- THE Q PUBLIC LICENSE
- version 1.0
-
- Copyright (C) 1999-2000 Trolltech AS, Norway.
- Everyone is permitted to copy and
- distribute this license document.
-
-The intent of this license is to establish freedom to share and change the
-software regulated by this license under the open source model.
-
-This license applies to any software containing a notice placed by the
-copyright holder saying that it may be distributed under the terms of
-the Q Public License version 1.0. Such software is herein referred to as
-the Software. This license covers modification and distribution of the
-Software, use of third-party application programs based on the Software,
-and development of free software which uses the Software.
-
- Granted Rights
-
-1. You are granted the non-exclusive rights set forth in this license
- provided you agree to and comply with any and all conditions in this
- license. Whole or partial distribution of the Software, or software
- items that link with the Software, in any form signifies acceptance of
- this license.
-
-2. You may copy and distribute the Software in unmodified form provided
- that the entire package, including - but not restricted to - copyright,
- trademark notices and disclaimers, as released by the initial developer
- of the Software, is distributed.
-
-3. You may make modifications to the Software and distribute your
- modifications, in a form that is separate from the Software, such as
- patches. The following restrictions apply to modifications:
-
- a. Modifications must not alter or remove any copyright notices in
- the Software.
-
- b. When modifications to the Software are released under this
- license, a non-exclusive royalty-free right is granted to the
- initial developer of the Software to distribute your modification
- in future versions of the Software provided such versions remain
- available under these terms in addition to any other license(s) of
- the initial developer.
-
-4. You may distribute machine-executable forms of the Software or
- machine-executable forms of modified versions of the Software, provided
- that you meet these restrictions:
-
- a. You must include this license document in the distribution.
-
- b. You must ensure that all recipients of the machine-executable forms
- are also able to receive the complete machine-readable source code
- to the distributed Software, including all modifications, without
- any charge beyond the costs of data transfer, and place prominent
- notices in the distribution explaining this.
-
- c. You must ensure that all modifications included in the
- machine-executable forms are available under the terms of this
- license.
-
-5. You may use the original or modified versions of the Software to
- compile, link and run application programs legally developed by you
- or by others.
-
-6. You may develop application programs, reusable components and other
- software items that link with the original or modified versions of the
- Software. These items, when distributed, are subject to the following
- requirements:
-
- a. You must ensure that all recipients of machine-executable forms of
- these items are also able to receive and use the complete
- machine-readable source code to the items without any charge
- beyond the costs of data transfer.
-
- b. You must explicitly license all recipients of your items to use
- and re-distribute original and modified versions of the items in
- both machine-executable and source code forms. The recipients must
- be able to do so without any charges whatsoever, and they must be
- able to re-distribute to anyone they choose.
-
-
- c. If the items are not available to the general public, and the
- initial developer of the Software requests a copy of the items,
- then you must supply one.
-
- Limitations of Liability
-
-In no event shall the initial developers or copyright holders be liable
-for any damages whatsoever, including - but not restricted to - lost
-revenue or profits or other direct, indirect, special, incidental or
-consequential damages, even if they have been advised of the possibility
-of such damages, except to the extent invariable law, if any, provides
-otherwise.
-
- No Warranty
-
-The Software and this license document are provided AS IS with NO WARRANTY
-OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE.
- Choice of Law
-
-This license is governed by the Laws of Norway. Disputes shall be settled
-by Oslo City Court.
diff --git a/qtools/Makefile.in b/qtools/Makefile.in
deleted file mode 100644
index 411ee5d..0000000
--- a/qtools/Makefile.in
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2000 by Dimitri van Heesch.
-#
-# Permission to use, copy, modify, and distribute this software and its
-# documentation under the terms of the GNU General Public License is hereby
-# granted. No representations are made about the suitability of this software
-# for any purpose. It is provided "as is" without express or implied warranty.
-# See the GNU General Public License for more details.
-#
-# Documents produced by Doxygen are derivative works derived from the
-# input used in their production; they are not affected by this license.
-#
-
-all: Makefile.qtools Makefile
- $(MAKE) -f Makefile.qtools $@
-
-Makefile.qtools: qtools.pro
- $(ENV) $(PERL) "$(TMAKE)" qtools.pro >Makefile.qtools
-
-tmake:
- $(ENV) $(PERL) "$(TMAKE)" qtools.pro >Makefile.qtools
-
-clean: Makefile.qtools
- $(MAKE) -f Makefile.qtools clean
-
-distclean: clean
- $(RM) Makefile.qtools
-
-FORCE:
diff --git a/qtools/README b/qtools/README
deleted file mode 100644
index 1e7fc8d..0000000
--- a/qtools/README
+++ /dev/null
@@ -1,4 +0,0 @@
-This directory contains a small subset of Troll-Tech's Qt library
-The subset is enough to build the doxygen executable, but lacks many of
-the features found in the Qt library. See http://www.trolltech.com
-for the full package.
diff --git a/qtools/qarray.doc b/qtools/qarray.doc
deleted file mode 100644
index 6914dbc..0000000
--- a/qtools/qarray.doc
+++ /dev/null
@@ -1,486 +0,0 @@
-/****************************************************************************
-**
-**
-** QArray class documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QArray documentation
- *****************************************************************************/
-
-/*!
- \class QArray qarray.h
- \brief The QArray class is a template class that provides arrays of simple types.
-
- \ingroup tools
-
- QArray is implemented as a template class. Define a template
- instance QArray\<X\> to create an array that contains X items.
-
- QArray stores the array elements directly in the array. It can only
- deal with simple types, i.e. C++ types, structs and classes that have
- no constructors, destructors or virtual functions. QArray uses
- bitwise operations to copy and compare array elements.
-
- The QVector collection class is also a kind of array. Like most
- \link collection.html collection classes\endlink, it has pointers to the
- contained items.
-
- QArray uses explicit \link shclass.html sharing\endlink with a reference
- count. If more than one array share common data, and one array is
- modified, all arrays will be modified.
-
- The benefit of sharing is that a program does not need to duplicate
- data when it is not required, which results in less memory usage and
- less copying of data.
-
- Example:
- \code
- #include <qarray.h>
- #include <stdio.h>
-
- QArray<int> fib( int num ) // returns fibonacci array
- {
- ASSERT( num > 2 );
- QArray<int> f( num ); // array of ints
-
- f[0] = f[1] = 1; // initialize first two numbers
- for ( int i=2; i<num; i++ )
- f[i] = f[i-1] + f[i-2];
-
- return f;
- }
-
- void main()
- {
- QArray<int> a = fib( 6 ); // get 6 first fibonaccis
- int i;
-
- for ( i=0; i<a.size(); i++ ) // print them
- prinf( "%d: %d\n", i, a[i] );
-
- printf( "1 is found %d time(s)\n", a.contains(1) );
- printf( "5 is found at index %d\n", a.find(5) );
- }
- \endcode
-
- Program output:
- \code
- 0: 1
- 1: 1
- 2: 2
- 3: 3
- 4: 5
- 5: 8
- 1 is found 2 times
- 5 is found at index 4
- \endcode
-
- Note about using QArray for manipulating structs or classes:
- Compilers will often pad the size of structs of odd sizes up to the
- nearest word boundary. This will then be the size QArray will use
- for its bitwise element comparisons. Since the remaining bytes will
- typically be uninitialized, this can cause find() etc. to fail to
- find the element. Example:
-
- \code
- struct MyStruct
- {
- short i; // 2 bytes
- char c; // 1 byte
- }; // sizeof(MyStruct) may be padded to 4 bytes
-
- QArray<MyStruct> a(1);
- a[0].i = 5;
- a[0].c = 't';
-
- MyStruct x;
- x.i = '5';
- x.c = 't';
- int i = a.find( x ); // May return -1 if the pad bytes differ
- \endcode
-
- To workaround this, make sure that you use a struct where sizeof()
- returns the same as the sum of the sizes of the members, either by
- changing the types of the struct members or by adding dummy members.
-
- \sa \link shclass.html Shared Classes\endlink
-*/
-
-
-/*!
- \fn QArray::QArray()
- Constructs a null array.
- \sa isNull()
-*/
-
-/*!
- \fn QArray::QArray( int size )
- Constructs an array with room for \e size elements.
- Makes a null array if \e size == 0.
-
- Note that the elements are not initialized.
-
- \sa resize(), isNull()
-*/
-
-/*!
- \fn QArray::QArray( const QArray<type> &a )
- Constructs a shallow copy of \e a.
- \sa assign()
-*/
-
-/*!
- \fn QArray::QArray( int, int )
- Constructs an array <em>without allocating</em> array space.
- The arguments should be (0, 0). Use at own risk.
-*/
-
-/*!
- \fn QArray::~QArray()
- Dereferences the array data and deletes it if this was the last
- reference.
-*/
-
-/*!
- \fn QArray<type> &QArray::operator=( const QArray<type> &a )
- Assigns a shallow copy of \e a to this array and returns a reference
- to this array.
-
- Equivalent to assign( a ).
-*/
-
-/*!
- \fn type *QArray::data() const
- Returns a pointer to the actual array data.
-
- The array is a null array if data() == 0 (null pointer).
-
- \sa isNull()
-*/
-
-/*!
- \fn uint QArray::nrefs() const
- Returns the reference count for the shared array data. This reference count
- is always greater than zero.
-*/
-
-/*!
- \fn uint QArray::size() const
- Returns the size of the array (max number of elements).
-
- The array is a null array if size() == 0.
-
- \sa isNull(), resize()
-*/
-
-/*!
- \fn uint QArray::count() const
- Returns the same as size().
-
- \sa size()
-*/
-
-/*!
- \fn bool QArray::isEmpty() const
- Returns TRUE if the array is empty, i.e. size() == 0, otherwise FALSE.
-
- isEmpty() is equivalent with isNull() for QArray. Note that this is not
- the case for QCString::isEmpty().
-*/
-
-/*!
- \fn bool QArray::isNull() const
- Returns TRUE if the array is null, otherwise FALSE.
-
- A null array has size() == 0 and data() == 0.
-*/
-
-/*!
- \fn bool QArray::resize( uint size )
- Resizes (expands or shrinks) the array to \e size elements. The array
- becomes a null array if \e size == 0.
-
- Returns TRUE if successful, or FALSE if the memory cannot be allocated.
-
- New elements will not be initialized.
-
- \sa size()
-*/
-
-/*!
- \fn bool QArray::truncate( uint pos )
- Truncates the array at position \e pos.
-
- Returns TRUE if successful, or FALSE if the memory cannot be allocated.
-
- Equivalent to resize(\e pos).
-
- \sa resize()
-*/
-
-/*!
- \fn bool QArray::fill( const type &v, int size )
- Fills the array with the value \e v. If \e size is specified as different
- from -1, then the array will be resized before filled.
-
- Returns TRUE if successful, or FALSE if the memory cannot be allocated
- (only when \e size != -1).
-
- \sa resize()
-*/
-
-/*!
- \fn void QArray::detach()
- Detaches this array from shared array data, i.e. makes a private, deep
- copy of the data.
-
- Copying will only be performed if the
- \link nrefs() reference count\endlink is greater than one.
-
- \sa copy()
-*/
-
-/*!
- \fn QArray<type> QArray::copy() const
- Returns a deep copy of this array.
- \sa detach(), duplicate()
-*/
-
-/*!
- \fn QArray<type> &QArray::assign( const QArray<type> &a )
- Shallow copy. Dereferences the current array and references the data
- contained in \e a instead. Returns a reference to this array.
- \sa operator=()
-*/
-
-/*!
- \fn QArray<type> &QArray::assign( const type *data, uint size )
- Shallow copy. Dereferences the current array and references the
- array data \e data, which contains \e size elements.
- Returns a reference to this array.
-
- Do not delete \e data later, QArray takes care of that.
-*/
-
-/*!
- \fn QArray<type> &QArray::duplicate( const QArray<type> &a )
- Deep copy. Dereferences the current array and obtains a copy of the data
- contained in \e a instead. Returns a reference to this array.
- \sa copy()
-*/
-
-/*!
- \fn QArray<type> &QArray::duplicate( const type *data, uint size )
- Deep copy. Dereferences the current array and obtains a copy of the
- array data \e data instead. Returns a reference to this array.
- \sa copy()
-*/
-
-/*!
- \fn QArray<type> &QArray::setRawData( const type *data, uint size )
-
- Sets raw data and returns a reference to the array.
-
- Dereferences the current array and sets the new array data to \e data and
- the new array size to \e size. Do not attempt to resize or re-assign the
- array data when raw data has been set.
- Call resetRawData(d,len) to reset the array.
-
- Setting raw data is useful because it sets QArray data without allocating
- memory or copying data.
-
- Example I (intended use):
- \code
- static char bindata[] = { 231, 1, 44, ... };
- QByteArray a;
- a.setRawData( bindata, sizeof(bindata) ); // a points to bindata
- QDataStream s( a, IO_ReadOnly ); // open on a's data
- s >> <something>; // read raw bindata
- a.resetRawData( bindata, sizeof(bindata) ); // finished
- \endcode
-
- Example II (you don't want to do this):
- \code
- static char bindata[] = { 231, 1, 44, ... };
- QByteArray a, b;
- a.setRawData( bindata, sizeof(bindata) ); // a points to bindata
- a.resize( 8 ); // will crash
- b = a; // will crash
- a[2] = 123; // might crash
- // forget to resetRawData - will crash
- \endcode
-
- \warning If you do not call resetRawData(), QArray will attempt to
- deallocate or reallocate the raw data, which might not be too good.
- Be careful.
-
- \sa resetRawData()
-*/
-
-/*!
- \fn void QArray::resetRawData( const type *data, uint size )
- Resets raw data that was set using setRawData().
-
- The arguments must be the data and length that were passed to
- setRawData(). This is for consistency checking.
-
- \sa setRawData()
-*/
-
-/*!
- \fn int QArray::find( const type &v, uint index ) const
- Finds the first occurrence of \e v, starting at position \e index.
-
- Returns the position of \e v, or -1 if \e v could not be found.
-
- \sa contains()
-*/
-
-/*!
- \fn int QArray::contains( const type &v ) const
- Returns the number of times \e v occurs in the array.
- \sa find()
-*/
-
-/*!
- \fn void QArray::sort()
- Sorts the array elements in ascending order, using bitwise
- comparison (memcmp()).
-
- \sa bsearch()
-*/
-
-/*!
- \fn int QArray::bsearch( const type &v ) const
- In a sorted array, finds the first occurrence of \e v using binary
- search. For a sorted array, this is generally much faster than
- find(), which does a linear search.
-
- Returns the position of \e v, or -1 if \e v could not be found.
-
- \sa sort(), find()
-*/
-
-/*!
- \fn type &QArray::operator[]( int index ) const
- Returns a reference to the element at position \e index in the array.
-
- This can be used to both read and set an element. Equivalent to at().
-
- \sa at()
-*/
-
-/*!
- \fn type &QArray::at( uint index ) const
- Returns a reference to the element at position \e index in the array.
-
- This can be used to both read and set an element.
-
- \sa operator[]()
-*/
-
-/*!
- \fn QArray::operator const type *() const
- Cast operator. Returns a pointer to the array.
- \sa data()
-*/
-
-/*!
- \fn bool QArray::operator==( const QArray<type> &a ) const
- Returns TRUE if this array is equal to \e a, otherwise FALSE.
-
- The two arrays are bitwise compared.
-
- \sa operator!=()
-*/
-
-/*!
- \fn bool QArray::operator!=( const QArray<type> &a ) const
- Returns TRUE if this array is different from \e a, otherwise FALSE.
-
- The two arrays are bitwise compared.
-
- \sa operator==()
-*/
-
-/*!
- \fn Iterator QArray::begin()
- Returns an iterator pointing at the beginning of this array.
- This iterator can be used as the iterators of QValueList and QMap
- for example. In fact it does not only behave like a usual pointer:
- It is a pointer.
-*/
-
-/*!
- \fn Iterator QArray::end()
- Returns an iterator pointing behind the last element of this array.
- This iterator can be used as the iterators of QValueList and QMap
- for example. In fact it does not only behave like a usual pointer:
- It is a pointer.
-*/
-
-/*!
- \fn ConstIterator QArray::begin() const
- Returns a const iterator pointing at the beginning of this array.
- This iterator can be used as the iterators of QValueList and QMap
- for example. In fact it does not only behave like a usual pointer:
- It is a pointer.
-*/
-
-/*!
- \fn ConstIterator QArray::end() const
- Returns a const iterator pointing behind the last element of this array.
- This iterator can be used as the iterators of QValueList and QMap
- for example. In fact it does not only behave like a usual pointer:
- It is a pointer.
-*/
-
-
-/*****************************************************************************
- QByteArray documentation
- *****************************************************************************/
-
-/*!
- \class QByteArray qcstring.h
- \brief The QByteArray class provides an array of bytes.
-
- \inherit QArray
-
- \ingroup tools
-
- The QByteArray class provides an explicitly shared array of
- bytes. It is useful for manipulating memory areas with custom
- data. QByteArray is implemented as QArray<char>. See the QArray
- documentation for further information.
-*/
diff --git a/qtools/qarray.h b/qtools/qarray.h
deleted file mode 100644
index 3d67fe9..0000000
--- a/qtools/qarray.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QArray template/macro class
-**
-** Created : 930906
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QARRAY_H
-#define QARRAY_H
-
-#ifndef QT_H
-#include "qgarray.h"
-#endif // QT_H
-
-
-template<class type> class Q_EXPORT QArray : public QGArray
-{
-public:
- typedef type* Iterator;
- typedef const type* ConstIterator;
- typedef type ValueType;
-
-protected:
- QArray( int, int ) : QGArray( 0, 0 ) {}
-
-public:
- QArray() {}
- QArray( int size ) : QGArray(size*(int)sizeof(type)) {}
- QArray( const QArray<type> &a ) : QGArray(a) {}
- ~QArray() {}
- QArray<type> &operator=(const QArray<type> &a)
- { return (QArray<type>&)QGArray::assign(a); }
- type *data() const { return (type *)QGArray::data(); }
- uint nrefs() const { return QGArray::nrefs(); }
- uint size() const { return QGArray::size()/(int)sizeof(type); }
- uint count() const { return size(); }
- bool isEmpty() const { return QGArray::size() == 0; }
- bool isNull() const { return QGArray::data() == 0; }
- bool resize( uint size ) { return QGArray::resize(size*(int)sizeof(type)); }
- bool truncate( uint pos ) { return QGArray::resize(pos*(int)sizeof(type)); }
- bool fill( const type &d, int size = -1 )
- { return QGArray::fill((char*)&d,size,sizeof(type) ); }
- void detach() { QGArray::detach(); }
- QArray<type> copy() const
- { QArray<type> tmp; return tmp.duplicate(*this); }
- QArray<type>& assign( const QArray<type>& a )
- { return (QArray<type>&)QGArray::assign(a); }
- QArray<type>& assign( const type *a, uint n )
- { return (QArray<type>&)QGArray::assign((char*)a,n*sizeof(type)); }
- QArray<type>& duplicate( const QArray<type>& a )
- { return (QArray<type>&)QGArray::duplicate(a); }
- QArray<type>& duplicate( const type *a, uint n )
- { return (QArray<type>&)QGArray::duplicate((char*)a,n*sizeof(type)); }
- QArray<type>& setRawData( const type *a, uint n )
- { return (QArray<type>&)QGArray::setRawData((char*)a,
- n*sizeof(type)); }
- void resetRawData( const type *a, uint n )
- { QGArray::resetRawData((char*)a,n*sizeof(type)); }
- int find( const type &d, uint i=0 ) const
- { return QGArray::find((char*)&d,i,sizeof(type)); }
- int contains( const type &d ) const
- { return QGArray::contains((char*)&d,sizeof(type)); }
- void sort() { QGArray::sort(sizeof(type)); }
- int bsearch( const type &d ) const
- { return QGArray::bsearch((const char*)&d,sizeof(type)); }
- type& operator[]( int i ) const
- { return (type &)(*(type *)QGArray::at(i*(int)sizeof(type))); }
- type& at( uint i ) const
- { return (type &)(*(type *)QGArray::at(i*(int)sizeof(type))); }
- operator const type*() const { return (const type *)QGArray::data(); }
- bool operator==( const QArray<type> &a ) const { return isEqual(a); }
- bool operator!=( const QArray<type> &a ) const { return !isEqual(a); }
- Iterator begin() { return data(); }
- Iterator end() { return data() + size(); }
- ConstIterator begin() const { return data(); }
- ConstIterator end() const { return data() + size(); }
-};
-
-
-#endif // QARRAY_H
diff --git a/qtools/qasciidict.h b/qtools/qasciidict.h
deleted file mode 100644
index 6a93a02..0000000
--- a/qtools/qasciidict.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QAsciiDict template class
-**
-** Created : 920821
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QASCIIDICT_H
-#define QASCIIDICT_H
-
-#ifndef QT_H
-#include "qgdict.h"
-#endif // QT_H
-
-
-template<class type> class Q_EXPORT QAsciiDict : public QGDict
-{
-public:
- QAsciiDict(uint size=17, bool caseSensitive=TRUE, bool copyKeys=TRUE )
- : QGDict(size,AsciiKey,caseSensitive,copyKeys) {}
- QAsciiDict( const QAsciiDict<type> &d ) : QGDict(d) {}
- ~QAsciiDict() { clear(); }
- QAsciiDict<type> &operator=(const QAsciiDict<type> &d)
- { return (QAsciiDict<type>&)QGDict::operator=(d); }
- uint count() const { return QGDict::count(); }
- uint size() const { return QGDict::size(); }
- bool isEmpty() const { return QGDict::count() == 0; }
-
- void insert( const char *k, const type *d )
- { QGDict::look_ascii(k,(Item)d,1); }
- void replace( const char *k, const type *d )
- { QGDict::look_ascii(k,(Item)d,2); }
- bool remove( const char *k ) { return QGDict::remove_ascii(k); }
- type *take( const char *k ) { return (type *)QGDict::take_ascii(k); }
- type *find( const char *k ) const
- { return (type *)((QGDict*)this)->QGDict::look_ascii(k,0,0); }
- type *operator[]( const char *k ) const
- { return (type *)((QGDict*)this)->QGDict::look_ascii(k,0,0); }
-
- void clear() { QGDict::clear(); }
- void resize( uint n ) { QGDict::resize(n); }
- void statistics() const { QGDict::statistics(); }
-private:
- void deleteItem( Item d );
-};
-
-#if defined(Q_DELETING_VOID_UNDEFINED)
-template<> inline void QAsciiDict<void>::deleteItem( Item )
-{
-}
-#endif
-
-template<class type> inline void QAsciiDict<type>::deleteItem( QCollection::Item d )
-{
- if ( del_item ) delete (type *)d;
-}
-
-
-template<class type> class Q_EXPORT QAsciiDictIterator : public QGDictIterator
-{
-public:
- QAsciiDictIterator(const QAsciiDict<type> &d)
- : QGDictIterator((QGDict &)d) {}
- ~QAsciiDictIterator() {}
- uint count() const { return dict->count(); }
- bool isEmpty() const { return dict->count() == 0; }
- type *toFirst() { return (type *)QGDictIterator::toFirst(); }
- operator type *() const { return (type *)QGDictIterator::get(); }
- type *current() const { return (type *)QGDictIterator::get(); }
- const char *currentKey() const { return QGDictIterator::getKeyAscii(); }
- type *operator()() { return (type *)QGDictIterator::operator()(); }
- type *operator++() { return (type *)QGDictIterator::operator++(); }
- type *operator+=(uint j) { return (type *)QGDictIterator::operator+=(j);}
-};
-
-
-#endif // QASCIIDICT_H
diff --git a/qtools/qbuffer.cpp b/qtools/qbuffer.cpp
deleted file mode 100644
index f68ef54..0000000
--- a/qtools/qbuffer.cpp
+++ /dev/null
@@ -1,465 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QBuffer class
-**
-** Created : 930812
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qbuffer.h"
-#include <stdlib.h>
-
-// REVISED: paul
-/*!
- \class QBuffer qbuffer.h
- \brief The QBuffer class is an I/O device that operates on a QByteArray
-
- \ingroup io
-
- QBuffer allows reading and writing a memory buffer. It is normally
- used together with a QTextStream or a QDataStream. QBuffer has an
- associated QByteArray which holds the buffer data. The size() of the
- buffer is automatically adjusted as data is written.
-
- The constructor \c QBuffer(QByteArray) creates a QBuffer with an
- existing byte array. The byte array can also be set with setBuffer().
- Writing to the QBuffer will modify the original byte array, since
- QByteArray is \link shclass.html explicitly shared.\endlink
-
- Use open() to open the buffer before use, and to set the mode
- (read-only,write-only, etc.). close() closes the buffer. The buffer
- must be closed before reopening or calling setBuffer().
-
- The common way to use QBuffer is through \l QDataStream or \l QTextStream
- which have constructors that take a QBuffer parameter. For
- convenience, there are also QDataStream and QTextStream constructors
- that take a QByteArray parameter. These constructors create and open
- an internal QBuffer.
-
- Note that QTextStream can also operate on a QString (a Unicode
- string); a QBuffer cannot.
-
- You can also use QBuffer directly through the standard QIODevice
- functions readBlock(), writeBlock() readLine(), at(), getch(), putch() and
- ungetch().
-
- \sa QFile, QDataStream, QTextStream, QByteArray, \link shclass.html Shared Classes\endlink
-*/
-
-
-/*!
- Constructs an empty buffer.
-*/
-
-QBuffer::QBuffer()
-{
- setFlags( IO_Direct );
- a_inc = 16; // initial increment
- a_len = 0;
- ioIndex = 0;
-}
-
-
-/*!
- Constructs a buffer that operates on \a buf.
- If you open the buffer in write mode (\c IO_WriteOnly or
- \c IO_ReadWrite) and write something into the buffer, \a buf
- will be modified.
-
-
- Example:
- \code
- QCString str = "abc";
- QBuffer b( str );
- b.open( IO_WriteOnly );
- b.at( 3 ); // position at \0
- b.writeBlock( "def", 4 ); // write including \0
- b.close();
- // Now, str == "abcdef"
- \endcode
-
-
- \sa setBuffer()
-*/
-
-QBuffer::QBuffer( QByteArray buf ) : a(buf)
-{
- setFlags( IO_Direct );
- a_len = a.size();
- a_inc = (a_len > 512) ? 512 : a_len; // initial increment
- if ( a_inc < 16 )
- a_inc = 16;
- ioIndex = 0;
-}
-
-/*!
- Destructs the buffer.
-*/
-
-QBuffer::~QBuffer()
-{
-}
-
-
-/*!
- Replaces the buffer's contents with \a buf.
-
- This may not be done when isOpen() is TRUE.
-
- Note that if you open the buffer in write mode (\c IO_WriteOnly or
- IO_ReadWrite) and write something into the buffer, \a buf is also
- modified because QByteArray is an explicitly shared class.
-
- \sa buffer(), open(), close()
-*/
-
-bool QBuffer::setBuffer( QByteArray buf )
-{
- if ( isOpen() ) {
-#if defined(CHECK_STATE)
- qWarning( "QBuffer::setBuffer: Buffer is open");
-#endif
- return FALSE;
- }
- a = buf;
- a_len = a.size();
- a_inc = (a_len > 512) ? 512 : a_len; // initial increment
- if ( a_inc < 16 )
- a_inc = 16;
- ioIndex = 0;
- return TRUE;
-}
-
-/*!
- \fn QByteArray QBuffer::buffer() const
-
- Returns this buffer's byte array.
-
- \sa setBuffer()
-*/
-
-/*!
- \reimp
- Opens the buffer in the mode \a m. Returns TRUE if successful,
- otherwise FALSE. The buffer must be opened before use.
-
- The mode parameter \a m must be a combination of the following flags.
- <ul>
- <li>\c IO_ReadOnly opens a buffer in read-only mode.
- <li>\c IO_WriteOnly opens a buffer in write-only mode.
- <li>\c IO_ReadWrite opens a buffer in read/write mode.
- <li>\c IO_Append sets the buffer index to the end of the buffer.
- <li>\c IO_Truncate truncates the buffer.
- </ul>
-
- \sa close(), isOpen()
-*/
-
-bool QBuffer::open( int m )
-{
- if ( isOpen() ) { // buffer already open
-#if defined(CHECK_STATE)
- qWarning( "QBuffer::open: Buffer already open" );
-#endif
- return FALSE;
- }
- setMode( m );
- if ( m & IO_Truncate ) { // truncate buffer
- a.resize( 0 );
- a_len = 0;
- }
- if ( m & IO_Append ) { // append to end of buffer
- ioIndex = a.size();
- } else {
- ioIndex = 0;
- }
- a_inc = 16;
- setState( IO_Open );
- setStatus( 0 );
- return TRUE;
-}
-
-/*!
- \reimp
- Closes an open buffer.
- \sa open()
-*/
-
-void QBuffer::close()
-{
- if ( isOpen() ) {
- setFlags( IO_Direct );
- ioIndex = 0;
- a_inc = 16;
- }
-}
-
-/*!
- \reimp
- The flush function does nothing for a QBuffer.
-*/
-
-void QBuffer::flush()
-{
- return;
-}
-
-
-/*!
- \fn int QBuffer::at() const
- \reimp
-*/
-
-/*!
- \fn uint QBuffer::size() const
- \reimp
-*/
-
-/*!
- \reimp
-*/
-
-bool QBuffer::at( int pos )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) {
- qWarning( "QBuffer::at: Buffer is not open" );
- return FALSE;
- }
-#endif
- if ( (uint)pos > a_len ) {
-#if defined(CHECK_RANGE)
- qWarning( "QBuffer::at: Index %d out of range", pos );
-#endif
- return FALSE;
- }
- ioIndex = pos;
- return TRUE;
-}
-
-
-/*!
- \reimp
-*/
-
-int QBuffer::readBlock( char *p, uint len )
-{
-#if defined(CHECK_STATE)
- CHECK_PTR( p );
- if ( !isOpen() ) { // buffer not open
- qWarning( "QBuffer::readBlock: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QBuffer::readBlock: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex + len > a.size() ) { // overflow
- if ( (uint)ioIndex >= a.size() ) {
- setStatus( IO_ReadError );
- return -1;
- } else {
- len = a.size() - (uint)ioIndex;
- }
- }
- memcpy( p, a.data()+ioIndex, len );
- ioIndex += len;
- return len;
-}
-
-/*!
- \reimp
-
- Writes \a len bytes from \a p into the buffer at the current index,
- overwriting any characters there and extending the buffer if necessary.
- Returns the number of bytes actually written.
-
- Returns -1 if a serious error occurred.
-
- \sa readBlock()
-*/
-
-int QBuffer::writeBlock( const char *p, uint len )
-{
-#if defined(CHECK_NULL)
- if ( p == 0 && len != 0 )
- qWarning( "QBuffer::writeBlock: Null pointer error" );
-#endif
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QBuffer::writeBlock: Buffer not open" );
- return -1;
- }
- if ( !isWritable() ) { // writing not permitted
- qWarning( "QBuffer::writeBlock: Write operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex + len >= a_len ) { // overflow
- uint new_len = a_len + a_inc*(((uint)ioIndex+len-a_len)/a_inc+1);
- if ( !a.resize( new_len ) ) { // could not resize
-#if defined(CHECK_NULL)
- qWarning( "QBuffer::writeBlock: Memory allocation error" );
-#endif
- setStatus( IO_ResourceError );
- return -1;
- }
- a_inc *= 2; // double increment
- a_len = new_len;
- a.shd->len = (uint)ioIndex + len;
- }
- memcpy( a.data()+ioIndex, p, len );
- ioIndex += len;
- if ( a.shd->len < (uint)ioIndex )
- a.shd->len = (uint)ioIndex; // fake (not alloc'd) length
- return len;
-}
-
-
-/*!
- \reimp
-*/
-
-int QBuffer::readLine( char *p, uint maxlen )
-{
-#if defined(CHECK_STATE)
- CHECK_PTR( p );
- if ( !isOpen() ) { // buffer not open
- qWarning( "QBuffer::readLine: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QBuffer::readLine: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( maxlen == 0 )
- return 0;
- uint start = (uint)ioIndex;
- char *d = a.data() + ioIndex;
- maxlen--; // make room for 0-terminator
- if ( a.size() - (uint)ioIndex < maxlen )
- maxlen = a.size() - (uint)ioIndex;
- while ( maxlen-- ) {
- if ( (*p++ = *d++) == '\n' )
- break;
- }
- *p = '\0';
- ioIndex = (int)(d - a.data());
- return (uint)ioIndex - start;
-}
-
-
-/*!
- \reimp
-*/
-
-int QBuffer::getch()
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QBuffer::getch: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QBuffer::getch: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex+1 > a.size() ) { // overflow
- setStatus( IO_ReadError );
- return -1;
- }
- return uchar(*(a.data()+ioIndex++));
-}
-
-/*!
- \reimp
- Writes the character \a ch into the buffer, overwriting
- the character at the current index, extending the buffer
- if necessary.
-
- Returns \a ch, or -1 if some error occurred.
-
- \sa getch(), ungetch()
-*/
-
-int QBuffer::putch( int ch )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QBuffer::putch: Buffer not open" );
- return -1;
- }
- if ( !isWritable() ) { // writing not permitted
- qWarning( "QBuffer::putch: Write operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex + 1 >= a_len ) { // overflow
- char buf[1];
- buf[0] = (char)ch;
- if ( writeBlock(buf,1) != 1 )
- return -1; // write error
- } else {
- *(a.data() + ioIndex++) = (char)ch;
- if ( a.shd->len < (uint)ioIndex )
- a.shd->len = (uint)ioIndex;
- }
- return ch;
-}
-
-/*!
- \reimp
-*/
-
-int QBuffer::ungetch( int ch )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QBuffer::ungetch: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QBuffer::ungetch: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( ch != -1 ) {
- if ( ioIndex )
- ioIndex--;
- else
- ch = -1;
- }
- return ch;
-}
diff --git a/qtools/qbuffer.h b/qtools/qbuffer.h
deleted file mode 100644
index 9dcd286..0000000
--- a/qtools/qbuffer.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QBuffer class
-**
-** Created : 930812
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QBUFFER_H
-#define QBUFFER_H
-
-#ifndef QT_H
-#include "qiodevice.h"
-#include "qstring.h"
-#endif // QT_H
-
-
-class Q_EXPORT QBuffer : public QIODevice
-{
-public:
- QBuffer();
- QBuffer( QByteArray );
- ~QBuffer();
-
- QByteArray buffer() const;
- bool setBuffer( QByteArray );
-
- bool open( int );
- void close();
- void flush();
-
- uint size() const;
- int at() const;
- bool at( int );
-
- int readBlock( char *p, uint );
- int writeBlock( const char *p, uint );
- int readLine( char *p, uint );
-
- int getch();
- int putch( int );
- int ungetch( int );
-
-protected:
- QByteArray a;
-
-private:
- uint a_len;
- uint a_inc;
-
-private: // Disabled copy constructor and operator=
-#if defined(Q_DISABLE_COPY)
- QBuffer( const QBuffer & );
- QBuffer &operator=( const QBuffer & );
-#endif
-};
-
-
-inline QByteArray QBuffer::buffer() const
-{ return a; }
-
-inline uint QBuffer::size() const
-{ return a.size(); }
-
-inline int QBuffer::at() const
-{ return ioIndex; }
-
-
-#endif // QBUFFER_H
diff --git a/qtools/qcollection.cpp b/qtools/qcollection.cpp
deleted file mode 100644
index 4f86227..0000000
--- a/qtools/qcollection.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of base class for all collection classes
-**
-** Created : 920820
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qcollection.h"
-
-// NOT REVISED
-/*!
- \class QCollection qcollection.h
- \brief The QCollection class is the base class of all Qt collections.
-
- \ingroup collection
- \ingroup tools
-
- The QCollection class is an abstract base class for the Qt \link
- collection.html collection classes\endlink QDict, QList etc. via QGDict,
- QGList etc.
-
- A QCollection knows only about the number of objects in the
- collection and the deletion strategy (see setAutoDelete()).
-
- A collection is implemented using the \c Item (generic collection
- item) type, which is a \c void*. The template classes that create
- the real collections cast the \c Item to the required type.
-
- \sa \link collection.html Collection Classes\endlink
-*/
-
-
-/*! \typedef QCollection::Item
-
- This type is the generic "item" in a QCollection.
-*/
-
-
-/*!
- \fn QCollection::QCollection()
-
- Constructs a collection. The constructor is protected because
- QCollection is an abstract class.
-*/
-
-/*!
- \fn QCollection::QCollection( const QCollection & source )
-
- Constructs a copy of \a source with autoDelete() set to FALSE. The
- constructor is protected because QCollection is an abstract class.
-
- Note that if \a source has autoDelete turned on, copying it is a
- good way to get memory leaks, reading freed memory, or both.
-*/
-
-/*!
- \fn QCollection::~QCollection()
- Destroys the collection. The destructor is protected because QCollection
- is an abstract class.
-*/
-
-
-/*!
- \fn bool QCollection::autoDelete() const
- Returns the setting of the auto-delete option (default is FALSE).
- \sa setAutoDelete()
-*/
-
-/*!
- \fn void QCollection::setAutoDelete( bool enable )
-
- Sets the auto-delete option of the collection.
-
- Enabling auto-delete (\e enable is TRUE) will delete objects that
- are removed from the collection. This can be useful if the
- collection has the only reference to the objects. (Note that the
- object can still be copied using the copy constructor - copying such
- objects is a good way to get memory leaks, reading freed memory or
- both.)
-
- Disabling auto-delete (\e enable is FALSE) will \e not delete objects
- that are removed from the collection. This is useful if the objects
- are part of many collections.
-
- The default setting is FALSE.
-
- \sa autoDelete()
-*/
-
-
-/*!
- \fn virtual uint QCollection::count() const
- Returns the number of objects in the collection.
-*/
-
-/*!
- \fn virtual void QCollection::clear()
- Removes all objects from the collection. The objects will be deleted
- if auto-delete has been enabled.
- \sa setAutoDelete()
-*/
-
-
-/*!
- Virtual function that creates a copy of an object that is about to
- be inserted into the collection.
-
- The default implementation returns the \e d pointer, i.e. no copy
- is made.
-
- This function is seldom reimplemented in the collection template
- classes. It is not common practice to make a copy of something
- that is being inserted.
-
- \sa deleteItem()
-*/
-
-QCollection::Item QCollection::newItem( Item d )
-{
- return d; // just return reference
-}
-
-/*!
- Virtual function that deletes an item that is about to be removed from
- the collection.
-
- The default implementation deletes \e d pointer if and only if
- auto-delete has been enabled.
-
- This function is always reimplemented in the collection template
- classes.
-
- \warning If you reimplement this function you must also reimplement
- the destructor and call the virtual function clear() from your
- destructor. This is due to the way virtual functions and
- destructors work in C++: virtual functions in derived classes cannot
- be called from a destructor. If you do not do this your
- deleteItem() function will not be called when the container is
- destructed.
-
- \sa newItem(), setAutoDelete()
-*/
-
-void QCollection::deleteItem( Item d )
-{
- if ( del_item )
-#if defined(Q_DELETING_VOID_UNDEFINED)
- delete (char *)d; // default operation
-#else
- delete d; // default operation
-#endif
-}
diff --git a/qtools/qcollection.h b/qtools/qcollection.h
deleted file mode 100644
index c187569..0000000
--- a/qtools/qcollection.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of base class for all collection classes
-**
-** Created : 920629
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QCOLLECTION_H
-#define QCOLLECTION_H
-
-#ifndef QT_H
-#include "qglobal.h"
-#endif // QT_H
-
-
-class QGList;
-class QGDict;
-
-
-class Q_EXPORT QCollection // inherited by all collections
-{
-public:
- bool autoDelete() const { return del_item; }
- void setAutoDelete( bool enable ) { del_item = enable; }
-
- virtual uint count() const = 0;
- virtual void clear() = 0; // delete all objects
-
- typedef void *Item; // generic collection item
-
-protected:
- QCollection() { del_item = FALSE; } // no deletion of objects
- QCollection(const QCollection &) { del_item = FALSE; }
- virtual ~QCollection() {}
-
- bool del_item; // default FALSE
-
- virtual Item newItem( Item ); // create object
- virtual void deleteItem( Item ); // delete object
-};
-
-
-#endif // QCOLLECTION_H
diff --git a/qtools/qconfig.h b/qtools/qconfig.h
deleted file mode 100644
index 7a880f9..0000000
--- a/qtools/qconfig.h
+++ /dev/null
@@ -1 +0,0 @@
-// Everything
diff --git a/qtools/qcstring.cpp b/qtools/qcstring.cpp
deleted file mode 100644
index da7a46f..0000000
--- a/qtools/qcstring.cpp
+++ /dev/null
@@ -1,686 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#include "qcstring.h"
-#include "qgstring.h"
-
-#include <qstring.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <qregexp.h>
-#include <qdatastream.h>
-
-QCString &QCString::sprintf( const char *format, ... )
-{
- va_list ap;
- va_start( ap, format );
- const int minlen=256;
- int l = length();
- if (l<minlen) { resize(minlen); l=minlen; }
- int n=vsnprintf( rawData(), l, format, ap);
- if (n<0) n=l;
- resize(n+1);
- va_end( ap );
- return *this;
-}
-
-int QCString::find( char c, int index, bool cs ) const
-{
- if (index<0 || index>=(int)length()) return -1; // index outside string
- const char *pos;
- if (cs)
- {
- pos = strchr(data()+index,c);
- }
- else
- {
- pos = data()+index;
- c = tolower((unsigned char)c);
- while (*pos && tolower((unsigned char)*pos)!=c) pos++;
- if (!*pos && c) pos=0; // not found
- }
- return pos ? (int)(pos - data()) : -1;
-}
-
-int QCString::find( const char *str, int index, bool cs ) const
-{
- int l = length();
- if (index<0 || index>=l) return -1; // index outside string
- if (!str) return -1; // no string to search for
- if (!*str) return index; // empty string matching at index
- const char *pos;
- if (cs) // case sensitive
- {
- pos = strstr(data()+index,str);
- }
- else // case insensitive
- {
- pos = data();
- int len = qstrlen(str);
- while (*pos)
- {
- if (qstrnicmp(pos,str,len)==0) break;
- pos++;
- }
- if (!*pos) pos = 0; // not found
- }
- return pos ? (int)(pos - data()) : -1;
-}
-
-int QCString::find( const QCString &str, int index, bool cs ) const
-{
- return find(str.data(),index,cs);
-}
-
-int QCString::find( const QRegExp &rx, int index ) const
-{
- if ( index < 0 )
- index += length();
- return rx.match( data(), index );
-}
-
-int QCString::findRev( char c, int index, bool cs) const
-{
- const char *b = data();
- const char *pos;
- int len = length();
- if (len==0) return -1; // empty string
- if (index<0) // start from end
- {
- if (cs)
- {
- pos = strrchr(b,c);
- return pos ? (int)(pos - b) : -1;
- }
- index=len;
- }
- else if (index>len) // bad index
- {
- return -1;
- }
- pos = b+index;
- if (cs)
- {
- while ( pos>=b && *pos!=c) pos--;
- }
- else
- {
- c = tolower((unsigned char)c);
- while ( pos>=b && tolower((unsigned char)*pos)!=c) pos--;
- }
- return pos>=b ? (int)(pos - b) : -1;
-}
-
-int QCString::findRev( const char *str, int index, bool cs) const
-{
- int slen = qstrlen(str);
- int len = length();
- if (index<0) index = len-slen; // start from end
- else if (index>len) return -1; // bad index
- else if (index+slen>len) index=len-slen; // str would be too long
- if (index<0) return -1; // no match possible
- const char *pos = data()+index;
- if (cs) // case sensitive
- {
- for (int i=index; i>=0; i--) if (qstrncmp(pos--,str,slen)==0) return i;
- }
- else // case insensitive
- {
- for (int i=index; i>=0; i--) if (qstrnicmp(pos,str,slen)==0) return i;
- }
- return -1;
-}
-
-int QCString::findRev( const QRegExp &rx, int index ) const
-{
- if ( index < 0 ) // neg index ==> start from end
- index += length();
- if ( (uint)index > length() ) // bad index
- return -1;
- while( index >= 0 ) {
- if ( rx.match( data(), index ) == index )
- return index;
- index--;
- }
- return -1;
-}
-
-int QCString::contains( char c, bool cs ) const
-{
- if (length()==0) return 0;
- int count=0;
- const char *pos = data();
- if (cs)
- {
- while (*pos) if (*pos++ == c) count++;
- }
- else
- {
- c = tolower((unsigned char)c);
- while (*pos)
- {
- if (tolower((unsigned char)*pos)==c) count++;
- pos++;
- }
- }
- return count;
-}
-
-int QCString::contains( const char *str, bool cs ) const
-{
- if (str==0 || length()==0) return 0;
- int count=0;
- const char *pos = data();
- int len = qstrlen(str);
- while (*pos)
- {
- if (cs)
- {
- if (qstrncmp(pos,str,len)==0) count++;
- }
- else
- {
- if (qstrnicmp(pos,str,len)==0) count++;
- }
- pos++;
- }
- return count;
-}
-
-int QCString::contains( const QRegExp &rx ) const
-{
- if ( isEmpty() )
- return rx.match( data() ) < 0 ? 0 : 1;
- int count = 0;
- int index = -1;
- int len = length();
- while ( index < len-1 ) { // count overlapping matches
- index = rx.match( data(), index+1 );
- if ( index < 0 )
- break;
- count++;
- }
- return count;
-}
-
-
-QCString QCString::simplifyWhiteSpace() const
-{
- if ( isEmpty() ) // nothing to do
- return *this;
-
- QCString result( length()+1 );
- const char *from = data();
- char *to = result.rawData();
- char *first = to;
- while ( TRUE )
- {
- while ( *from && isspace((uchar) *from) )
- from++;
- while ( *from && !isspace((uchar)*from) )
- *to++ = *from++;
- if ( *from )
- *to++ = 0x20; // ' '
- else
- break;
- }
- if ( to > first && *(to-1) == 0x20 )
- to--;
- *to = '\0';
- result.resize( (int)(to - result.data()) + 1 );
- return result;
-}
-
-QCString &QCString::replace( uint index, uint len, const char *s)
-{
- remove( index, len );
- insert( index, s );
- return *this;
-}
-
-QCString &QCString::replace( const QRegExp &rx, const char *str )
-{
- if ( isEmpty() )
- return *this;
- int index = 0;
- int slen = qstrlen(str);
- int len;
- while ( index < (int)length() ) {
- index = rx.match( data(), index, &len, FALSE );
- if ( index >= 0 ) {
- replace( index, len, str );
- index += slen;
- if ( !len )
- break; // Avoid infinite loop on 0-length matches, e.g. [a-z]*
- }
- else
- break;
- }
- return *this;
-}
-
-static bool ok_in_base( char c, int base )
-{
- if ( base <= 10 )
- return c>='0' && c<='9' && (c-'0') < base;
- else
- return (c>='0' && c<='9') ||
- (c >= 'a' && c < char('a'+base-10)) ||
- (c >= 'A' && c < char('A'+base-10));
-}
-
-short QCString::toShort(bool *ok, int base) const
-{
- long v = toLong( ok, base );
- if ( ok && *ok && (v < -32768 || v > 32767) ) {
- *ok = FALSE;
- v = 0;
- }
- return (short)v;
-}
-
-ushort QCString::toUShort(bool *ok,int base) const
-{
- ulong v = toULong( ok, base );
- if ( ok && *ok && (v > 65535) ) {
- *ok = FALSE;
- v = 0;
- }
- return (ushort)v;
-}
-
-int QCString::toInt(bool *ok, int base) const
-{
- return (int)toLong( ok, base );
-}
-
-uint QCString::toUInt(bool *ok,int base) const
-{
- return (uint)toULong( ok, base );
-}
-
-
-long QCString::toLong(bool *ok,int base) const
-{
- const char *p = data();
- long val=0;
- int l = length();
- const long max_mult = INT_MAX / base;
- bool is_ok = FALSE;
- int neg = 0;
- if ( !p )
- goto bye;
- while ( l && isspace(*p) ) // skip leading space
- l--,p++;
- if ( l && *p == '-' ) {
- l--;
- p++;
- neg = 1;
- } else if ( *p == '+' ) {
- l--;
- p++;
- }
-
- // NOTE: toULong() code is similar
- if ( !l || !ok_in_base(*p,base) )
- goto bye;
- while ( l && ok_in_base(*p,base) ) {
- l--;
- int dv;
- if ( *p>='0' && *p<='9' ) {
- dv = *p-'0';
- } else {
- if ( *p >= 'a' && *p <= 'z' )
- dv = *p - 'a' + 10;
- else
- dv = *p - 'A' + 10;
- }
- if ( val > max_mult || (val == max_mult && dv > (INT_MAX%base)+neg) )
- goto bye;
- val = base*val + dv;
- p++;
- }
- if ( neg )
- val = -val;
- while ( l && isspace(*p) ) // skip trailing space
- l--,p++;
- if ( !l )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-ulong QCString::toULong(bool *ok,int base) const
-{
- const char *p = data();
- ulong val=0;
- int l = length();
- const ulong max_mult = 429496729; // UINT_MAX/10, rounded down
- bool is_ok = FALSE;
- if ( !p )
- goto bye;
- while ( l && isspace(*p) ) // skip leading space
- l--,p++;
- if ( *p == '+' )
- l--,p++;
-
- // NOTE: toLong() code is similar
- if ( !l || !ok_in_base(*p,base) )
- goto bye;
- while ( l && ok_in_base(*p,base) ) {
- l--;
- uint dv;
- if ( *p>='0' && *p<='9' ) {
- dv = *p-'0';
- } else {
- if ( *p >= 'a' && *p <= 'z' )
- dv = *p - 'a' + 10;
- else
- dv = *p - 'A' + 10;
- }
- if ( val > max_mult || (val == max_mult && dv > (UINT_MAX%base)) )
- goto bye;
- val = base*val + dv;
- p++;
- }
-
- while ( l && isspace(*p) ) // skip trailing space
- l--,p++;
- if ( !l )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-uint64 QCString::toUInt64(bool *ok,int base) const
-{
- const char *p = data();
- uint64 val=0;
- int l = length();
- const uint64 max_mult = 1844674407370955161ULL; // ULLONG_MAX/10, rounded down
- bool is_ok = FALSE;
- if ( !p )
- goto bye;
- while ( l && isspace(*p) ) // skip leading space
- l--,p++;
- if ( *p == '+' )
- l--,p++;
-
- // NOTE: toULong() code is similar
- if ( !l || !ok_in_base(*p,base) )
- goto bye;
- while ( l && ok_in_base(*p,base) ) {
- l--;
- uint dv;
- if ( *p>='0' && *p<='9' ) {
- dv = *p-'0';
- } else {
- if ( *p >= 'a' && *p <= 'z' )
- dv = *p - 'a' + 10;
- else
- dv = *p - 'A' + 10;
- }
- if ( val > max_mult || (val == max_mult && dv > (ULLONG_MAX%base)) )
- goto bye;
- val = base*val + dv;
- p++;
- }
-
- while ( l && isspace(*p) ) // skip trailing space
- l--,p++;
- if ( !l )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-//-------------------------------------------------
-
-void *qmemmove( void *dst, const void *src, uint len )
-{
- char *d;
- char *s;
- if ( dst > src ) {
- d = (char *)dst + len - 1;
- s = (char *)src + len - 1;
- while ( len-- )
- *d-- = *s--;
- } else if ( dst < src ) {
- d = (char *)dst;
- s = (char *)src;
- while ( len-- )
- *d++ = *s++;
- }
- return dst;
-}
-
-char *qstrdup( const char *str )
-{
- if ( !str )
- return 0;
- char *dst = new char[qstrlen(str)+1];
- CHECK_PTR( dst );
- return strcpy( dst, str );
-}
-
-char *qstrncpy( char *dst, const char *src, uint len )
-{
- if ( !src )
- return 0;
- strncpy( dst, src, len );
- if ( len > 0 )
- dst[len-1] = '\0';
- return dst;
-}
-
-int qstricmp( const char *str1, const char *str2 )
-{
- const uchar *s1 = (const uchar *)str1;
- const uchar *s2 = (const uchar *)str2;
- int res;
- uchar c;
- if ( !s1 || !s2 )
- return s1 == s2 ? 0 : (int)(s2 - s1);
- for ( ; !(res = (c=tolower(*s1)) - tolower(*s2)); s1++, s2++ )
- if ( !c ) // strings are equal
- break;
- return res;
-}
-
-int qstrnicmp( const char *str1, const char *str2, uint len )
-{
- const uchar *s1 = (const uchar *)str1;
- const uchar *s2 = (const uchar *)str2;
- int res;
- uchar c;
- if ( !s1 || !s2 )
- return (int)(s2 - s1);
- for ( ; len--; s1++, s2++ ) {
- if ( (res = (c=tolower(*s1)) - tolower(*s2)) )
- return res;
- if ( !c ) // strings are equal
- break;
- }
- return 0;
-}
-
-#ifndef QT_NO_DATASTREAM
-
-QDataStream &operator<<( QDataStream &s, const QByteArray &a )
-{
- return s.writeBytes( a.data(), a.size() );
-}
-
-QDataStream &operator>>( QDataStream &s, QByteArray &a )
-{
- Q_UINT32 len;
- s >> len; // read size of array
- if ( len == 0 || s.eof() ) { // end of file reached
- a.resize( 0 );
- return s;
- }
- if ( !a.resize( (uint)len ) ) { // resize array
-#if defined(CHECK_NULL)
- qWarning( "QDataStream: Not enough memory to read QByteArray" );
-#endif
- len = 0;
- }
- if ( len > 0 ) // not null array
- s.readRawBytes( a.data(), (uint)len );
- return s;
-}
-
-QDataStream &operator<<( QDataStream &s, const QCString &str )
-{
- return s.writeBytes( str.data(), str.size() );
-}
-
-QDataStream &operator>>( QDataStream &s, QCString &str )
-{
- Q_UINT32 len;
- s >> len; // read size of string
- if ( len == 0 || s.eof() ) { // end of file reached
- str.resize( 0 );
- return s;
- }
- if ( !str.resize( (uint)len )) {// resize string
-#if defined(CHECK_NULL)
- qWarning( "QDataStream: Not enough memory to read QCString" );
-#endif
- len = 0;
- }
- if ( len > 0 ) // not null array
- s.readRawBytes( str.rawData(), (uint)len );
- return s;
-}
-
-#endif //QT_NO_DATASTREAM
-
-inline QCString operator+( const QCString &s1, const QGString &s2 )
-{
- return s1.str()+s2.data();
-}
-
-inline QCString operator+( const QGString &s1, const QCString &s2 )
-{
- return s1.data()+s2.str();
-}
-
-/// substitute all occurrences of \a src in \a s by \a dst
-QCString substitute(const QCString &s,const QCString &src,const QCString &dst)
-{
- if (s.isEmpty() || src.isEmpty()) return s;
- const char *p, *q;
- int srcLen = src.length();
- int dstLen = dst.length();
- int resLen;
- if (srcLen!=dstLen)
- {
- int count;
- for (count=0, p=s.data(); (q=strstr(p,src))!=0; p=q+srcLen) count++;
- resLen = s.length()+count*(dstLen-srcLen);
- }
- else // result has same size as s
- {
- resLen = s.length();
- }
- QCString result(resLen+1);
- char *r;
- for (r=result.rawData(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
- {
- int l = (int)(q-p);
- memcpy(r,p,l);
- r+=l;
-
- if (dst) memcpy(r,dst,dstLen);
- r+=dstLen;
- }
- if (r)
- {
- qstrcpy(r,p);
- }
- //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
- return result;
-}
-
-
-/// substitute all occurrences of \a src in \a s by \a dst, but skip
-/// each consecutive sequence of \a src where the number consecutive
-/// \a src matches \a skip_seq; if \a skip_seq is negative, skip any
-/// number of consecutive \a src
-QCString substitute(const QCString &s,const QCString &src,const QCString &dst,int skip_seq)
-{
- if (s.isEmpty() || src.isEmpty()) return s;
- const char *p, *q;
- int srcLen = src.length();
- int dstLen = dst.length();
- int resLen;
- if (srcLen!=dstLen)
- {
- int count;
- for (count=0, p=s.data(); (q=strstr(p,src))!=0; p=q+srcLen) count++;
- resLen = s.length()+count*(dstLen-srcLen);
- }
- else // result has same size as s
- {
- resLen = s.length();
- }
- QCString result(resLen+1);
- char *r;
- for (r=result.rawData(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
- {
- // search a consecutive sequence of src
- int seq = 0, skip = 0;
- if (skip_seq)
- {
- for (const char *n=q+srcLen; qstrncmp(n,src,srcLen)==0; seq=1+skip, n+=srcLen)
- ++skip; // number of consecutive src after the current one
-
- // verify the allowed number of consecutive src to skip
- if (skip_seq > 0 && skip_seq != seq)
- seq = skip = 0;
- }
-
- // skip a consecutive sequence of src when necessary
- int l = (int)((q + seq * srcLen)-p);
- memcpy(r,p,l);
- r+=l;
-
- if (skip)
- {
- // skip only the consecutive src found after the current one
- q += skip * srcLen;
- // the next loop will skip the current src, aka (p=q+srcLen)
- continue;
- }
-
- if (dst) memcpy(r,dst,dstLen);
- r+=dstLen;
- }
- qstrcpy(r,p);
- result.resize((int)strlen(result.data())+1);
- //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
- return result;
-}
-
diff --git a/qtools/qcstring.h b/qtools/qcstring.h
deleted file mode 100644
index 75bdf29..0000000
--- a/qtools/qcstring.h
+++ /dev/null
@@ -1,518 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 1997-2015 by Dimitri van Heesch.
-**
-** Permission to use, copy, modify, and distribute this software and its
-** documentation under the terms of the GNU General Public License is hereby
-** granted. No representations are made about the suitability of this software
-** for any purpose. It is provided "as is" without express or implied warranty.
-** See the GNU General Public License for more details.
-**
-** Note: this is a reimplementation of the qcstring.h that came with
-** an Qt version 2.2.3. For short strings it stores the string data inside
-** the object. For long strings it uses a separate array with reference counting.
-**
-**********************************************************************/
-
-#ifndef QCSTRING_H
-#define QCSTRING_H
-
-#ifndef QT_H
-#include "qarray.h"
-#endif // QT_H
-
-#include <string>
-#include <algorithm>
-
-#include <cctype>
-#include <cstring>
-#include <cstdio>
-#include <cstdlib>
-#include <cstdint>
-
-class QGString;
-
-/*****************************************************************************
- Safe and portable C string functions; extensions to standard string.h
- *****************************************************************************/
-
-void *qmemmove( void *dst, const void *src, uint len );
-
-#if defined(_OS_WIN32_)
-#define qsnprintf _snprintf
-#else
-#define qsnprintf snprintf
-#endif
-
-char *qstrdup( const char * );
-
-inline uint cstrlen( const char *str )
-{ return (uint)strlen(str); }
-
-inline uint qstrlen( const char *str )
-{ return str ? (uint)strlen(str) : 0; }
-
-inline char *cstrcpy( char *dst, const char *src )
-{ return strcpy(dst,src); }
-
-inline char *qstrcpy( char *dst, const char *src )
-{ return src ? strcpy(dst, src) : 0; }
-
-char * qstrncpy(char *dst,const char *src, uint len);
-
-inline int cstrcmp( const char *str1, const char *str2 )
-{ return strcmp(str1,str2); }
-
-inline int qstrcmp( const char *str1, const char *str2 )
-{ return (str1 && str2) ? strcmp(str1,str2) : (int)((intptr_t)str2 - (intptr_t)str1); }
-
-inline int cstrncmp( const char *str1, const char *str2, uint len )
-{ return strncmp(str1,str2,len); }
-
-inline int qstrncmp( const char *str1, const char *str2, uint len )
-{ return (str1 && str2) ? strncmp(str1,str2,len) :
- (int)((intptr_t)str2 - (intptr_t)str1); }
-
-int qstricmp( const char *str1, const char *str2 );
-
-int qstrnicmp( const char *str1, const char *str2, uint len );
-
-/*****************************************************************************
- QByteArray class
- *****************************************************************************/
-
-#if defined(Q_TEMPLATEDLL)
-template class QArray<char>;
-#endif
-typedef QArray<char> QByteArray;
-
-/*****************************************************************************
- QByteArray stream functions
- *****************************************************************************/
-#ifndef QT_NO_DATASTREAM
-QDataStream &operator<<( QDataStream &, const QByteArray & );
-QDataStream &operator>>( QDataStream &, QByteArray & );
-#endif
-
-class QRegExp;
-
-/** This is an alternative implementation of QCString. It provides basically
- * the same functions but uses std::string as the underlying string type
- */
-class QCString
-{
- public:
- QCString() = default;
- ~QCString() = default;
- QCString( const QCString &s ) = default;
- QCString &operator=( const QCString &s ) = default;
- QCString( QCString &&s ) = default;
- QCString &operator=( QCString &&s ) = default;
-
- QCString( const std::string &s ) : m_rep(s) {}
-
- /** creates a string with room for size characters
- * @param[in] size the number of character to allocate (also counting the 0-terminator!)
- */
- explicit QCString( uint size ) { m_rep.resize(size>0 ? size-1 : 0); }
-
- /** creates a string from a plain C string.
- * @param[in] str A zero terminated C string. When 0 an empty string is created.
- */
- QCString( const char *str ) : m_rep(str?str:"") {}
-
- /** creates a string from \a str and copies over the first \a maxlen characters. */
- QCString( const char *str, uint maxlen ) : m_rep(str?str:"") { m_rep.resize(maxlen); }
-
- /** replaces the contents by that of string \a s. */
-
- /** replaces the contents by that of C string \a str. */
- QCString &operator=( const char *str) { m_rep = str?str:""; return *this; }
-
- /** Returns TRUE iff the string is empty. Equivalent to isEmpty(). */
- bool isNull() const { return m_rep.empty(); }
-
- /** Returns TRUE iff the string is empty */
- bool isEmpty() const { return m_rep.empty(); }
-
- /** Returns the length of the string, not counting the 0-terminator. Equivalent to size(). */
- uint length() const { return (uint)m_rep.size(); }
-
- /** Returns the length of the string, not counting the 0-terminator. */
- uint size() const { return (uint)m_rep.size(); }
-
- /** Returns a pointer to the contents of the string in the form of a 0-terminated C string */
- const char *data() const { return m_rep.empty() ? 0 : m_rep.c_str(); }
-
- /** Returns a writable pointer to the data.
- * @warning if the string is shared it will modifying the string directly and
- * this will overwrite all copies as well!
- */
- char *rawData() const { return m_rep.empty() ? 0 : const_cast<char*>(&m_rep[0]); }
-
- /** Resizes the string to hold \a newlen characters
- * (this value should also count the 0-terminator).
- * If the string is enlarged the contents will
- * be left unmodified.
- */
- bool resize( uint newlen ) { m_rep.resize( newlen>0 ? newlen-1 : 0 ); return TRUE; }
-
- /** Truncates the string at position \a pos. */
- bool truncate( uint pos ) { return resize( pos + 1 ); }
-
- /** Fills a string with a predefined character
- * @param[in] c the character used to fill the string with.
- * @param[in] len the number of character to fill. Use -1 to fill the whole string.
- * @note the string will be resized to contain \a len characters. The contents of the
- * string will be lost.
- */
- bool fill( char c, int len = -1 )
- {
- int l = len==-1 ? (int)m_rep.size() : len;
- m_rep = std::string(l,c);
- return TRUE;
- }
-
- /** Returns a deep copy of the string. */
- QCString copy() const { return *this; }
-
- QCString &sprintf( const char *format, ... );
-
- int find( char c, int index=0, bool cs=TRUE ) const;
- int find( const char *str, int index=0, bool cs=TRUE ) const;
- int find( const QCString &str, int index=0, bool cs=TRUE ) const;
- int find( const QRegExp &rx, int index=0 ) const;
-
- int findRev( char c, int index=-1, bool cs=TRUE) const;
- int findRev( const char *str, int index=-1, bool cs=TRUE) const;
- int findRev( const QRegExp &rx, int index=-1 ) const;
-
- int contains( char c, bool cs=TRUE ) const;
- int contains( const char *str, bool cs=TRUE ) const;
- int contains( const QRegExp &rx ) const;
-
- bool stripPrefix(const char *prefix)
- {
- if (prefix==0 || m_rep.empty()) return FALSE;
- if (m_rep.rfind(prefix,0)==0) // string starts with prefix
- {
- m_rep.erase(0,qstrlen(prefix));
- return TRUE;
- }
- return FALSE;
- }
-
- QCString left( uint len ) const
- {
- return m_rep.empty() ? QCString() : QCString(m_rep.substr(0,len));
- }
-
- QCString right( uint len ) const
- {
- return m_rep.empty() ? QCString() :
- len<m_rep.size() ? QCString(m_rep.substr(m_rep.size()-len,len)) :
- *this;
- }
-
- QCString mid( uint index, uint len=(uint)-1) const
- {
- uint slen = (uint)m_rep.size();
- if (len==(uint)-1) len = slen-index;
- return m_rep.empty() || index>slen || len==0 ? QCString() :
- QCString(m_rep.substr(index,len));
- }
-
- QCString lower() const
- {
- std::string s = m_rep;
- std::transform(s.begin(),s.end(),s.begin(),
- [](unsigned char c){ return (unsigned char)std::tolower(c); });
- return s;
- }
-
- QCString upper() const
- {
- std::string s = m_rep;
- std::transform(s.begin(),s.end(),s.begin(),
- [](unsigned char c){ return (unsigned char)std::toupper(c); });
- return s;
- }
-
- QCString stripWhiteSpace() const
- {
- int sl = (uint)m_rep.size();
- if (sl==0 || (!std::isspace(m_rep[0]) && !std::isspace(m_rep[sl-1]))) return *this;
- int start=0,end=sl-1;
- while (start<sl && std::isspace(m_rep[start])) start++;
- if (start==sl) return QCString(); // only whitespace
- while (end>start && std::isspace(m_rep[end])) end--;
- return QCString(m_rep.substr(start,1+end-start));
- }
-
- QCString simplifyWhiteSpace() const;
-
- QCString &insert( uint index, const char *s )
- {
- uint len = s ? qstrlen(s) : 0;
- if (len>0)
- {
- uint ol = (uint)m_rep.size();
- if (index>ol) // insert beyond end of string and fill gap with spaces
- {
- m_rep.resize(index+len);
- std::memset(&m_rep[ol],' ',index-ol);
- std::memcpy(&m_rep[index],s,len+1);
- }
- else // insert inside the string
- {
- m_rep.insert(index,s);
- }
- }
- return *this;
- }
-
- QCString &insert( uint index, char c)
- {
- char s[2] = { c, '\0' };
- return insert(index,s);
- }
-
- QCString &append( const char *s )
- {
- return operator+=(s);
- }
-
- QCString &prepend( const char *s )
- {
- return insert(0,s);
- }
-
- QCString &remove( uint index, uint len )
- {
- uint ol = (uint)m_rep.size();
- if (index<ol && len>0) m_rep.erase(index,index+len>=ol ? std::string::npos : len);
- return *this;
- }
-
- QCString &replace( uint index, uint len, const char *s);
- QCString &replace( const QRegExp &rx, const char *str );
-
- short toShort( bool *ok=0, int base=10 ) const;
- ushort toUShort( bool *ok=0, int base=10 ) const;
- int toInt( bool *ok=0, int base=10 ) const;
- uint toUInt( bool *ok=0, int base=10 ) const;
- long toLong( bool *ok=0, int base=10 ) const;
- ulong toULong( bool *ok=0, int base=10 ) const;
- uint64 toUInt64( bool *ok=0, int base=10 ) const;
-
- QCString &setNum(short n)
- {
- m_rep = std::to_string(n);
- return *this;
- }
-
- QCString &setNum(ushort n)
- {
- m_rep = std::to_string(n);
- return *this;
- }
-
- QCString &setNum(int n)
- {
- m_rep = std::to_string(n);
- return *this;
- }
-
- QCString &setNum(uint n)
- {
- m_rep = std::to_string(n);
- return *this;
- }
-
- QCString &setNum(long n)
- {
- m_rep = std::to_string(n);
- return *this;
- }
-
- QCString &setNum(ulong n)
- {
- m_rep = std::to_string(n);
- return *this;
- }
-
- bool startsWith( const char *s ) const
- {
- if (m_rep.empty() || s==0) return s==0;
- return m_rep.rfind(s,0)==0; // looking "backward" starting and ending at index 0
- }
-
- /** Converts the string to a plain C string */
- operator const char *() const
- {
- return data();
- }
-
- std::string str() const
- {
- return m_rep;
- }
-
- /** Appends string \a str to this string and returns a reference to the result. */
- QCString &operator+=( const char *str )
- {
- if (str) m_rep+=str;
- return *this;
- }
-
- /** Appends character \a c to this string and returns a reference to the result. */
- QCString &operator+=( char c )
- {
- m_rep+=c;
- return *this;
- }
-
- /** Returns a reference to the character at index \a i. */
- char &at( uint i) const
- {
- return const_cast<char&>(m_rep[i]);
- }
-
- /** Indexing operator. Equivalent to at(). */
- char &operator[]( int i ) const
- {
- return const_cast<char&>(m_rep[i]);
- }
-
- private:
- std::string m_rep;
-};
-
-/*****************************************************************************
- QCString stream functions
- *****************************************************************************/
-#ifndef QT_NO_DATASTREAM
-QDataStream &operator<<( QDataStream &, const QCString & );
-QDataStream &operator>>( QDataStream &, QCString & );
-#endif
-
-/*****************************************************************************
- QCString non-member operators
- *****************************************************************************/
-
-inline bool operator==( const QCString &s1, const QCString &s2 )
-{ return qstrcmp(s1.data(),s2.data()) == 0; }
-
-inline bool operator==( const QCString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) == 0; }
-
-inline bool operator==( const char *s1, const QCString &s2 )
-{ return qstrcmp(s1,s2.data()) == 0; }
-
-inline bool operator!=( const QCString &s1, const QCString &s2 )
-{ return qstrcmp(s1.data(),s2.data()) != 0; }
-
-inline bool operator!=( const QCString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) != 0; }
-
-inline bool operator!=( const char *s1, const QCString &s2 )
-{ return qstrcmp(s1,s2.data()) != 0; }
-
-inline bool operator<( const QCString &s1, const QCString& s2 )
-{ return qstrcmp(s1.data(),s2.data()) < 0; }
-
-inline bool operator<( const QCString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) < 0; }
-
-inline bool operator<( const char *s1, const QCString &s2 )
-{ return qstrcmp(s1,s2.data()) < 0; }
-
-inline bool operator<=( const QCString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) <= 0; }
-
-inline bool operator<=( const char *s1, const QCString &s2 )
-{ return qstrcmp(s1,s2.data()) <= 0; }
-
-inline bool operator>( const QCString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) > 0; }
-
-inline bool operator>( const char *s1, const QCString &s2 )
-{ return qstrcmp(s1,s2.data()) > 0; }
-
-inline bool operator>=( const QCString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) >= 0; }
-
-inline bool operator>=( const char *s1, const QCString &s2 )
-{ return qstrcmp(s1,s2.data()) >= 0; }
-
-inline QCString operator+( const QCString &s1, const QCString &s2 )
-{
- return QCString(s1.str()+s2.str());
-}
-
-
-inline QCString operator+( const QCString &s1, const QGString &s2 );
-inline QCString operator+( const QGString &s1, const QCString &s2 );
-
-
-inline QCString operator+( const QCString &s1, const char *s2 )
-{
- QCString tmp(s1);
- tmp += s2;
- return tmp;
-}
-
-inline QCString operator+( const char *s1, const QCString &s2 )
-{
- QCString tmp(s1);
- tmp += s2;
- return tmp;
-}
-
-inline QCString operator+( const QCString &s1, char c2 )
-{
- QCString tmp( s1.data() );
- tmp += c2;
- return tmp;
-}
-
-inline QCString operator+( char c1, const QCString &s2 )
-{
- QCString tmp;
- tmp += c1;
- tmp += s2;
- return tmp;
-}
-
-inline const char *qPrint(const char *s)
-{
- if (s) return s; else return "";
-}
-
-inline const char *qPrint(const QCString &s)
-{
- if (!s.isEmpty()) return s.data(); else return "";
-}
-
-inline const char *qPrint(const std::string &s)
-{
- return s.c_str();
-}
-
-inline std::string toStdString(const QCString &s)
-{
- return s.str();
-}
-
-// helper functions
-QCString substitute(const QCString &str,const QCString &find,const QCString &replace);
-QCString substitute(const QCString &s,const QCString &src,const QCString &dst,int skip_seq);
-
-inline QCString substitute(const QCString &s,char srcChar,char dstChar)
-{
- std::string ss = s.str();
- std::replace(ss.begin(),ss.end(),srcChar,dstChar);
- return ss;
-}
-
-#endif // QCSTRING_H
diff --git a/qtools/qcstringlist.cpp b/qtools/qcstringlist.cpp
deleted file mode 100644
index 4bb231d..0000000
--- a/qtools/qcstringlist.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 1997-2018 by Dimitri van Heesch.
-**
-** Permission to use, copy, modify, and distribute this software and its
-** documentation under the terms of the GNU General Public License is hereby
-** granted. No representations are made about the suitability of this software
-** for any purpose. It is provided "as is" without express or implied warranty.
-** See the GNU General Public License for more details.
-**
-** Implementation of QCStringList
-**
-**********************************************************************/
-
-#include "qcstringlist.h"
-
-#include "qstrlist.h"
-#include "qdatastream.h"
-#include "qtl.h"
-
-/*!
- Splits the string \a str using \a sep as separator. Returns the
- list of strings. If \a allowEmptyEntries is TRUE, also empty
- entries are inserted into the list, else not. So if you have
- a string 'abc..d.e.', a list which contains 'abc', 'd', and 'e'
- would be returned if \a allowEmptyEntries is FALSE, but
- a list containing 'abc', '', 'd', 'e' and '' would be returned if
- \a allowEmptyEntries is TRUE.
- If \a str doesn't contain \a sep, a stringlist
- with one item, which is the same as \a str, is returned.
-
- \sa join()
-*/
-
-QCStringList QCStringList::split( char sep, const QCString &str, bool allowEmptyEntries )
-{
- char cs[2] = { sep, '\0' };
- return split( cs, str, allowEmptyEntries );
-}
-
-/*!
- Splits the string \a str using \a sep as separator. Returns the
- list of strings. If \a allowEmptyEntries is TRUE, also empty
- entries are inserted into the list, else not. So if you have
- a string 'abc..d.e.', a list which contains 'abc', 'd', and 'e'
- would be returned if \a allowEmptyEntries is FALSE, but
- a list containing 'abc', '', 'd', 'e' and '' would be returned if
- \a allowEmptyEntries is TRUE.
- If \a str doesn't contain \a sep, a stringlist
- with one item, which is the same as \a str, is returned.
-
- \sa join()
-*/
-
-QCStringList QCStringList::split( const QCString &sep, const QCString &str, bool allowEmptyEntries )
-{
- QCStringList lst;
-
- int j = 0;
- int i = str.find( sep, j );
-
- while ( i != -1 ) {
- if ( str.mid( j, i - j ).length() > 0 )
- lst << str.mid( j, i - j );
- else if ( allowEmptyEntries )
- lst << QCString();
- j = i + sep.length();
- i = str.find( sep, j );
- }
-
- int l = str.length() - 1;
- if ( str.mid( j, l - j + 1 ).length() > 0 )
- lst << str.mid( j, l - j + 1 );
- else if ( allowEmptyEntries )
- lst << QCString();
-
- return lst;
-}
-
-/*!
- Splits the string \a str using the regular expression \a sep as separator. Returns the
- list of strings. If \a allowEmptyEntries is TRUE, also empty
- entries are inserted into the list, else not. So if you have
- a string 'abc..d.e.', a list which contains 'abc', 'd', and 'e'
- would be returned if \a allowEmptyEntries is FALSE, but
- a list containing 'abc', '', 'd', 'e' and '' would be returned if
- \a allowEmptyEntries is TRUE.
- If \a str doesn't contain \a sep, a stringlist
- with one item, which is the same as \a str, is returned.
-
- \sa join()
-*/
-
-QCStringList QCStringList::split( const QRegExp &sep, const QCString &str, bool allowEmptyEntries )
-{
- QCStringList lst;
-
- int j = 0;
- int len = 0;
- int i = sep.match( str.data(), j, &len );
-
- while ( i != -1 ) {
- if ( str.mid( j, i - j ).length() > 0 )
- lst << str.mid( j, i - j );
- else if ( allowEmptyEntries )
- lst << QCString();
- j = i + len;
- i = sep.match( str.data(), j, &len );
- }
-
- int l = str.length() - 1;
- if ( str.mid( j, l - j + 1 ).length() > 0 )
- lst << str.mid( j, l - j + 1 );
- else if ( allowEmptyEntries )
- lst << QCString();
-
- return lst;
-}
-
-/*!
- Returns a list of all strings containing the substring \a str.
-
- If \a cs is TRUE, the grep is done case sensitively, else not.
-*/
-
-QCStringList QCStringList::grep( const QCString &str, bool cs ) const
-{
- QCStringList res;
- for ( QCStringList::ConstIterator it = begin(); it != end(); ++it )
- if ( (*it).contains( str, cs ) )
- res << *it;
-
- return res;
-}
-
-/*!
- Returns a list of all strings containing a substring that matches
- the regular expression \a expr.
-*/
-
-QCStringList QCStringList::grep( const QRegExp &expr ) const
-{
- QCStringList res;
- for ( QCStringList::ConstIterator it = begin(); it != end(); ++it )
- if ( (*it).contains( expr ) )
- res << *it;
-
- return res;
-}
-
-/*!
- Joins the stringlist into a single string with each element
- separated by \a sep.
-
- \sa split()
-*/
-QCString QCStringList::join( const QCString &sep ) const
-{
- QCString res;
- bool already = FALSE;
- for ( QCStringList::ConstIterator it = begin(); it != end(); ++it ) {
- if ( already )
- res += sep;
- already = TRUE;
- res += *it;
- }
-
- return res;
-}
-
-Q_EXPORT QDataStream &operator>>( QDataStream & s, QCStringList& l )
-{
- return s >> (QValueList<QCString>&)l;
-}
-
-Q_EXPORT QDataStream &operator<<( QDataStream & s, const QCStringList& l )
-{
- return s << (const QValueList<QCString>&)l;
-}
-
-/*!
- Converts from a QStrList (ASCII) to a QCStringList (Unicode).
-*/
-QCStringList QCStringList::fromStrList(const QStrList& ascii)
-{
- QCStringList res;
- const char * s;
- for ( QStrListIterator it(ascii); (s=it.current()); ++it )
- res << s;
- return res;
-}
-
diff --git a/qtools/qcstringlist.h b/qtools/qcstringlist.h
deleted file mode 100644
index 7ffd4d2..0000000
--- a/qtools/qcstringlist.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 1997-2018 by Dimitri van Heesch.
-**
-** Permission to use, copy, modify, and distribute this software and its
-** documentation under the terms of the GNU General Public License is hereby
-** granted. No representations are made about the suitability of this software
-** for any purpose. It is provided "as is" without express or implied warranty.
-** See the GNU General Public License for more details.
-**
-** Note: this is a variant of the qstringlist.h but for QCString's
-**
-**********************************************************************/
-#ifndef QCSTRINGLIST_H
-#define QCSTRINGLIST_H
-
-#include "qvaluelist.h"
-#include "qcstring.h"
-#include "qregexp.h"
-
-class QStrList;
-class QDataStream;
-
-class QCStringList : public QValueList<QCString>
-{
-public:
- QCStringList() { }
- QCStringList( const QCStringList& l ) : QValueList<QCString>(l) { }
- QCStringList( const QValueList<QCString>& l ) : QValueList<QCString>(l) { }
- QCStringList( const QCString& i ) { append(i); }
- QCStringList( const char* i ) { append(i); }
- QCStringList &operator=(const QCStringList &l)
- {
- return static_cast<QCStringList&>(QValueList<QCString>::operator=(l));
- }
-
- static QCStringList fromStrList(const QStrList&);
-
- static QCStringList split( const QCString &sep, const QCString &str, bool allowEmptyEntries = FALSE );
- static QCStringList split( char sep, const QCString &str, bool allowEmptyEntries = FALSE );
- static QCStringList split( const QRegExp &sep, const QCString &str, bool allowEmptyEntries = FALSE );
- QCString join( const QCString &sep ) const;
-
- QCStringList grep( const QCString &str, bool cs = TRUE ) const;
- QCStringList grep( const QRegExp &expr ) const;
-};
-
-extern Q_EXPORT QDataStream &operator>>( QDataStream &, QCStringList& );
-extern Q_EXPORT QDataStream &operator<<( QDataStream &, const QCStringList& );
-
-#endif // QCSTRINGLIST_H
diff --git a/qtools/qdatastream.cpp b/qtools/qdatastream.cpp
deleted file mode 100644
index d539daf..0000000
--- a/qtools/qdatastream.cpp
+++ /dev/null
@@ -1,944 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QDataStream class
-**
-** Created : 930831
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qdatastream.h"
-
-#ifndef QT_NO_DATASTREAM
-#include "qbuffer.h"
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-
-// REVISED: warwick
-/*!
- \class QDataStream qdatastream.h
-
- \brief The QDataStream class provides serialization of
- binary data to a QIODevice.
-
- \ingroup io
-
- A data stream is a binary stream of encoded information which is 100%
- independent of the host computer operation system, CPU or byte order. A
- stream that is written by a PC under DOS/Windows can be read by a
- Sun SPARC running Solaris.
-
- The QDataStream class implements serialization of primitive types, like
- \c char, \c short, \c int, \c char* etc. Serialization of more complex
- data is accomplished by breaking up the data into primitive units.
-
- The programmer can select which byte order to use when serializing data.
- The default setting is big endian (MSB first). Changing it to little
- endian breaks the portability (unless the reader also changes to little
- endian). We recommend keeping this setting unless you have
- special requirements.
-
- A data stream cooperates closely with a QIODevice. A QIODevice
- represents an input/output medium one can read data from and write data
- to. The QFile class is an example of an IO device.
-
- Example (write data to a stream):
- \code
- QFile f( "file.dta" );
- f.open( IO_WriteOnly ); // open file for writing
- QDataStream s( &f ); // serialize using f
- s << "the answer is"; // serialize string
- s << (Q_INT32)42; // serialize integer
- \endcode
-
- Example (read data from a stream):
- \code
- QFile f( "file.dta" );
- f.open( IO_ReadOnly ); // open file for reading
- QDataStream s( &f ); // serialize using f
- char *str;
- Q_INT32 a;
- s >> str >> a; // "the answer is" and 42
- delete str; // delete string
- \endcode
-
- In the last example, if you read into a QString instead of a \c char*
- you do not have to delete it.
-
- Normally, each item written to the stream is written in a fixed binary
- format.
- For example, a \c char* is written as a 32-bit integer equal to the
- length of the string including the NUL byte, followed by all the
- characters of the string including the NUL byte. Similarly when
- reading a string, 4 bytes are read to create the 32-bit length value,
- then that many characters for the string including the NUL. For a complete
- description of all Qt types supporting data streaming see \link
- datastreamformat.html Format of the QDataStream operators \endlink .
-
- If you want a "parsing" input stream, see QTextStream. If you just want the
- data to be human-readable to aid in debugging, you can set the data
- stream into printable data mode with setPrintableData(). The data is
- then written slower, in a human readable bloated form that is sufficient
- for debugging.
-
- If you are producing a new binary data format, such as a file format
- for documents created by your application, you could use a QDataStream
- to write the data in a portable format. Typically, you would write
- a brief header containing a magic string and a version number to give
- yourself room for future expansion. For example:
-
- \code
- // Open the file.
- QFile f( "file.xxx" );
- f.open( IO_WriteOnly );
- QDataStream s( &f );
-
- // Write a header with a "magic number" and a version
- s << 0xa0b0c0d0;
- s << 123;
-
- // Write the data
- s << [lots of interesting data]
- \endcode
-
- Then read it in with:
-
- \code
- // Open the file.
- QFile f( "file.xxx" );
- f.open( IO_ReadOnly );
- QDataStream s( &f );
-
- // Read and check the header
- Q_UINT32 magic;
- s >> magic;
- if ( magic != 0xa0b0c0d0 )
- return XXX_BAD_FILE_FORMAT;
-
- // Read the version
- Q_INT32 version;
- s >> version;
- if ( version < 100 )
- return XXX_BAD_FILE_TOO_OLD;
- if ( version > 123 )
- return XXX_BAD_FILE_TOO_NEW;
- if ( version <= 110 )
- s.setVersion(1);
-
- // Read the data
- s >> [lots of interesting data];
- if ( version > 120 )
- s >> [data new in XXX version 1.2];
- s >> [other interesting data];
- \endcode
-
- \sa QTextStream QVariant
-*/
-
-
-/*****************************************************************************
- QDataStream member functions
- *****************************************************************************/
-
-#if defined(CHECK_STATE)
-#undef CHECK_STREAM_PRECOND
-#define CHECK_STREAM_PRECOND if ( !dev ) { \
- qWarning( "QDataStream: No device" ); \
- return *this; }
-#else
-#define CHECK_STREAM_PRECOND
-#endif
-
-static int systemWordSize = 0;
-static bool systemBigEndian;
-
-static const int DefaultStreamVersion = 3;
-// 3 is default in Qt 2.1
-// 2 is the Qt 2.0.x format
-// 1 is the Qt 1.x format
-
-/*!
- Constructs a data stream that has no IO device.
-
- \sa setDevice()
-*/
-
-QDataStream::QDataStream()
-{
- if ( systemWordSize == 0 ) // get system features
- qSysInfo( &systemWordSize, &systemBigEndian );
- dev = 0; // no device set
- owndev = FALSE;
- byteorder = BigEndian; // default byte order
- printable = FALSE;
- ver = DefaultStreamVersion;
- noswap = systemBigEndian;
-}
-
-/*!
- Constructs a data stream that uses the IO device \a d.
-
- \sa setDevice(), device()
-*/
-
-QDataStream::QDataStream( QIODevice *d )
-{
- if ( systemWordSize == 0 ) // get system features
- qSysInfo( &systemWordSize, &systemBigEndian );
- dev = d; // set device
- owndev = FALSE;
- byteorder = BigEndian; // default byte order
- printable = FALSE;
- ver = DefaultStreamVersion;
- noswap = systemBigEndian;
-}
-
-/*!
- Constructs a data stream that operates on a byte array through an
- internal QBuffer device.
-
- Example:
- \code
- static char bindata[] = { 231, 1, 44, ... };
- QByteArray a;
- a.setRawData( bindata, sizeof(bindata) ); // a points to bindata
- QDataStream s( a, IO_ReadOnly ); // open on a's data
- s >> [something]; // read raw bindata
- a.resetRawData( bindata, sizeof(bindata) ); // finished
- \endcode
-
- The QArray::setRawData() function is not for the inexperienced.
-*/
-
-QDataStream::QDataStream( QByteArray a, int mode )
-{
- if ( systemWordSize == 0 ) // get system features
- qSysInfo( &systemWordSize, &systemBigEndian );
- dev = new QBuffer( a ); // create device
- ((QBuffer *)dev)->open( mode ); // open device
- owndev = TRUE;
- byteorder = BigEndian; // default byte order
- printable = FALSE;
- ver = DefaultStreamVersion;
- noswap = systemBigEndian;
-}
-
-/*!
- Destructs the data stream.
-
- The destructor will not affect the current IO device, unless it
- is an internal IO device processing a QByteArray passed in the constructor.
-*/
-
-QDataStream::~QDataStream()
-{
- if ( owndev )
- delete dev;
-}
-
-
-/*!
- \fn QIODevice *QDataStream::device() const
- Returns the IO device currently set.
- \sa setDevice(), unsetDevice()
-*/
-
-/*!
- void QDataStream::setDevice(QIODevice *d )
- Sets the IO device to \a d.
- \sa device(), unsetDevice()
-*/
-
-void QDataStream::setDevice(QIODevice *d )
-{
- if ( owndev ) {
- delete dev;
- owndev = FALSE;
- }
- dev = d;
-}
-
-/*!
- Unsets the IO device. This is the same as calling setDevice( 0 ).
- \sa device(), setDevice()
-*/
-
-void QDataStream::unsetDevice()
-{
- setDevice( 0 );
-}
-
-
-/*!
- \fn bool QDataStream::atEnd() const
- Returns TRUE if the IO device has reached the end position (end of
- stream or file) or if there is no IO device set.
-
- Returns FALSE if the current position of the read/write head of the IO
- device is somewhere before the end position.
-
- \sa QIODevice::atEnd()
-*/
-
-/*!\fn bool QDataStream::eof() const
-
- \obsolete
-
- Returns TRUE if the IO device has reached the end position (end of
- stream or file) or if there is no IO device set.
-
- Returns FALSE if the current position of the read/write head of the IO
- device is somewhere before the end position.
-
- \sa QIODevice::atEnd()
-*/
-
-/*!
- \fn int QDataStream::byteOrder() const
- Returns the current byte order setting - either \c BigEndian or
- \c LittleEndian.
-
- \sa setByteOrder()
-*/
-
-/*!
- Sets the serialization byte order to \a bo.
-
- The \a bo parameter can be \c QDataStream::BigEndian or
- \c QDataStream::LittleEndian.
-
- The default setting is big endian. We recommend leaving this setting unless
- you have special requirements.
-
- \sa byteOrder()
-*/
-
-void QDataStream::setByteOrder( int bo )
-{
- byteorder = bo;
- if ( systemBigEndian )
- noswap = byteorder == BigEndian;
- else
- noswap = byteorder == LittleEndian;
-}
-
-
-/*!
- \fn bool QDataStream::isPrintableData() const
- Returns TRUE if the printable data flag has been set.
- \sa setPrintableData()
-*/
-
-/*!
- \fn void QDataStream::setPrintableData( bool enable )
- Sets or clears the printable data flag.
-
- If this flag is set, the write functions will generate output that
- consists of printable characters (7 bit ASCII).
-
- We recommend enabling printable data only for debugging purposes
- (it is slower and creates larger output).
-*/
-
-
-/*!
- \fn int QDataStream::version() const
- Returns the version number of the data serialization format.
- In Qt 2.1, this number is by default 3.
- \sa setVersion()
-*/
-
-/*!
- \fn void QDataStream::setVersion( int v )
- Sets the version number of the data serialization format.
-
- In order to accommodate for new functionality, the datastream
- serialization format of some Qt classes has changed in some versions of
- Qt. If you want to read data that was created by an earlier version of
- Qt, or write data that can be read by a program that was compiled with
- an earlier version of Qt, use this function to modify the serialization
- format of QDataStream.
-
- For Qt 1.x compatibility, use \a v == 1.
-
- For Qt 2.0.x compatibility, use \a v == 2 (Not required for reading in
- Qt 2.1).
-
- \sa version()
-*/
-
-/*****************************************************************************
- QDataStream read functions
- *****************************************************************************/
-
-
-static Q_INT32 read_int_ascii( QDataStream *s )
-{
- int n = 0;
- char buf[40];
- while ( TRUE ) {
- buf[n] = s->device()->getch();
- if ( buf[n] == '\n' || n > 38 ) // $-terminator
- break;
- n++;
- }
- buf[n] = '\0';
- return (Q_INT32)atol( buf );
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator>>( Q_UINT8 &i )
- Reads an unsigned byte from the stream and returns a reference to
- the stream.
-*/
-
-/*!
- Reads a signed byte from the stream.
-*/
-
-QDataStream &QDataStream::operator>>( Q_INT8 &i )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- i = (Q_INT8)dev->getch();
- if ( i == '\\' ) { // read octal code
- char buf[4];
- dev->readBlock( buf, 3 );
- i = (buf[2] & 0x07)+((buf[1] & 0x07) << 3)+((buf[0] & 0x07) << 6);
- }
- } else { // data or text
- i = (Q_INT8)dev->getch();
- }
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator>>( Q_UINT16 &i )
- Reads an unsigned 16-bit integer from the stream and returns a reference to
- the stream.
-*/
-
-/*!
- Reads a signed 16-bit integer from the stream and returns a reference to
- the stream.
-*/
-
-QDataStream &QDataStream::operator>>( Q_INT16 &i )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- i = (Q_INT16)read_int_ascii( this );
- } else if ( noswap ) { // no conversion needed
- dev->readBlock( (char *)&i, sizeof(Q_INT16) );
- } else { // swap bytes
- uchar *p = (uchar *)(&i);
- char b[2];
- dev->readBlock( b, 2 );
- *p++ = b[1];
- *p = b[0];
- }
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator>>( Q_UINT32 &i )
- Reads an unsigned 32-bit integer from the stream and returns a reference to
- the stream.
-*/
-
-/*!
- Reads a signed 32-bit integer from the stream and returns a reference to
- the stream.
-*/
-
-QDataStream &QDataStream::operator>>( Q_INT32 &i )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- i = read_int_ascii( this );
- } else if ( noswap ) { // no conversion needed
- dev->readBlock( (char *)&i, sizeof(Q_INT32) );
- } else { // swap bytes
- uchar *p = (uchar *)(&i);
- char b[4];
- dev->readBlock( b, 4 );
- *p++ = b[3];
- *p++ = b[2];
- *p++ = b[1];
- *p = b[0];
- }
- return *this;
-}
-
-/*!
- \fn QDataStream &QDataStream::operator>>( Q_UINT64 &i )
- Reads an unsigned 64-bit integer from the stream and returns a reference to
- the stream, or uses the Q_UINT32 operator if 64 bit is not available.
-*/
-
-/*!
- Reads a signed 64-bit integer from the stream and returns a reference to
- the stream, or uses the Q_UINT32 operator if 64 bit is not available.
-*/
-
-QDataStream &QDataStream::operator>>( Q_INT64 &i )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- i = read_int_ascii( this );
- } else if ( noswap ) { // no conversion needed
- dev->readBlock( (char *)&i, sizeof(Q_INT64) );
- } else { // swap bytes
- uchar *p = (uchar *)(&i);
- char b[sizeof(Q_INT64)];
- dev->readBlock( b, sizeof(Q_INT64) );
- if ( sizeof(Q_INT64) == 8 ) {
- *p++ = b[7];
- *p++ = b[6];
- *p++ = b[5];
- *p++ = b[4];
- }
- *p++ = b[3];
- *p++ = b[2];
- *p++ = b[1];
- *p = b[0];
- }
- return *this;
-}
-
-static double read_double_ascii( QDataStream *s )
-{
- int n = 0;
- char buf[80];
- while ( TRUE ) {
- buf[n] = s->device()->getch();
- if ( buf[n] == '\n' || n > 78 ) // $-terminator
- break;
- n++;
- }
- buf[n] = '\0';
- return atof( buf );
-}
-
-
-/*!
- Reads a 32-bit floating point number from the stream using the standard
- IEEE754 format. Returns a reference to the stream.
-*/
-
-QDataStream &QDataStream::operator>>( float &f )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- f = (float)read_double_ascii( this );
- } else if ( noswap ) { // no conversion needed
- dev->readBlock( (char *)&f, sizeof(float) );
- } else { // swap bytes
- uchar *p = (uchar *)(&f);
- char b[4];
- dev->readBlock( b, 4 );
- *p++ = b[3];
- *p++ = b[2];
- *p++ = b[1];
- *p = b[0];
- }
- return *this;
-}
-
-
-/*!
- Reads a 64-bit floating point number from the stream using the standard
- IEEE754 format. Returns a reference to the stream.
-*/
-
-QDataStream &QDataStream::operator>>( double &f )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- f = read_double_ascii( this );
- } else if ( noswap ) { // no conversion needed
- dev->readBlock( (char *)&f, sizeof(double) );
- } else { // swap bytes
- uchar *p = (uchar *)(&f);
- char b[8];
- dev->readBlock( b, 8 );
- *p++ = b[7];
- *p++ = b[6];
- *p++ = b[5];
- *p++ = b[4];
- *p++ = b[3];
- *p++ = b[2];
- *p++ = b[1];
- *p = b[0];
- }
- return *this;
-}
-
-
-/*!
- Reads the '\0'-terminated string \a s from the stream and returns
- a reference to the stream.
-
- Space for the string is allocated using \c new - the caller must
- eventually call delete[] on the value.
-*/
-
-QDataStream &QDataStream::operator>>( char *&s )
-{
- uint len = 0;
- return readBytes( s, len );
-}
-
-
-/*!
- Reads the buffer \a s from the stream and returns a reference to the
- stream.
-
- The buffer \a s is allocated using \c new. Destroy it with the \c delete[]
- operator. If the length is zero or \a s cannot be allocated, \a s is
- set to 0.
-
- The \a l parameter will be set to the length of the buffer.
-
- The serialization format is an Q_UINT32 length specifier first, then the
- data (\a l bytes).
-
- \sa readRawBytes(), writeBytes()
-*/
-
-QDataStream &QDataStream::readBytes( char *&s, uint &l )
-{
- CHECK_STREAM_PRECOND
- Q_UINT32 len;
- *this >> len; // first read length spec
- l = (uint)len;
- if ( len == 0 || eof() ) {
- s = 0;
- return *this;
- } else {
- s = new char[len]; // create char array
- CHECK_PTR( s );
- if ( !s ) // no memory
- return *this;
- return readRawBytes( s, (uint)len );
- }
-}
-
-
-/*!
- Reads \a len bytes from the stream into \a s and returns a reference to
- the stream.
-
- The buffer \a s must be preallocated.
-
- \sa readBytes(), QIODevice::readBlock(), writeRawBytes()
-*/
-
-QDataStream &QDataStream::readRawBytes( char *s, uint len )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- Q_INT8 *p = (Q_INT8*)s;
- while ( len-- )
- *this >> *p++;
- } else { // read data char array
- dev->readBlock( s, len );
- }
- return *this;
-}
-
-
-/*****************************************************************************
- QDataStream write functions
- *****************************************************************************/
-
-
-/*!
- \fn QDataStream &QDataStream::operator<<( Q_UINT8 i )
- Writes an unsigned byte to the stream and returns a reference to
- the stream.
-*/
-
-/*!
- Writes a signed byte to the stream.
-*/
-
-QDataStream &QDataStream::operator<<( Q_INT8 i )
-{
- CHECK_STREAM_PRECOND
- if ( printable && (i == '\\' || !isprint(i)) ) {
- char buf[6]; // write octal code
- buf[0] = '\\';
- buf[1] = '0' + ((i >> 6) & 0x07);
- buf[2] = '0' + ((i >> 3) & 0x07);
- buf[3] = '0' + (i & 0x07);
- buf[4] = '\0';
- dev->writeBlock( buf, 4 );
- } else {
- dev->putch( i );
- }
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator<<( Q_UINT16 i )
- Writes an unsigned 16-bit integer to the stream and returns a reference
- to the stream.
-*/
-
-/*!
- Writes a signed 16-bit integer to the stream and returns a reference to
- the stream.
-*/
-
-QDataStream &QDataStream::operator<<( Q_INT16 i )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- char buf[16];
- sprintf( buf, "%d\n", i );
- dev->writeBlock( buf, (int)strlen(buf) );
- } else if ( noswap ) { // no conversion needed
- dev->writeBlock( (char *)&i, sizeof(Q_INT16) );
- } else { // swap bytes
- uchar *p = (uchar *)(&i);
- char b[2];
- b[1] = *p++;
- b[0] = *p;
- dev->writeBlock( b, 2 );
- }
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator<<( Q_UINT32 i )
- Writes an unsigned 32-bit integer to the stream and returns a reference to
- the stream.
-*/
-
-/*!
- Writes a signed 32-bit integer to the stream and returns a reference to
- the stream.
-*/
-
-QDataStream &QDataStream::operator<<( Q_INT32 i )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- char buf[16];
- sprintf( buf, "%d\n", i );
- dev->writeBlock( buf, (int)strlen(buf) );
- } else if ( noswap ) { // no conversion needed
- dev->writeBlock( (char *)&i, sizeof(Q_INT32) );
- } else { // swap bytes
- uchar *p = (uchar *)(&i);
- char b[4];
- b[3] = *p++;
- b[2] = *p++;
- b[1] = *p++;
- b[0] = *p;
- dev->writeBlock( b, 4 );
- }
- return *this;
-}
-
-/*!
- \fn QDataStream &QDataStream::operator<<( Q_UINT64 i )
- Writes an unsigned 64-bit integer to the stream and returns a reference to
- the stream, or uses the Q_UINT32-operator if 64 bit is not available.
-*/
-
-/*!
- Writes a signed 64-bit integer to the stream and returns a reference to
- the stream, or calls the Q_INT32-operator if 64 bit is not available.
-*/
-
-QDataStream &QDataStream::operator<<( Q_INT64 i )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- char buf[20];
- sprintf( buf, "%ld\n", i );
- dev->writeBlock( buf, (int)strlen(buf) );
- } else if ( noswap ) { // no conversion needed
- dev->writeBlock( (char *)&i, sizeof(Q_INT64) );
- } else { // swap bytes
- uchar *p = (uchar *)(&i);
- char b[sizeof(Q_INT64)];
- if ( sizeof(Q_INT64) == 8 ) {
- b[7] = *p++;
- b[6] = *p++;
- b[5] = *p++;
- b[4] = *p++;
- }
- b[3] = *p++;
- b[2] = *p++;
- b[1] = *p++;
- b[0] = *p;
- dev->writeBlock( b, sizeof(Q_INT64) );
- }
- return *this;
-}
-
-/*!
- \fn QDataStream &QDataStream::operator<<( int i )
- Writes a signed integer to the stream as a 32-bit signed integer (Q_INT32).
- Returns a reference to the stream.
-*/
-
-
-/*!
- Writes a 32-bit floating point number to the stream using the standard
- IEEE754 format. Returns a reference to the stream.
-*/
-
-QDataStream &QDataStream::operator<<( float f )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- char buf[32];
- sprintf( buf, "%g\n", (double)f );
- dev->writeBlock( buf, (int)strlen(buf) );
- } else {
- float g = f; // fixes float-on-stack problem
- if ( noswap ) { // no conversion needed
- dev->writeBlock( (char *)&g, sizeof(float) );
- } else { // swap bytes
- uchar *p = (uchar *)(&g);
- char b[4];
- b[3] = *p++;
- b[2] = *p++;
- b[1] = *p++;
- b[0] = *p;
- dev->writeBlock( b, 4 );
- }
- }
- return *this;
-}
-
-
-/*!
- Writes a 64-bit floating point number to the stream using the standard
- IEEE754 format. Returns a reference to the stream.
-*/
-
-QDataStream &QDataStream::operator<<( double f )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // printable data
- char buf[32];
- sprintf( buf, "%g\n", f );
- dev->writeBlock( buf, (int)strlen(buf) );
- } else if ( noswap ) { // no conversion needed
- dev->writeBlock( (char *)&f, sizeof(double) );
- } else { // swap bytes
- uchar *p = (uchar *)(&f);
- char b[8];
- b[7] = *p++;
- b[6] = *p++;
- b[5] = *p++;
- b[4] = *p++;
- b[3] = *p++;
- b[2] = *p++;
- b[1] = *p++;
- b[0] = *p;
- dev->writeBlock( b, 8 );
- }
- return *this;
-}
-
-
-/*!
- Writes the '\0'-terminated string \a s to the stream and returns
- a reference to the stream.
-
- The string is serialized using writeBytes().
-*/
-
-QDataStream &QDataStream::operator<<( const char *s )
-{
- if ( !s ) {
- *this << (Q_UINT32)0;
- return *this;
- }
- uint len = qstrlen( s ) + 1; // also write null terminator
- *this << (Q_UINT32)len; // write length specifier
- return writeRawBytes( s, len );
-}
-
-
-/*!
- Writes the length specifier \a len and the buffer \a s to the stream and
- returns a reference to the stream.
-
- The \a len is serialized as an Q_UINT32, followed by \a len bytes from
- \a s.
-
- \sa writeRawBytes(), readBytes()
-*/
-
-QDataStream &QDataStream::writeBytes(const char *s, uint len)
-{
- CHECK_STREAM_PRECOND
- *this << (Q_UINT32)len; // write length specifier
- if ( len )
- writeRawBytes( s, len );
- return *this;
-}
-
-
-/*!
- Writes \a len bytes from \a s to the stream and returns a reference to the
- stream.
-
- \sa writeBytes(), QIODevice::writeBlock(), readRawBytes()
-*/
-
-QDataStream &QDataStream::writeRawBytes( const char *s, uint len )
-{
- CHECK_STREAM_PRECOND
- if ( printable ) { // write printable
- char *p = (char *)s;
- while ( len-- )
- *this << *p++;
- } else { // write data char array
- dev->writeBlock( s, len );
- }
- return *this;
-}
-
-#endif // QT_NO_DATASTREAM
diff --git a/qtools/qdatastream.h b/qtools/qdatastream.h
deleted file mode 100644
index 3d18062..0000000
--- a/qtools/qdatastream.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QDataStream class
-**
-** Created : 930831
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QDATASTREAM_H
-#define QDATASTREAM_H
-
-#ifndef QT_H
-#include "qiodevice.h"
-#include "qstring.h"
-#endif // QT_H
-
-#ifndef QT_NO_DATASTREAM
-class Q_EXPORT QDataStream // data stream class
-{
-public:
- QDataStream();
- QDataStream( QIODevice * );
- QDataStream( QByteArray, int mode );
- virtual ~QDataStream();
-
- QIODevice *device() const;
- void setDevice( QIODevice * );
- void unsetDevice();
-
- bool atEnd() const;
- bool eof() const;
-
- enum ByteOrder { BigEndian, LittleEndian };
- int byteOrder() const;
- void setByteOrder( int );
-
- bool isPrintableData() const;
- void setPrintableData( bool );
-
- int version() const;
- void setVersion( int );
-
- QDataStream &operator>>( Q_INT8 &i );
- QDataStream &operator>>( Q_UINT8 &i );
- QDataStream &operator>>( Q_INT16 &i );
- QDataStream &operator>>( Q_UINT16 &i );
- QDataStream &operator>>( Q_INT32 &i );
- QDataStream &operator>>( Q_UINT32 &i );
- QDataStream &operator>>( Q_INT64 &i );
- QDataStream &operator>>( Q_UINT64 &i );
-
- QDataStream &operator>>( float &f );
- QDataStream &operator>>( double &f );
- QDataStream &operator>>( char *&str );
-
- QDataStream &operator<<( Q_INT8 i );
- QDataStream &operator<<( Q_UINT8 i );
- QDataStream &operator<<( Q_INT16 i );
- QDataStream &operator<<( Q_UINT16 i );
- QDataStream &operator<<( Q_INT32 i );
- QDataStream &operator<<( Q_UINT32 i );
- QDataStream &operator<<( Q_INT64 i );
- QDataStream &operator<<( Q_UINT64 i );
- QDataStream &operator<<( float f );
- QDataStream &operator<<( double f );
- QDataStream &operator<<( const char *str );
-
- QDataStream &readBytes( char *&, uint &len );
- QDataStream &readRawBytes( char *, uint len );
-
- QDataStream &writeBytes( const char *, uint len );
- QDataStream &writeRawBytes( const char *, uint len );
-
-private:
- QIODevice *dev;
- bool owndev;
- int byteorder;
- bool printable;
- bool noswap;
- int ver;
-
-private: // Disabled copy constructor and operator=
-#if defined(Q_DISABLE_COPY)
- QDataStream( const QDataStream & );
- QDataStream &operator=( const QDataStream & );
-#endif
-};
-
-
-/*****************************************************************************
- QDataStream inline functions
- *****************************************************************************/
-
-inline QIODevice *QDataStream::device() const
-{ return dev; }
-
-inline bool QDataStream::atEnd() const
-{ return dev ? dev->atEnd() : TRUE; }
-
-inline bool QDataStream::eof() const
-{ return atEnd(); }
-
-inline int QDataStream::byteOrder() const
-{ return byteorder; }
-
-inline bool QDataStream::isPrintableData() const
-{ return printable; }
-
-inline void QDataStream::setPrintableData( bool p )
-{ printable = p; }
-
-inline int QDataStream::version() const
-{ return ver; }
-
-inline void QDataStream::setVersion( int v )
-{ ver = v; }
-
-inline QDataStream &QDataStream::operator>>( Q_UINT8 &i )
-{ return *this >> (Q_INT8&)i; }
-
-inline QDataStream &QDataStream::operator>>( Q_UINT16 &i )
-{ return *this >> (Q_INT16&)i; }
-
-inline QDataStream &QDataStream::operator>>( Q_UINT32 &i )
-{ return *this >> (Q_INT32&)i; }
-
-inline QDataStream &QDataStream::operator>>( Q_UINT64 &i )
-{ return *this >> (Q_INT64&)i; }
-
-inline QDataStream &QDataStream::operator<<( Q_UINT8 i )
-{ return *this << (Q_INT8)i; }
-
-inline QDataStream &QDataStream::operator<<( Q_UINT16 i )
-{ return *this << (Q_INT16)i; }
-
-inline QDataStream &QDataStream::operator<<( Q_UINT32 i )
-{ return *this << (Q_INT32)i; }
-
-inline QDataStream &QDataStream::operator<<( Q_UINT64 i )
-{ return *this << (Q_INT64)i; }
-
-
-#endif // QT_NO_DATASTREAM
-#endif // QDATASTREAM_H
diff --git a/qtools/qdatetime.cpp b/qtools/qdatetime.cpp
deleted file mode 100644
index 8f1cab2..0000000
--- a/qtools/qdatetime.cpp
+++ /dev/null
@@ -1,1455 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of date and time classes
-**
-** Created : 940124
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#define gettimeofday __hide_gettimeofday
-#include "qdatetime.h"
-#include "qdatastream.h"
-#include <stdio.h>
-#include <time.h>
-#if defined(_OS_WIN32_)
-#if defined(_CC_BOOL_DEF_)
-#undef bool
-#include <windows.h>
-#define bool int
-#else
-#include <windows.h>
-#endif
-#elif defined(_OS_MSDOS_)
-#include <dos.h>
-#elif defined(_OS_OS2_)
-#include <os2.h>
-#elif defined(_OS_UNIX_) || defined(_OS_MAC_)
-#include <sys/time.h>
-#include <unistd.h>
-#undef gettimeofday
-extern "C" int gettimeofday( struct timeval *, struct timezone * );
-#endif
-
-static const uint FIRST_DAY = 2361222; // Julian day for 1752/09/14
-static const int FIRST_YEAR = 1752; // ### wrong for many countries
-static const uint SECS_PER_DAY = 86400;
-static const uint MSECS_PER_DAY = 86400000;
-static const uint SECS_PER_HOUR = 3600;
-static const uint MSECS_PER_HOUR= 3600000;
-static const uint SECS_PER_MIN = 60;
-static const uint MSECS_PER_MIN = 60000;
-
-static const short monthDays[] ={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-
-// ##### Localize.
-
-const char * const QDate::monthNames[] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-
-const char * const QDate::weekdayNames[] ={
- "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
-
-
-/*****************************************************************************
- QDate member functions
- *****************************************************************************/
-
-// REVISED: aavit
-
-/*!
- \class QDate qdatetime.h
- \brief The QDate class provides date functions.
-
- \ingroup time
-
- A QDate object contains a calendar date, i.e. year, month, and day
- numbers in the modern western (Gregorian) calendar. It can read the
- current date from the system clock. It provides functions for
- comparing dates and for manipulating a date by adding a number of
- days.
-
- A QDate object is typically created either by giving the year, month
- and day numbers explicitly, or by using the static function
- currentDate(), which makes a QDate object which contains the
- system's clock date. An explicit date can also be set using
- setYMD().
-
- The year(), month(), and day() functions provide access to the year,
- month, and day numbers. Also, dayOfWeek() and dayOfYear() functions
- are provided. The same information is provided in textual format by
- the toString(), dayName(), and monthName() functions.
-
- QDate provides a full set of operators to compare two QDate
- objects. A date is considered smaller than another if it is earlier
- than the other.
-
- The date a given number of days later than a given date can be found
- using the addDays() function. Correspondingly, the number of days
- between two dates can be found using the daysTo() function.
-
- The daysInMonth() and daysInYear() functions tell how many days
- there are in this date's month and year, respectively. The
- isLeapYear() function tells whether this date is in a leap year.
-
- Note that QDate may not be used for date calculations for dates in
- the remote past, i.e. prior to the introduction of the Gregorian
- calendar. This calendar was adopted by England Sep. 14. 1752 (hence
- this is the earliest valid QDate), and subsequently by most other
- western countries, until 1923.
-
- The end of time is reached around 8000AD, by which time we expect Qt
- to be obsolete.
-
- \sa QTime, QDateTime
-*/
-
-
-/*!
- \fn QDate::QDate()
- Constructs a null date. Null dates are invalid.
-
- \sa isNull(), isValid()
-*/
-
-
-/*!
- Constructs a date with the year \a y, month \a m and day \a d.
-
- \a y must be in the range 1752-ca. 8000, \a m must be in the range
- 1-12, and \a d must be in the range 1-31. Exception: if \a y is in
- the range 0-99, it is interpreted as 1900-1999.
-
- \sa isValid()
-*/
-
-QDate::QDate( int y, int m, int d )
-{
- jd = 0;
- setYMD( y, m, d );
-}
-
-
-/*!
- \fn bool QDate::isNull() const
-
- Returns TRUE if the date is null. A null date is invalid.
-
- \sa isValid()
-*/
-
-
-/*!
- Returns TRUE if this date is valid.
-
- \sa isNull()
-*/
-
-bool QDate::isValid() const
-{
- return jd >= FIRST_DAY;
-}
-
-
-/*!
- Returns the year (>= 1752) of this date.
-
- \sa month(), day()
-*/
-
-int QDate::year() const
-{
- int y, m, d;
- jul2greg( jd, y, m, d );
- return y;
-}
-
-/*!
- Returns the month (January=1 .. December=12) of this date.
-
- \sa year(), day()
-*/
-
-int QDate::month() const
-{
- int y, m, d;
- jul2greg( jd, y, m, d );
- return m;
-}
-
-/*!
- Returns the day of the month (1..31) of this date.
-
- \sa year(), month(), dayOfWeek()
-*/
-
-int QDate::day() const
-{
- int y, m, d;
- jul2greg( jd, y, m, d );
- return d;
-}
-
-/*!
- Returns the weekday (Monday=1 .. Sunday=7) for this date.
-
- \sa day(), dayOfYear()
-*/
-
-int QDate::dayOfWeek() const
-{
- return (((jd+1) % 7) + 6)%7 + 1;
-}
-
-/*!
- Returns the day of the year (1..365) for this date.
-
- \sa day(), dayOfWeek()
-*/
-
-int QDate::dayOfYear() const
-{
- return jd - greg2jul(year(), 1, 1) + 1;
-}
-
-/*!
- Returns the number of days in the month (28..31) for this date.
-
- \sa day(), daysInYear()
-*/
-
-int QDate::daysInMonth() const
-{
- int y, m, d;
- jul2greg( jd, y, m, d );
- if ( m == 2 && leapYear(y) )
- return 29;
- else
- return monthDays[m];
-}
-
-/*!
- Returns the number of days in the year (365 or 366) for this date.
-
- \sa day(), daysInMonth()
-*/
-
-int QDate::daysInYear() const
-{
- int y, m, d;
- jul2greg( jd, y, m, d );
- return leapYear(y) ? 366 : 365;
-}
-
-
-/*!
- Returns the name of the \a month.
-
- Month 1 == "Jan", month 2 == "Feb" etc.
-
- \sa toString(), dayName()
-*/
-
-QCString QDate::monthName( int month ) const
-{
-#if defined(CHECK_RANGE)
- if ( month < 1 || month > 12 ) {
- qWarning( "QDate::monthName: Parameter out ouf range." );
- month = 1;
- }
-#endif
- return monthNames[month-1];
-}
-
-/*!
- Returns the name of the \a weekday.
-
- Weekday 1 == "Mon", day 2 == "Tue" etc.
-
- \sa toString(), monthName()
-*/
-
-QCString QDate::dayName( int weekday ) const
-{
-#if defined(CHECK_RANGE)
- if ( weekday < 1 || weekday > 7 ) {
- qWarning( "QDate::dayName: Parameter out of range." );
- weekday = 1;
- }
-#endif
- return weekdayNames[weekday-1];
-}
-
-
-/*!
- Returns the date as a string.
-
- The string format is "Sat May 20 1995". This function uses the
- dayName() and monthName() functions to generate the string.
-
- \sa dayName(), monthName()
-*/
-
-QCString QDate::toString() const
-{
- int y, m, d;
- jul2greg( jd, y, m, d );
- QCString buf = dayName(dayOfWeek());
- buf += ' ';
- buf += monthName(m);
- QCString t;
- t.sprintf( " %d %d", d, y);
- buf += t;
- return buf;
-}
-
-
-/*!
- Sets the year \a y, month \a m and day \a d.
-
- \a y must be in the range 1752-ca. 8000, \a m must be in the range
- 1-12, and \a d must be in the range 1-31. Exception: if \a y is in
- the range 0-99, it is interpreted as 1900-1999.
-
- Returns TRUE if the date is valid, otherwise FALSE.
-*/
-
-bool QDate::setYMD( int y, int m, int d )
-{
- if ( !isValid(y,m,d) ) {
-#if defined(CHECK_RANGE)
- qWarning( "QDate::setYMD: Invalid date %04d/%02d/%02d", y, m, d );
-#endif
- return FALSE;
- }
- jd = greg2jul( y, m, d );
-#if defined(DEBUG)
- ASSERT( year() == (y > 99 ? y : 1900+y) && month() == m && day() == d );
-#endif
- return TRUE;
-}
-
-/*!
- Returns a QDate object containing a date \a ndays later than the
- date of this object (or earlier if \a ndays is negative).
-
- \sa daysTo()
-*/
-
-QDate QDate::addDays( int ndays ) const
-{
- QDate d;
- d.jd = jd + ndays;
- return d;
-}
-
-/*!
- Returns the number of days from this date to \a d (which is negative
- if \a d is earlier than this date).
-
- Example:
- \code
- QDate d1( 1995, 5, 17 ); // May 17th 1995
- QDate d2( 1995, 5, 20 ); // May 20th 1995
- d1.daysTo( d2 ); // returns 3
- d2.daysTo( d1 ); // returns -3
- \endcode
-
- \sa addDays()
-*/
-
-int QDate::daysTo( const QDate &d ) const
-{
- return d.jd - jd;
-}
-
-
-/*!
- \fn bool QDate::operator==( const QDate &d ) const
- Returns TRUE if this date is equal to \a d, or FALSE if
- they are different.
-*/
-
-/*!
- \fn bool QDate::operator!=( const QDate &d ) const
- Returns TRUE if this date is different from \a d, or FALSE if
- they are equal.
-*/
-
-/*!
- \fn bool QDate::operator<( const QDate &d ) const
- Returns TRUE if this date is earlier than \a d, otherwise FALSE.
-*/
-
-/*!
- \fn bool QDate::operator<=( const QDate &d ) const
- Returns TRUE if this date is earlier than or equal to \a d, otherwise FALSE.
-*/
-
-/*!
- \fn bool QDate::operator>( const QDate &d ) const
- Returns TRUE if this date is later than \a d, otherwise FALSE.
-*/
-
-/*!
- \fn bool QDate::operator>=( const QDate &d ) const
- Returns TRUE if this date is later than or equal to \a d, otherwise FALSE.
-*/
-
-
-/*!
- Returns the current date, as reported by the system clock.
-
- \sa QTime::currentTime(), QDateTime::currentDateTime()
-*/
-
-QDate QDate::currentDate()
-{
-#if defined(_OS_WIN32_)
-
- SYSTEMTIME t;
- GetLocalTime( &t );
- QDate d;
- d.jd = greg2jul( t.wYear, t.wMonth, t.wDay );
- return d;
-
-#else
-
- time_t ltime;
- time( &ltime );
- tm *t = localtime( &ltime );
- QDate d;
- d.jd = greg2jul( t->tm_year + 1900, t->tm_mon + 1, t->tm_mday );
- return d;
-
-#endif
-}
-
-/*!
- Returns TRUE if the specified date (year \a y, month \a m and day \a
- d) is valid.
-
- Example:
- \code
- QDate::isValid( 2002, 5, 17 ); // TRUE; May 17th 2002 is OK.
- QDate::isValid( 2002, 2, 30 ); // FALSE; Feb 30th does not exist
- QDate::isValid( 2004, 2, 29 ); // TRUE; 2004 is a leap year
- QDate::isValid( 1202, 6, 6 ); // FALSE; 1202 is pre-Gregorian
- \endcode
-
- Note that a \a y value in the range 00-99 is interpreted as
- 1900-1999.
-
- \sa isNull(), setYMD()
-*/
-
-bool QDate::isValid( int y, int m, int d )
-{
- if ( y >= 0 && y <= 99 )
- y += 1900;
- else if ( y < FIRST_YEAR || (y == FIRST_YEAR && (m < 9 ||
- (m == 9 && d < 14))) )
- return FALSE;
- return (d > 0 && m > 0 && m <= 12) &&
- (d <= monthDays[m] || (d == 29 && m == 2 && leapYear(y)));
-}
-
-/*!
- Returns TRUE if the specified year \a y is a leap year.
-*/
-
-bool QDate::leapYear( int y )
-{
- return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
-}
-
-/*!
- \internal
- Converts a Gregorian date to a Julian day.
- This algorithm is taken from Communications of the ACM, Vol 6, No 8.
- \sa jul2greg()
-*/
-
-uint QDate::greg2jul( int y, int m, int d )
-{
- uint c, ya;
- if ( y <= 99 )
- y += 1900;
- if ( m > 2 ) {
- m -= 3;
- } else {
- m += 9;
- y--;
- }
- c = y; // NOTE: Sym C++ 6.0 bug
- c /= 100;
- ya = y - 100*c;
- return 1721119 + d + (146097*c)/4 + (1461*ya)/4 + (153*m+2)/5;
-}
-
-/*!
- \internal
- Converts a Julian day to a Gregorian date.
- This algorithm is taken from Communications of the ACM, Vol 6, No 8.
- \sa greg2jul()
-*/
-
-void QDate::jul2greg( uint jd, int &y, int &m, int &d )
-{
- uint x;
- uint j = jd - 1721119;
- y = (j*4 - 1)/146097;
- j = j*4 - 146097*y - 1;
- x = j/4;
- j = (x*4 + 3) / 1461;
- y = 100*y + j;
- x = (x*4) + 3 - 1461*j;
- x = (x + 4)/4;
- m = (5*x - 3)/153;
- x = 5*x - 3 - 153*m;
- d = (x + 5)/5;
- if ( m < 10 ) {
- m += 3;
- } else {
- m -= 9;
- y++;
- }
-}
-
-
-/*****************************************************************************
- QTime member functions
- *****************************************************************************/
-
-/*!
- \class QTime qdatetime.h
-
- \brief The QTime class provides clock time functions.
-
- \ingroup time
-
- A QTime object contains a clock time, i.e. a number of hours,
- minutes, seconds and milliseconds since midnight. It can read the
- current time from the system clock, and measure a span of elapsed
- time. It provides functions for comparing times and for manipulating
- a time by adding a number of (milli)seconds.
-
- QTime operates with 24-hour clock format; it has no concept of
- AM/PM. It operates with local time; it does not know anything about
- time zones or daylight savings time.
-
- A QTime object is typically created either by giving the number of
- hours, minutes, seconds, and milliseconds explicitly, or by using
- the static function currentTime(), which makes a QTime object which
- contains the system's clock time. Note that the accuracy depends on
- the accuracy of the underlying operating system; not all systems
- provide 1-millisecond accuracy.
-
- The hour(), minute(), second(), and msec() functions provide access
- to the number of hours, minutes, seconds, and milliseconds of the
- time. The same information is provided in textual format by the
- toString() function.
-
- QTime provides a full set of operators to compare two QTime
- objects. A time is considered smaller than another if it is earlier
- than the other.
-
- The time a given number of seconds or milliseconds later than a
- given time can be found using the addSecs() or addMSecs()
- functions. Correspondingly, the number of (milli)seconds between two
- times can be found using the secsTo() or msecsTo() functions.
-
- QTime can be used to measure a span of elapsed time using the
- start(), restart(), and elapsed() functions.
-
- \sa QDate, QDateTime
-*/
-
-/*!
- \fn QTime::QTime()
-
- Constructs the time 0 hours, minutes, seconds and milliseconds,
- i.e. 00:00:00.000 (midnight). This is a valid time.
-
- \sa isValid()
-*/
-
-/*!
- Constructs a time with hour \a h, minute \a m, seconds \a s and
- milliseconds \a ms.
-
- \a h must be in the range 0-23, \a m and \a s must be in the range
- 0-59, and \a ms must be in the range 0-999.
-
- \sa isValid()
-*/
-
-QTime::QTime( int h, int m, int s, int ms )
-{
- setHMS( h, m, s, ms );
-}
-
-
-/*!
- \fn bool QTime::isNull() const
- Returns TRUE if the time is equal to 00:00:00.000. A null time is valid.
-
- \sa isValid()
-*/
-
-/*!
- Returns TRUE if the time is valid, or FALSE if the time is invalid.
- The time 23:30:55.746 is valid, while 24:12:30 is invalid.
-
- \sa isNull()
-*/
-
-bool QTime::isValid() const
-{
- return ds < MSECS_PER_DAY;
-}
-
-
-/*!
- Returns the hour part (0..23) of the time.
-*/
-
-int QTime::hour() const
-{
- return ds / MSECS_PER_HOUR;
-}
-
-/*!
- Returns the minute part (0..59) of the time.
-*/
-
-int QTime::minute() const
-{
- return (ds % MSECS_PER_HOUR)/MSECS_PER_MIN;
-}
-
-/*!
- Returns the second part (0..59) of the time.
-*/
-
-int QTime::second() const
-{
- return (ds / 1000)%SECS_PER_MIN;
-}
-
-/*!
- Returns the millisecond part (0..999) of the time.
-*/
-
-int QTime::msec() const
-{
- return ds % 1000;
-}
-
-
-/*!
- Returns the time of this object in a textual format. Milliseconds
- are not included. The string format is HH:MM:SS, e.g. 1 second
- before midnight would be "23:59:59".
-*/
-
-QCString QTime::toString() const
-{
- QCString buf;
- buf.sprintf( "%.2d:%.2d:%.2d", hour(), minute(), second() );
- return buf;
-}
-
-
-/*!
- Sets the time to hour \a h, minute \a m, seconds \a s and
- milliseconds \a ms.
-
- \a h must be in the range 0-23, \a m and \a s must be in the range
- 0-59, and \a ms must be in the range 0-999. Returns TRUE if the set
- time is valid, otherwise FALSE.
-
- \sa isValid()
-*/
-
-bool QTime::setHMS( int h, int m, int s, int ms )
-{
- if ( !isValid(h,m,s,ms) ) {
-#if defined(CHECK_RANGE)
- qWarning( "QTime::setHMS Invalid time %02d:%02d:%02d.%03d", h, m, s,
- ms );
-#endif
- ds = MSECS_PER_DAY; // make this invalid
- return FALSE;
- }
- ds = (h*SECS_PER_HOUR + m*SECS_PER_MIN + s)*1000 + ms;
- return TRUE;
-}
-
-/*!
- Returns a QTime object containing a time \a nsecs seconds later than
- the time of this object (or earlier if \a ms is negative).
-
- Note that the time will wrap if it passes midnight.
-
- Example:
- \code
- QTime n( 14, 0, 0 ); // n == 14:00:00
- QTime t;
- t = n.addSecs( 70 ); // t == 14:01:10
- t = n.addSecs( -70 ); // t == 13:58:50
- t = n.addSecs( 10*60*60 + 5 ); // t == 00:00:05
- t = n.addSecs( -15*60*60 ); // t == 23:00:00
- \endcode
-
- \sa addMSecs(), secsTo(), QDateTime::addSecs()
-*/
-
-QTime QTime::addSecs( int nsecs ) const
-{
- return addMSecs(nsecs*1000);
-}
-
-/*!
- Returns the number of seconds from this time to \a t (which is
- negative if \a t is earlier than this time).
-
- Since QTime measures time within a day and there are 86400 seconds
- in a day, the result is between -86400 and 86400.
-
- \sa addSecs() QDateTime::secsTo()
-*/
-
-int QTime::secsTo( const QTime &t ) const
-{
- return ((int)t.ds - (int)ds)/1000;
-}
-
-/*!
- Returns a QTime object containing a time \a ms milliseconds later than
- the time of this object (or earlier if \a ms is negative).
-
- Note that the time will wrap if it passes midnight. See addSecs()
- for an example.
-
- \sa addSecs(), msecsTo()
-*/
-
-QTime QTime::addMSecs( int ms ) const
-{
- QTime t;
- if ( ms < 0 ) {
- // % not well-defined for -ve, but / is.
- int negdays = (MSECS_PER_DAY-ms) / MSECS_PER_DAY;
- t.ds = ((int)ds + ms + negdays*MSECS_PER_DAY)
- % MSECS_PER_DAY;
- } else {
- t.ds = ((int)ds + ms) % MSECS_PER_DAY;
- }
- return t;
-}
-
-/*!
- Returns the number of milliseconds from this time to \a t (which is
- negative if \a t is earlier than this time).
-
- Since QTime measures time within a day and there are 86400000
- milliseconds in a day, the result is between -86400000 and 86400000.
-
- \sa secsTo()
-*/
-
-int QTime::msecsTo( const QTime &t ) const
-{
- return (int)t.ds - (int)ds;
-}
-
-
-/*!
- \fn bool QTime::operator==( const QTime &t ) const
-
- Returns TRUE if this time is equal to \a t, or FALSE if they are
- different.
-*/
-
-/*!
- \fn bool QTime::operator!=( const QTime &t ) const
-
- Returns TRUE if this time is different from \a t, or FALSE if they
- are equal.
-*/
-
-/*!
- \fn bool QTime::operator<( const QTime &t ) const
-
- Returns TRUE if this time is earlier than \a t, otherwise FALSE.
-*/
-
-/*!
- \fn bool QTime::operator<=( const QTime &t ) const
-
- Returns TRUE if this time is earlier than or equal to \a t,
- otherwise FALSE.
-*/
-
-/*!
- \fn bool QTime::operator>( const QTime &t ) const
-
- Returns TRUE if this time is later than \a t, otherwise FALSE.
-*/
-
-/*!
- \fn bool QTime::operator>=( const QTime &t ) const
-
- Returns TRUE if this time is later than or equal to \a t, otherwise
- FALSE.
-*/
-
-
-
-/*!
- Returns the current time, as reported by the system clock.
-
- Note that the accuracy depends on the accuracy of the underlying
- operating system; not all systems provide 1-millisecond accuracy.
-*/
-
-QTime QTime::currentTime()
-{
- QTime ct;
- currentTime( &ct );
- return ct;
-}
-
-/*!
- \internal
-
- Fetches the current time and returns TRUE if the time is within one
- minute after midnight, otherwise FALSE. The return value is used by
- QDateTime::currentDateTime() to ensure that the date there is correct.
-*/
-
-bool QTime::currentTime( QTime *ct )
-{
- if ( !ct ) {
-#if defined(CHECK_NULL)
- qWarning( "QTime::currentTime(QTime *): Null pointer not allowed" );
-#endif
- return FALSE;
- }
-
-#if defined(_OS_WIN32_)
-
- SYSTEMTIME t;
- GetLocalTime( &t );
- ct->ds = MSECS_PER_HOUR*t.wHour + MSECS_PER_MIN*t.wMinute +
- 1000*t.wSecond + t.wMilliseconds;
- return (t.wHour == 0 && t.wMinute == 0);
-
-#elif defined(_OS_OS2_)
-
- DATETIME t;
- DosGetDateTime( &t );
- ct->ds = MSECS_PER_HOUR*t.hours + MSECS_PER_MIN*t.minutes +
- 1000*t.seconds + 10*t.hundredths;
- return (t.hours == 0 && t.minutes == 0);
-
-#elif defined(_OS_MSDOS_)
-
- _dostime_t t;
- _dos_gettime( &t );
- ct->ds = MSECS_PER_HOUR*t.hour + MSECS_PER_MIN*t.minute +
- t.second*1000 + t.hsecond*10;
- return (t.hour== 0 && t.minute == 0);
-
-#elif defined(_OS_UNIX_) || defined(_OS_MAC_)
-
- struct timeval tv;
- gettimeofday( &tv, 0 );
- time_t ltime = tv.tv_sec;
- tm *t = localtime( &ltime );
- ct->ds = (uint)( MSECS_PER_HOUR*t->tm_hour + MSECS_PER_MIN*t->tm_min +
- 1000*t->tm_sec + tv.tv_usec/1000 );
- return (t->tm_hour== 0 && t->tm_min == 0);
-
-#else
-
- time_t ltime; // no millisecond resolution!!
- ::time( &ltime );
- tm *t = localtime( &ltime );
- ct->ds = MSECS_PER_HOUR*t->tm_hour + MSECS_PER_MIN*t->tm_min +
- 1000*t->tm_sec;
- return (t->tm_hour== 0 && t->tm_min == 0);
-#endif
-}
-
-/*!
- Returns TRUE if the specified time is valid, otherwise FALSE.
-
- The time is valid if \a h is in the range 0-23, \a m and \a s are in
- the range 0-59, and \a ms is in the range 0-999.
-
- Example:
- \code
- QTime::isValid(21, 10, 30); // returns TRUE
- QTime::isValid(22, 5, 62); // returns FALSE
- \endcode
-*/
-
-bool QTime::isValid( int h, int m, int s, int ms )
-{
- return (uint)h < 24 && (uint)m < 60 && (uint)s < 60 && (uint)ms < 1000;
-}
-
-
-/*!
- Sets this time to the current time. This is practical for timing:
-
- \code
- QTime t;
- t.start(); // start clock
- ... // some lengthy task
- qDebug( "%d\n", t.elapsed() ); // prints # msecs elapsed
- \endcode
-
- \sa restart(), elapsed(), currentTime()
-*/
-
-void QTime::start()
-{
- *this = currentTime();
-}
-
-/*!
- Sets this time to the current time, and returns the number of
- milliseconds that have elapsed since the last time start() or
- restart() was called.
-
- This function is guaranteed to be atomic, and is thus very handy for
- repeated measurements: call start() to start the first measurement,
- then restart() for each later measurement.
-
- Note that the counter wraps to zero 24 hours after the last call to
- start() or restart().
-
- \warning If the system's clock setting has been changed since the
- last time start() or restart() was called, the result is undefined.
- This can happen e.g. when daylight saving is turned on or off.
-
- \sa start(), elapsed(), currentTime()
-*/
-
-int QTime::restart()
-{
- QTime t = currentTime();
- int n = msecsTo( t );
- if ( n < 0 ) // passed midnight
- n += 86400*1000;
- *this = t;
- return n;
-}
-
-/*!
- Returns the number of milliseconds that have elapsed since the last
- time start() or restart() was called.
-
- Note that the counter wraps to zero 24 hours after the last call to
- start() or restart.
-
- Note that the accuracy depends on the accuracy of the underlying
- operating system; not all systems provide 1-millisecond accuracy.
-
- \warning If the system's clock setting has been changed since the
- last time start() or restart() was called, the result is undefined.
- This can happen e.g. when daylight saving is turned on or off.
-
- \sa start(), restart()
-*/
-
-int QTime::elapsed()
-{
- int n = msecsTo( currentTime() );
- if ( n < 0 ) // passed midnight
- n += 86400*1000;
- return n;
-}
-
-
-/*****************************************************************************
- QDateTime member functions
- *****************************************************************************/
-
-/*!
- \class QDateTime qdatetime.h
- \brief The QDateTime class provides date and time functions.
-
- \ingroup time
-
- A QDateTime object contains a calendar date and a clock time (a
- "datetime"). It is a combination of the QDate and QTime classes. It
- can read the current datetime from the system clock. It provides
- functions for comparing datetimes and for manipulating a datetime by
- adding a number of seconds or days.
-
- A QDateTime object is typically created either by giving a date and
- time explicitly, or by using the static function currentTime(),
- which makes a QDateTime object which contains the system's clock
- time.
-
- The date() and time() functions provide access to the date and time
- parts of the datetime. The same information is provided in textual
- format by the toString() function.
-
- QDateTime provides a full set of operators to compare two QDateTime
- objects. A datetime is considered smaller than another if it is
- earlier than the other.
-
- The datetime a given number of days or seconds later than a given
- datetime can be found using the addDays() and addSecs()
- functions. Correspondingly, the number of days or seconds between
- two times can be found using the daysTo() or secsTo() functions.
-
- A datetime can also be set using the setTime_t() function, which
- takes a POSIX-standard "number of seconds since 00:00:00 on January
- 1, 1970" value.
-
- The limitations regarding range and resolution mentioned in the
- QDate and QTime documentation apply for QDateTime also.
-
- \sa QDate, QTime
-*/
-
-
-/*!
- \fn QDateTime::QDateTime()
-
- Constructs a null datetime (i.e. null date and null time). A null
- datetime is invalid, since the date is invalid.
-
- \sa isValid()
-*/
-
-
-/*!
- Constructs a datetime with date \a date and null time (00:00:00.000).
-*/
-
-QDateTime::QDateTime( const QDate &date )
- : d(date)
-{
-}
-
-/*!
- Constructs a datetime with date \a date and time \a time.
-*/
-
-QDateTime::QDateTime( const QDate &date, const QTime &time )
- : d(date), t(time)
-{
-}
-
-
-/*!
- \fn bool QDateTime::isNull() const
-
- Returns TRUE if both the date and the time are null. A null date is invalid.
-
- \sa QDate::isNull(), QTime::isNull()
-*/
-
-/*!
- \fn bool QDateTime::isValid() const
-
- Returns TRUE if both the date and the time are valid.
-
- \sa QDate::isValid(), QTime::isValid()
-*/
-
-/*!
- \fn QDate QDateTime::date() const
-
- Returns the date part of this datetime.
-
- \sa setDate(), time()
-*/
-
-/*!
- \fn QTime QDateTime::time() const
-
- Returns the time part of this datetime.
-
- \sa setTime(), date()
-*/
-
-/*!
- \fn void QDateTime::setDate( const QDate &date )
-
- Sets the date part of this datetime.
-
- \sa date(), setTime()
-*/
-
-/*!
- \fn void QDateTime::setTime( const QTime &time )
-
- Sets the time part of this datetime.
-
- \sa time(), setDate()
-*/
-
-
-/*!
- Sets the local date and time given the number of seconds that have passed
- since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
- On systems that do not support timezones this function will behave as if
- local time were UTC.
-
- Note that Microsoft Windows supports only a limited range of values for
- \a secsSince1Jan1970UTC.
-*/
-
-void QDateTime::setTime_t( uint secsSince1Jan1970UTC )
-{
- time_t tmp = (time_t) secsSince1Jan1970UTC;
- tm *tM = localtime( &tmp );
- if ( !tM ) {
- tM = gmtime( &tmp );
- if ( !tM ) {
- d.jd = QDate::greg2jul( 1970, 1, 1 );
- t.ds = 0;
- return;
- }
- }
- d.jd = QDate::greg2jul( tM->tm_year + 1900, tM->tm_mon + 1, tM->tm_mday );
- t.ds = MSECS_PER_HOUR*tM->tm_hour + MSECS_PER_MIN*tM->tm_min +
- 1000*tM->tm_sec;
-}
-
-
-/*!
- Sets the UTC date and time given the number of seconds that have passed
- since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
-
- Note that Microsoft Windows supports only a limited range of values for
- \a secsSince1Jan1970UTC.
-*/
-
-void QDateTime::setTimeUtc_t( uint secsSince1Jan1970UTC )
-{
- time_t tmp = (time_t) secsSince1Jan1970UTC;
- tm *tM = gmtime( &tmp );
- if ( !tM ) {
- d.jd = QDate::greg2jul( 1970, 1, 1 );
- t.ds = 0;
- return;
- }
- d.jd = QDate::greg2jul( tM->tm_year + 1900, tM->tm_mon + 1, tM->tm_mday );
- t.ds = MSECS_PER_HOUR*tM->tm_hour + MSECS_PER_MIN*tM->tm_min +
- 1000*tM->tm_sec;
-}
-
-
-/*!
- Returns the datetime as a string.
-
- The string format is "Sat May 20 03:40:13 1998".
-
- This function uses QDate::dayName(), QDate::monthName(), and
- QTime::toString() to generate the string.
-
-*/
-
-QCString QDateTime::toString() const
-{
- QCString buf = d.dayName(d.dayOfWeek());
- buf += ' ';
- buf += d.monthName(d.month());
- buf += ' ';
- buf += QCString().setNum(d.day());
- buf += ' ';
- buf += t.toString();
- buf += ' ';
- buf += QCString().setNum(d.year());
- return buf;
-}
-
-/*!
- Returns a QDateTime object containing a datetime \a ndays days later
- than the datetime of this object (or earlier if \a ndays is
- negative).
-
- \sa daysTo(), addSecs()
-*/
-
-QDateTime QDateTime::addDays( int ndays ) const
-{
- return QDateTime( d.addDays(ndays), t );
-}
-
-/*!
- Returns a QDateTime object containing a datetime \a nsecs seconds
- later than the datetime of this object (or earlier if \a nsecs is
- negative).
-
- \sa secsTo(), addDays()
-*/
-
-QDateTime QDateTime::addSecs( int nsecs ) const
-{
- uint dd = d.jd;
- int tt = t.ds;
- int sign = 1;
- if ( nsecs < 0 ) {
- nsecs = -nsecs;
- sign = -1;
- }
- if ( nsecs >= (int)SECS_PER_DAY ) {
- dd += sign*(nsecs/SECS_PER_DAY);
- nsecs %= SECS_PER_DAY;
- }
- tt += sign*nsecs*1000;
- if ( tt < 0 ) {
- tt = MSECS_PER_DAY - tt - 1;
- dd -= tt / MSECS_PER_DAY;
- tt = tt % MSECS_PER_DAY;
- tt = MSECS_PER_DAY - tt - 1;
- } else if ( tt >= (int)MSECS_PER_DAY ) {
- dd += ( tt / MSECS_PER_DAY );
- tt = tt % MSECS_PER_DAY;
- }
- QDateTime ret;
- ret.t.ds = tt;
- ret.d.jd = dd;
- return ret;
-}
-
-/*!
- Returns the number of days from this datetime to \a dt (which is
- negative if \a dt is earlier than this datetime).
-
- \sa addDays(), secsTo()
-*/
-
-int QDateTime::daysTo( const QDateTime &dt ) const
-{
- return d.daysTo( dt.d );
-}
-
-/*!
- Returns the number of seconds from this datetime to \a dt (which is
- negative if \a dt is earlier than this datetime).
-
- Example:
- \code
- QDateTime dt = QDateTime::currentDateTime();
- QDateTime x( QDate(dt.year(),12,24), QTime(17,00) );
- qDebug( "There are %d seconds to Christmas", dt.secsTo(x) );
- \endcode
-
- \sa addSecs(), daysTo(), QTime::secsTo()
-*/
-
-int QDateTime::secsTo( const QDateTime &dt ) const
-{
- return t.secsTo(dt.t) + d.daysTo(dt.d)*SECS_PER_DAY;
-}
-
-
-/*!
- Returns TRUE if this datetime is equal to \a dt, or FALSE if
- they are different.
- \sa operator!=()
-*/
-
-bool QDateTime::operator==( const QDateTime &dt ) const
-{
- return t == dt.t && d == dt.d;
-}
-
-/*!
- Returns TRUE if this datetime is different from \a dt, or FALSE if
- they are equal.
- \sa operator==()
-*/
-
-bool QDateTime::operator!=( const QDateTime &dt ) const
-{
- return t != dt.t || d != dt.d;
-}
-
-/*!
- Returns TRUE if this datetime is earlier than \a dt, otherwise FALSE.
-*/
-
-bool QDateTime::operator<( const QDateTime &dt ) const
-{
- if ( d < dt.d )
- return TRUE;
- return d == dt.d ? t < dt.t : FALSE;
-}
-
-/*!
- Returns TRUE if this datetime is earlier than or equal to \a dt,
- otherwise FALSE.
-*/
-
-bool QDateTime::operator<=( const QDateTime &dt ) const
-{
- if ( d < dt.d )
- return TRUE;
- return d == dt.d ? t <= dt.t : FALSE;
-}
-
-/*!
- Returns TRUE if this datetime is later than \a dt, otherwise FALSE.
-*/
-
-bool QDateTime::operator>( const QDateTime &dt ) const
-{
- if ( d > dt.d )
- return TRUE;
- return d == dt.d ? t > dt.t : FALSE;
-}
-
-/*!
- Returns TRUE if this datetime is later than or equal to \a dt,
- otherwise FALSE.
-*/
-
-bool QDateTime::operator>=( const QDateTime &dt ) const
-{
- if ( d > dt.d )
- return TRUE;
- return d == dt.d ? t >= dt.t : FALSE;
-}
-
-/*!
- Returns the current datetime, as reported by the system clock.
-
- \sa QDate::currentDate(), QTime::currentTime()
-*/
-
-QDateTime QDateTime::currentDateTime()
-{
- QDate cd = QDate::currentDate();
- QTime ct;
- if ( QTime::currentTime(&ct) ) // too close to midnight?
- cd = QDate::currentDate(); // YES! time for some midnight
- // voodoo, fetch date again
- return QDateTime( cd, ct );
-}
-
-
-/*****************************************************************************
- Date/time stream functions
- *****************************************************************************/
-
-#ifndef QT_NO_DATASTREAM
-/*!
- \relates QDate
- Writes the date to the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator<<( QDataStream &s, const QDate &d )
-{
- return s << (Q_UINT32)(d.jd);
-}
-
-/*!
- \relates QDate
- Reads a date from the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator>>( QDataStream &s, QDate &d )
-{
- Q_UINT32 jd;
- s >> jd;
- d.jd = jd;
- return s;
-}
-
-/*!
- \relates QTime
- Writes a time to the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator<<( QDataStream &s, const QTime &t )
-{
- return s << (Q_UINT32)(t.ds);
-}
-
-/*!
- \relates QTime
- Reads a time from the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator>>( QDataStream &s, QTime &t )
-{
- Q_UINT32 ds;
- s >> ds;
- t.ds = ds;
- return s;
-}
-
-/*!
- \relates QDateTime
- Writes a datetime to the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator<<( QDataStream &s, const QDateTime &dt )
-{
- return s << dt.d << dt.t;
-}
-
-/*!
- \relates QDateTime
- Reads a datetime from the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator>>( QDataStream &s, QDateTime &dt )
-{
- s >> dt.d >> dt.t;
- return s;
-}
-#endif //QT_NO_DATASTREAM
diff --git a/qtools/qdatetime.h b/qtools/qdatetime.h
deleted file mode 100644
index 63007f3..0000000
--- a/qtools/qdatetime.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of date and time classes
-**
-** Created : 940124
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QDATETIME_H
-#define QDATETIME_H
-
-#ifndef QT_H
-#include "qcstring.h"
-#endif // QT_H
-
-
-/*****************************************************************************
- QDate class
- *****************************************************************************/
-
-class Q_EXPORT QDate
-{
-public:
- QDate() { jd=0; } // set null date
- QDate( int y, int m, int d ); // set date
- virtual ~QDate() {}
-
- bool isNull() const { return jd == 0; }
- bool isValid() const; // valid date
-
- int year() const; // 1752..
- int month() const; // 1..12
- int day() const; // 1..31
- int dayOfWeek() const; // 1..7 (monday==1)
- int dayOfYear() const; // 1..365
- int daysInMonth() const; // 28..31
- int daysInYear() const; // 365 or 366
-
- virtual QCString monthName( int month ) const;
- virtual QCString dayName( int weekday ) const;
-
- QCString toString() const;
-
- bool setYMD( int y, int m, int d );
-
- QDate addDays( int days ) const;
- int daysTo( const QDate & ) const;
-
- bool operator==( const QDate &d ) const { return jd == d.jd; }
- bool operator!=( const QDate &d ) const { return jd != d.jd; }
- bool operator<( const QDate &d ) const { return jd < d.jd; }
- bool operator<=( const QDate &d ) const { return jd <= d.jd; }
- bool operator>( const QDate &d ) const { return jd > d.jd; }
- bool operator>=( const QDate &d ) const { return jd >= d.jd; }
-
- static QDate currentDate();
- static bool isValid( int y, int m, int d );
- static bool leapYear( int year );
-
-protected:
- static uint greg2jul( int y, int m, int d );
- static void jul2greg( uint jd, int &y, int &m, int &d );
-private:
- static const char * const monthNames[];
- static const char * const weekdayNames[];
- uint jd;
- friend class QDateTime;
-#ifndef QT_NO_DATASTREAM
- friend Q_EXPORT QDataStream &operator<<( QDataStream &, const QDate & );
- friend Q_EXPORT QDataStream &operator>>( QDataStream &, QDate & );
-#endif
-};
-
-
-/*****************************************************************************
- QTime class
- *****************************************************************************/
-
-class Q_EXPORT QTime
-{
-public:
- QTime() { ds=0; } // set null time
- QTime( int h, int m, int s=0, int ms=0 ); // set time
-
- bool isNull() const { return ds == 0; }
- bool isValid() const; // valid time
-
- int hour() const; // 0..23
- int minute() const; // 0..59
- int second() const; // 0..59
- int msec() const; // 0..999
-
- QCString toString() const;
-
- bool setHMS( int h, int m, int s, int ms=0 );
-
- QTime addSecs( int secs ) const;
- int secsTo( const QTime & ) const;
- QTime addMSecs( int ms ) const;
- int msecsTo( const QTime & ) const;
-
- bool operator==( const QTime &d ) const { return ds == d.ds; }
- bool operator!=( const QTime &d ) const { return ds != d.ds; }
- bool operator<( const QTime &d ) const { return ds < d.ds; }
- bool operator<=( const QTime &d ) const { return ds <= d.ds; }
- bool operator>( const QTime &d ) const { return ds > d.ds; }
- bool operator>=( const QTime &d ) const { return ds >= d.ds; }
-
- static QTime currentTime();
- static bool isValid( int h, int m, int s, int ms=0 );
-
- void start();
- int restart();
- int elapsed();
-
-private:
- static bool currentTime( QTime * );
-
- uint ds;
- friend class QDateTime;
-#ifndef QT_NO_DATASTREAM
- friend Q_EXPORT QDataStream &operator<<( QDataStream &, const QTime & );
- friend Q_EXPORT QDataStream &operator>>( QDataStream &, QTime & );
-#endif
-};
-
-
-/*****************************************************************************
- QDateTime class
- *****************************************************************************/
-
-class Q_EXPORT QDateTime
-{
-public:
- QDateTime() {} // set null date and null time
- QDateTime( const QDate & );
- QDateTime( const QDate &, const QTime & );
-
- bool isNull() const { return d.isNull() && t.isNull(); }
- bool isValid() const { return d.isValid() && t.isValid(); }
-
- QDate date() const { return d; }
- QTime time() const { return t; }
- void setDate( const QDate &date ) { d=date; }
- void setTime( const QTime &time ) { t=time; }
- void setTime_t( uint secsSince1Jan1970UTC );
- void setTimeUtc_t( uint secsSince1Jan1970UTC );
-
- QCString toString() const;
-
- QDateTime addDays( int days ) const;
- QDateTime addSecs( int secs ) const;
- int daysTo( const QDateTime & ) const;
- int secsTo( const QDateTime & ) const;
-
- bool operator==( const QDateTime &dt ) const;
- bool operator!=( const QDateTime &dt ) const;
- bool operator<( const QDateTime &dt ) const;
- bool operator<=( const QDateTime &dt ) const;
- bool operator>( const QDateTime &dt ) const;
- bool operator>=( const QDateTime &dt ) const;
-
- static QDateTime currentDateTime();
-
-private:
- QDate d;
- QTime t;
-#ifndef QT_NO_DATASTREAM
- friend Q_EXPORT QDataStream &operator<<( QDataStream &, const QDateTime &);
- friend Q_EXPORT QDataStream &operator>>( QDataStream &, QDateTime & );
-#endif
-};
-
-
-/*****************************************************************************
- Date and time stream functions
- *****************************************************************************/
-
-#ifndef QT_NO_DATASTREAM
-Q_EXPORT QDataStream &operator<<( QDataStream &, const QDate & );
-Q_EXPORT QDataStream &operator>>( QDataStream &, QDate & );
-Q_EXPORT QDataStream &operator<<( QDataStream &, const QTime & );
-Q_EXPORT QDataStream &operator>>( QDataStream &, QTime & );
-Q_EXPORT QDataStream &operator<<( QDataStream &, const QDateTime & );
-Q_EXPORT QDataStream &operator>>( QDataStream &, QDateTime & );
-#endif // QT_NO_DATASTREAM
-
-#endif // QDATETIME_H
diff --git a/qtools/qdict.doc b/qtools/qdict.doc
deleted file mode 100644
index bf1ea01..0000000
--- a/qtools/qdict.doc
+++ /dev/null
@@ -1,492 +0,0 @@
-/****************************************************************************
-**
-**
-** QDict and QDictIterator class documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QDict documentation
- *****************************************************************************/
-
-/*!
- \class QDict qdict.h
- \brief The QDict class is a template class that provides a dictionary based on \c QString keys.
-
- \ingroup collection
- \ingroup tools
-
- QDict is implemented as a template class. Define a template instance
- QDict\<X\> to create a dictionary that operates on pointers to X, or X*.
-
- A dictionary is a collection that associates an item with a key.
- The key is used for inserting and looking up an item. QDict has
- \l QString keys, which are Unicode strings. If you want to use
- non-Unicode, plain 8-bit \c char* keys, use the QAsciiDict template.
- A QDict has the same performance as a QAsciiDict.
-
- The dictionary has very fast insertion and lookup.
-
- Example:
- \code
- #include <qdict.h>
- #include <stdio.h>
-
- void main()
- {
- // Creates a dictionary that maps QString ==> char* (case insensitive)
- QDict<char> dict( 17, FALSE );
-
- dict.insert( "France", "Paris" );
- dict.insert( "Russia", "Moscow" );
- dict.insert( "Norway", "Oslo" );
-
- printf( "%s\n", dict["Norway"] );
- printf( "%s\n", dict["FRANCE"] );
- printf( "%s\n", dict["russia"] );
-
- if ( !dict["Italy"] )
- printf( "Italy not defined\n" );
- }
- \endcode
-
- Program output:
- \code
- Oslo
- Paris
- Moscow
- Italy not defined
- \endcode
-
- The dictionary in our example maps \c QString keys to \c char* items.
- Note that the mapping is case insensitive (specified in the
- \link QDict::QDict() constructor\endlink).
- QDict implements the \link operator[] [] operator\endlink to lookup an item.
-
- QDict is implemented by QGDict as a hash array with a fixed number of
- entries. Each array entry points to a singly linked list of buckets, in
- which the dictionary items are stored.
-
- When an item is inserted with a key, the key is converted (hashed) to
- an integer index into the hash array. The item is inserted before the
- first bucket in the list of buckets.
-
- Looking up an item is normally very fast. The key is again hashed to an
- array index. Then QDict scans the list of buckets and returns the item
- found or null if the item was not found. You cannot insert null pointers
- into a dictionary.
-
- The size of the hash array is very important. In order to get good
- performance, you should use a suitably large \link primes.html prime
- number\endlink. Suitable means equal to or larger than the maximum
- expected number of dictionary items.
-
- Items with equal keys are allowed. When inserting two items with the
- same key, only the last inserted item will be visible (last in, first out)
- until it is removed.
-
- Example:
- \code
- #include <qdict.h>
- #include <stdio.h>
-
- void main()
- {
- // Creates a dictionary that maps QString ==> char* (case sensitive)
- QDict<char> dict;
-
- dict.insert( "Germany", "Berlin" );
- dict.insert( "Germany", "Bonn" );
-
- printf( "%s\n", dict["Germany"] );
- dict.remove( "Germany" ); // Oct 3rd 1990
- printf( "%s\n", dict["Germany"] );
- }
- \endcode
-
- Program output:
- \code
- Bonn
- Berlin
- \endcode
-
- The QDictIterator class can traverse the dictionary contents, but only
- in an arbitrary order. Multiple iterators may independently traverse the
- same dictionary.
-
- Calling setAutoDelete(TRUE) for a dictionary tells it to delete items
- that are removed . The default is to not delete items when they are
- removed.
-
- When inserting an item into a dictionary, only the pointer is copied, not
- the item itself. This is called a shallow copy. It is possible to make the
- dictionary copy all of the item's data (known as a deep copy) when an
- item is inserted. insert() calls the virtual function
- QCollection::newItem() for the item to be inserted.
- Inherit a dictionary and reimplement it if you want deep copies.
-
- When removing a dictionary item, the virtual function
- QCollection::deleteItem() is called. QDict's default implementation
- is to delete the item if auto-deletion is enabled.
-
- \sa QDictIterator, QAsciiDict, QIntDict, QPtrDict,
- \link collection.html Collection Classes\endlink
-*/
-
-
-/*!
- \fn QDict::QDict( int size, bool caseSensitive )
- Constructs a dictionary with the following properties:
- \arg \e size is the size of the internal hash array.
- \arg \e caseSensitive specifies whether to use case sensitive lookup or not.
-
- Setting \e size to a suitably large \link primes.html prime
- number\endlink (equal to or greater than the expected number of entries)
- makes the hash distribution better and hence the lookup faster.
-
- Setting \e caseSensitive to TRUE will treat "abc" and "Abc" as different
- keys. Setting it to FALSE will make the dictionary ignore case.
- Case insensitive comparison includes the whole Unicode alphabet.
-*/
-
-/*!
- \fn QDict::QDict( const QDict<type> &dict )
- Constructs a copy of \e dict.
-
- Each item in \e dict are inserted into this dictionary.
- Only the pointers are copied (shallow copy).
-*/
-
-/*!
- \fn QDict::~QDict()
- Removes all items from the dictionary and destroys it.
- All iterators that access this dictionary will be reset.
-
- \sa setAutoDelete()
-*/
-
-/*!
- \fn QDict<type> &QDict::operator=(const QDict<type> &dict)
- Assigns \e dict to this dictionary and returns a reference to this
- dictionary.
-
- This dictionary is first cleared, then each item in \e dict is inserted
- into this dictionary.
- Only the pointers are copied (shallow copy), unless newItem() has been
- reimplemented().
-*/
-
-/*!
- \fn uint QDict::count() const
- Returns the number of items in the dictionary.
- \sa isEmpty()
-*/
-
-/*!
- \fn uint QDict::size() const
- Returns the size of the internal hash array (as specified in the
- constructor).
- \sa count()
-*/
-
-/*!
- \fn void QDict::resize( uint newsize )
- Changes the size of the hashtable the \a newsize.
- The contents of the dictionary are preserved,
- but all iterators on the dictionary become invalid.
-*/
-
-/*!
- \fn bool QDict::isEmpty() const
- Returns TRUE if the dictionary is empty, i.e. count() == 0. Returns FALSE
- otherwise.
- \sa count()
-*/
-
-/*!
- \fn void QDict::insert( const QString &key, const type *item )
-
- Inserts the \e key with the \e item into the dictionary.
-
- The key does not have to be a unique dictionary key. If multiple items
- are inserted with the same key, only the last item will be visible.
-
- Null items are not allowed.
-
- \sa replace()
-*/
-
-/*!
- \fn void QDict::replace( const QString &key, const type *item )
-
- Replaces an item which has a key equal to \e key with \e item.
-
- If the item does not already exist, it will be inserted.
-
- Null items are not allowed.
-
- Equivalent to:
- \code
- QDict<char> dict;
- ...
- if ( dict.find(key) )
- dict.remove( key );
- dict.insert( key, item );
- \endcode
-
- If there are two or more items with equal keys, then the last inserted
- of these will be replaced.
-
- \sa insert()
-*/
-
-/*!
- \fn bool QDict::remove( const QString &key )
-
- Removes the item associated with \e key from the dictionary.
- Returns TRUE if successful, or FALSE if the key does not exist in the
- dictionary.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be removed.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- All dictionary iterators that refer to the removed item will be set to
- point to the next item in the dictionary traversing order.
-
- \sa take(), clear(), setAutoDelete()
-*/
-
-/*!
- \fn type *QDict::take( const QString &key )
-
- Takes the item associated with \e key out of the dictionary without
- deleting it (even if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled).
-
- If there are two or more items with equal keys, then the last inserted
- of these will be taken.
-
- Returns a pointer to the item taken out, or null if the key does not
- exist in the dictionary.
-
- All dictionary iterators that refer to the taken item will be set to
- point to the next item in the dictionary traversal order.
-
- \sa remove(), clear(), setAutoDelete()
-*/
-
-/*!
- \fn void QDict::clear()
-
- Removes all items from the dictionary.
-
- The removed items are deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- All dictionary iterators that operate on dictionary are reset.
-
- \sa remove(), take(), setAutoDelete()
-*/
-
-/*!
- \fn type *QDict::find( const QString &key ) const
-
- Returns the item associated with \e key, or null if the key does not
- exist in the dictionary.
-
- This function uses an internal hashing algorithm to optimize lookup.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be found.
-
- Equivalent to the [] operator.
-
- \sa operator[]()
-*/
-
-/*!
- \fn type *QDict::operator[]( const QString &key ) const
-
- Returns the item associated with \e key, or null if the key does not
- exist in the dictionary.
-
- This function uses an internal hashing algorithm to optimize lookup.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be found.
-
- Equivalent to the find() function.
-
- \sa find()
-*/
-
-/*!
- \fn void QDict::statistics() const
- Debugging-only function that prints out the dictionary distribution
- using qDebug().
-*/
-
-
-/*****************************************************************************
- QDictIterator documentation
- *****************************************************************************/
-
-/*!
- \class QDictIterator qdict.h
- \brief The QDictIterator class provides an iterator for QDict collections.
-
- \ingroup collection
- \ingroup tools
-
- QDictIterator is implemented as a template class.
- Define a template instance QDictIterator\<X\> to create a
- dictionary iterator that operates on QDict\<X\> (dictionary of X*).
-
- Example:
- \code
- #include <qdict.h>
- #include <stdio.h>
-
- void main()
- {
- // Creates a dictionary that maps QString ==> char* (case insensitive)
- QDict<char> dict( 17, FALSE );
-
- dict.insert( "France", "Paris" );
- dict.insert( "Russia", "Moscow" );
- dict.insert( "Norway", "Oslo" );
-
- QDictIterator<char> it( dict ); // iterator for dict
-
- while ( it.current() ) {
- printf( "%s -> %s\n", it.currentKey().latin1(), it.current() );
- ++it;
- }
- }
- \endcode
-
- Program output:
- \code
- Russia -> Moscow
- Norway -> Oslo
- France -> Paris
- \endcode
-
- Note that the traversal order is arbitrary, you are not guaranteed the
- order above.
-
- Multiple iterators may independently traverse the same dictionary.
- A QDict knows about all iterators that are operating on the dictionary.
- When an item is removed from the dictionary, QDict update all iterators
- that are referring the removed item to point to the next item in the
- traversing order.
-
- \sa QDict, \link collection.html Collection Classes\endlink
-*/
-
-/*!
- \fn QDictIterator::QDictIterator( const QDict<type> &dict )
- Constructs an iterator for \e dict. The current iterator item is
- set to point on the first item in the \e dict.
-*/
-
-/*!
- \fn QDictIterator::~QDictIterator()
- Destroys the iterator.
-*/
-
-/*!
- \fn uint QDictIterator::count() const
- Returns the number of items in the dictionary this iterator operates on.
- \sa isEmpty()
-*/
-
-/*!
- \fn bool QDictIterator::isEmpty() const
- Returns TRUE if the dictionary is empty, i.e. count() == 0, otherwise FALSE.
- \sa count()
-*/
-
-/*!
- \fn type *QDictIterator::toFirst()
- Sets the current iterator item to point to the first item in the
- dictionary and returns a pointer to the item.
- If the dictionary is empty it sets the current item to null and
- returns null.
-*/
-
-/*!
- \fn QDictIterator::operator type *() const
- Cast operator. Returns a pointer to the current iterator item.
- Same as current().
-*/
-
-/*!
- \fn type *QDictIterator::current() const
- Returns a pointer to the current iterator item.
-*/
-
-/*!
- \fn QString QDictIterator::currentKey() const
- Returns a pointer to the key for the current iterator item.
-*/
-
-/*!
- \fn type *QDictIterator::operator()()
- Makes the succeeding item current and returns the original current item.
-
- If the current iterator item was the last item in the dictionary or if it
- was null, null is returned.
-*/
-
-/*!
- \fn type *QDictIterator::operator++()
- Prefix ++ makes the succeeding item current and returns the new current
- item.
-
- If the current iterator item was the last item in the dictionary or if it
- was null, null is returned.
-*/
-
-/*!
- \fn type *QDictIterator::operator+=( uint jump )
- Sets the current item to the item \e jump positions after the current item,
- and returns a pointer to that item.
-
- If that item is beyond the last item or if the dictionary is empty,
- it sets the current item to null and returns null.
-*/
-
-
diff --git a/qtools/qdict.h b/qtools/qdict.h
deleted file mode 100644
index 12db365..0000000
--- a/qtools/qdict.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QDict template class
-**
-** Created : 920821
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QDICT_H
-#define QDICT_H
-
-#ifndef QT_H
-#include "qgdict.h"
-#endif // QT_H
-
-#define QAsciiDict QDict
-#define QAsciiDictIterator QDictIterator
-#include "qasciidict.h"
-
-#endif // QDICT_H
diff --git a/qtools/qdir.cpp b/qtools/qdir.cpp
deleted file mode 100644
index 782a9c6..0000000
--- a/qtools/qdir.cpp
+++ /dev/null
@@ -1,1200 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QDir class
-**
-** Created : 950427
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglobal.h"
-
-#include "qdir.h"
-
-#ifndef QT_NO_DIR
-#include "qfileinfo.h"
-#include "qfiledefs_p.h"
-#include "qregexp.h"
-#include "qstringlist.h"
-#include <stdlib.h>
-#include <ctype.h>
-
-// NOT REVISED
-/*!
- \class QDir qdir.h
- \brief Traverses directory structures and contents in a
- platform-independent way.
-
- \ingroup io
-
- A QDir can point to a file using either a relative or an absolute file
- path. Absolute file paths begin with the directory separator ('/') or a
- drive specification (not applicable to UNIX). Relative file names begin
- with a directory name or a file name and specify a path relative to the
- current directory.
-
- An example of an absolute path is the string "/tmp/quartz", a relative
- path might look like "src/fatlib". You can use the function isRelative()
- to check if a QDir is using a relative or an absolute file path. You can
- call the function convertToAbs() to convert a relative QDir to an
- absolute one.
-
- The directory "example" under the current directory is checked for existence
- in the example below:
-
- \code
- QDir d( "example" ); // "./example"
- if ( !d.exists() )
- qWarning( "Cannot find the example directory" );
- \endcode
-
- If you always use '/' as a directory separator, Qt will translate your
- paths to conform to the underlying operating system.
-
- cd() and cdUp() can be used to navigate the directory tree. Note that the
- logical cd and cdUp operations are not performed if the new directory does
- not exist.
-
- Example:
- \code
- QDir d = QDir::root(); // "/"
- if ( !d.cd("tmp") ) { // "/tmp"
- qWarning( "Cannot find the \"/tmp\" directory" );
- } else {
- QFile f( d.filePath("ex1.txt") ); // "/tmp/ex1.txt"
- if ( !f.open(IO_ReadWrite) )
- qWarning( "Cannot create the file %s", f.name() );
- }
- \endcode
-
- To read the contents of a directory you can use the entryList() and
- entryInfoList() functions.
-
- Example:
- \code
- #include <stdio.h>
- #include <qdir.h>
-
- //
- // This program scans the current directory and lists all files
- // that are not symbolic links, sorted by size with the smallest files
- // first.
- //
-
- int main( int argc, char **argv )
- {
- QDir d;
- d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
- d.setSorting( QDir::Size | QDir::Reversed );
-
- const QFileInfoList *list = d.entryInfoList();
- QFileInfoListIterator it( *list ); // create list iterator
- QFileInfo *fi; // pointer for traversing
-
- printf( " BYTES FILENAME\n" ); // print header
- while ( (fi=it.current()) ) { // for each file...
- printf( "%10li %s\n", fi->size(), fi->fileName().data() );
- ++it; // goto next list element
- }
- }
- \endcode
-*/
-
-
-/*!
- Constructs a QDir pointing to the current directory.
- \sa currentDirPath()
-*/
-
-QDir::QDir()
-{
- dPath = QString::fromLatin1(".");
- init();
-}
-
-/*!
- Constructs a QDir.
-
- \arg \e path is the directory.
- \arg \e nameFilter is the file name filter.
- \arg \e sortSpec is the sort specification, which describes how to
- sort the files in the directory.
- \arg \e filterSpec is the filter specification, which describes how
- to filter the files in the directory.
-
- Most of these arguments (except \e path) have optional values.
-
- Example:
- \code
- // lists all files in /tmp
-
- QDir d( "/tmp" );
- for ( int i=0; i<d.count(); i++ )
- printf( "%s\n", d[i] );
- \endcode
-
- If \e path is "" or null, the directory is set to "." (the current
- directory). If \e nameFilter is "" or null, it is set to "*" (all
- files).
-
- No check is made to ensure that the directory exists.
-
- \sa exists(), setPath(), setNameFilter(), setFilter(), setSorting()
-*/
-
-QDir::QDir( const QString &path, const QString &nameFilter,
- int sortSpec, int filterSpec )
-{
- init();
- dPath = cleanDirPath( path );
- if ( dPath.isEmpty() )
- dPath = QString::fromLatin1(".");
- nameFilt = nameFilter;
- if ( nameFilt.isEmpty() )
- nameFilt = QString::fromLatin1("*");
- filtS = (FilterSpec)filterSpec;
- sortS = (SortSpec)sortSpec;
-}
-
-/*!
- Constructs a QDir that is a copy of the given directory.
- \sa operator=()
-*/
-
-QDir::QDir( const QDir &d )
-{
- dPath = d.dPath;
- fList = 0;
- fiList = 0;
- nameFilt = d.nameFilt;
- dirty = TRUE;
- allDirs = d.allDirs;
- filtS = d.filtS;
- sortS = d.sortS;
-}
-
-
-void QDir::init()
-{
- fList = 0;
- fiList = 0;
- nameFilt = QString::fromLatin1("*");
- dirty = TRUE;
- allDirs = FALSE;
- filtS = All;
- sortS = SortSpec(Name | IgnoreCase);
-}
-
-/*!
- Destructs the QDir and cleans up.
-*/
-
-QDir::~QDir()
-{
- if ( fList )
- delete fList;
- if ( fiList )
- delete fiList;
-}
-
-
-/*!
- Sets the path of the directory. The path is cleaned of redundant ".", ".."
- and multiple separators. No check is made to ensure that a directory
- with this path exists.
-
- The path can be either absolute or relative. Absolute paths begin with the
- directory separator ('/') or a drive specification (not
- applicable to UNIX).
- Relative file names begin with a directory name or a file name and specify
- a path relative to the current directory. An example of
- an absolute path is the string "/tmp/quartz", a relative path might look like
- "src/fatlib". You can use the function isRelative() to check if a QDir
- is using a relative or an absolute file path. You can call the function
- convertToAbs() to convert a relative QDir to an absolute one.
-
- \sa path(), absPath(), exists(), cleanDirPath(), dirName(),
- absFilePath(), isRelative(), convertToAbs()
-*/
-
-void QDir::setPath( const QString &path )
-{
- dPath = cleanDirPath( path );
- if ( dPath.isEmpty() )
- dPath = QString::fromLatin1(".");
- dirty = TRUE;
-}
-
-/*!
- \fn QString QDir::path() const
- Returns the path, this may contain symbolic links, but never contains
- redundant ".", ".." or multiple separators.
-
- The returned path can be either absolute or relative (see setPath()).
-
- \sa setPath(), absPath(), exists(), cleanDirPath(), dirName(),
- absFilePath(), convertSeparators()
-*/
-
-/*!
- Returns the absolute (a path that starts with '/') path, which may
- contain symbolic links, but never contains redundant ".", ".." or
- multiple separators.
-
- \sa setPath(), canonicalPath(), exists(), cleanDirPath(), dirName(),
- absFilePath()
-*/
-
-QString QDir::absPath() const
-{
- if ( QDir::isRelativePath(dPath) ) {
- QString tmp = currentDirPath();
- if ( tmp.right(1) != QString::fromLatin1("/") )
- tmp += '/';
- tmp += dPath;
- return cleanDirPath( tmp );
- } else {
- return cleanDirPath( dPath );
- }
-}
-
-/*!
- Returns the name of the directory, this is NOT the same as the path, e.g.
- a directory with the name "mail", might have the path "/var/spool/mail".
- If the directory has no name (e.g. the root directory) a null string is
- returned.
-
- No check is made to ensure that a directory with this name actually exists.
-
- \sa path(), absPath(), absFilePath(), exists(), QString::isNull()
-*/
-
-QString QDir::dirName() const
-{
- int pos = dPath.findRev( '/' );
- if ( pos == -1 )
- return dPath;
- return dPath.right( dPath.length() - pos - 1 );
-}
-
-/*!
- Returns the path name of a file in the directory. Does NOT check if
- the file actually exists in the directory. If the QDir is relative
- the returned path name will also be relative. Redundant multiple separators
- or "." and ".." directories in \e fileName will not be removed (see
- cleanDirPath()).
-
- If \e acceptAbsPath is TRUE a \e fileName starting with a separator
- ('/') will be returned without change.
- If \e acceptAbsPath is FALSE an absolute path will be appended to
- the directory path.
-
- \sa absFilePath(), isRelative(), canonicalPath()
-*/
-
-QString QDir::filePath( const QString &fileName,
- bool acceptAbsPath ) const
-{
- if ( acceptAbsPath && !isRelativePath(fileName) )
- return QString(fileName);
-
- QString tmp = dPath;
- if ( tmp.isEmpty() || (tmp[(int)tmp.length()-1] != '/' && !!fileName &&
- fileName[0] != '/') )
- tmp += '/';
- tmp += fileName;
- return tmp;
-}
-
-/*!
- Returns the absolute path name of a file in the directory. Does NOT check if
- the file actually exists in the directory. Redundant multiple separators
- or "." and ".." directories in \e fileName will NOT be removed (see
- cleanDirPath()).
-
- If \e acceptAbsPath is TRUE a \e fileName starting with a separator
- ('/') will be returned without change.
- if \e acceptAbsPath is FALSE an absolute path will be appended to
- the directory path.
-
- \sa filePath()
-*/
-
-QString QDir::absFilePath( const QString &fileName,
- bool acceptAbsPath ) const
-{
- if ( acceptAbsPath && !isRelativePath( fileName ) )
- return fileName;
-
- QString tmp = absPath();
- if ( tmp.isEmpty() || (tmp[(int)tmp.length()-1] != '/' && !!fileName &&
- fileName[0] != '/') )
- tmp += '/';
- tmp += fileName;
- return tmp;
-}
-
-
-/*!
- Converts the '/' separators in \a pathName to system native
- separators. Returns the translated string.
-
- On Windows, convertSeparators("c:/winnt/system32") returns
- "c:\winnt\system32".
-
- No conversion is done on UNIX.
-*/
-
-QString QDir::convertSeparators( const QString &pathName )
-{
- QString n( pathName );
-#if defined(_OS_FATFS_) || defined(_OS_OS2EMX_)
- for ( int i=0; i<(int)n.length(); i++ ) {
- if ( n[i] == '/' )
- n[i] = '\\';
- }
-#endif
- return n;
-}
-
-
-/*!
- Changes directory by descending into the given directory. Returns
- TRUE if the new directory exists and is readable. Note that the logical
- cd operation is NOT performed if the new directory does not exist.
-
- If \e acceptAbsPath is TRUE a path starting with a separator ('/')
- will cd to the absolute directory, if \e acceptAbsPath is FALSE
- any number of separators at the beginning of \e dirName will be removed.
-
- Example:
- \code
- QDir d = QDir::home(); // now points to home directory
- if ( !d.cd("c++") ) { // now points to "c++" under home directory if OK
- QFileInfo fi( d, "c++" );
- if ( fi.exists() ) {
- if ( fi.isDir() )
- qWarning( "Cannot cd into \"%s\".", (char*)d.absFilePath("c++") );
- else
- qWarning( "Cannot create directory \"%s\"\n"
- "A file named \"c++\" already exists in \"%s\"",
- (const char *)d.absFilePath("c++"),
- (const char *)d.path() );
- return;
- } else {
- qWarning( "Creating directory \"%s\"",
- (const char *) d.absFilePath("c++") );
- if ( !d.mkdir( "c++" ) ) {
- qWarning("Could not create directory \"%s\"",
- (const char *)d.absFilePath("c++") );
- return;
- }
- }
- }
- \endcode
-
- Calling cd( ".." ) is equivalent to calling cdUp().
-
- \sa cdUp(), isReadable(), exists(), path()
-*/
-
-bool QDir::cd( const QString &dirName, bool acceptAbsPath )
-{
- if ( dirName.isEmpty() || dirName==QString::fromLatin1(".") )
- return TRUE;
- QString old = dPath;
- if ( acceptAbsPath && !isRelativePath(dirName) ) {
- dPath = cleanDirPath( dirName );
- } else {
- if ( !isRoot() )
- dPath += '/';
- dPath += dirName;
- if ( dirName.find('/') >= 0
- || old == QString::fromLatin1(".")
- || dirName == QString::fromLatin1("..") )
- dPath = cleanDirPath( dPath );
- }
- if ( !exists() ) {
- dPath = old; // regret
- return FALSE;
- }
- dirty = TRUE;
- return TRUE;
-}
-
-/*!
- Changes directory by moving one directory up the path followed to arrive
- at the current directory.
-
- Returns TRUE if the new directory exists and is readable. Note that the
- logical cdUp() operation is not performed if the new directory does not
- exist.
-
- \sa cd(), isReadable(), exists(), path()
-*/
-
-bool QDir::cdUp()
-{
- return cd( QString::fromLatin1("..") );
-}
-
-/*!
- \fn QString QDir::nameFilter() const
- Returns the string set by setNameFilter()
-*/
-
-/*!
- Sets the name filter used by entryList() and entryInfoList().
-
- The name filter is a wildcarding filter that understands "*" and "?"
- wildcards, You may specify several filter entries separated by a " " or a ";". If
- you want entryList() and entryInfoList() to list all files ending with
- ".cpp" and all files ending with ".h", you simply call
- dir.setNameFilter("*.cpp *.h") or dir.setNameFilter("*.cpp;*.h")
-
- \sa nameFilter(), setFilter()
-*/
-
-void QDir::setNameFilter( const QString &nameFilter )
-{
- nameFilt = nameFilter;
- if ( nameFilt.isEmpty() )
- nameFilt = QString::fromLatin1("*");
- dirty = TRUE;
-}
-
-/*!
- \fn QDir::FilterSpec QDir::filter() const
- Returns the value set by setFilter()
-*/
-
-/*! \enum QDir::FilterSpec
-
- This enum describes how QDir is to select what entries in a
- directory to return. The filter value is specified by or-ing
- together values from the following list: <ul>
-
- <li> \c Dirs - List directories only
- <li> \c Files - List files only
-
- <li> \c Drives - List disk drives (does nothing under unix)
- <li> \c NoSymLinks - Do not list symbolic links (where they exist)
- <li> \c Readable - List files for which the application has read access.
- <li> \c Writable - List files for which the application has write access.
- <li> \c Executable - List files for which the application has execute access
- <li> \c Modified - Only list files that have been modified (does nothing
- under unix)
- <li> \c Hidden - List hidden files (on unix, files starting with a .)
- <li> \c System - List system files (does nothing under unix)
- </ul>
-
- If you do not set any of \c Readable, \c Writable or \c Executable,
- QDir will set all three of them. This makes the default easy to
- write and at the same time useful.
-
- Examples: \c Readable|Writable means list all files for which the
- application has read access, write access or both. \c Dirs|Drives
- means list drives, directories, all files that the application can
- read, write or execute, and also symlinks to such files/directories.
-*/
-
-
-/*!
- Sets the filter used by entryList() and entryInfoList(). The filter is used
- to specify the kind of files that should be returned by entryList() and
- entryInfoList().
-
- \sa filter(), setNameFilter()
-*/
-
-void QDir::setFilter( int filterSpec )
-{
- if ( filtS == (FilterSpec) filterSpec )
- return;
- filtS = (FilterSpec) filterSpec;
- dirty = TRUE;
-}
-
-/*!
- \fn QDir::SortSpec QDir::sorting() const
-
- Returns the value set by setSorting()
-
- \sa setSorting()
-*/
-
-/*! \enum QDir::SortSpec
-
- This enum describes how QDir is to sort entries in a directory when
- it returns a list of them. The sort value is specified by or-ing
- together values from the following list: <ul>
-
- <li> \c Name - sort by name
- <li> \c Time - sort by time (modification time)
- <li> \c Size - sort by file size
- <li> \c Unsorted - do not sort
-
- <li> \c DirsFirst - put all directories first in the list
- <li> \c Reversed - reverse the sort order
- <li> \c IgnoreCase - sort case-insensitively
-
- </ul>
-
- You can only specify one of the first four. If you specify both \c
- DirsFirst and \c Reversed, directories are still put first but the
- list is otherwise reversed.
-*/
-
-// ### Unsorted+DirsFirst ? Unsorted+Reversed?
-
-/*!
- Sets the sorting order used by entryList() and entryInfoList().
-
- The \e sortSpec is specified by or-ing values from the enum
- SortSpec. The different values are:
-
- One of these:
- <dl compact>
- <dt>Name<dd> Sort by name (alphabetical order).
- <dt>Time<dd> Sort by time (most recent first).
- <dt>Size<dd> Sort by size (largest first).
- <dt>Unsorted<dd> Use the operating system order (UNIX does NOT sort
- alphabetically).
-
- ORed with zero or more of these:
-
- <dt>DirsFirst<dd> Always put directory names first.
- <dt>Reversed<dd> Reverse sort order.
- <dt>IgnoreCase<dd> Ignore case when sorting by name.
- </dl>
-*/
-
-void QDir::setSorting( int sortSpec )
-{
- if ( sortS == (SortSpec) sortSpec )
- return;
- sortS = (SortSpec) sortSpec;
- dirty = TRUE;
-}
-
-/*!
- \fn bool QDir::matchAllDirs() const
- Returns the value set by setMatchAllDirs()
-
- \sa setMatchAllDirs()
-*/
-
-/*!
- If \e enable is TRUE, all directories will be listed (even if they do not
- match the filter or the name filter), otherwise only matched directories
- will be listed.
-
- \bug Currently, directories that do not match the filter will not be
- included (the name filter will be ignored as expected).
-
- \sa matchAllDirs()
-*/
-
-void QDir::setMatchAllDirs( bool enable )
-{
- if ( (bool)allDirs == enable )
- return;
- allDirs = enable;
- dirty = TRUE;
-}
-
-
-/*!
- Returns the number of files that was found.
- Equivalent to entryList().count().
- \sa operator[](), entryList()
-*/
-
-uint QDir::count() const
-{
- return entryList().count();
-}
-
-/*!
- Returns the file name at position \e index in the list of found file
- names.
- Equivalent to entryList().at(index).
-
- Returns null if the \e index is out of range or if the entryList()
- function failed.
-
- \sa count(), entryList()
-*/
-
-QString QDir::operator[]( int index ) const
-{
- entryList();
- return fList && index >= 0 && index < (int)fList->count() ?
- (*fList)[index] : QString::null;
-}
-
-
-/*!
- This function is included to easy porting from Qt 1.x to Qt 2.0,
- it is the same as entryList(), but encodes the filenames as 8-bit
- strings using QFile::encodedName().
-
- It is more efficient to use entryList().
-*/
-QStrList QDir::encodedEntryList( int filterSpec, int sortSpec ) const
-{
- QStrList r;
- QStringList l = entryList(filterSpec,sortSpec);
- for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) {
- r.append( QFile::encodeName(*it) );
- }
- return r;
-}
-
-/*!
- This function is included to easy porting from Qt 1.x to Qt 2.0,
- it is the same as entryList(), but encodes the filenames as 8-bit
- strings using QFile::encodedName().
-
- It is more efficient to use entryList().
-*/
-QStrList QDir::encodedEntryList( const QString &nameFilter,
- int filterSpec,
- int sortSpec ) const
-{
- QStrList r;
- QStringList l = entryList(nameFilter,filterSpec,sortSpec);
- for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) {
- r.append( QFile::encodeName(*it) );
- }
- return r;
-}
-
-
-
-/*!
- Returns a list of the names of all files and directories in the directory
- indicated by the setSorting(), setFilter() and setNameFilter()
- specifications.
-
- The filter and sorting specifications can be overridden using the
- \e filterSpec and \e sortSpec arguments.
-
- Returns an empty list if the directory is unreadable or does not exist.
-
- \sa entryInfoList(), setNameFilter(), setSorting(), setFilter(),
- encodedEntryList()
-*/
-
-QStringList QDir::entryList( int filterSpec, int sortSpec ) const
-{
- if ( !dirty && filterSpec == (int)DefaultFilter &&
- sortSpec == (int)DefaultSort )
- return *fList;
- return entryList( nameFilt, filterSpec, sortSpec );
-}
-
-/*!
- Returns a list of the names of all files and directories in the directory
- indicated by the setSorting(), setFilter() and setNameFilter()
- specifications.
-
- The filter and sorting specifications can be overridden using the
- \e nameFilter, \e filterSpec and \e sortSpec arguments.
-
- Returns and empty list if the directory is unreadable or does not exist.
-
- \sa entryInfoList(), setNameFilter(), setSorting(), setFilter(),
- encodedEntryList()
-*/
-
-QStringList QDir::entryList( const QString &nameFilter,
- int filterSpec, int sortSpec ) const
-{
- if ( filterSpec == (int)DefaultFilter )
- filterSpec = filtS;
- if ( sortSpec == (int)DefaultSort )
- sortSpec = sortS;
- QDir *that = (QDir*)this; // mutable function
- if ( that->readDirEntries(nameFilter, filterSpec, sortSpec) )
- return *that->fList;
- else
- return QStringList();
-}
-
-/*!
- Returns a list of QFileInfo objects for all files and directories in
- the directory pointed to using the setSorting(), setFilter() and
- setNameFilter() specifications.
-
- The filter and sorting specifications can be overridden using the
- \e filterSpec and \e sortSpec arguments.
-
- Returns 0 if the directory is unreadable or does not exist.
-
- The returned pointer is a const pointer to a QFileInfoList. The list is
- owned by the QDir object and will be reused on the next call to
- entryInfoList() for the same QDir instance. If you want to keep the
- entries of the list after a subsequent call to this function you will
- need to copy them.
-
- \sa entryList(), setNameFilter(), setSorting(), setFilter()
-*/
-
-const QFileInfoList *QDir::entryInfoList( int filterSpec, int sortSpec ) const
-{
- if ( !dirty && filterSpec == (int)DefaultFilter &&
- sortSpec == (int)DefaultSort )
- return fiList;
- return entryInfoList( nameFilt, filterSpec, sortSpec );
-}
-
-/*!
- Returns a list of QFileInfo objects for all files and directories in
- the directory pointed to using the setSorting(), setFilter() and
- setNameFilter() specifications.
-
- The filter and sorting specifications can be overridden using the
- \e nameFilter, \e filterSpec and \e sortSpec arguments.
-
- Returns 0 if the directory is unreadable or does not exist.
-
- The returned pointer is a const pointer to a QFileInfoList. The list is
- owned by the QDir object and will be reused on the next call to
- entryInfoList() for the same QDir instance. If you want to keep the
- entries of the list after a subsequent call to this function you will
- need to copy them.
-
- \sa entryList(), setNameFilter(), setSorting(), setFilter()
-*/
-
-const QFileInfoList *QDir::entryInfoList( const QString &nameFilter,
- int filterSpec, int sortSpec ) const
-{
- if ( filterSpec == (int)DefaultFilter )
- filterSpec = filtS;
- if ( sortSpec == (int)DefaultSort )
- sortSpec = sortS;
- QDir *that = (QDir*)this; // mutable function
- if ( that->readDirEntries(nameFilter, filterSpec, sortSpec) )
- return that->fiList;
- else
- return 0;
-}
-
-/*!
- Returns TRUE if the directory exists. (If a file with the same
- name is found this function will of course return FALSE).
-
- \sa QFileInfo::exists(), QFile::exists()
-*/
-
-bool QDir::exists() const
-{
- QFileInfo fi( dPath );
- return fi.exists() && fi.isDir();
-}
-
-/*!
- Returns TRUE if the directory path is relative to the current directory,
- FALSE if the path is absolute (e.g. under UNIX a path is relative if it
- does not start with a '/').
-
- According to Einstein this function should always return TRUE.
-
- \sa convertToAbs()
-*/
-
-bool QDir::isRelative() const
-{
- return isRelativePath( dPath );
-}
-
-/*!
- Converts the directory path to an absolute path. If it is already
- absolute nothing is done.
-
- \sa isRelative()
-*/
-
-void QDir::convertToAbs()
-{
- dPath = absPath();
-}
-
-/*!
- Makes a copy of d and assigns it to this QDir.
-*/
-
-QDir &QDir::operator=( const QDir &d )
-{
- dPath = d.dPath;
- delete fList;
- fList = 0;
- delete fiList;
- fiList = 0;
- nameFilt = d.nameFilt;
- dirty = TRUE;
- allDirs = d.allDirs;
- filtS = d.filtS;
- sortS = d.sortS;
- return *this;
-}
-
-/*!
- Sets the directory path to be the given path.
-*/
-
-QDir &QDir::operator=( const QString &path )
-{
- dPath = cleanDirPath( path );
- dirty = TRUE;
- return *this;
-}
-
-
-/*!
- \fn bool QDir::operator!=( const QDir &d ) const
- Returns TRUE if the \e d and this dir have different path or
- different sort/filter settings, otherwise FALSE.
-*/
-
-/*!
- Returns TRUE if the \e d and this dir have the same path and all sort
- and filter settings are equal, otherwise FALSE.
-*/
-
-bool QDir::operator==( const QDir &d ) const
-{
- return dPath == d.dPath &&
- nameFilt == d.nameFilt &&
- allDirs == d.allDirs &&
- filtS == d.filtS &&
- sortS == d.sortS;
-}
-
-
-/*!
- Removes a file.
-
- If \e acceptAbsPath is TRUE a path starting with a separator ('/')
- will remove the file with the absolute path, if \e acceptAbsPath is FALSE
- any number of separators at the beginning of \e fileName will be removed.
-
- Returns TRUE if successful, otherwise FALSE.
-*/
-
-bool QDir::remove( const QString &fileName, bool acceptAbsPath )
-{
- if ( fileName.isEmpty() ) {
-#if defined(CHECK_NULL)
- qWarning( "QDir::remove: Empty or null file name" );
-#endif
- return FALSE;
- }
- QString p = filePath( fileName, acceptAbsPath );
- return QFile::remove( p );
-}
-
-/*!
- Checks for existence of a file.
-
- If \e acceptAbsPaths is TRUE a path starting with a separator ('/')
- will check the file with the absolute path, if \e acceptAbsPath is FALSE
- any number of separators at the beginning of \e name will be removed.
-
- Returns TRUE if the file exists, otherwise FALSE.
-
- \sa QFileInfo::exists(), QFile::exists()
-*/
-
-bool QDir::exists( const QString &name, bool acceptAbsPath )
-{
- if ( name.isEmpty() ) {
-#if defined(CHECK_NULL)
- qWarning( "QDir::exists: Empty or null file name" );
-#endif
- return FALSE;
- }
- QString tmp = filePath( name, acceptAbsPath );
- return QFile::exists( tmp );
-}
-
-/*!
- Returns the native directory separator; '/' under UNIX and '\' under
- MS-DOS, Windows NT and OS/2.
-
- You do not need to use this function to build file paths. If you always
- use '/', Qt will translate your paths to conform to the underlying
- operating system.
-*/
-
-char QDir::separator()
-{
-#if defined(_OS_UNIX_)
- return '/';
-#elif defined (_OS_FATFS_)
- return '\\';
-#elif defined (_OS_MAC_)
- return ':';
-#else
- return '/';
-#endif
-}
-
-/*!
- Returns the current directory.
- \sa currentDirPath(), QDir::QDir()
-*/
-
-QDir QDir::current()
-{
- return QDir( currentDirPath() );
-}
-
-/*!
- Returns the home directory.
- \sa homeDirPath()
-*/
-
-QDir QDir::home()
-{
- return QDir( homeDirPath() );
-}
-
-/*!
- Returns the root directory.
- \sa rootDirPath() drives()
-*/
-
-QDir QDir::root()
-{
- return QDir( rootDirPath() );
-}
-
-/*!
- \fn QString QDir::homeDirPath()
-
- Returns the absolute path for the user's home directory,
- \sa home()
-*/
-
-QStringList qt_makeFilterList( const QString &filter )
-{
- if ( filter.isEmpty() )
- return QStringList();
-
- QChar sep( ';' );
- int i = filter.find( sep, 0 );
- if ( i == -1 && filter.find( ' ', 0 ) != -1 )
- sep = QChar( ' ' );
-
- QStringList lst = QStringList::split( sep, filter );
- QStringList lst2;
- QStringList::Iterator it = lst.begin();
-
- for ( ; it != lst.end(); ++it ) {
- QString s = *it;
- lst2 << s.stripWhiteSpace();
- }
- return lst2;
-}
-
-/*!
- Returns TRUE if the \e fileName matches one of the wildcards in the list \e filters.
- \sa QRegExp
-*/
-
-bool QDir::match( const QStringList &filters, const QString &fileName )
-{
- QStringList::ConstIterator sit = filters.begin();
- bool matched = FALSE;
- for ( ; sit != filters.end(); ++sit ) {
- QRegExp regexp( (*sit).data(), FALSE, TRUE );
- if ( regexp.match( fileName.data() ) != -1 ) {
- matched = TRUE;
- break;
- }
- }
-
- return matched;
-}
-
-/*!
- Returns TRUE if the \e fileName matches the wildcard \e filter.
- \a Filter may also contain multiple wildcards separated by spaces or
- semicolons.
- \sa QRegExp
-*/
-
-bool QDir::match( const QString &filter, const QString &fileName )
-{
- QStringList lst = qt_makeFilterList( filter );
- return match( lst, fileName );
-}
-
-
-/*!
- Removes all multiple directory separators ('/') and resolves
- any "." or ".." found in the path.
-
- Symbolic links are kept. This function does not return the
- canonical path, but rather the most simplified version of the input.
- "../stuff" becomes "stuff", "stuff/../nonsense" becomes "nonsense"
- and "\\stuff\\more\\..\\nonsense" becomes "\\stuff\\nonsense".
-
- \sa absPath() canonicalPath()
-*/
-
-QString QDir::cleanDirPath( const QString &filePath )
-{
- QString name = filePath;
- QString newPath;
-
- if ( name.isEmpty() )
- return name;
-
- slashify( name );
-
- bool addedSeparator;
- if ( isRelativePath(name) ) {
- addedSeparator = TRUE;
- name.insert( 0, '/' );
- } else {
- addedSeparator = FALSE;
- }
-
- int ePos, pos, upLevel;
-
- pos = ePos = name.length();
- upLevel = 0;
- int len;
-
- while ( pos && (pos = name.findRev('/',--pos)) != -1 ) {
- len = ePos - pos - 1;
- if ( len == 2 && name.at(pos + 1) == '.'
- && name.at(pos + 2) == '.' ) {
- upLevel++;
- } else {
- if ( len != 0 && (len != 1 || name.at(pos + 1) != '.') ) {
- if ( !upLevel )
- newPath = QString::fromLatin1("/")
- + name.mid(pos + 1, len) + newPath;
- else
- upLevel--;
- }
- }
- ePos = pos;
- }
- if ( addedSeparator ) {
- while ( upLevel-- )
- newPath.insert( 0, QString::fromLatin1("/..") );
- if ( !newPath.isEmpty() )
- newPath.remove( 0, 1 );
- else
- newPath = QString::fromLatin1(".");
- } else {
- if ( newPath.isEmpty() )
- newPath = QString::fromLatin1("/");
-#if defined(_OS_FATFS_) || defined(_OS_OS2EMX_)
- if ( name[0] == '/' ) {
- if ( name[1] == '/' ) // "\\machine\x\ ..."
- newPath.insert( 0, '/' );
- } else {
- newPath = name.left(2) + newPath;
- }
-#endif
- }
- return newPath;
-}
-
-int qt_cmp_si_sortSpec;
-
-#if defined(Q_C_CALLBACKS)
-extern "C" {
-#endif
-
-int qt_cmp_si( const void *n1, const void *n2 )
-{
- if ( !n1 || !n2 )
- return 0;
-
- QDirSortItem* f1 = (QDirSortItem*)n1;
- QDirSortItem* f2 = (QDirSortItem*)n2;
-
- if ( qt_cmp_si_sortSpec & QDir::DirsFirst )
- if ( f1->item->isDir() != f2->item->isDir() )
- return f1->item->isDir() ? -1 : 1;
-
- int r = 0;
- int sortBy = qt_cmp_si_sortSpec & QDir::SortByMask;
-
- switch ( sortBy ) {
- case QDir::Time:
- r = f1->item->lastModified().secsTo(f2->item->lastModified());
- break;
- case QDir::Size:
- r = f2->item->size() - f1->item->size();
- break;
- default:
- ;
- }
-
- if ( r == 0 && sortBy != QDir::Unsorted ) {
- // Still not sorted - sort by name
- bool ic = qt_cmp_si_sortSpec & QDir::IgnoreCase;
-
- if ( f1->filename_cache.isNull() )
- f1->filename_cache = ic ? f1->item->fileName().lower()
- : f1->item->fileName();
- if ( f2->filename_cache.isNull() )
- f2->filename_cache = ic ? f2->item->fileName().lower()
- : f2->item->fileName();
-
- r = f1->filename_cache.compare(f2->filename_cache);
- }
-
- if ( r == 0 ) {
- // Enforce an order - the order the items appear in the array
- r = (int)((char*)n1 - (char*)n2);
- }
-
- if ( qt_cmp_si_sortSpec & QDir::Reversed )
- return -r;
- else
- return r;
-}
-
-#if defined(Q_C_CALLBACKS)
-}
-#endif
-
-#endif // QT_NO_DIR
diff --git a/qtools/qdir.h b/qtools/qdir.h
deleted file mode 100644
index cec3897..0000000
--- a/qtools/qdir.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QDir class
-**
-** Created : 950427
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QDIR_H
-#define QDIR_H
-
-#ifndef QT_H
-#include "qstrlist.h"
-#include "qfileinfo.h"
-#endif // QT_H
-
-#ifndef QT_NO_DIR
-typedef QInternalList<QFileInfo> QFileInfoList;
-typedef QInternalListIterator<QFileInfo> QFileInfoListIterator;
-class QStringList;
-
-
-class Q_EXPORT QDir
-{
-public:
- enum FilterSpec { Dirs = 0x001,
- Files = 0x002,
- Drives = 0x004,
- NoSymLinks = 0x008,
- All = 0x007,
- TypeMask = 0x00F,
-
- Readable = 0x010,
- Writable = 0x020,
- Executable = 0x040,
- RWEMask = 0x070,
-
- Modified = 0x080,
- Hidden = 0x100,
- System = 0x200,
- AccessMask = 0x3F0,
-
- DefaultFilter = -1 };
-
- enum SortSpec { Name = 0x00,
- Time = 0x01,
- Size = 0x02,
- Unsorted = 0x03,
- SortByMask = 0x03,
-
- DirsFirst = 0x04,
- Reversed = 0x08,
- IgnoreCase = 0x10,
- DefaultSort = -1 };
-
- QDir();
- QDir( const QString &path, const QString &nameFilter = QString::null,
- int sortSpec = Name | IgnoreCase, int filterSpec = All );
- QDir( const QDir & );
-
- virtual ~QDir();
-
- QDir &operator=( const QDir & );
- QDir &operator=( const QString &path );
-
- virtual void setPath( const QString &path );
- virtual QString path() const;
- virtual QString absPath() const;
- virtual QString canonicalPath() const;
-
- virtual QString dirName() const;
- virtual QString filePath( const QString &fileName,
- bool acceptAbsPath = TRUE ) const;
- virtual QString absFilePath( const QString &fileName,
- bool acceptAbsPath = TRUE ) const;
-
- static QString convertSeparators( const QString &pathName );
-
- virtual bool cd( const QString &dirName, bool acceptAbsPath = TRUE );
- virtual bool cdUp();
-
- QString nameFilter() const;
- virtual void setNameFilter( const QString &nameFilter );
- FilterSpec filter() const;
- virtual void setFilter( int filterSpec );
- SortSpec sorting() const;
- virtual void setSorting( int sortSpec );
-
- bool matchAllDirs() const;
- virtual void setMatchAllDirs( bool );
-
- uint count() const;
- QString operator[]( int ) const;
-
- virtual QStrList encodedEntryList( int filterSpec = DefaultFilter,
- int sortSpec = DefaultSort ) const;
- virtual QStrList encodedEntryList( const QString &nameFilter,
- int filterSpec = DefaultFilter,
- int sortSpec = DefaultSort ) const;
- virtual QStringList entryList( int filterSpec = DefaultFilter,
- int sortSpec = DefaultSort ) const;
- virtual QStringList entryList( const QString &nameFilter,
- int filterSpec = DefaultFilter,
- int sortSpec = DefaultSort ) const;
-
- virtual const QFileInfoList *entryInfoList( int filterSpec = DefaultFilter,
- int sortSpec = DefaultSort ) const;
- virtual const QFileInfoList *entryInfoList( const QString &nameFilter,
- int filterSpec = DefaultFilter,
- int sortSpec = DefaultSort ) const;
-
- static const QFileInfoList *drives();
-
- virtual bool mkdir( const QString &dirName,
- bool acceptAbsPath = TRUE ) const;
- virtual bool rmdir( const QString &dirName,
- bool acceptAbsPath = TRUE ) const;
-
- virtual bool isReadable() const;
- virtual bool exists() const;
- virtual bool isRoot() const;
-
- virtual bool isRelative() const;
- virtual void convertToAbs();
-
- virtual bool operator==( const QDir & ) const;
- virtual bool operator!=( const QDir & ) const;
-
- virtual bool remove( const QString &fileName,
- bool acceptAbsPath = TRUE );
- virtual bool rename( const QString &name, const QString &newName,
- bool acceptAbsPaths = TRUE );
- virtual bool exists( const QString &name,
- bool acceptAbsPath = TRUE );
-
- static char separator();
-
- static bool setCurrent( const QString &path );
- static QDir current();
- static QDir home();
- static QDir root();
- static QString currentDirPath();
- static QString homeDirPath();
- static QString rootDirPath();
-
- static bool match( const QStringList &filters, const QString &fileName );
- static bool match( const QString &filter, const QString &fileName );
- static QString cleanDirPath( const QString &dirPath );
- static bool isRelativePath( const QString &path );
-
-private:
- void init();
- virtual bool readDirEntries( const QString &nameFilter,
- int FilterSpec, int SortSpec );
-
- static void slashify ( QString &);
-
- QString dPath;
- QStringList *fList;
- QFileInfoList *fiList;
- QString nameFilt;
- FilterSpec filtS;
- SortSpec sortS;
- uint dirty : 1;
- uint allDirs : 1;
-};
-
-
-inline QString QDir::path() const
-{
- return dPath;
-}
-
-inline QString QDir::nameFilter() const
-{
- return nameFilt;
-}
-
-inline QDir::FilterSpec QDir::filter() const
-{
- return filtS;
-}
-
-inline QDir::SortSpec QDir::sorting() const
-{
- return sortS;
-}
-
-inline bool QDir::matchAllDirs() const
-{
- return allDirs;
-}
-
-inline bool QDir::operator!=( const QDir &d ) const
-{
- return !(*this == d);
-}
-
-
-struct QDirSortItem {
- QString filename_cache;
- QFileInfo* item;
-};
-
-#endif // QT_NO_DIR
-#endif // QDIR_H
diff --git a/qtools/qdir_unix.cpp b/qtools/qdir_unix.cpp
deleted file mode 100644
index 2257265..0000000
--- a/qtools/qdir_unix.cpp
+++ /dev/null
@@ -1,290 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QDirclass
-**
-** Created : 950628
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses for Unix/X11 or for Qt/Embedded may use this file in accordance
-** with the Qt Commercial License Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglobal.h"
-
-#include "qdir.h"
-#ifndef QT_NO_DIR
-
-#include "qfileinfo.h"
-#include "qfiledefs_p.h"
-#include "qregexp.h"
-#include "qstringlist.h"
-#include <stdlib.h>
-#include <ctype.h>
-
-extern QStringList qt_makeFilterList( const QString &filter );
-
-extern int qt_cmp_si_sortSpec;
-
-#if defined(Q_C_CALLBACKS)
-extern "C" {
-#endif
-
-extern int qt_cmp_si( const void *, const void * );
-
-#if defined(Q_C_CALLBACKS)
-}
-#endif
-
-
-void QDir::slashify( QString& )
-{
-}
-
-QString QDir::homeDirPath()
-{
- QString d;
- d = QFile::decodeName(getenv("HOME"));
- slashify( d );
- if ( d.isNull() )
- d = rootDirPath();
- return d;
-}
-
-QString QDir::canonicalPath() const
-{
- QString r;
-
- char cur[PATH_MAX];
- char tmp[PATH_MAX];
- if (GETCWD( cur, PATH_MAX )) {
- if ( CHDIR(QFile::encodeName(dPath)) >= 0 ) {
- if (GETCWD( tmp, PATH_MAX )) {
- r = QFile::decodeName(tmp);
- }
- (void)CHDIR( cur );
- }
- }
-
- slashify( r );
- return r;
-}
-
-bool QDir::mkdir( const QString &dirName, bool acceptAbsPath ) const
-{
- return MKDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)), 0777 )
- == 0;
-}
-
-bool QDir::rmdir( const QString &dirName, bool acceptAbsPath ) const
-{
- return RMDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)) ) == 0;
-}
-
-bool QDir::isReadable() const
-{
- return ACCESS( QFile::encodeName(dPath), R_OK | X_OK ) == 0;
-}
-
-bool QDir::isRoot() const
-{
- return dPath == QString::fromLatin1("/");
-}
-
-bool QDir::rename( const QString &name, const QString &newName,
- bool acceptAbsPaths )
-{
- if ( name.isEmpty() || newName.isEmpty() ) {
-#if defined(CHECK_NULL)
- qWarning( "QDir::rename: Empty or null file name(s)" );
-#endif
- return FALSE;
- }
- QString fn1 = filePath( name, acceptAbsPaths );
- QString fn2 = filePath( newName, acceptAbsPaths );
- return ::rename( QFile::encodeName(fn1),
- QFile::encodeName(fn2) ) == 0;
-}
-
-bool QDir::setCurrent( const QString &path )
-{
- int r;
- r = CHDIR( QFile::encodeName(path) );
- return r >= 0;
-}
-
-QString QDir::currentDirPath()
-{
- QString result;
-
- STATBUF st;
- if ( STAT( ".", &st ) == 0 ) {
- char currentName[PATH_MAX];
- if ( GETCWD( currentName, PATH_MAX ) != 0 )
- result = QFile::decodeName(currentName);
-#if defined(DEBUG)
- if ( result.isNull() )
- qWarning( "QDir::currentDirPath: getcwd() failed" );
-#endif
- } else {
-#if defined(DEBUG)
- qWarning( "QDir::currentDirPath: stat(\".\") failed" );
-#endif
- }
- slashify( result );
- return result;
-}
-
-QString QDir::rootDirPath()
-{
- QString d = QString::fromLatin1( "/" );
- return d;
-}
-
-bool QDir::isRelativePath( const QString &path )
-{
- int len = path.length();
- if ( len == 0 )
- return TRUE;
- return path[0] != '/';
-}
-
-bool QDir::readDirEntries( const QString &nameFilter,
- int filterSpec, int sortSpec )
-{
- int i;
- if ( !fList ) {
- fList = new QStringList;
- CHECK_PTR( fList );
- fiList = new QFileInfoList;
- CHECK_PTR( fiList );
- fiList->setAutoDelete( TRUE );
- } else {
- fList->clear();
- fiList->clear();
- }
-
- QStringList filters = qt_makeFilterList( nameFilter );
-
- bool doDirs = (filterSpec & Dirs) != 0;
- bool doFiles = (filterSpec & Files) != 0;
- bool noSymLinks = (filterSpec & NoSymLinks) != 0;
- bool doReadable = (filterSpec & Readable) != 0;
- bool doWritable = (filterSpec & Writable) != 0;
- bool doExecable = (filterSpec & Executable) != 0;
- bool doHidden = (filterSpec & Hidden) != 0;
-
-#if defined(_OS_OS2EMX_)
- //QRegExp wc( nameFilter, FALSE, TRUE ); // wild card, case insensitive
-#else
- //QRegExp wc( nameFilter, TRUE, TRUE ); // wild card, case sensitive
-#endif
- QFileInfo fi;
- DIR *dir;
- dirent *file;
-
- dir = opendir( QFile::encodeName(dPath) );
- if ( !dir ) {
-#if defined(CHECK_NULL)
- qWarning( "QDir::readDirEntries: Cannot read the directory: %s",
- QFile::encodeName(dPath).data() );
-#endif
- return FALSE;
- }
-
- while ( (file = readdir(dir)) ) {
- QString fn = QFile::decodeName(file->d_name);
- fi.setFile( *this, fn );
- if ( !match( filters, fn ) && !(allDirs && fi.isDir()) )
- continue;
- if ( (doDirs && fi.isDir()) || (doFiles && fi.isFile()) ) {
- if ( noSymLinks && fi.isSymLink() )
- continue;
- if ( (filterSpec & RWEMask) != 0 )
- if ( (doReadable && !fi.isReadable()) ||
- (doWritable && !fi.isWritable()) ||
- (doExecable && !fi.isExecutable()) )
- continue;
- if ( !doHidden && fn[0] == '.' &&
- fn != QString::fromLatin1(".")
- && fn != QString::fromLatin1("..") )
- continue;
- fiList->append( new QFileInfo( fi ) );
- }
- }
- if ( closedir(dir) != 0 ) {
-#if defined(CHECK_NULL)
- qWarning( "QDir::readDirEntries: Cannot close the directory: %s",
- dPath.local8Bit().data() );
-#endif
- }
-
- // Sort...
- if(fiList->count()) {
- QDirSortItem* si= new QDirSortItem[fiList->count()];
- QFileInfo* itm;
- i=0;
- for (itm = fiList->first(); itm; itm = fiList->next())
- si[i++].item = itm;
- qt_cmp_si_sortSpec = sortSpec;
- qsort( si, i, sizeof(si[0]), qt_cmp_si );
- // put them back in the list
- fiList->setAutoDelete( FALSE );
- fiList->clear();
- int j;
- for ( j=0; j<i; j++ ) {
- fiList->append( si[j].item );
- fList->append( si[j].item->fileName() );
- }
- delete [] si;
- fiList->setAutoDelete( TRUE );
- }
-
- if ( filterSpec == (FilterSpec)filtS && sortSpec == (SortSpec)sortS &&
- nameFilter == nameFilt )
- dirty = FALSE;
- else
- dirty = TRUE;
- return TRUE;
-}
-
-const QFileInfoList * QDir::drives()
-{
- // at most one instance of QFileInfoList is leaked, and this variable
- // points to that list
- static QFileInfoList * knownMemoryLeak = 0;
-
- if ( !knownMemoryLeak ) {
- knownMemoryLeak = new QFileInfoList;
- // non-win32 versions both use just one root directory
- knownMemoryLeak->append( new QFileInfo( rootDirPath() ) );
- }
-
- return knownMemoryLeak;
-}
-#endif //QT_NO_DIR
diff --git a/qtools/qdir_win32.cpp b/qtools/qdir_win32.cpp
deleted file mode 100644
index 324ff24..0000000
--- a/qtools/qdir_win32.cpp
+++ /dev/null
@@ -1,485 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- * Based on qdir_unix.cpp
- *
- * Copyright (C) 1992-2000 Trolltech AS.
- */
-
-
-#include "qglobal.h"
-
-#include "qdir.h"
-#ifndef QT_NO_DIR
-
-
-#include "qfileinfo.h"
-#include "qfiledefs_p.h"
-#include "qregexp.h"
-#include "qstringlist.h"
-#include <stdlib.h>
-#include <ctype.h>
-#if defined(_OS_WIN32_)
-#if defined(_CC_BOOL_DEF_)
-#undef bool
-#include <windows.h>
-#define bool int
-#else
-#include <windows.h>
-#endif
-#endif
-#if defined(_OS_OS2EMX_)
-extern Q_UINT32 DosQueryCurrentDisk(Q_UINT32*,Q_UINT32*);
-#define NO_ERROR 0
-#endif
-
-extern QStringList qt_makeFilterList( const QString &filter );
-
-extern int qt_cmp_si_sortSpec;
-
-#if defined(Q_C_CALLBACKS)
-extern "C" {
-#endif
-
-extern int qt_cmp_si( const void *, const void * );
-
-#if defined(Q_C_CALLBACKS)
-}
-#endif
-
-static QString p_getenv( QString name )
-{
- DWORD len = GetEnvironmentVariableW( ( LPCWSTR ) qt_winTchar ( name, TRUE ), NULL, 0 );
- if ( len == 0 )
- return QString::null;
- /* ansi: we allocate too much memory, but this shouldn't be the problem here ... */
- LPWSTR buf = (LPWSTR)new WCHAR[ len ];
- len = GetEnvironmentVariableW ( ( LPCWSTR ) qt_winTchar ( name, TRUE ), buf, len );
- if ( len == 0 )
- {
- delete[] buf;
- return QString::null;
- }
- QString ret = qt_winQString ( buf );
- delete[] buf;
- return ret;
-}
-
-
-void QDir::slashify( QString& n )
-{
- for ( int i=0; i<(int)n.length(); i++ )
- {
- if ( n[i] == '\\' )
- n[i] = '/';
- }
-}
-
-QString QDir::homeDirPath()
-{
- QString d = p_getenv ( "HOME" );
- if ( d.isNull () ) {
- d = p_getenv ( "USERPROFILE" );
- if ( d.isNull () ) {
- QString homeDrive = p_getenv ( "HOMEDRIVE" );
- QString homePath = p_getenv ( "HOMEPATH" );
- if ( !homeDrive.isNull () && !homePath.isNull () ) {
- d = homeDrive + homePath;
- } else {
- d = rootDirPath ();
- }
- }
- }
- slashify( d );
- return d;
-}
-
-QString QDir::canonicalPath() const
-{
- QString r;
-
- char cur[PATH_MAX];
- char tmp[PATH_MAX];
- GETCWD( cur, PATH_MAX );
- if ( CHDIR(QFile::encodeName(dPath)) >= 0 ) {
- GETCWD( tmp, PATH_MAX );
- r = QFile::decodeName(tmp);
- }
- CHDIR( cur );
-
- slashify( r );
- return r;
-}
-
-bool QDir::mkdir( const QString &dirName, bool acceptAbsPath ) const
-{
-#if defined(__CYGWIN32_)
- return MKDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)), 0777 ) == 0;
-#else
- return _wmkdir( ( LPCWSTR ) filePath( dirName, acceptAbsPath ).ucs2() ) == 0;
-#endif
-}
-
-bool QDir::rmdir( const QString &dirName, bool acceptAbsPath ) const
-{
-#if defined(__CYGWIN32_)
- return RMDIR( QFile::encodeName(filePath(dirName,acceptAbsPath)) ) == 0;
-#else
- return _wrmdir( ( LPCWSTR ) filePath( dirName, acceptAbsPath ).ucs2() ) == 0;
-#endif
-}
-
-bool QDir::isReadable() const
-{
- QString path = dPath;
- if ( ( path[ 0 ] == '\\' ) || ( path[ 0 ] == '/' ) )
- path = rootDirPath() + path;
-#if defined(__CYGWIN32_)
- return ACCESS( QFile::encodeName(dPath), R_OK ) == 0;
-#else
- return ( _waccess( (wchar_t*) path.ucs2(), R_OK ) == 0 );
-#endif
-}
-
-bool QDir::isRoot() const
-{
- QString path = dPath;
- slashify( path );
- return path == rootDirPath ();
-}
-
-bool QDir::rename( const QString &name, const QString &newName,
- bool acceptAbsPaths )
-{
- if ( name.isEmpty() || newName.isEmpty() ) {
-#if defined(CHECK_NULL)
- qWarning( "QDir::rename: Empty or null file name(s)" );
-#endif
- return FALSE;
- }
- QString fn1 = filePath( name, acceptAbsPaths );
- QString fn2 = filePath( newName, acceptAbsPaths );
-#if defined(__CYGWIN32_)
- return ::rename( QFile::encodeName(fn1),
- QFile::encodeName(fn2) ) == 0;
-#else
- return MoveFileW( ( LPCWSTR ) fn1.ucs2(), ( LPCWSTR ) fn2.ucs2() ) != 0;
-#endif
-}
-
-bool QDir::setCurrent( const QString &path )
-{
-#if defined(__CYGWIN32_)
- int r;
- r = CHDIR( QFile::encodeName(path) );
- return r >= 0;
-#else
- if ( !QDir( path ).exists() )
- return false;
- return ( SetCurrentDirectoryW( ( LPCWSTR ) path.ucs2() ) >= 0 );
-#endif
-}
-
-QString QDir::currentDirPath()
-{
- QString result;
-
-#if defined(__CYGWIN32_)
-
- STATBUF st;
- if ( STAT( ".", &st ) == 0 ) {
- char currentName[PATH_MAX];
- if ( GETCWD( currentName, PATH_MAX ) != 0 )
- result = QFile::decodeName(currentName);
-#if defined(DEBUG)
- if ( result.isNull() )
- qWarning( "QDir::currentDirPath: getcwd() failed" );
-#endif
- } else {
-#if defined(DEBUG)
- qWarning( "QDir::currentDirPath: stat(\".\") failed" );
-#endif
- }
-
-#else
-
- DWORD size = 0;
- WCHAR currentName[ PATH_MAX ];
- size = ::GetCurrentDirectoryW( PATH_MAX, currentName );
- if ( size != 0 ) {
- if ( size > PATH_MAX ) {
- WCHAR * newCurrentName = new WCHAR[ size ];
- if ( ::GetCurrentDirectoryW( PATH_MAX, newCurrentName ) != 0 )
- result = QString::fromUcs2( ( ushort* ) newCurrentName );
- delete [] newCurrentName;
- } else {
- result = QString::fromUcs2( ( ushort* ) currentName );
- }
- }
-
- if ( result.length() >= 2 && result[ 1 ] == ':' )
- result[ 0 ] = result.at( 0 ).upper(); // Force uppercase drive letters.
-#endif
- slashify( result );
- return result;
-}
-
-QString QDir::rootDirPath()
-{
- QString d = p_getenv ( "SystemDrive" );
- if ( d.isNull () )
- d = QString::fromLatin1( "c:" ); // not "c:\\" !
- slashify ( d );
- return d;
-}
-
-bool QDir::isRelativePath( const QString &path )
-{
- if ( path.isEmpty() )
- return TRUE;
- int p = 0;
- if ( path[ 0 ].isLetter() && path[ 1 ] == ':' )
- p = 2; // we have checked the first 2.
- return ( ( path[ p ] != '/' ) && ( path[ p ] != '\\' ) );
-}
-
-#undef IS_SUBDIR
-#undef IS_RDONLY
-#undef IS_ARCH
-#undef IS_HIDDEN
-#undef IS_SYSTEM
-#undef FF_GETFIRST
-#undef FF_GETNEXT
-#undef FF_ERROR
-
-#if defined(_OS_WIN32_)
-#define IS_SUBDIR FILE_ATTRIBUTE_DIRECTORY
-#define IS_RDONLY FILE_ATTRIBUTE_READONLY
-#define IS_ARCH FILE_ATTRIBUTE_ARCHIVE
-#define IS_HIDDEN FILE_ATTRIBUTE_HIDDEN
-#define IS_SYSTEM FILE_ATTRIBUTE_SYSTEM
-#define FF_GETFIRST FindFirstFile
-#define FF_GETNEXT FindNextFile
-#define FF_ERROR INVALID_HANDLE_VALUE
-#else
-#define IS_SUBDIR _A_SUBDIR
-#define IS_RDONLY _A_RDONLY
-#define IS_ARCH _A_ARCH
-#define IS_HIDDEN _A_HIDDEN
-#define IS_SYSTEM _A_SYSTEM
-#define FF_GETFIRST _findfirst
-#define FF_GETNEXT _findnext
-#define FF_ERROR -1
-#endif
-
-
-bool QDir::readDirEntries( const QString &nameFilter,
- int filterSpec, int sortSpec )
-{
- int i;
- if ( !fList ) {
- fList = new QStringList;
- CHECK_PTR( fList );
- fiList = new QFileInfoList;
- CHECK_PTR( fiList );
- fiList->setAutoDelete( TRUE );
- } else {
- fList->clear();
- fiList->clear();
- }
-
- QStringList filters = qt_makeFilterList( nameFilter );
-
- bool doDirs = (filterSpec & Dirs) != 0;
- bool doFiles = (filterSpec & Files) != 0;
- bool noSymLinks = (filterSpec & NoSymLinks) != 0;
- bool doReadable = (filterSpec & Readable) != 0;
- bool doWritable = (filterSpec & Writable) != 0;
- bool doExecable = (filterSpec & Executable) != 0;
- bool doHidden = (filterSpec & Hidden) != 0;
- // show hidden files if the user asks explicitly for e.g. .*
- if ( !doHidden && !nameFilter.isEmpty() && nameFilter[0] == '.' )
- doHidden = TRUE;
- bool doModified = (filterSpec & Modified) != 0;
- bool doSystem = (filterSpec & System) != 0;
-
- QRegExp wc( nameFilter.data(), FALSE, TRUE ); // wild card, case insensitive
- bool first = TRUE;
- QString p = dPath.copy();
- int plen = p.length();
-#if defined(_OS_WIN32_)
- HANDLE ff;
- WIN32_FIND_DATAW finfo;
-#else
- long ff;
- _finddata_t finfo;
-#endif
- QFileInfo fi;
- if ( plen == 0 )
- {
-#if defined(CHECK_NULL)
- warning( "QDir::readDirEntries: No directory name specified" );
-#endif
- return FALSE;
- }
- if ( p.at(plen-1) != '/' && p.at(plen-1) != '\\' )
- p += '/';
- p += "*.*";
-
-#if defined(__CYGWIN32_)
- ff = FF_GETFIRST( p.data(), &finfo );
-#else
- ff = FindFirstFileW ( ( LPCWSTR ) p.ucs2(), &finfo );
-#endif
- if ( ff == FF_ERROR )
- {
-#if defined(DEBUG)
- warning( "QDir::readDirEntries: Cannot read the directory: %s",
- (const char *)dPath.utf8() );
-#endif
- return FALSE;
- }
-
- while ( TRUE )
- {
- if ( first )
- first = FALSE;
- else
- {
-#if defined(__CYGWIN32_)
- if ( FF_GETNEXT(ff,&finfo) == -1 )
- break;
-#else
- //if ( !FF_GETNEXT(ff,&finfo) )
- // break;
- if (!FindNextFileW(ff, &finfo ))
- break;
-#endif
- }
-#if defined(__CYGWIN32_)
- int attrib = finfo.attrib;
-#else
- int attrib = finfo.dwFileAttributes;
-#endif
- bool isDir = (attrib & IS_SUBDIR) != 0;
- bool isFile = !isDir;
- bool isSymLink = FALSE;
- bool isReadable = TRUE;
- bool isWritable = (attrib & IS_RDONLY) == 0;
- bool isExecable = FALSE;
- bool isModified = (attrib & IS_ARCH) != 0;
- bool isHidden = (attrib & IS_HIDDEN) != 0;
- bool isSystem = (attrib & IS_SYSTEM) != 0;
-
-#if defined(__CYGWIN32_)
- const char *fname = finfo.name;
-#else
- //const char *fname = finfo.cFileName;
- QString fname = QString::fromUcs2( ( const unsigned short* ) finfo.cFileName);
-#endif
- if ( wc.match(fname.utf8()) == -1 && !(allDirs && isDir) )
- continue;
-
- QString name = fname;
- if ( doExecable )
- {
- QString ext = name.right(4).lower();
- if ( ext == ".exe" || ext == ".com" || ext == ".bat" ||
- ext == ".pif" || ext == ".cmd" )
- isExecable = TRUE;
- }
-
- if ( (doDirs && isDir) || (doFiles && isFile) )
- {
- if ( noSymLinks && isSymLink )
- continue;
- if ( (filterSpec & RWEMask) != 0 )
- if ( (doReadable && !isReadable) ||
- (doWritable && !isWritable) ||
- (doExecable && !isExecable) )
- continue;
- if ( doModified && !isModified )
- continue;
- if ( !doHidden && isHidden )
- continue;
- if ( !doSystem && isSystem )
- continue;
- fi.setFile( *this, name );
- fiList->append( new QFileInfo( fi ) );
- }
- }
-#if defined(__CYGWIN32_)
- _findclose( ff );
-#else
- FindClose( ff );
-#endif
-
- // Sort...
- QDirSortItem* si= new QDirSortItem[fiList->count()];
- QFileInfo* itm;
- i=0;
- for (itm = fiList->first(); itm; itm = fiList->next())
- si[i++].item = itm;
- qt_cmp_si_sortSpec = sortSpec;
- qsort( si, i, sizeof(si[0]), qt_cmp_si );
- // put them back in the list
- fiList->setAutoDelete( FALSE );
- fiList->clear();
- int j;
- for ( j=0; j<i; j++ ) {
- fiList->append( si[j].item );
- fList->append( si[j].item->fileName() );
- }
- delete [] si;
- fiList->setAutoDelete( TRUE );
-
- if ( filterSpec == (FilterSpec)filtS && sortSpec == (SortSpec)sortS &&
- nameFilter == nameFilt )
- dirty = FALSE;
- else
- dirty = TRUE;
- return TRUE;
-}
-
-const QFileInfoList * QDir::drives()
-{
- // at most one instance of QFileInfoList is leaked, and this variable
- // points to that list
- static QFileInfoList * knownMemoryLeak = 0;
-
- if ( !knownMemoryLeak ) {
- knownMemoryLeak = new QFileInfoList;
-
-#if defined(_OS_WIN32_)
- Q_UINT32 driveBits = (Q_UINT32) GetLogicalDrives() & 0x3ffffff;
-#elif defined(_OS_OS2EMX_)
- Q_UINT32 driveBits, cur;
- if (DosQueryCurrentDisk(&cur,&driveBits) != NO_ERROR)
- exit(1);
- driveBits &= 0x3ffffff;
-#endif
- char driveName[4];
- qstrcpy( driveName, "a:/" );
- while( driveBits ) {
- if ( driveBits & 1 )
- knownMemoryLeak->append( new QFileInfo( driveName ) );
- driveName[0]++;
- driveBits = driveBits >> 1;
- }
- }
-
- return knownMemoryLeak;
-}
-#endif //QT_NO_DIR
diff --git a/qtools/qfeatures.h b/qtools/qfeatures.h
deleted file mode 100644
index 1042ce6..0000000
--- a/qtools/qfeatures.h
+++ /dev/null
@@ -1,978 +0,0 @@
-/****************************************************************************
-**
-**
-** Global feature selection
-**
-** Created : 000417
-**
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QFEATURES_H
-#define QFEATURES_H
-
-/*! \page features....html
- ...
-*/
-
-// Qt ships with a number of pre-defined configurations. If none suit
-// your needs, define QCONFIG_LOCAL and create a "qconfig-local.h" file.
-//
-// Note that disabling some features will produce a libqt that is not
-// compatible with other libqt builds. Such modifications are only
-// supported on Qt/Embedded where reducing the library size is important
-// and where the application-suite is often a fixed set.
-//
-#if defined(QCONFIG_LOCAL)
-#include <qconfig-local.h>
-#elif defined(QCONFIG_MINIMAL)
-#include <qconfig-minimal.h>
-#elif defined(QCONFIG_SMALL)
-#include <qconfig-small.h>
-#elif defined(QCONFIG_MEDIUM)
-#include <qconfig-medium.h>
-#elif defined(QCONFIG_LARGE)
-#include <qconfig-large.h>
-#else // everything...
-#include <qconfig.h>
-#endif
-
-
-// Data structures
-/*!
- QStringList
-*/
-//#define QT_NO_STRINGLIST
-
-#if defined(QT_NO_IMAGE_SMOOTHSCALE)
-/*!
- QIconSet
-*/
-# define QT_NO_ICONSET
-#endif
-
-// File I/O
-#if defined(QT_NO_STRINGLIST)
- /*!
- QDir
- */
-# define QT_NO_DIR
-#endif
-
-/*!
- Palettes
-*/
-//#define QT_NO_PALETTE
-
-/*!
- QTextStream
-*/
-//#define QT_NO_TEXTSTREAM
-/*!
- QDataStream
-*/
-//#define QT_NO_DATASTREAM
-
-/*!
- Dynamic module linking
-*/
-//#define QT_NO_PLUGIN
-
-
-// Images
-/*!
- BMP image I/O
- <p>The Windows Bitmap (BMP) image format is common on MS-Windows.
- <p>This is an uncompressed image format
- offering few advantages over PNG or JPEG.
-*/
-#if defined(QT_NO_DATASTREAM)
-# define QT_NO_IMAGEIO_BMP
-#endif
-/*!
- PPM image I/O
- <p>The Portable PixMap (PPM) image format is common on Unix.
- <p>This is an uncompressed image format
- offering few advantages over PNG or JPEG.
-*/
-//#define QT_NO_IMAGEIO_PPM
-/*!
- XBM image I/O
- <p>The X11 BitMap (XBM) image format is common on X11.
- <p>This is an uncompressed monochrome image format.
- Qt uses this format for some internal images (eg. mouse cursors).
-*/
-//#define QT_NO_IMAGEIO_XBM
-/*!
- XPM image I/O
- <p>The X11 PixMap (XPM) image format is common on X11.
- <p>This is an uncompressed image format.
- XPM images have the small advantage that they can be trivially
- included in source files as they are C code.
- Qt uses this format for some internal images (eg. QMessageBox icons).
-*/
-#if defined(QT_NO_TEXTSTREAM)
-# define QT_NO_IMAGEIO_XPM
-#endif
-/*!
- PNG image I/O
- <p>The Portable Network Graphics (PNG) is a compressed image format.
- <p>See <a href=http://www.libpng.org/pub/png/>The PNG Home Site</a> for
- details of the format.
-*/
-//#define QT_NO_IMAGEIO_PNG
-/*!
- MNG image I/O
- <p>The Multiple-image Network Graphics (MNG) is a compressed animation format.
- <p>See <a href=http://www.libpng.org/pub/mng/>The MNG Home Site</a> for
- details of the format.
-*/
-//#define QT_NO_IMAGEIO_MNG
-/*!
- JPEG image I/O
- <p>The Joint Photographic Experts Group (JPEG) is a compressed lossy image format that gives high compression
- for real-world and photo-realistic images.
-*/
-//#define QT_NO_IMAGEIO_JPEG
-
-/*!
- Asynchronous I/O
- <p>Allows push-driven data processing.
-*/
-//#define QT_NO_ASYNC_IO
-/*!
- Asynchronous image I/O
- <p>Allows push-driven images.
-*/
-//#define QT_NO_ASYNC_IMAGE_IO
-#if defined(QT_NO_ASYNC_IO) || defined(QT_NO_ASYNC_IMAGE_IO)
- /*!
- Animated images
- <p>This includes animated GIFs.
- <p><b>Note: this currently also requires <tt>QT_BUILTIN_GIF_READER</tt> to
- be defined when building Qt.</b>
- */
-# define QT_NO_MOVIE
-#endif
-
-// Fonts
-/*!
- TrueType font files
- <p>Scalable font format common on MS-Windows and becoming common on Unix.
- <p>Only supported on Qt/Embedded.
-*/
-//#define QT_NO_TRUETYPE
-/*!
- BDF font files
- <p>The Bitmap Distribution Format (BDF) font file format, common
- on Unix.
- <p>Only supported on Qt/Embedded.
-*/
-#if defined(QT_NO_TEXTSTREAM) || defined(QT_NO_STRINGLIST)
-# define QT_NO_BDF
-#endif
-/*!
- QFontDatabase
-*/
-#if defined(QT_NO_STRINGLIST)
-# define QT_NO_FONTDATABASE
-#endif
-
-// Internationalization
-
-/*!
- QObject::tr()
-*/
-#if defined(QT_NO_DATASTREAM)
-# define QT_NO_TRANSLATION
-#endif
-
-/*!
- QTextCodec class and subclasses
-*/
-//#define QT_NO_TEXTCODEC
-
-#if defined(QT_NO_TEXTCODEC)
- /*!
- QTextCodec classes
- <p>This includes some large conversion tables.
- */
-# define QT_NO_CODECS
-#endif
-#if defined(QT_LITE_UNICODE)
- /*!
- Unicode property tables
- <p>These include some large tables.
- */
-# define QT_NO_UNICODETABLES
-#endif
-
-/*!
- MIME
-*/
-#if defined(QT_NO_DIR)
-# define QT_NO_MIME
-#endif
-#if defined(QT_NO_MIME) || defined(QT_NO_TEXTSTREAM) || defined(QT_NO_DRAWUTIL) || defined(QT_NO_IMAGE_SMOOTHSCALE)
- /*!
- RichText (HTML) display
- */
-# define QT_NO_RICHTEXT
-#endif
-
-/*!
- XML
-*/
-#if defined(QT_NO_STRINGLIST) || defined(QT_NO_TEXTSTREAM) || defined(QT_NO_TEXTCODEC)
-# define QT_NO_XML
-#endif
-
-/*!
- Document Object Model
-*/
-#if defined(QT_NO_XML) || defined(QT_NO_MIME)
-# define QT_NO_DOM
-#endif
-
-// Sound
-/*!
- Playing sounds
-*/
-//#define QT_NO_SOUND
-
-/*!
- Properties
-*/
-#if defined(QT_NO_STRINGLIST) || defined(QT_NO_ICONSET)
-# define QT_NO_PROPERTIES
-#endif
-
-
-
-// Networking
-
-/*!
- Network support
-*/
-//#define QT_NO_NETWORK
-
-#if defined(QT_NO_NETWORK) || defined(QT_NO_STRINGLIST) || defined(QT_NO_TEXTSTREAM)
- /*!
- DNS
- */
-# define QT_NO_DNS
-#endif
-/*!
- Network file access
-*/
-#if defined(QT_NO_NETWORK) || defined(QT_NO_DIR) || defined(QT_NO_STRINGLIST)
-# define QT_NO_NETWORKPROTOCOL
-#endif
-#if defined(QT_NO_NETWORKPROTOCOL) || defined(QT_NO_DNS)
- /*!
- FTP file access
- */
-# define QT_NO_NETWORKPROTOCOL_FTP
- /*!
- HTTP file access
- */
-# define QT_NO_NETWORKPROTOCOL_HTTP
-#endif
-
-/*!
- External process invocation.
-*/
-//#define QT_NO_PROCESS
-
-
-// Qt/Embedded-specific
-
-#if defined(QT_NO_NETWORK)
- /*!
- Multi-process support.
- */
-# define QT_NO_QWS_MULTIPROCESS
-#endif
-
-#if defined(QT_NO_QWS_MULTIPROCESS) || defined(QT_NO_DATASTREAM)
- /*!
- Palmtop Communication Protocol
- */
-# define QT_NO_COP
-#endif
-
-/*!
- Console keyboard support
-*/
-//#define QT_NO_QWS_KEYBOARD
-
-/*!
- Visible cursor
-*/
-#if defined(QT_NO_CURSOR)
-# define QT_NO_QWS_CURSOR
-#endif
-
-/*!
- Alpha-blended cursor
-*/
-//#define QT_NO_QWS_ALPHA_CURSOR
-/*!
- Mach64 acceleration
-*/
-//#define QT_NO_QWS_MACH64
-/*!
- Voodoo3 acceleration
-*/
-//#define QT_NO_QWS_VOODOO3
-/*!
- Matrox MGA acceleration (Millennium/Millennium II/Mystique/G200/G400)
-*/
-//#define QT_NO_QWS_MATROX
-/*!
- Virtual frame buffer
-*/
-
-//#define QT_NO_QWS_VFB
-/*!
- Transformed frame buffer
-*/
-//#define QT_NO_QWS_TRANSFORMED
-#if defined(QT_NO_NETWORK)
-/*!
- Remote frame buffer (VNC)
-*/
-# ifndef QT_NO_QWS_VNC
-# define QT_NO_QWS_VNC
-# endif
-#endif
-/*!
- 1-bit monochrome
-*/
-//#define QT_NO_QWS_DEPTH_1
-/*!
- 4-bit grayscale
-*/
-//#define QT_NO_QWS_DEPTH_4
-/*!
- 4-bit VGA
-*/
-//#define QT_NO_QWS_VGA_16
-/*!
- SVGALib Support
- Not implemented yet
-*/
-#define QT_NO_QWS_SVGALIB
-/*!
- 8-bit grayscale
-*/
-#define QT_NO_QWS_DEPTH_8GRAYSCALE
-/*!
- 8-bit color
-*/
-//#define QT_NO_QWS_DEPTH_8
-/*!
- 15 or 16-bit color (define QT_QWS_DEPTH16_RGB as 555 for 15-bit)
-*/
-//#define QT_NO_QWS_DEPTH_16
-/*!
- 24-bit color
-*/
-//#define QT_NO_QWS_DEPTH_24
-/*!
- 32-bit color
-*/
-//#define QT_NO_QWS_DEPTH_32
-
-/*!
- Window Manager
-*/
-//#define QT_NO_QWS_MANAGER
-
-/*!
- Window Manager Styles
-*/
-#define QT_NO_QWS_KDE2_WM_STYLE
-#if defined( QT_NO_QWS_MANAGER ) || defined( QT_NO_IMAGEIO_XPM )
-# define QT_NO_QWS_AQUA_WM_STYLE
-# define QT_NO_QWS_BEOS_WM_STYLE
-# define QT_NO_QWS_KDE_WM_STYLE
-# define QT_NO_QWS_QPE_WM_STYLE
-# define QT_NO_QWS_WINDOWS_WM_STYLE
-#endif
-
-/*!
- Saving of fonts
-*/
-//#define QT_NO_QWS_SAVEFONTS
-
-/*!
- Favour code size over graphics speed
- <p>Smaller, slower code will be used for drawing operations.
- <p>Only supported on Qt/Embedded.
-*/
-//#define QT_NO_QWS_GFX_SPEED
-
-/*!
- Qt/Embedded window system properties.
-*/
-//#define QT_NO_QWS_PROPERTIES
-
-#if defined(QT_NO_QWS_PROPERTIES) || defined(QT_NO_MIME)
- /*!
- Cut and paste
- */
-# define QT_NO_CLIPBOARD
-#endif
-
-#if defined(QT_NO_MIME) || defined(QT_NO_QWS_PROPERTIES)
- /*!
- Drag and drop
- */
-# define QT_NO_DRAGANDDROP
-#endif
-
-#if defined(QT_NO_PROPERTIES)
- /*!
- SQL
- */
-# define QT_NO_SQL
-#endif
-
-#if defined(QT_NO_CLIPBOARD) || defined(QT_NO_MIME) || defined(_WS_QWS_)
- /*!
- Cut and paste of complex data types (non-text)
- Not yet implemented for QWS.
- */
-# define QT_NO_MIMECLIPBOARD
-#endif
-
-
-/*!
- Drawing utility functions
-*/
-//#define QT_NO_DRAWUTIL
-/*!
- TrueColor QImage
-*/
-//#define QT_NO_IMAGE_TRUECOLOR
-/*!
- Smooth QImage scaling
-*/
-//#define QT_NO_IMAGE_SMOOTHSCALE
-/*!
- Image file text strings
-*/
-#if defined(QT_NO_STRINGLIST)
-# define QT_NO_IMAGE_TEXT
-#endif
-
-#if defined(QT_NO_IMAGE_TRUECOLOR)
- /*!
- 16-bit QImage
- */
-# define QT_NO_IMAGE_16_BIT
-#endif
-/*!
- Cursors
-*/
-//#define QT_NO_CURSOR
-
-// Painting
-/*!
- Named colors
-*/
-//#define QT_NO_COLORNAMES
-/*!
- Scaling and rotation
-*/
-//#define QT_NO_TRANSFORMATIONS
-
-/*!
- Printing
-*/
-#if defined(QT_NO_TEXTSTREAM)
-# define QT_NO_PRINTER
-#endif
-
-/*!
- QPicture
-*/
-#if defined(QT_NO_DATASTREAM)
-# define QT_NO_PICTURE
-#endif
-
-// Layout
-/*!
- Automatic widget layout
-*/
-//#define QT_NO_LAYOUT
-
-// Widgets
-#if defined(QT_NO_DRAWUTIL) || defined(QT_NO_PALETTE)
-/*!
- QStyle
-*/
-# define QT_NO_STYLE
-#endif
-
-
-/*!
- Dialogs
-*/
-//#define QT_NO_DIALOG
-/*!
- Semi-modal dialogs
-*/
-//#define QT_NO_SEMIMODAL
-/*!
- Framed widgets
-*/
-//#define QT_NO_FRAME
-
-/*!
- Special widget effects (fading, scrolling)
-*/
-//#define QT_NO_EFFECTS
-
-
-/*!
- QLabel
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_LABEL
-#endif
-
-/*!
- Toolbars
-*/
-#ifdef QT_NO_LAYOUT
-# define QT_NO_TOOLBAR
-#endif
-
-/*!
- Buttons
-*/
-#if defined(QT_NO_BUTTON) || defined(QT_NO_STYLE)
-/*!
- Check-boxes
-*/
-# define QT_NO_CHECKBOX
-/*!
- Radio-buttons
-*/
-# define QT_NO_RADIOBUTTON
-#endif
-#if defined(QT_NO_BUTTON) || defined(QT_NO_TOOLBAR) || defined(QT_NO_ICONSET)
-/*!
- Tool-buttons
-*/
-# define QT_NO_TOOLBUTTON
-#endif
-/*!
- Grid layout widgets
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_GRID
-#endif
-/*!
- Group boxes
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_GROUPBOX
-#endif
-#if defined(QT_NO_GROUPBOX)
-/*!
- Button groups
-*/
-# define QT_NO_BUTTONGROUP
-/*!
- Horizontal group boxes
-*/
-# define QT_NO_HGROUPBOX
-#endif
-#if defined(QT_NO_HGROUPBOX)
-/*!
- Vertical group boxes
-*/
-# define QT_NO_VGROUPBOX
-#endif
-#if defined(QT_NO_BUTTONGROUP)
-/*!
- Horizontal button groups
-*/
-# define QT_NO_HBUTTONGROUP
-#endif
-#if defined(QT_NO_HBUTTONGROUP)
-/*!
- Vertical button groups
-*/
-# define QT_NO_VBUTTONGROUP
-#endif
-/*!
- Horizontal box layout widgets
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_HBOX
-#endif
-#if defined(QT_NO_HBOX)
-/*!
- Vertical box layout widgets
-*/
-# define QT_NO_VBOX
-#endif
-/*!
- Single-line edits
-*/
-#if defined(QT_NO_PALETTE)
-# define QT_NO_LINEEDIT
-#endif
-#if defined(QT_NO_TOOLBAR)
-/*!
- Main-windows
-*/
-# define QT_NO_MAINWINDOW
-#endif
-#if defined(QT_NO_ICONSET)
-/*!
- Menu-like widgets
-*/
-# define QT_NO_MENUDATA
-#endif
-#if defined(QT_NO_MENUDATA)
-/*!
- Popup-menus
-*/
-# define QT_NO_POPUPMENU
-/*!
- Menu bars
-*/
-# define QT_NO_MENUBAR
-#endif
-#if defined(QT_NO_BUTTON) || defined(QT_NO_ICONSET) || defined(QT_NO_POPUPMENU)
-/*!
- Push-buttons
-*/
-# define QT_NO_PUSHBUTTON
-#endif
-/*!
- Progress bars
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_PROGRESSBAR
-#endif
-/*!
- Range-control widgets
-*/
-//#define QT_NO_RANGECONTROL
-#if defined(QT_NO_RANGECONTROL) || defined(QT_NO_STYLE)
-/*!
- Scroll bars
-*/
-# define QT_NO_SCROLLBAR
-/*!
- Sliders
-*/
-# define QT_NO_SLIDER
-/*!
- Spin boxes
-*/
-# define QT_NO_SPINBOX
-/*!
- Dials
-*/
-# define QT_NO_DIAL
-#endif
-
-
-#if defined(QT_NO_SCROLLBAR) || defined(QT_NO_FRAME)
-/*!
- Scrollable view widgets
-*/
-# define QT_NO_SCROLLVIEW
-#endif
-#if defined(QT_NO_SCROLLVIEW)
-/*!
- QCanvas
-*/
-# define QT_NO_CANVAS
-/*!
- QIconView
-*/
-# define QT_NO_ICONVIEW
-#endif
-
-#if defined(QT_NO_SCROLLBAR)
-/*!
- Table-like widgets
-*/
-# define QT_NO_TABLEVIEW
-#endif
-#if defined(QT_NO_TABLEVIEW)
-/*!
- Multi-line edits
-*/
-# define QT_NO_MULTILINEEDIT
-#endif
-
-/*!
- Splitters
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_SPLITTER
-#endif
-/*!
- Status bars
-*/
-#ifdef QT_NO_LAYOUT
-# define QT_NO_STATUSBAR
-#endif
-/*!
- Tab-bars
-*/
-#if defined(QT_NO_ICONSET)
-# define QT_NO_TABBAR
-#endif
-#if defined(QT_NO_TABBAR)
-/*!
- Tab widgets
-*/
-# define QT_NO_TABWIDGET
-#endif
-/*!
- Tool tips
-*/
-#if defined( QT_NO_LABEL ) || defined( QT_NO_PALETTE )
-# define QT_NO_TOOLTIP
-#endif
-/*!
- Input validators
-*/
-//#define QT_NO_VALIDATOR
-/*!
- "What's this" help
-*/
-#if defined( QT_NO_TOOLTIP )
-# define QT_NO_WHATSTHIS
-#endif
-/*!
- Widget stacks
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_WIDGETSTACK
-#endif
-
-#if defined(QT_NO_RICHTEXT) || defined(QT_NO_SCROLLVIEW)
- /*!
- QTextView
- */
-# define QT_NO_TEXTVIEW
-#endif
-
-#if defined(QT_NO_TEXTVIEW)
- /*!
- QTextBrowser
- */
-# define QT_NO_TEXTBROWSER
-#endif
-
-#if defined(QT_NO_STYLE)
- /*!
- Windows style
- */
-# define QT_NO_STYLE_WINDOWS
- /*!
- Motif style
- */
-# define QT_NO_STYLE_MOTIF
-#endif
-
-#if defined(QT_NO_STYLE_MOTIF)
- /*!
- Motif-plus style
- */
-# define QT_NO_STYLE_MOTIFPLUS
-#endif
-
-
-#if defined(QT_NO_SCROLLVIEW) || defined(QT_NO_STRINGLIST)
- /*!
- QListBox
- */
-# define QT_NO_LISTBOX
-#endif
-
-/*!
- QAccel
-*/
-//#define QT_NO_ACCEL
-
-/*!
- QSizeGrip
-*/
-#ifdef QT_NO_PALETTE
-# define QT_NO_SIZEGRIP
-#endif
-/*!
- QHeader
-*/
-#ifdef QT_NO_ICONSET
-# define QT_NO_HEADER
-#endif
-/*!
- QWorkSpace
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_WORKSPACE
-#endif
-/*!
- QLCDNumber
-*/
-#ifdef QT_NO_FRAME
-# define QT_NO_LCDNUMBER
-#endif
-/*!
- QAction
-*/
-//#define QT_NO_ACTION
-
-#if defined(QT_NO_HEADER)
- /*!
- QTable
- */
-# define QT_NO_TABLE
-#endif
-
-#if defined(QT_NO_LISTBOX)
- /*!
- QComboBox
- */
-# define QT_NO_COMBOBOX
-#endif
-
-#if defined(QT_NO_HEADER) || defined(QT_NO_SCROLLVIEW)
- /*!
- QListView
- */
-# define QT_NO_LISTVIEW
-#endif
-
-#if defined(QT_NO_STYLE_WINDOWS)
- /*!
- Compact Windows style
- */
-# define QT_NO_STYLE_COMPACT
-#endif
-
-#if defined(QT_NO_STYLE_MOTIF) || defined(QT_NO_TRANSFORMATIONS)
- /*!
- CDE style
- */
-# define QT_NO_STYLE_CDE
- /*!
- SGI style
- */
-# define QT_NO_STYLE_SGI
-#endif
-#if defined(QT_NO_STYLE_WINDOWS)
- /*!
- Platinum style
- */
-# define QT_NO_STYLE_PLATINUM
-#endif
-
-/*!
- QColorDialog
-*/
-#if defined(QT_NO_LAYOUT) || defined(QT_NO_LABEL) || defined(QT_NO_PUSHBUTTON) || defined(QT_NO_DIALOG)
-# define QT_NO_COLORDIALOG
-#endif
-#if defined(QT_NO_DIALOG)
-/*!
- QMessageBox
-*/
-# define QT_NO_MESSAGEBOX
-#endif
-#if defined(QT_NO_DIALOG) || defined(QT_NO_TABBAR)
-/*!
- QTabDialog
-*/
-#define QT_NO_TABDIALOG
-#endif
-
-#if defined(QT_NO_DIALOG)
-/*!
- QWizard
-*/
-# define QT_NO_WIZARD
-#endif
-
-#if defined(QT_NO_DIALOG) || defined(QT_NO_LISTVIEW) || defined(QT_NO_NETWORKPROTOCOL) || defined(QT_NO_COMBOBOX) || defined(QT_NO_DIR) || defined(QT_NO_MESSAGEBOX) || defined(QT_NO_SEMIMODAL)
- /*!
- QFileDialog
- */
-# define QT_NO_FILEDIALOG
-#endif
-
-#if defined(QT_NO_DIALOG) || defined(QT_NO_FONTDATABASE) || defined(QT_NO_COMBOBOX)
- /*!
- QFontDialog
- */
-# define QT_NO_FONTDIALOG
-#endif
-
-#if defined(QT_NO_DIALOG) || defined(QT_NO_LISTVIEW) || defined(QT_NO_PRINTER) || defined(QT_NO_COMBOBOX) || defined(QT_NO_DIR) || defined(QT_NO_LAYOUT) || defined(QT_NO_LABEL)
- /*!
- QPrintDialog
- */
-# define QT_NO_PRINTDIALOG
-#endif
-
-#if defined(QT_NO_SEMIMODAL)
- /*!
- QProgressDialog
- */
-# define QT_NO_PROGRESSDIALOG
-#endif
-#if defined(QT_NO_DIALOG) || defined(QT_NO_COMBOBOX)
- /*!
- QInputDialog
- */
-# define QT_NO_INPUTDIALOG
-#endif
-
-#if defined(QT_NO_STRINGLIST)
- /*!
- Session management support
- */
-# define QT_NO_SESSIONMANAGER
-#endif
-
-#endif // QFEATURES_H
diff --git a/qtools/qfile.cpp b/qtools/qfile.cpp
deleted file mode 100644
index 7939160..0000000
--- a/qtools/qfile.cpp
+++ /dev/null
@@ -1,550 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QFile class
-**
-** Created : 930812
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglobal.h"
-#if defined(_OS_WIN32_)
-#ifdef UNICODE
-#ifndef _UNICODE
-#define _UNICODE
-#endif
-#endif
-#endif
-
-#include "qfile.h"
-#include "qfiledefs_p.h"
-
-extern bool qt_file_access( const QString& fn, int t );
-
-// NOT REVISED
-/*!
- \class QFile qfile.h
- \brief The QFile class is an I/O device that operates on files.
-
- \ingroup io
-
- QFile is an I/O device for reading and writing binary and text files. A
- QFile may be used by itself (readBlock and writeBlock) or by more
- conveniently using QDataStream or QTextStream.
-
- Here is a code fragment that uses QTextStream to read a text
- file line by line. It prints each line with a line number.
- \code
- QFile f("file.txt");
- if ( f.open(IO_ReadOnly) ) { // file opened successfully
- QTextStream t( &f ); // use a text stream
- QString s;
- int n = 1;
- while ( !t.eof() ) { // until end of file...
- s = t.readLine(); // line of text excluding '\n'
- printf( "%3d: %s\n", n++, (const char *)s );
- }
- f.close();
- }
- \endcode
-
- The QFileInfo class holds detailed information about a file, such as
- access permissions, file dates and file types.
-
- The QDir class manages directories and lists of file names.
-
- \sa QDataStream, QTextStream
-*/
-
-
-/*!
- Constructs a QFile with no name.
-*/
-
-QFile::QFile()
-{
- init();
-}
-
-/*!
- Constructs a QFile with a file name \e name.
- \sa setName()
-*/
-
-QFile::QFile( const QString &name )
- : fn(name)
-{
- init();
-}
-
-
-/*!
- Destructs a QFile. Calls close().
-*/
-
-QFile::~QFile()
-{
- close();
-}
-
-
-/*!
- \internal
- Initialize internal data.
-*/
-
-void QFile::init()
-{
- setFlags( IO_Direct );
- setStatus( IO_Ok );
- fh = 0;
- fd = 0;
- length = 0;
- ioIndex = 0;
- ext_f = FALSE; // not an external file handle
-}
-
-
-/*!
- \fn QString QFile::name() const
- Returns the name set by setName().
- \sa setName(), QFileInfo::fileName()
-*/
-
-/*!
- Sets the name of the file. The name can include an absolute directory
- path or it can be a name or a path relative to the current directory.
-
- Do not call this function if the file has already been opened.
-
- Note that if the name is relative QFile does not associate it with the
- current directory. If you change directory before calling open(), open
- uses the new current directory.
-
- Example:
- \code
- QFile f;
- QDir::setCurrent( "/tmp" );
- f.setName( "readme.txt" );
- QDir::setCurrent( "/home" );
- f.open( IO_ReadOnly ); // opens "/home/readme.txt" under UNIX
- \endcode
-
- Also note that the directory separator '/' works for all operating
- systems supported by Qt.
-
- \sa name(), QFileInfo, QDir
-*/
-
-void QFile::setName( const QString &name )
-{
- if ( isOpen() ) {
-#if defined(CHECK_STATE)
- qWarning( "QFile::setName: File is open" );
-#endif
- close();
- }
- fn = name;
-}
-
-/*!
- Returns TRUE if this file exists, otherwise FALSE.
- \sa name()
-*/
-
-bool QFile::exists() const
-{
- return qt_file_access( fn, F_OK );
-}
-
-/*!
- Returns TRUE if the file given by \e fileName exists, otherwise FALSE.
-*/
-
-bool QFile::exists( const QString &fileName )
-{
- return qt_file_access( fileName, F_OK );
-}
-
-
-/*!
- Removes the file specified by the file name currently set.
- Returns TRUE if successful, otherwise FALSE.
-
- The file is closed before it is removed.
-*/
-
-bool QFile::remove()
-{
- close();
- return remove( fn );
-}
-
-#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_) || defined(_OS_CYGWIN_)
-# define HAS_TEXT_FILEMODE // has translate/text filemode
-#endif
-#if defined(O_NONBLOCK)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NONBLOCK
-#elif defined(O_NDELAY)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NDELAY
-#endif
-
-/*!
- Flushes the file buffer to the disk.
-
- close() also flushes the file buffer.
-*/
-
-void QFile::flush()
-{
- if ( isOpen() && fh ) // can only flush open/buffered
- fflush( fh ); // file
-}
-
-/*!
- Returns TRUE if the end of file has been reached, otherwise FALSE.
- \sa size()
-*/
-
-bool QFile::atEnd() const
-{
- if ( !isOpen() ) {
-#if defined(CHECK_STATE)
- qWarning( "QFile::atEnd: File is not open" );
-#endif
- return FALSE;
- }
- if ( isDirectAccess() && !isTranslated() ) {
- if ( at() < length )
- return FALSE;
- }
- return QIODevice::atEnd();
-}
-
-/*!
- Reads a line of text.
-
- Reads bytes from the file until end-of-line is reached, or up to \a
- maxlen bytes, and returns the number of bytes read, or -1 in case of
- error. The terminating newline is not stripped.
-
- This function is efficient only for buffered files. Avoid
- readLine() for files that have been opened with the \c IO_Raw
- flag.
-
- \sa readBlock(), QTextStream::readLine()
-*/
-
-int QFile::readLine( char *p, uint maxlen )
-{
- if ( maxlen == 0 ) // application bug?
- return 0;
-#if defined(CHECK_STATE)
- CHECK_PTR( p );
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::readLine: File not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QFile::readLine: Read operation not permitted" );
- return -1;
- }
-#endif
- int nread; // number of bytes read
- if ( isRaw() ) { // raw file
- nread = QIODevice::readLine( p, maxlen );
- } else { // buffered file
- p = fgets( p, maxlen, fh );
- if ( p ) {
- nread = qstrlen( p );
- ioIndex += nread;
- } else {
- nread = -1;
- setStatus(IO_ReadError);
- }
- }
- return nread;
-}
-
-
-/*!
- Reads a line of text.
-
- Reads bytes from the file until end-of-line is reached, or up to \a
- maxlen bytes, and returns the number of bytes read, or -1 in case of
- error. The terminating newline is not stripped.
-
- This function is efficient only for buffered files. Avoid
- readLine() for files that have been opened with the \c IO_Raw
- flag.
-
- Note that the string is read as plain Latin1 bytes, not Unicode.
-
- \sa readBlock(), QTextStream::readLine()
-*/
-
-int QFile::readLine( QString& s, uint maxlen )
-{
- QByteArray ba(maxlen);
- int l = readLine(ba.data(),maxlen);
- if ( l >= 0 ) {
- ba.truncate(l);
- s = QString(ba);
- }
- return l;
-}
-
-
-/*!
- Reads a single byte/character from the file.
-
- Returns the byte/character read, or -1 if the end of the file has been
- reached.
-
- \sa putch(), ungetch()
-*/
-
-int QFile::getch()
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::getch: File not open" );
- return EOF;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QFile::getch: Read operation not permitted" );
- return EOF;
- }
-#endif
-
- int ch;
-
- if ( !ungetchBuffer.isEmpty() ) {
- int len = ungetchBuffer.length();
- ch = ungetchBuffer[ len-1 ];
- ungetchBuffer.truncate( len - 1 );
- return ch;
- }
-
- if ( isRaw() ) { // raw file (inefficient)
- char buf[1];
- ch = readBlock( buf, 1 ) == 1 ? buf[0] : EOF;
- } else { // buffered file
- if ( (ch = getc( fh )) != EOF )
- ioIndex++;
- else
- setStatus(IO_ReadError);
- }
- return ch;
-}
-
-/*!
- \fn int QFile::writeBlock( const QByteArray& data )
- \reimp
- \internal
- Should be removed in 3.0
-*/
-
-/*!
- Writes the character \e ch to the file.
-
- Returns \e ch, or -1 if some error occurred.
-
- \sa getch(), ungetch()
-*/
-
-int QFile::putch( int ch )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::putch: File not open" );
- return EOF;
- }
- if ( !isWritable() ) { // writing not permitted
- qWarning( "QFile::putch: Write operation not permitted" );
- return EOF;
- }
-#endif
- if ( isRaw() ) { // raw file (inefficient)
- char buf[1];
- buf[0] = ch;
- ch = writeBlock( buf, 1 ) == 1 ? ch : EOF;
- } else { // buffered file
- if ( (ch = putc( ch, fh )) != EOF ) {
- ioIndex++;
- if ( ioIndex > length ) // update file length
- length = ioIndex;
- } else {
- setStatus(IO_WriteError);
- }
- }
- return ch;
-}
-
-/*!
- Puts the character \e ch back into the file and decrements the index if it
- is not zero.
-
- This function is normally called to "undo" a getch() operation.
-
- Returns \e ch, or -1 if some error occurred.
-
- \sa getch(), putch()
-*/
-
-int QFile::ungetch( int ch )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::ungetch: File not open" );
- return EOF;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QFile::ungetch: Read operation not permitted" );
- return EOF;
- }
-#endif
- if ( ch == EOF ) // cannot unget EOF
- return ch;
-
- if ( isSequentialAccess() && !fh) {
- // pipe or similar => we cannot ungetch, so do it manually
- ungetchBuffer +=ch;
- return ch;
- }
-
- if ( isRaw() ) { // raw file (very inefficient)
- char buf[1];
- at( ioIndex-1 );
- buf[0] = ch;
- if ( writeBlock(buf, 1) == 1 )
- at ( ioIndex-1 );
- else
- ch = EOF;
- } else { // buffered file
- if ( (ch = ungetc(ch, fh)) != EOF )
- ioIndex--;
- else
- setStatus( IO_ReadError );
- }
- return ch;
-}
-
-
-static QCString locale_encoder( const QString &fileName )
-{
- return fileName.local8Bit();
-}
-
-
-static QFile::EncoderFn encoder = locale_encoder;
-
-/*!
- When you use QFile, QFileInfo, and QDir to access the filesystem
- with Qt, you can use Unicode filenames. On Unix, these filenames
- are converted to an 8-bit encoding. If you want to do your own
- file I/O on Unix, you should convert the filename using this
- function. On Windows NT, Unicode filenames are supported directly
- in the filesystem and this function should be avoided. On Windows 95,
- non-Latin1 locales are not supported at this time.
-
- By default, this function converts to the local 8-bit encoding
- determined by the user's locale. This is sufficient for
- filenames that the user chooses. Filenames hard-coded into the
- application should only use 7-bit ASCII filename characters.
-
- The conversion scheme can be changed using setEncodingFunction().
- This might be useful if you wish to give the user an option to
- store in filenames in UTF-8, etc., but beware that such filenames
- would probably then be unrecognizable when seen by other programs.
-
- \sa decodeName()
-*/
-
-QCString QFile::encodeName( const QString &fileName )
-{
- return (*encoder)(fileName);
-}
-
-/*!
- \typedef QFile::EncoderFn
-
- This is used by QFile::setEncodingFunction().
-*/
-
-/*!
- Sets the function for encoding Unicode filenames.
- The default encodes in the locale-specific 8-bit encoding.
-
- \sa encodeName()
-*/
-void QFile::setEncodingFunction( EncoderFn f )
-{
- encoder = f;
-}
-
-static
-QString locale_decoder( const QCString &localFileName )
-{
- return QString::fromLocal8Bit(localFileName);
-}
-
-static QFile::DecoderFn decoder = locale_decoder;
-
-/*!
- This does the reverse of QFile::encodeName().
-
- \sa setDecodingFunction()
-*/
-QString QFile::decodeName( const QCString &localFileName )
-{
- return (*decoder)(localFileName);
-}
-
-/*!
- \typedef QFile::DecoderFn
-
- This is used by QFile::setDecodingFunction().
-*/
-
-/*!
- Sets the function for decoding 8-bit filenames.
- The default uses the locale-specific 8-bit encoding.
-
- \sa encodeName(), decodeName()
-*/
-
-void QFile::setDecodingFunction( DecoderFn f )
-{
- decoder = f;
-}
diff --git a/qtools/qfile.h b/qtools/qfile.h
deleted file mode 100644
index a447d2f..0000000
--- a/qtools/qfile.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QFile class
-**
-** Created : 930831
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QFILE_H
-#define QFILE_H
-
-#ifndef QT_H
-#include "qiodevice.h"
-#include "qstring.h"
-#include <stdio.h>
-#endif // QT_H
-
-class QDir;
-
-
-class Q_EXPORT QFile : public QIODevice // file I/O device class
-{
-public:
- QFile();
- QFile( const QString &name );
- virtual ~QFile();
-
- QString name() const;
- void setName( const QString &name );
-
- typedef QCString (*EncoderFn)( const QString &fileName );
- typedef QString (*DecoderFn)( const QCString &localfileName );
- static QCString encodeName( const QString &fileName );
- static QString decodeName( const QCString &localFileName );
- static void setEncodingFunction( EncoderFn );
- static void setDecodingFunction( DecoderFn );
-
- bool exists() const;
- static bool exists( const QString &fileName );
-
- bool remove();
- static bool remove( const QString &fileName );
-
- bool open( int );
- bool open( int, FILE * );
- bool open( int, int );
- void close();
- void flush();
-
- uint size() const;
- int at() const;
- bool at( int );
- bool atEnd() const;
-
- int readBlock( char *data, uint len );
- int writeBlock( const char *data, uint len );
- int writeBlock( const QByteArray& data )
- { return QIODevice::writeBlock(data); }
- int readLine( char *data, uint maxlen );
- int readLine( QString &, uint maxlen );
-
- int getch();
- int putch( int );
- int ungetch( int );
-
- int handle() const;
-
- int64 pos() const;
- int64 toEnd();
- bool seek(int64 pos);
-
-protected:
- QString fn;
- FILE *fh;
- int fd;
- int length;
- bool ext_f;
- void * d;
-
-private:
- void init();
- QCString ungetchBuffer;
-
-private: // Disabled copy constructor and operator=
-#if defined(Q_DISABLE_COPY)
- QFile( const QFile & );
- QFile &operator=( const QFile & );
-#endif
-};
-
-
-inline QString QFile::name() const
-{ return fn; }
-
-inline int QFile::at() const
-{ return ioIndex; }
-
-
-#endif // QFILE_H
diff --git a/qtools/qfile_unix.cpp b/qtools/qfile_unix.cpp
deleted file mode 100644
index dd41c4e..0000000
--- a/qtools/qfile_unix.cpp
+++ /dev/null
@@ -1,669 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QFileInfo class
-**
-** Created : 950628
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses for Unix/X11 or for Qt/Embedded may use this file in accordance
-** with the Qt Commercial License Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglobal.h"
-
-#include "qfile.h"
-#include "qfiledefs_p.h"
-
-#if (defined(_OS_MAC_) && (!defined(_OS_UNIX_))) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_) || defined(_OS_CYGWIN_)
-# define HAS_TEXT_FILEMODE // has translate/text filemode
-#endif
-#if defined(O_NONBLOCK)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NONBLOCK
-#elif defined(O_NDELAY)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NDELAY
-#endif
-
-bool qt_file_access( const QString& fn, int t )
-{
- if ( fn.isEmpty() )
- return FALSE;
- return ACCESS( QFile::encodeName(fn), t ) == 0;
-}
-
-/*!
- Removes the file \a fileName.
- Returns TRUE if successful, otherwise FALSE.
-*/
-
-bool QFile::remove( const QString &fileName )
-{
- if ( fileName.isEmpty() ) {
-#if defined(CHECK_NULL)
- qWarning( "QFile::remove: Empty or null file name" );
-#endif
- return FALSE;
- }
- return unlink( QFile::encodeName(fileName) ) == 0;
- // unlink more common in UNIX
-}
-
-#if defined(O_NONBLOCK)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NONBLOCK
-#elif defined(O_NDELAY)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NDELAY
-#endif
-
-/*!
- Opens the file specified by the file name currently set, using the mode \e m.
- Returns TRUE if successful, otherwise FALSE.
-
- The mode parameter \e m must be a combination of the following flags:
- <ul>
- <li>\c IO_Raw specified raw (non-buffered) file access.
- <li>\c IO_ReadOnly opens the file in read-only mode.
- <li>\c IO_WriteOnly opens the file in write-only mode (and truncates).
- <li>\c IO_ReadWrite opens the file in read/write mode, equivalent to
- \c (IO_ReadOnly|IO_WriteOnly).
- <li>\c IO_Append opens the file in append mode. This mode is very useful
- when you want to write something to a log file. The file index is set to
- the end of the file. Note that the result is undefined if you position the
- file index manually using at() in append mode.
- <li>\c IO_Truncate truncates the file.
- <li>\c IO_Translate enables carriage returns and linefeed translation
- for text files under MS-DOS, Windows and OS/2.
- </ul>
-
- The raw access mode is best when I/O is block-operated using 4kB block size
- or greater. Buffered access works better when reading small portions of
- data at a time.
-
- <strong>Important:</strong> When working with buffered files, data may
- not be written to the file at once. Call \link flush() flush\endlink
- to make sure the data is really written.
-
- \warning We have experienced problems with some C libraries when a buffered
- file is opened for both reading and writing. If a read operation takes place
- immediately after a write operation, the read buffer contains garbage data.
- Worse, the same garbage is written to the file. Calling flush() before
- readBlock() solved this problem.
-
- If the file does not exist and \c IO_WriteOnly or \c IO_ReadWrite is
- specified, it is created.
-
- Example:
- \code
- QFile f1( "/tmp/data.bin" );
- QFile f2( "readme.txt" );
- f1.open( IO_Raw | IO_ReadWrite | IO_Append );
- f2.open( IO_ReadOnly | IO_Translate );
- \endcode
-
- \sa name(), close(), isOpen(), flush()
-*/
-
-bool QFile::open( int m )
-{
- if ( isOpen() ) { // file already open
-#if defined(CHECK_STATE)
- qWarning( "QFile::open: File already open" );
-#endif
- return FALSE;
- }
- if ( fn.isNull() ) { // no file name defined
-#if defined(CHECK_NULL)
- qWarning( "QFile::open: No file name specified" );
-#endif
- return FALSE;
- }
- init(); // reset params
- setMode( m );
- if ( !(isReadable() || isWritable()) ) {
-#if defined(CHECK_RANGE)
- qWarning( "QFile::open: File access not specified" );
-#endif
- return FALSE;
- }
- bool ok = TRUE;
- STATBUF st;
- if ( isRaw() ) { // raw file I/O
- int oflags = OPEN_RDONLY;
- if ( isReadable() && isWritable() )
- oflags = OPEN_RDWR;
- else if ( isWritable() )
- oflags = OPEN_WRONLY;
- if ( flags() & IO_Append ) { // append to end of file?
- if ( flags() & IO_Truncate )
- oflags |= (OPEN_CREAT | OPEN_TRUNC);
- else
- oflags |= (OPEN_APPEND | OPEN_CREAT);
- setFlags( flags() | IO_WriteOnly ); // append implies write
- } else if ( isWritable() ) { // create/trunc if writable
- if ( flags() & IO_Truncate )
- oflags |= (OPEN_CREAT | OPEN_TRUNC);
- else
- oflags |= OPEN_CREAT;
- }
-#if defined(HAS_TEXT_FILEMODE)
- if ( isTranslated() )
-#ifdef __CYGWIN__
- /* Do nothing, allowing the Cygwin mount mode to take effect. */;
-#else
- oflags |= OPEN_TEXT;
-#endif
- else
- oflags |= OPEN_BINARY;
-#endif
-#if defined(HAS_ASYNC_FILEMODE)
- if ( isAsynchronous() )
- oflags |= OPEN_ASYNC;
-#endif
- fd = OPEN( QFile::encodeName(fn), oflags, 0666 );
-
- if ( fd != -1 ) { // open successful
- FSTAT( fd, &st ); // get the stat for later usage
- } else {
- ok = FALSE;
- }
- } else { // buffered file I/O
- QCString perm;
- char perm2[4];
- bool try_create = FALSE;
- if ( flags() & IO_Append ) { // append to end of file?
- setFlags( flags() | IO_WriteOnly ); // append implies write
- perm = isReadable() ? "a+" : "a";
- } else {
- if ( isReadWrite() ) {
- if ( flags() & IO_Truncate ) {
- perm = "w+";
- } else {
- perm = "r+";
- try_create = TRUE; // try to create if not exists
- }
- } else if ( isReadable() ) {
- perm = "r";
- } else if ( isWritable() ) {
- perm = "w";
- }
- }
- qstrcpy( perm2, perm );
-#if defined(HAS_TEXT_FILEMODE)
- if ( isTranslated() )
-#ifdef __CYGWIN__
- /* Do nothing, allowing the Cygwin mount mode to take effect. */;
-#else
- strcat( perm2, "t" );
-#endif
- else
- strcat( perm2, "b" );
-#endif
- while (1) { // At most twice
-
- fh = fopen( QFile::encodeName(fn), perm2 );
-
- if ( !fh && try_create ) {
- perm2[0] = 'w'; // try "w+" instead of "r+"
- try_create = FALSE;
- } else {
- break;
- }
- }
- if ( fh ) {
- FSTAT( FILENO(fh), &st ); // get the stat for later usage
- } else {
- ok = FALSE;
- }
- }
- if ( ok ) {
- setState( IO_Open );
- // on successful open the file stat was got; now test what type
- // of file we have
- if ( (st.st_mode & STAT_MASK) != STAT_REG ) {
- // non-seekable
- setType( IO_Sequential );
- length = INT_MAX;
- ioIndex = (flags() & IO_Append) == 0 ? 0 : length;
- } else {
- length = (int)st.st_size;
- ioIndex = (flags() & IO_Append) == 0 ? 0 : length;
- if ( !(flags()&IO_Truncate) && length == 0 && isReadable() ) {
- // try if you can read from it (if you can, it's a sequential
- // device; e.g. a file in the /proc filesystem)
- int c = getch();
- if ( c != -1 ) {
- ungetch(c);
- setType( IO_Sequential );
- length = INT_MAX;
- }
- }
- }
- } else {
- init();
- if ( errno == EMFILE ) // no more file handles/descrs
- setStatus( IO_ResourceError );
- else
- setStatus( IO_OpenError );
- }
- return ok;
-}
-
-/*!
- Opens a file in the mode \e m using an existing file handle \e f.
- Returns TRUE if successful, otherwise FALSE.
-
- Example:
- \code
- #include <stdio.h>
-
- void printError( const char* msg )
- {
- QFile f;
- f.open( IO_WriteOnly, stderr );
- f.writeBlock( msg, qstrlen(msg) ); // write to stderr
- f.close();
- }
- \endcode
-
- When a QFile is opened using this function, close() does not actually
- close the file, only flushes it.
-
- \warning If \e f is \c stdin, \c stdout, \c stderr, you may not
- be able to seek. See QIODevice::isSequentialAccess() for more
- information.
-
- \sa close()
-*/
-
-bool QFile::open( int m, FILE *f )
-{
- if ( isOpen() ) {
-#if defined(CHECK_RANGE)
- qWarning( "QFile::open: File already open" );
-#endif
- return FALSE;
- }
- init();
- setMode( m &~IO_Raw );
- setState( IO_Open );
- fh = f;
- ext_f = TRUE;
- STATBUF st;
- FSTAT( FILENO(fh), &st );
- ioIndex = (int)ftell( fh );
- if ( (st.st_mode & STAT_MASK) != STAT_REG || f == stdin ) { //stdin is non seekable
- // non-seekable
- setType( IO_Sequential );
- length = INT_MAX;
- } else {
- length = (int)st.st_size;
- if ( !(flags()&IO_Truncate) && length == 0 && isReadable() ) {
- // try if you can read from it (if you can, it's a sequential
- // device; e.g. a file in the /proc filesystem)
- int c = getch();
- if ( c != -1 ) {
- ungetch(c);
- setType( IO_Sequential );
- length = INT_MAX;
- }
- }
- }
- return TRUE;
-}
-
-/*!
- Opens a file in the mode \e m using an existing file descriptor \e f.
- Returns TRUE if successful, otherwise FALSE.
-
- When a QFile is opened using this function, close() does not actually
- close the file.
-
- \warning If \e f is one of 0 (stdin), 1 (stdout) or 2 (stderr), you may not
- be able to seek. size() is set to \c INT_MAX (in limits.h).
-
- \sa close()
-*/
-
-
-bool QFile::open( int m, int f )
-{
- if ( isOpen() ) {
-#if defined(CHECK_RANGE)
- qWarning( "QFile::open: File already open" );
-#endif
- return FALSE;
- }
- init();
- setMode( m |IO_Raw );
- setState( IO_Open );
- fd = f;
- ext_f = TRUE;
- STATBUF st;
- FSTAT( fd, &st );
- ioIndex = (int)LSEEK(fd, 0, SEEK_CUR);
- if ( (st.st_mode & STAT_MASK) != STAT_REG || f == 0 ) { // stdin is not seekable...
- // non-seekable
- setType( IO_Sequential );
- length = INT_MAX;
- } else {
- length = (int)st.st_size;
- if ( length == 0 && isReadable() ) {
- // try if you can read from it (if you can, it's a sequential
- // device; e.g. a file in the /proc filesystem)
- int c = getch();
- if ( c != -1 ) {
- ungetch(c);
- setType( IO_Sequential );
- length = INT_MAX;
- }
- resetStatus();
- }
- }
- return TRUE;
-}
-
-/*!
- Returns the file size.
- \sa at()
-*/
-
-uint QFile::size() const
-{
- STATBUF st;
- if ( isOpen() ) {
- FSTAT( fh ? FILENO(fh) : fd, &st );
- } else {
- STAT( QFile::encodeName(fn), &st );
- }
- return (uint)st.st_size;
-}
-
-/*!
- \fn int QFile::at() const
- Returns the file index.
- \sa size()
-*/
-
-/*!
- Sets the file index to \e pos. Returns TRUE if successful, otherwise FALSE.
-
- Example:
- \code
- QFile f( "data.bin" );
- f.open( IO_ReadOnly ); // index set to 0
- f.at( 100 ); // set index to 100
- f.at( f.at()+50 ); // set index to 150
- f.at( f.size()-80 ); // set index to 80 before EOF
- f.close();
- \endcode
-
- \warning The result is undefined if the file was \link open() opened\endlink
- using the \c IO_Append specifier.
-
- \sa size(), open()
-*/
-
-bool QFile::at( int pos )
-{
- if ( !isOpen() ) {
-#if defined(CHECK_STATE)
- qWarning( "QFile::at: File is not open" );
-#endif
- return FALSE;
- }
- bool ok;
- if ( isRaw() ) { // raw file
- pos = (int)LSEEK(fd, pos, SEEK_SET);
- ok = pos != -1;
- } else { // buffered file
- ok = fseek(fh, pos, SEEK_SET) == 0;
- }
- if ( ok )
- ioIndex = pos;
-#if defined(CHECK_RANGE)
- else
- qWarning( "QFile::at: Cannot set file position %d", pos );
-#endif
- return ok;
-}
-
-/*!
- Reads at most \e len bytes from the file into \e p and returns the
- number of bytes actually read.
-
- Returns -1 if a serious error occurred.
-
- \warning We have experienced problems with some C libraries when a buffered
- file is opened for both reading and writing. If a read operation takes place
- immediately after a write operation, the read buffer contains garbage data.
- Worse, the same garbage is written to the file. Calling flush() before
- readBlock() solved this problem.
-
- \sa writeBlock()
-*/
-
-int QFile::readBlock( char *p, uint len )
-{
-#if defined(CHECK_NULL)
- if ( !p )
- qWarning( "QFile::readBlock: Null pointer error" );
-#endif
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::readBlock: File not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QFile::readBlock: Read operation not permitted" );
- return -1;
- }
-#endif
- int nread = 0; // number of bytes read
- if ( !ungetchBuffer.isEmpty() ) {
- // need to add these to the returned string.
- int l = ungetchBuffer.length();
- while( nread < l ) {
- *p = ungetchBuffer[ l - nread - 1 ];
- p++;
- nread++;
- }
- ungetchBuffer.truncate( l - nread );
- }
-
- if ( nread < (int)len ) {
- if ( isRaw() ) { // raw file
- nread += (int)READ( fd, p, len-nread );
- if ( len && nread <= 0 ) {
- nread = 0;
- setStatus(IO_ReadError);
- }
- } else { // buffered file
- nread += (int)fread( p, 1, len-nread, fh );
- if ( (uint)nread != len ) {
- if ( ferror( fh ) || nread==0 )
- setStatus(IO_ReadError);
- }
- }
- }
- ioIndex += nread;
- return nread;
-}
-
-/*! \overload int writeBlock( const QByteArray& data )
-*/
-
-/*! \reimp
-
- Writes \e len bytes from \e p to the file and returns the number of
- bytes actually written.
-
- Returns -1 if a serious error occurred.
-
- \warning When working with buffered files, data may not be written
- to the file at once. Call flush() to make sure the data is really
- written.
-
- \sa readBlock()
-*/
-
-int QFile::writeBlock( const char *p, uint len )
-{
-#if defined(CHECK_NULL)
- if ( p == 0 && len != 0 )
- qWarning( "QFile::writeBlock: Null pointer error" );
-#endif
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::writeBlock: File not open" );
- return -1;
- }
- if ( !isWritable() ) { // writing not permitted
- qWarning( "QFile::writeBlock: Write operation not permitted" );
- return -1;
- }
-#endif
- if (p==0) return 0;
- int nwritten; // number of bytes written
- if ( isRaw() ) // raw file
- nwritten = (int)WRITE( fd, p, len );
- else // buffered file
- nwritten = (int)fwrite( p, 1, len, fh );
- if ( nwritten != (int)len ) { // write error
- if ( errno == ENOSPC ) // disk is full
- setStatus( IO_ResourceError );
- else
- setStatus( IO_WriteError );
- if ( isRaw() ) // recalc file position
- ioIndex = (int)LSEEK( fd, 0, SEEK_CUR );
- else
- ioIndex = fseek( fh, 0, SEEK_CUR );
- } else {
- ioIndex += nwritten;
- }
- if ( ioIndex > length ) // update file length
- length = ioIndex;
- return nwritten;
-}
-
-/*!
- Returns the file handle of the file.
-
- This is a small positive integer, suitable for use with C library
- functions such as fdopen() and fcntl(), as well as with QSocketNotifier.
-
- If the file is not open or there is an error, handle() returns -1.
-
- \sa QSocketNotifier
-*/
-
-int QFile::handle() const
-{
- if ( !isOpen() )
- return -1;
- else if ( fh )
- return FILENO( fh );
- else
- return fd;
-}
-
-/*!
- Closes an open file.
-
- The file is not closed if it was opened with an existing file handle.
- If the existing file handle is a \c FILE*, the file is flushed.
- If the existing file handle is an \c int file descriptor, nothing
- is done to the file.
-
- Some "write-behind" filesystems may report an unspecified error on
- closing the file. These errors only indicate that something may
- have gone wrong since the previous open(). In such a case status()
- reports IO_UnspecifiedError after close(), otherwise IO_Ok.
-
- \sa open(), flush()
-*/
-
-
-void QFile::close()
-{
- bool ok = FALSE;
- if ( isOpen() ) { // file is not open
- if ( fh ) { // buffered file
- if ( ext_f )
- ok = fflush( fh ) != -1; // flush instead of closing
- else
- ok = fclose( fh ) != -1;
- } else { // raw file
- if ( ext_f )
- ok = TRUE; // cannot close
- else
- ok = CLOSE( fd ) != -1;
- }
- init(); // restore internal state
- }
- if (!ok)
- setStatus (IO_UnspecifiedError);
-
- return;
-}
-
-int64 QFile::pos() const
-{
- if (isOpen())
- {
- // TODO: support 64 bit size
- return ftell( fh );
- }
- return -1;
-}
-
-int64 QFile::toEnd()
-{
- if (isOpen())
- {
- // TODO: support 64 bit size
- if (fseek( fh, 0, SEEK_END )!=-1)
- {
- return ftell( fh );
- }
- }
- return -1;
-}
-
-bool QFile::seek( int64 pos )
-{
- if (isOpen())
- {
- // TODO: support 64 bit size
- return fseek( fh, (long)pos, SEEK_SET )!=-1;
- }
- return FALSE;
-}
-
diff --git a/qtools/qfile_win32.cpp b/qtools/qfile_win32.cpp
deleted file mode 100644
index e0b1d88..0000000
--- a/qtools/qfile_win32.cpp
+++ /dev/null
@@ -1,678 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- * Based on qfile_unix.cpp
- *
- * Copyright (C) 1992-2000 Trolltech AS.
- */
-
-#include "qglobal.h"
-
-#include "qfile.h"
-#include "qfiledefs_p.h"
-
-#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_)
-# define HAS_TEXT_FILEMODE // has translate/text filemode
-#endif
-#if defined(O_NONBLOCK)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NONBLOCK
-#elif defined(O_NDELAY)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NDELAY
-#endif
-
-static void reslashify( QString& n )
-{
- for ( int i=0; i<(int)n.length(); i++ )
- {
- if ( n[i] == '/' )
- n[i] = '\\';
- }
-}
-
-bool qt_file_access( const QString& fn, int t )
-{
- if ( fn.isEmpty() )
- return FALSE;
-#if defined(__CYGWIN32_)
- return ACCESS( QFile::encodeName(fn), t ) == 0;
-#else
- QString str = fn;
- reslashify(str);
- return ( _waccess( (wchar_t*) str.ucs2(), t ) == 0 );
-#endif
-}
-
-/*!
- Removes the file \a fileName.
- Returns TRUE if successful, otherwise FALSE.
-*/
-
-bool QFile::remove( const QString &fileName )
-{
- if ( fileName.isEmpty() ) {
-#if defined(CHECK_NULL)
- qWarning( "QFile::remove: Empty or null file name" );
-#endif
- return FALSE;
- }
-#if defined(__CYGWIN32_)
- // unlink more common in UNIX
- return ::remove( QFile::encodeName(fileName) ) == 0;
-#else
- QString str = fileName;
- reslashify(str);
- return ( _wunlink( (wchar_t*) str.ucs2() ) == 0 );
-#endif
-}
-
-#if defined(O_NONBLOCK)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NONBLOCK
-#elif defined(O_NDELAY)
-# define HAS_ASYNC_FILEMODE
-# define OPEN_ASYNC O_NDELAY
-#endif
-
-/*!
- Opens the file specified by the file name currently set, using the mode \e m.
- Returns TRUE if successful, otherwise FALSE.
-
- The mode parameter \e m must be a combination of the following flags:
- <ul>
- <li>\c IO_Raw specified raw (non-buffered) file access.
- <li>\c IO_ReadOnly opens the file in read-only mode.
- <li>\c IO_WriteOnly opens the file in write-only mode (and truncates).
- <li>\c IO_ReadWrite opens the file in read/write mode, equivalent to
- \c (IO_ReadOnly|IO_WriteOnly).
- <li>\c IO_Append opens the file in append mode. This mode is very useful
- when you want to write something to a log file. The file index is set to
- the end of the file. Note that the result is undefined if you position the
- file index manually using at() in append mode.
- <li>\c IO_Truncate truncates the file.
- <li>\c IO_Translate enables carriage returns and linefeed translation
- for text files under MS-DOS, Windows and OS/2.
- </ul>
-
- The raw access mode is best when I/O is block-operated using 4kB block size
- or greater. Buffered access works better when reading small portions of
- data at a time.
-
- <strong>Important:</strong> When working with buffered files, data may
- not be written to the file at once. Call \link flush() flush\endlink
- to make sure the data is really written.
-
- \warning We have experienced problems with some C libraries when a buffered
- file is opened for both reading and writing. If a read operation takes place
- immediately after a write operation, the read buffer contains garbage data.
- Worse, the same garbage is written to the file. Calling flush() before
- readBlock() solved this problem.
-
- If the file does not exist and \c IO_WriteOnly or \c IO_ReadWrite is
- specified, it is created.
-
- Example:
- \code
- QFile f1( "/tmp/data.bin" );
- QFile f2( "readme.txt" );
- f1.open( IO_Raw | IO_ReadWrite | IO_Append );
- f2.open( IO_ReadOnly | IO_Translate );
- \endcode
-
- \sa name(), close(), isOpen(), flush()
-*/
-
-bool QFile::open( int m )
-{
- if ( isOpen() ) { // file already open
-#if defined(CHECK_STATE)
- qWarning( "QFile::open: File already open" );
-#endif
- return FALSE;
- }
- if ( fn.isNull() ) { // no file name defined
-#if defined(CHECK_NULL)
- qWarning( "QFile::open: No file name specified" );
-#endif
- return FALSE;
- }
- init(); // reset params
- setMode( m );
- if ( !(isReadable() || isWritable()) ) {
-#if defined(CHECK_RANGE)
- qWarning( "QFile::open: File access not specified" );
-#endif
- return FALSE;
- }
- bool ok = TRUE;
- STATBUF st;
- if ( isRaw() ) { // raw file I/O
- int oflags = OPEN_RDONLY;
- if ( isReadable() && isWritable() )
- oflags = OPEN_RDWR;
- else if ( isWritable() )
- oflags = OPEN_WRONLY;
- if ( flags() & IO_Append ) { // append to end of file?
- if ( flags() & IO_Truncate )
- oflags |= (OPEN_CREAT | OPEN_TRUNC);
- else
- oflags |= (OPEN_APPEND | OPEN_CREAT);
- setFlags( flags() | IO_WriteOnly ); // append implies write
- } else if ( isWritable() ) { // create/trunc if writable
- if ( flags() & IO_Truncate )
- oflags |= (OPEN_CREAT | OPEN_TRUNC);
- else
- oflags |= OPEN_CREAT;
- }
-#if defined(HAS_TEXT_FILEMODE)
- if ( isTranslated() )
- oflags |= OPEN_TEXT;
- else
- oflags |= OPEN_BINARY;
-#endif
-#if defined(HAS_ASYNC_FILEMODE)
- if ( isAsynchronous() )
- oflags |= OPEN_ASYNC;
-#endif
-
-
-#if defined(__CYGWIN32_)
- fd = OPEN( QFile::encodeName(fn), oflags, 0666 );
-#else
- QString str = fn;
- reslashify(str);
- fd = _wopen( (wchar_t*) str.ucs2(), oflags, 0666 );
-#endif
-
- if ( fd != -1 ) { // open successful
- FSTAT( fd, &st ); // get the stat for later usage
- } else {
- ok = FALSE;
- }
- } else { // buffered file I/O
- QCString perm;
- char perm2[4];
- bool try_create = FALSE;
- if ( flags() & IO_Append ) { // append to end of file?
- setFlags( flags() | IO_WriteOnly ); // append implies write
- perm = isReadable() ? "a+" : "a";
- } else {
- if ( isReadWrite() ) {
- if ( flags() & IO_Truncate ) {
- perm = "w+";
- } else {
- perm = "r+";
- try_create = TRUE; // try to create if not exists
- }
- } else if ( isReadable() ) {
- perm = "r";
- } else if ( isWritable() ) {
- perm = "w";
- }
- }
- qstrcpy( perm2, perm );
- if ( isTranslated() )
- strcat( perm2, "t" );
- else
- strcat( perm2, "b" );
- while (1) { // At most twice
-
-#if defined(__CYGWIN32_)
- fh = fopen( QFile::encodeName(fn), perm2 );
-#else
- QString str = fn;
- QString prm( perm2 );
- reslashify(str);
- fh = _wfopen( (wchar_t*) str.ucs2(), (wchar_t*) prm.ucs2() );
-#endif
-
- if ( !fh && try_create ) {
- perm2[0] = 'w'; // try "w+" instead of "r+"
- try_create = FALSE;
- } else {
- break;
- }
- }
- if ( fh ) {
- FSTAT( FILENO(fh), &st ); // get the stat for later usage
- } else {
- ok = FALSE;
- }
- }
- if ( ok ) {
- setState( IO_Open );
- // on successful open the file stat was got; now test what type
- // of file we have
- if ( (st.st_mode & STAT_MASK) != STAT_REG ) {
- // non-seekable
- setType( IO_Sequential );
- length = INT_MAX;
- ioIndex = (flags() & IO_Append) == 0 ? 0 : length;
- } else {
- length = (int)st.st_size;
- ioIndex = (flags() & IO_Append) == 0 ? 0 : length;
- if ( !(flags()&IO_Truncate) && length == 0 && isReadable() ) {
- // try if you can read from it (if you can, it's a sequential
- // device; e.g. a file in the /proc filesystem)
- int c = getch();
- if ( c != -1 ) {
- ungetch(c);
- setType( IO_Sequential );
- length = INT_MAX;
- }
- }
- }
- } else {
- init();
- if ( errno == EMFILE ) // no more file handles/descrs
- setStatus( IO_ResourceError );
- else
- setStatus( IO_OpenError );
- }
- return ok;
-}
-
-/*!
- Opens a file in the mode \e m using an existing file handle \e f.
- Returns TRUE if successful, otherwise FALSE.
-
- Example:
- \code
- #include <stdio.h>
-
- void printError( const char* msg )
- {
- QFile f;
- f.open( IO_WriteOnly, stderr );
- f.writeBlock( msg, qstrlen(msg) ); // write to stderr
- f.close();
- }
- \endcode
-
- When a QFile is opened using this function, close() does not actually
- close the file, only flushes it.
-
- \warning If \e f is \c stdin, \c stdout, \c stderr, you may not
- be able to seek. See QIODevice::isSequentialAccess() for more
- information.
-
- \sa close()
-*/
-
-bool QFile::open( int m, FILE *f )
-{
- if ( isOpen() ) {
-#if defined(CHECK_RANGE)
- qWarning( "QFile::open: File already open" );
-#endif
- return FALSE;
- }
- init();
- setMode( m &~IO_Raw );
- setState( IO_Open );
- fh = f;
- ext_f = TRUE;
- STATBUF st;
- FSTAT( FILENO(fh), &st );
- ioIndex = (int)ftell( fh );
- if ( (st.st_mode & STAT_MASK) != STAT_REG ) {
- // non-seekable
- setType( IO_Sequential );
- length = INT_MAX;
- } else {
- length = (int)st.st_size;
- if ( (flags() & !IO_Truncate) && length == 0 && isReadable() ) {
- // try if you can read from it (if you can, it's a sequential
- // device; e.g. a file in the /proc filesystem)
- int c = getch();
- if ( c != -1 ) {
- ungetch(c);
- setType( IO_Sequential );
- length = INT_MAX;
- }
- }
- }
- return TRUE;
-}
-
-/*!
- Opens a file in the mode \e m using an existing file descriptor \e f.
- Returns TRUE if successful, otherwise FALSE.
-
- When a QFile is opened using this function, close() does not actually
- close the file.
-
- \warning If \e f is one of 0 (stdin), 1 (stdout) or 2 (stderr), you may not
- be able to seek. size() is set to \c INT_MAX (in limits.h).
-
- \sa close()
-*/
-
-
-bool QFile::open( int m, int f )
-{
- if ( isOpen() ) {
-#if defined(CHECK_RANGE)
- qWarning( "QFile::open: File already open" );
-#endif
- return FALSE;
- }
- init();
- setMode( m |IO_Raw );
- setState( IO_Open );
- fd = f;
- ext_f = TRUE;
- STATBUF st;
- FSTAT( fd, &st );
- ioIndex = (int)LSEEK(fd, 0, SEEK_CUR);
- if ( (st.st_mode & STAT_MASK) != STAT_REG ) {
- // non-seekable
- setType( IO_Sequential );
- length = INT_MAX;
- } else {
- length = (int)st.st_size;
- if ( length == 0 && isReadable() ) {
- // try if you can read from it (if you can, it's a sequential
- // device; e.g. a file in the /proc filesystem)
- int c = getch();
- if ( c != -1 ) {
- ungetch(c);
- setType( IO_Sequential );
- length = INT_MAX;
- }
- }
- }
- return TRUE;
-}
-
-/*!
- Returns the file size.
- \sa at()
-*/
-
-uint QFile::size() const
-{
- STATBUF st;
- if ( isOpen() ) {
- FSTAT( fh ? FILENO(fh) : fd, &st );
- return st.st_size;
- } else {
-#if defined(__CYGWIN32_)
- STAT( QFile::encodeName(fn), &st );
-#else
- QString str = fn;
- reslashify(str);
-#ifdef QT_LARGEFILE_SUPPORT
- if ( _wstati64( (wchar_t*) str.ucs2(), &st ) != -1 ) {
-#else
- if ( _wstat( (wchar_t*) str.ucs2(), &st ) != -1 ) {
-#endif
-#endif
- return st.st_size;
- }
- }
- return 0;
-}
-
-/*!
- \fn int QFile::at() const
- Returns the file index.
- \sa size()
-*/
-
-/*!
- Sets the file index to \e pos. Returns TRUE if successful, otherwise FALSE.
-
- Example:
- \code
- QFile f( "data.bin" );
- f.open( IO_ReadOnly ); // index set to 0
- f.at( 100 ); // set index to 100
- f.at( f.at()+50 ); // set index to 150
- f.at( f.size()-80 ); // set index to 80 before EOF
- f.close();
- \endcode
-
- \warning The result is undefined if the file was \link open() opened\endlink
- using the \c IO_Append specifier.
-
- \sa size(), open()
-*/
-
-bool QFile::at( int pos )
-{
- if ( !isOpen() ) {
-#if defined(CHECK_STATE)
- qWarning( "QFile::at: File is not open" );
-#endif
- return FALSE;
- }
- bool ok;
- if ( isRaw() ) { // raw file
- pos = (int)LSEEK(fd, pos, SEEK_SET);
- ok = pos != -1;
- } else { // buffered file
- ok = fseek(fh, pos, SEEK_SET) == 0;
- }
- if ( ok )
- ioIndex = pos;
-#if defined(CHECK_RANGE)
- else
- qWarning( "QFile::at: Cannot set file position %d", pos );
-#endif
- return ok;
-}
-
-/*!
- Reads at most \e len bytes from the file into \e p and returns the
- number of bytes actually read.
-
- Returns -1 if a serious error occurred.
-
- \warning We have experienced problems with some C libraries when a buffered
- file is opened for both reading and writing. If a read operation takes place
- immediately after a write operation, the read buffer contains garbage data.
- Worse, the same garbage is written to the file. Calling flush() before
- readBlock() solved this problem.
-
- \sa writeBlock()
-*/
-
-int QFile::readBlock( char *p, uint len )
-{
-#if defined(CHECK_NULL)
- if ( !p )
- qWarning( "QFile::readBlock: Null pointer error" );
-#endif
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::readBlock: File not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QFile::readBlock: Read operation not permitted" );
- return -1;
- }
-#endif
- int nread; // number of bytes read
- if ( isRaw() ) { // raw file
- nread = READ( fd, p, len );
- if ( len && nread <= 0 ) {
- nread = 0;
- setStatus(IO_ReadError);
- }
- } else { // buffered file
- nread = (int)fread( p, 1, len, fh );
- if ( (uint)nread != len ) {
- if ( ferror( fh ) || nread==0 )
- setStatus(IO_ReadError);
- }
- }
- ioIndex += nread;
- return nread;
-}
-
-/*! \overload int writeBlock( const QByteArray& data )
-*/
-
-/*! \reimp
-
- Writes \e len bytes from \e p to the file and returns the number of
- bytes actually written.
-
- Returns -1 if a serious error occurred.
-
- \warning When working with buffered files, data may not be written
- to the file at once. Call flush() to make sure the data is really
- written.
-
- \sa readBlock()
-*/
-
-int QFile::writeBlock( const char *p, uint len )
-{
-#if defined(CHECK_NULL)
- if ( p == 0 && len != 0 )
- qWarning( "QFile::writeBlock: Null pointer error" );
-#endif
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // file not open
- qWarning( "QFile::writeBlock: File not open" );
- return -1;
- }
- if ( !isWritable() ) { // writing not permitted
- qWarning( "QFile::writeBlock: Write operation not permitted" );
- return -1;
- }
-#endif
- int nwritten; // number of bytes written
- if ( isRaw() ) // raw file
- nwritten = WRITE( fd, p, len );
- else // buffered file
- nwritten = (int)fwrite( p, 1, len, fh );
- if ( nwritten != (int)len ) { // write error
- if ( errno == ENOSPC ) // disk is full
- setStatus( IO_ResourceError );
- else
- setStatus( IO_WriteError );
- if ( isRaw() ) // recalc file position
- ioIndex = (int)LSEEK( fd, 0, SEEK_CUR );
- else
- ioIndex = fseek( fh, 0, SEEK_CUR );
- } else {
- ioIndex += nwritten;
- }
- if ( ioIndex > length ) // update file length
- length = ioIndex;
- return nwritten;
-}
-
-/*!
- Returns the file handle of the file.
-
- This is a small positive integer, suitable for use with C library
- functions such as fdopen() and fcntl(), as well as with QSocketNotifier.
-
- If the file is not open or there is an error, handle() returns -1.
-
- \sa QSocketNotifier
-*/
-
-int QFile::handle() const
-{
- if ( !isOpen() )
- return -1;
- else if ( fh )
- return FILENO( fh );
- else
- return fd;
-}
-
-/*!
- Closes an open file.
-
- The file is not closed if it was opened with an existing file handle.
- If the existing file handle is a \c FILE*, the file is flushed.
- If the existing file handle is an \c int file descriptor, nothing
- is done to the file.
-
- Some "write-behind" filesystems may report an unspecified error on
- closing the file. These errors only indicate that something may
- have gone wrong since the previous open(). In such a case status()
- reports IO_UnspecifiedError after close(), otherwise IO_Ok.
-
- \sa open(), flush()
-*/
-
-
-void QFile::close()
-{
- bool ok = FALSE;
- if ( isOpen() ) { // file is not open
- if ( fh ) { // buffered file
- if ( ext_f )
- ok = fflush( fh ) != -1; // flush instead of closing
- else
- ok = fclose( fh ) != -1;
- } else { // raw file
- if ( ext_f )
- ok = TRUE; // cannot close
- else
- ok = CLOSE( fd ) != -1;
- }
- init(); // restore internal state
- }
- if (!ok)
- setStatus (IO_UnspecifiedError);
-
- return;
-}
-
-int64 QFile::pos() const
-{
- if (isOpen())
- {
- // TODO: support 64 bit size
- return ftell( fh );
- }
- return -1;
-}
-
-int64 QFile::toEnd()
-{
- if (isOpen())
- {
- // TODO: support 64 bit size
- if (fseek( fh, 0, SEEK_END )!=-1)
- {
- return ftell( fh );
- }
- }
- return -1;
-}
-
-bool QFile::seek( int64 pos )
-{
- if (isOpen())
- {
- // TODO: support 64 bit size
- return fseek( fh, pos, SEEK_SET )!=-1;
- }
- return FALSE;
-}
-
-
-
diff --git a/qtools/qfiledefs_p.h b/qtools/qfiledefs_p.h
deleted file mode 100644
index 5a7cfe2..0000000
--- a/qtools/qfiledefs_p.h
+++ /dev/null
@@ -1,268 +0,0 @@
-/****************************************************************************
-**
-**
-** Common macros and system include files for QFile, QFileInfo and QDir.
-**
-** Created : 930812
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QFILEDEFS_P_H
-#define QFILEDEFS_P_H
-
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists for the convenience
-// of qfile.cpp, qfileinfo.cpp and qdir.cpp.
-// This header file may change from version to version without notice,
-// or even be removed.
-//
-//
-#if defined(_CC_MWERKS_)
-# include <stdlib.h>
-# include <stat.h>
-#elif !defined(_OS_MAC_)
-# include <sys/types.h>
-# include <sys/stat.h>
-#elif defined(_OS_MAC_)
-# include <sys/types.h>
-# include <sys/stat.h>
-# define _OS_UNIX_
-#endif
-#include <fcntl.h>
-#include <errno.h>
-#if defined(_OS_UNIX_)
-# include <dirent.h>
-# include <unistd.h>
-#endif
-#if defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_)
-# define _OS_FATFS_
-# if defined(__CYGWIN32__)
-# include <dirent.h>
-# include <unistd.h>
-# if !defined(_OS_UNIX_)
-# define _OS_UNIX_
-# endif
-# else
-# include <io.h>
-# if !defined(_CC_MWERKS_)
-# include <dos.h>
-# endif
-# include <direct.h>
-# endif
-#endif
-#include <limits.h>
-
-
-#if !defined(PATH_MAX)
-#if defined( MAXPATHLEN )
-#define PATH_MAX MAXPATHLEN
-#else
-#define PATH_MAX 1024
-#endif
-#endif
-
-
-#undef STATBUF
-#undef STAT
-#undef STAT_REG
-#undef STAT_DIR
-#undef STAT_LNK
-#undef STAT_MASK
-#undef FILENO
-#undef OPEN
-#undef CLOSE
-#undef LSEEK
-#undef READ
-#undef WRITE
-#undef ACCESS
-#undef GETCWD
-#undef CHDIR
-#undef MKDIR
-#undef RMDIR
-#undef OPEN_RDONLY
-#undef OPEN_WRONLY
-#undef OPEN_CREAT
-#undef OPEN_TRUNC
-#undef OPEN_APPEND
-#undef OPEN_TEXT
-#undef OPEN_BINARY
-
-
-#if defined(_CC_MSVC_) || defined(_CC_SYM_)
-
-# define STATBUF struct _stat // non-ANSI defs
-# define STATBUF4TSTAT struct _stat // non-ANSI defs
-# define STAT ::_stat
-# define FSTAT ::_fstat
-# define STAT_REG _S_IFREG
-# define STAT_DIR _S_IFDIR
-# define STAT_MASK _S_IFMT
-# if defined(_S_IFLNK)
-# define STAT_LNK _S_IFLNK
-# endif
-# define FILENO _fileno
-# define OPEN ::_open
-# define CLOSE ::_close
-# define LSEEK ::_lseek
-# define READ ::_read
-# define WRITE ::_write
-# define ACCESS ::_access
-# define GETCWD ::_getcwd
-# define CHDIR ::_chdir
-# define MKDIR ::_mkdir
-# define RMDIR ::_rmdir
-# define OPEN_RDONLY _O_RDONLY
-# define OPEN_WRONLY _O_WRONLY
-# define OPEN_RDWR _O_RDWR
-# define OPEN_CREAT _O_CREAT
-# define OPEN_TRUNC _O_TRUNC
-# define OPEN_APPEND _O_APPEND
-# if defined(O_TEXT)
-# define OPEN_TEXT _O_TEXT
-# define OPEN_BINARY _O_BINARY
-# endif
-
-#elif defined(_CC_BOR_) && __BORLANDC__ >= 0x550
-
-# define STATBUF struct stat // non-ANSI defs
-# define STATBUF4TSTAT struct _stat // non-ANSI defs
-# define STAT ::stat
-# define FSTAT ::fstat
-# define STAT_REG _S_IFREG
-# define STAT_DIR _S_IFDIR
-# define STAT_MASK _S_IFMT
-# if defined(_S_IFLNK)
-# define STAT_LNK _S_IFLNK
-# endif
-# define FILENO _fileno
-# define OPEN ::open
-# define CLOSE ::_close
-# define LSEEK ::_lseek
-# define READ ::_read
-# define WRITE ::_write
-# define ACCESS ::_access
-# define GETCWD ::_getcwd
-# define CHDIR ::chdir
-# define MKDIR ::_mkdir
-# define RMDIR ::_rmdir
-# define OPEN_RDONLY _O_RDONLY
-# define OPEN_WRONLY _O_WRONLY
-# define OPEN_RDWR _O_RDWR
-# define OPEN_CREAT _O_CREAT
-# define OPEN_TRUNC _O_TRUNC
-# define OPEN_APPEND _O_APPEND
-# if defined(O_TEXT)
-# define OPEN_TEXT _O_TEXT
-# define OPEN_BINARY _O_BINARY
-# endif
-
-#else // all other systems
-
-#ifdef __MINGW32__
-# define STATBUF struct _stat
-# define STATBUF4TSTAT struct _stat
-# define STAT _stat
-# define FSTAT _fstat
-#else
-# define STATBUF struct stat
-# define STATBUF4TSTAT struct stat
-# define STAT ::stat
-# define FSTAT ::fstat
-#endif
-# define STAT_REG S_IFREG
-# define STAT_DIR S_IFDIR
-# define STAT_MASK S_IFMT
-# if defined(S_IFLNK)
-# define STAT_LNK S_IFLNK
-# endif
-# define FILENO fileno
-# define OPEN ::open
-# define CLOSE ::close
-# define LSEEK ::lseek
-# define READ ::read
-# define WRITE ::write
-# define ACCESS ::access
-# if defined(_OS_OS2EMX_)
-# define GETCWD ::_getcwd2
-# define CHDIR ::_chdir2
-# else
-# define GETCWD ::getcwd
-# define CHDIR ::chdir
-# endif
-# define MKDIR ::mkdir
-# define RMDIR ::rmdir
-# define OPEN_RDONLY O_RDONLY
-# define OPEN_WRONLY O_WRONLY
-# define OPEN_RDWR O_RDWR
-# define OPEN_CREAT O_CREAT
-# define OPEN_TRUNC O_TRUNC
-# define OPEN_APPEND O_APPEND
-# if defined(O_TEXT)
-# define OPEN_TEXT O_TEXT
-# define OPEN_BINARY O_BINARY
-# endif
-#endif
-
-#if defined(_CC_MWERKS_)
-#undef mkdir
-#undef MKDIR
-#define MKDIR _mkdir
-#undef rmdir
-#undef RMDIR
-#define RMDIR _rmdir
-#endif
-
-
-#if defined(_OS_FATFS_)
-# define F_OK 0
-# define X_OK 1
-# define W_OK 2
-# define R_OK 4
-#endif
-
-#if defined(_OS_MAC_) && !defined(_OS_UNIX_)
-# define F_OK 0
-# define X_OK 1
-# define W_OK 2
-# define R_OK 4
-#endif
-
-struct QFileInfoCache
-{
- STATBUF st;
- bool isSymLink;
-};
-
-#endif
diff --git a/qtools/qfileinfo.cpp b/qtools/qfileinfo.cpp
deleted file mode 100644
index 5053b76..0000000
--- a/qtools/qfileinfo.cpp
+++ /dev/null
@@ -1,458 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QFileInfo class
-**
-** Created : 950628
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglobal.h"
-
-#include "qfileinfo.h"
-#include "qfiledefs_p.h"
-#include "qdatetime.h"
-#include "qdir.h"
-
-extern bool qt_file_access( const QString& fn, int t );
-
-// NOT REVISED
-/*!
- \class QFileInfo qfileinfo.h
- \brief The QFileInfo class provides system-independent file information.
-
- \ingroup io
-
- QFileInfo provides information about a file's name and position (path) in
- the file system, its access rights and whether it is a directory or a
- symbolic link. Its size and last modified/read times are also available.
-
- To speed up performance QFileInfo caches information about the file. Since
- files can be changed by other users or programs, or even by other parts of
- the same program there is a function that refreshes the file information;
- refresh(). If you would rather like a QFileInfo to access the file system
- every time you request information from it, you can call the function
- setCaching( FALSE ).
-
- A QFileInfo can point to a file using either a relative or an absolute
- file path. Absolute file paths begin with the directory separator
- ('/') or a drive specification (not applicable to UNIX).
- Relative file names begin with a directory name or a file name and specify
- a path relative to the current directory. An example of
- an absolute path is the string "/tmp/quartz". A relative path might look like
- "src/fatlib". You can use the function isRelative() to check if a QFileInfo
- is using a relative or an absolute file path. You can call the function
- convertToAbs() to convert a relative QFileInfo to an absolute one.
-
- If you need to read and traverse directories, see the QDir class.
-*/
-
-
-/*!
- Constructs a new empty QFileInfo.
-*/
-
-QFileInfo::QFileInfo()
-{
- fic = 0;
- cache = TRUE;
-}
-
-/*!
- Constructs a new QFileInfo that gives information about the given file.
- The string given can be an absolute or a relative file path.
-
- \sa bool setFile(QString ), isRelative(), QDir::setCurrent(),
- QDir::isRelativePath()
-*/
-
-QFileInfo::QFileInfo( const QString &file )
-{
- fn = file;
- slashify( fn );
- fic = 0;
- cache = TRUE;
-}
-
-/*!
- Constructs a new QFileInfo that gives information about \e file.
-
- If the file has a relative path, the QFileInfo will also have one.
-
- \sa isRelative()
-*/
-
-QFileInfo::QFileInfo( const QFile &file )
-{
- fn = file.name();
- slashify( fn );
- fic = 0;
- cache = TRUE;
-}
-
-/*!
- Constructs a new QFileInfo that gives information about the file
- named \e fileName in the directory \e d.
-
- If the directory has a relative path, the QFileInfo will also have one.
-
- \sa isRelative()
-*/
-#ifndef QT_NO_DIR
-QFileInfo::QFileInfo( const QDir &d, const QString &fileName )
-{
- fn = d.filePath( fileName );
- slashify( fn );
- fic = 0;
- cache = TRUE;
-}
-#endif
-/*!
- Constructs a new QFileInfo that is a copy of \e fi.
-*/
-
-QFileInfo::QFileInfo( const QFileInfo &fi )
-{
- fn = fi.fn;
- if ( fi.fic ) {
- fic = new QFileInfoCache;
- *fic = *fi.fic;
- } else {
- fic = 0;
- }
- cache = fi.cache;
-}
-
-/*!
- Destructs the QFileInfo.
-*/
-
-QFileInfo::~QFileInfo()
-{
- delete fic;
-}
-
-
-/*!
- Makes a copy of \e fi and assigns it to this QFileInfo.
-*/
-
-QFileInfo &QFileInfo::operator=( const QFileInfo &fi )
-{
- fn = fi.fn;
- if ( !fi.fic ) {
- delete fic;
- fic = 0;
- } else {
- if ( !fic ) {
- fic = new QFileInfoCache;
- CHECK_PTR( fic );
- }
- *fic = *fi.fic;
- }
- cache = fi.cache;
- return *this;
-}
-
-
-/*!
- Sets the file to obtain information about.
-
- The string given can be an absolute or a relative file path. Absolute file
- paths begin with the directory separator (e.g. '/' under UNIX) or a drive
- specification (not applicable to UNIX). Relative file names begin with a
- directory name or a file name and specify a path relative to the current
- directory.
-
- Example:
- \code
- #include <qfileinfo.h>
- #include <qdir.h>
-
- void test()
- {
- QString absolute = "/liver/aorta";
- QString relative = "liver/aorta";
- QFileInfo fi1( absolute );
- QFileInfo fi2( relative );
-
- QDir::setCurrent( QDir::rootDirPath() );
- // fi1 and fi2 now point to the same file
-
- QDir::setCurrent( "/tmp" );
- // fi1 now points to "/liver/aorta",
- // while fi2 points to "/tmp/liver/aorta"
- }
- \endcode
-
- \sa isRelative(), QDir::setCurrent(), QDir::isRelativePath()
-*/
-
-void QFileInfo::setFile( const QString &file )
-{
- fn = file;
- slashify( fn );
- delete fic;
- fic = 0;
-}
-
-/*!
- Sets the file to obtain information about.
-
- If the file has a relative path, the QFileInfo will also have one.
-
- \sa isRelative()
-*/
-
-void QFileInfo::setFile( const QFile &file )
-{
- fn = file.name();
- slashify( fn );
- delete fic;
- fic = 0;
-}
-
-/*!
- Sets the file to obtains information about to \e fileName in the
- directory \e d.
-
- If the directory has a relative path, the QFileInfo will also have one.
-
- \sa isRelative()
-*/
-#ifndef QT_NO_DIR
-void QFileInfo::setFile( const QDir &d, const QString &fileName )
-{
- fn = d.filePath( fileName );
- slashify( fn );
- delete fic;
- fic = 0;
-}
-#endif
-
-/*!
- Returns TRUE if the file pointed to exists, otherwise FALSE.
-*/
-
-bool QFileInfo::exists() const
-{
- return qt_file_access( fn, F_OK );
-}
-
-/*!
- Refresh the information about the file, i.e. read in information from the
- file system the next time a cached property is fetched.
-
- \sa setCaching()
-*/
-
-void QFileInfo::refresh() const
-{
- QFileInfo *that = (QFileInfo*)this; // Mutable function
- delete that->fic;
- that->fic = 0;
-}
-
-/*!
- \fn bool QFileInfo::caching() const
- Returns TRUE if caching is enabled.
- \sa setCaching(), refresh()
-*/
-
-/*!
- Enables caching of file information if \e enable is TRUE, or disables it
- if \e enable is FALSE.
-
- When caching is enabled, QFileInfo reads the file information the first
- time
-
- Caching is enabled by default.
-
- \sa refresh(), caching()
-*/
-
-void QFileInfo::setCaching( bool enable )
-{
- if ( cache == enable )
- return;
- cache = enable;
- if ( cache ) {
- delete fic;
- fic = 0;
- }
-}
-
-
-/*!
- Returns the name, i.e. the file name including the path (which can be
- absolute or relative).
-
- \sa isRelative(), absFilePath()
-*/
-
-QString QFileInfo::filePath() const
-{
- return fn;
-}
-
-/*!
- Returns the base name of the file.
-
- The base name consists of all characters in the file name up to (but not
- including) the first '.' character. The path is not included.
-
- Example:
- \code
- QFileInfo fi( "/tmp/abdomen.lower" );
- QString base = fi.baseName(); // base = "abdomen"
- \endcode
-
- \sa fileName(), extension()
-*/
-
-QString QFileInfo::baseName() const
-{
- QString tmp = fileName();
- int pos = tmp.find( '.' );
- if ( pos == -1 )
- return tmp;
- else
- return tmp.left( pos );
-}
-
-/*!
- Returns the extension name of the file.
-
- If \a complete is TRUE (the default), extension() returns the string
- of all characters in the file name after (but not including) the
- first '.' character. For a file named "archive.tar.gz" this
- returns "tar.gz".
-
- If \a complete is FALSE, extension() returns the string of all
- characters in the file name after (but not including) the last '.'
- character. For a file named "archive.tar.gz" this returns "gz".
-
- Example:
- \code
- QFileInfo fi( "lex.yy.c" );
- QString ext = fi.extension(); // ext = "yy.c"
- QString ext = fi.extension( FALSE ); // ext = "c"
- \endcode
-
- \sa fileName(), baseName()
-
-*/
-
-QString QFileInfo::extension( bool complete ) const
-{
- QString s = fileName();
- int pos = complete ? s.find( '.' ) : s.findRev( '.' );
- if ( pos < 0 )
- return QString::fromLatin1( "" );
- else
- return s.right( s.length() - pos - 1 );
-}
-
-/*!
- Returns the directory path of the file.
-
- If the QFileInfo is relative and \e absPath is FALSE, the QDir will be
- relative, otherwise it will be absolute.
-
- \sa dirPath(), filePath(), fileName(), isRelative()
-*/
-#ifndef QT_NO_DIR
-QDir QFileInfo::dir( bool absPath ) const
-{
- return QDir( dirPath(absPath) );
-}
-#endif
-
-
-/*!
- Returns TRUE if the file is readable.
- \sa isWritable(), isExecutable(), permission()
-*/
-
-bool QFileInfo::isReadable() const
-{
- return qt_file_access( fn, R_OK );
-}
-
-/*!
- Returns TRUE if the file is writable.
- \sa isReadable(), isExecutable(), permission()
-*/
-
-bool QFileInfo::isWritable() const
-{
- return qt_file_access( fn, W_OK );
-}
-
-/*!
- Returns TRUE if the file is executable.
- \sa isReadable(), isWritable(), permission()
-*/
-
-bool QFileInfo::isExecutable() const
-{
- return qt_file_access( fn, X_OK );
-}
-
-
-/*!
- Returns TRUE if the file path name is relative to the current directory,
- FALSE if the path is absolute (e.g. under UNIX a path is relative if it
- does not start with a '/').
-
- According to Einstein this function should always return TRUE.
-*/
-#ifndef QT_NO_DIR
-bool QFileInfo::isRelative() const
-{
- return QDir::isRelativePath( fn );
-}
-
-/*!
- Converts the file path name to an absolute path.
-
- If it is already absolute nothing is done.
-
- \sa filePath(), isRelative()
-*/
-
-bool QFileInfo::convertToAbs()
-{
- if ( isRelative() )
- fn = absFilePath();
- return QDir::isRelativePath( fn );
-}
-#endif
diff --git a/qtools/qfileinfo.h b/qtools/qfileinfo.h
deleted file mode 100644
index 76ef8c2..0000000
--- a/qtools/qfileinfo.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QFileInfo class
-**
-** Created : 950628
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QFILEINFO_H
-#define QFILEINFO_H
-
-#ifndef QT_H
-#include "qfile.h"
-#include "qdatetime.h"
-#endif // QT_H
-
-
-class QDir;
-struct QFileInfoCache;
-
-
-class Q_EXPORT QFileInfo // file information class
-{
-public:
- enum PermissionSpec {
- ReadUser = 0400, WriteUser = 0200, ExeUser = 0100,
- ReadGroup = 0040, WriteGroup = 0020, ExeGroup = 0010,
- ReadOther = 0004, WriteOther = 0002, ExeOther = 0001 };
-
- QFileInfo();
- QFileInfo( const QString &file );
- QFileInfo( const QFile & );
-#ifndef QT_NO_DIR
- QFileInfo( const QDir &, const QString &fileName );
-#endif
- QFileInfo( const QFileInfo & );
- ~QFileInfo();
-
- QFileInfo &operator=( const QFileInfo & );
-
- void setFile( const QString &file );
- void setFile( const QFile & );
-#ifndef QT_NO_DIR
- void setFile( const QDir &, const QString &fileName );
-#endif
- bool exists() const;
- void refresh() const;
- bool caching() const;
- void setCaching( bool );
-
- QString filePath() const;
- QString fileName() const;
-#ifndef QT_NO_DIR //###
- QString absFilePath() const;
-#endif
- QString baseName() const;
- QString extension( bool complete = TRUE ) const;
-
-#ifndef QT_NO_DIR //###
- QString dirPath( bool absPath = FALSE ) const;
-#endif
-#ifndef QT_NO_DIR
- QDir dir( bool absPath = FALSE ) const;
-#endif
- bool isReadable() const;
- bool isWritable() const;
- bool isExecutable() const;
-
-#ifndef QT_NO_DIR //###
- bool isRelative() const;
- bool convertToAbs();
-#endif
-
- bool isFile() const;
- bool isDir() const;
- bool isSymLink() const;
-
- QString readLink() const;
-
- QString owner() const;
- uint ownerId() const;
- QString group() const;
- uint groupId() const;
-
- bool permission( int permissionSpec ) const;
-
- uint size() const;
-
- QDateTime lastModified() const;
- QDateTime lastRead() const;
-
-private:
- void doStat() const;
- static void slashify( QString & );
- static void makeAbs( QString & );
-
- QString fn;
- QFileInfoCache *fic;
- bool cache;
-};
-
-
-inline bool QFileInfo::caching() const
-{
- return cache;
-}
-
-
-#endif // QFILEINFO_H
diff --git a/qtools/qfileinfo_unix.cpp b/qtools/qfileinfo_unix.cpp
deleted file mode 100644
index f2b438c..0000000
--- a/qtools/qfileinfo_unix.cpp
+++ /dev/null
@@ -1,425 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QFileInfo class
-**
-** Created : 950628
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses for Unix/X11 or for Qt/Embedded may use this file in accordance
-** with the Qt Commercial License Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglobal.h"
-
-#if defined(_OS_SUN_)
-#define readlink _qt_hide_readlink
-#endif
-
-#include <pwd.h>
-#include <grp.h>
-
-#include "qfileinfo.h"
-#include "qfiledefs_p.h"
-#include "qdatetime.h"
-#include "qdir.h"
-
-#if defined(_OS_SUN_)
-#undef readlink
-extern "C" int readlink( const char *, void *, uint );
-#endif
-
-
-void QFileInfo::slashify( QString& )
-{
- return;
-}
-
-
-void QFileInfo::makeAbs( QString & )
-{
- return;
-}
-
-extern bool qt_file_access( const QString& fn, int t );
-
-/*!
- Returns TRUE if we are pointing to a real file.
- \sa isDir(), isSymLink()
-*/
-bool QFileInfo::isFile() const
-{
- if ( !fic || !cache )
- doStat();
- return fic ? (fic->st.st_mode & STAT_MASK) == STAT_REG : FALSE;
-}
-
-/*!
- Returns TRUE if we are pointing to a directory or a symbolic link to
- a directory.
- \sa isFile(), isSymLink()
-*/
-
-bool QFileInfo::isDir() const
-{
- if ( !fic || !cache )
- doStat();
- return fic ? (fic->st.st_mode & STAT_MASK) == STAT_DIR : FALSE;
-}
-
-/*!
- Returns TRUE if we are pointing to a symbolic link.
- \sa isFile(), isDir(), readLink()
-*/
-
-bool QFileInfo::isSymLink() const
-{
- if ( !fic || !cache )
- doStat();
- return fic ? fic->isSymLink : FALSE;
-}
-
-
-/*!
- Returns the name a symlink points to, or a null QString if the
- object does not refer to a symbolic link.
-
- This name may not represent an existing file; it is only a string.
- QFileInfo::exists() returns TRUE if the symlink points to an
- existing file.
-
- \sa exists(), isSymLink(), isDir(), isFile()
-*/
-
-QString QFileInfo::readLink() const
-{
- QString r;
-
-#if defined(_OS_UNIX_) && !defined(_OS_OS2EMX_)
- char s[PATH_MAX+1];
- if ( !isSymLink() )
- return QString();
- int len = (int)readlink( QFile::encodeName(fn).data(), s, PATH_MAX );
- if ( len >= 0 ) {
- s[len] = '\0';
- r = QFile::decodeName(s);
- }
-#endif
-
- return r;
-}
-
-static const uint nobodyID = (uint) -2;
-
-/*!
- Returns the owner of the file.
-
- On systems where files do not have owners this function returns 0.
-
- Note that this function can be time-consuming under UNIX. (in the order
- of milliseconds on a 486 DX2/66 running Linux).
-
- \sa ownerId(), group(), groupId()
-*/
-
-QString QFileInfo::owner() const
-{
- passwd *pw = getpwuid( ownerId() );
- if ( pw )
- return QFile::decodeName( pw->pw_name );
- return QString::null;
-}
-
-/*!
- Returns the id of the owner of the file.
-
- On systems where files do not have owners this function returns ((uint) -2).
-
- \sa owner(), group(), groupId()
-*/
-
-uint QFileInfo::ownerId() const
-{
- if ( !fic || !cache )
- doStat();
- if ( fic )
- return fic->st.st_uid;
- return nobodyID;
-}
-
-/*!
- Returns the group the file belongs to.
-
- On systems where files do not have groups this function always
- returns 0.
-
- Note that this function can be time-consuming under UNIX (in the order of
- milliseconds on a 486 DX2/66 running Linux).
-
- \sa groupId(), owner(), ownerId()
-*/
-
-QString QFileInfo::group() const
-{
- struct group *gr = getgrgid( groupId() );
- if ( gr )
- return QFile::decodeName( gr->gr_name );
- return QString::null;
-}
-
-/*!
- Returns the id of the group the file belongs to.
-
- On systems where files do not have groups this function always
- returns ((uind) -2).
-
- \sa group(), owner(), ownerId()
-*/
-
-uint QFileInfo::groupId() const
-{
- if ( !fic || !cache )
- doStat();
- if ( fic )
- return fic->st.st_gid;
- return nobodyID;
-}
-
-
-/*!
- \fn bool QFileInfo::permission( int permissionSpec ) const
-
- Tests for file permissions. The \e permissionSpec argument can be several
- flags of type PermissionSpec or'ed together to check for permission
- combinations.
-
- On systems where files do not have permissions this function always
- returns TRUE.
-
- Example:
- \code
- QFileInfo fi( "/tmp/tonsils" );
- if ( fi.permission( QFileInfo::WriteUser | QFileInfo::ReadGroup ) )
- qWarning( "Tonsils can be changed by me, and the group can read them.");
- if ( fi.permission( QFileInfo::WriteGroup | QFileInfo::WriteOther ) )
- qWarning( "Danger! Tonsils can be changed by the group or others!" );
- \endcode
-
- \sa isReadable(), isWritable(), isExecutable()
-*/
-
-bool QFileInfo::permission( int permissionSpec ) const
-{
- if ( !fic || !cache )
- doStat();
- if ( fic ) {
- uint mask = 0;
- if ( permissionSpec & ReadUser)
- mask |= S_IRUSR;
- if ( permissionSpec & WriteUser)
- mask |= S_IWUSR;
- if ( permissionSpec & ExeUser)
- mask |= S_IXUSR;
- if ( permissionSpec & ReadGroup)
- mask |= S_IRGRP;
- if ( permissionSpec & WriteGroup)
- mask |= S_IWGRP;
- if ( permissionSpec & ExeGroup)
- mask |= S_IXGRP;
- if ( permissionSpec & ReadOther)
- mask |= S_IROTH;
- if ( permissionSpec & WriteOther)
- mask |= S_IWOTH;
- if ( permissionSpec & ExeOther)
- mask |= S_IXOTH;
- if ( mask ) {
- return (fic->st.st_mode & mask) == mask;
- } else {
-#if defined(CHECK_NULL)
- qWarning( "QFileInfo::permission: permissionSpec is 0" );
-#endif
- return TRUE;
- }
- } else {
- return FALSE;
- }
-}
-
-/*!
- Returns the file size in bytes, or 0 if the file does not exist if the size
- cannot be fetched.
-*/
-
-uint QFileInfo::size() const
-{
- if ( !fic || !cache )
- doStat();
- if ( fic )
- return (uint)fic->st.st_size;
- else
- return 0;
-}
-
-
-/*!
- Returns the date and time when the file was last modified.
- \sa lastRead()
-*/
-
-QDateTime QFileInfo::lastModified() const
-{
- QDateTime dt;
- if ( !fic || !cache )
- doStat();
- if ( fic )
- dt.setTime_t( (uint)fic->st.st_mtime );
- return dt;
-}
-
-/*!
- Returns the date and time when the file was last read (accessed).
-
- On systems that do not support last read times, the modification time is
- returned.
-
- \sa lastModified()
-*/
-
-QDateTime QFileInfo::lastRead() const
-{
- QDateTime dt;
- if ( !fic || !cache )
- doStat();
- if ( fic )
- dt.setTime_t( (uint)fic->st.st_atime );
- return dt;
-}
-
-
-void QFileInfo::doStat() const
-{
- QFileInfo *that = ((QFileInfo*)this); // mutable function
- if ( !that->fic )
- that->fic = new QFileInfoCache;
- STATBUF *b = &that->fic->st;
- that->fic->isSymLink = FALSE;
-
-#if defined(_OS_UNIX_) && defined(S_IFLNK)
- if ( ::lstat(QFile::encodeName(fn),b) == 0 ) {
- if ( S_ISLNK( b->st_mode ) )
- that->fic->isSymLink = TRUE;
- else
- return;
- }
-#endif
- int r;
-
- r = STAT( QFile::encodeName(fn), b );
-
- if ( r != 0 ) {
- delete that->fic;
- that->fic = 0;
- }
-}
-
-/*!
- Returns the directory path of the file.
-
- If \e absPath is TRUE an absolute path is always returned.
-
- \sa dir(), filePath(), fileName(), isRelative()
-*/
-#ifndef QT_NO_DIR
-QString QFileInfo::dirPath( bool absPath ) const
-{
- QString s;
- if ( absPath )
- s = absFilePath();
- else
- s = fn;
- int pos = s.findRev( '/' );
- if ( pos == -1 ) {
- return QString::fromLatin1(".");
- } else {
- if ( pos == 0 )
- return QString::fromLatin1( "/" );
- return s.left( pos );
- }
-}
-#endif
-/*!
- Returns the name of the file, the file path is not included.
-
- Example:
- \code
- QFileInfo fi( "/tmp/abdomen.lower" );
- QString name = fi.fileName(); // name = "abdomen.lower"
- \endcode
-
- \sa isRelative(), filePath(), baseName(), extension()
-*/
-
-QString QFileInfo::fileName() const
-{
- int p = fn.findRev( '/' );
- if ( p == -1 ) {
- return fn;
- } else {
- return fn.mid(p+1);
- }
-}
-
-/*!
- Returns the absolute path name.
-
- The absolute path name is the file name including the absolute path. If
- the QFileInfo is absolute (i.e. not relative) this function will return
- the same string as filePath().
-
- Note that this function can be time-consuming under UNIX. (in the order
- of milliseconds on a 486 DX2/66 running Linux).
-
- \sa isRelative(), filePath()
-*/
-#ifndef QT_NO_DIR
-QString QFileInfo::absFilePath() const
-{
- if ( QDir::isRelativePath(fn) ) {
- QString tmp = QDir::currentDirPath();
- tmp += '/';
- tmp += fn;
- makeAbs( tmp );
- return QDir::cleanDirPath( tmp );
- } else {
- QString tmp = fn;
- makeAbs( tmp );
- return QDir::cleanDirPath( tmp );
- }
-
-}
-#endif
diff --git a/qtools/qfileinfo_win32.cpp b/qtools/qfileinfo_win32.cpp
deleted file mode 100644
index 1061fae..0000000
--- a/qtools/qfileinfo_win32.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- * Based on qfileinfo_unix.cpp
- *
- * Copyright (C) 1992-2000 Trolltech AS.
- */
-
-#include "qglobal.h"
-
-#include "qfileinfo.h"
-#include "qfiledefs_p.h"
-#include "qdatetime.h"
-#include "qdir.h"
-
-static void reslashify( QString& n )
-{
- for ( int i=0; i<(int)n.length(); i++ )
- {
- if ( n[i] == '/' )
- n[i] = '\\';
- }
-}
-
-void QFileInfo::slashify( QString& n )
-{
- for ( int i=0; i<(int)n.length(); i++ )
- {
- if ( n[i] == '\\' )
- n[i] = '/';
- }
-}
-
-void QFileInfo::makeAbs( QString & )
-{
- // TODO: what to do here?
- return;
-}
-
-extern bool qt_file_access( const QString& fn, int t );
-
-/*!
- Returns TRUE if we are pointing to a real file.
- \sa isDir(), isSymLink()
-*/
-bool QFileInfo::isFile() const
-{
- if ( !fic || !cache )
- doStat();
- return fic ? (fic->st.st_mode & STAT_MASK) == STAT_REG : FALSE;
-}
-
-/*!
- Returns TRUE if we are pointing to a directory or a symbolic link to
- a directory.
- \sa isFile(), isSymLink()
-*/
-
-bool QFileInfo::isDir() const
-{
- if ( !fic || !cache )
- doStat();
- return fic ? (fic->st.st_mode & STAT_MASK) == STAT_DIR : FALSE;
-}
-
-/*!
- Returns TRUE if we are pointing to a symbolic link.
- \sa isFile(), isDir(), readLink()
-*/
-
-bool QFileInfo::isSymLink() const
-{
- if ( !fic || !cache )
- doStat();
- return fic ? fic->isSymLink : FALSE;
-}
-
-
-/*!
- Returns the name a symlink points to, or a null QString if the
- object does not refer to a symbolic link.
-
- This name may not represent an existing file; it is only a string.
- QFileInfo::exists() returns TRUE if the symlink points to an
- existing file.
-
- \sa exists(), isSymLink(), isDir(), isFile()
-*/
-
-QString QFileInfo::readLink() const
-{
- QString r;
- return r;
-}
-
-static const uint nobodyID = (uint) -2;
-
-/*!
- Returns the owner of the file.
-
- On systems where files do not have owners this function returns
- a null string.
-
- Note that this function can be time-consuming under UNIX. (in the order
- of milliseconds on a 486 DX2/66 running Linux).
-
- \sa ownerId(), group(), groupId()
-*/
-
-QString QFileInfo::owner() const
-{
- return QString::null;
-}
-
-/*!
- Returns the id of the owner of the file.
-
- On systems where files do not have owners this function returns ((uint) -2).
-
- \sa owner(), group(), groupId()
-*/
-
-uint QFileInfo::ownerId() const
-{
- return (uint)-2;
-}
-
-/*!
- Returns the group the file belongs to.
-
- On systems where files do not have groups this function always
- returns 0.
-
- Note that this function can be time-consuming under UNIX (in the order of
- milliseconds on a 486 DX2/66 running Linux).
-
- \sa groupId(), owner(), ownerId()
-*/
-
-QString QFileInfo::group() const
-{
- return QString::null;
-}
-
-/*!
- Returns the id of the group the file belongs to.
-
- On systems where files do not have groups this function always
- returns ((uind) -2).
-
- \sa group(), owner(), ownerId()
-*/
-
-uint QFileInfo::groupId() const
-{
- return (uint)-2;
-}
-
-
-/*!
- \fn bool QFileInfo::permission( int permissionSpec ) const
-
- Tests for file permissions. The \e permissionSpec argument can be several
- flags of type PermissionSpec or'ed together to check for permission
- combinations.
-
- On systems where files do not have permissions this function always
- returns TRUE.
-
- Example:
- \code
- QFileInfo fi( "/tmp/tonsils" );
- if ( fi.permission( QFileInfo::WriteUser | QFileInfo::ReadGroup ) )
- qWarning( "Tonsils can be changed by me, and the group can read them.");
- if ( fi.permission( QFileInfo::WriteGroup | QFileInfo::WriteOther ) )
- qWarning( "Danger! Tonsils can be changed by the group or others!" );
- \endcode
-
- \sa isReadable(), isWritable(), isExecutable()
-*/
-
-bool QFileInfo::permission( int permissionSpec ) const
-{
- return TRUE;
-}
-
-/*!
- Returns the file size in bytes, or 0 if the file does not exist if the size
- cannot be fetched.
-*/
-
-uint QFileInfo::size() const
-{
- if ( !fic || !cache )
- doStat();
- if ( fic )
- return (uint)fic->st.st_size;
- else
- return 0;
-}
-
-
-/*!
- Returns the date and time when the file was last modified.
- \sa lastRead()
-*/
-
-QDateTime QFileInfo::lastModified() const
-{
- QDateTime dt;
- if ( !fic || !cache )
- doStat();
- if ( fic )
- dt.setTime_t( fic->st.st_mtime );
- return dt;
-}
-
-/*!
- Returns the date and time when the file was last read (accessed).
-
- On systems that do not support last read times, the modification time is
- returned.
-
- \sa lastModified()
-*/
-
-QDateTime QFileInfo::lastRead() const
-{
- QDateTime dt;
- if ( !fic || !cache )
- doStat();
- if ( fic )
- dt.setTime_t( fic->st.st_atime );
- return dt;
-}
-
-
-void QFileInfo::doStat() const
-{
- QFileInfo *that = ((QFileInfo*)this); // mutable function
- if ( !that->fic )
- that->fic = new QFileInfoCache;
- STATBUF *b = &that->fic->st;
- that->fic->isSymLink = FALSE;
-
-#if defined(__CYGWIN32_)
- int r;
-
- r = STAT( QFile::encodeName(fn), b );
-
- if ( r != 0 ) {
- delete that->fic;
- that->fic = 0;
- }
-#else
- QString file = fn;
- file = QDir::cleanDirPath(file);
- reslashify(file);
-#ifdef QT_LARGEFILE_SUPPORT
- if ( _wstati64( (wchar_t*) file.ucs2(), b ) == -1 ) {
-#else
- if ( _wstat( (wchar_t*) file.ucs2(), b ) == -1 ) {
-#endif
- delete that->fic;
- that->fic = 0;
- }
-#endif
-}
-
-/*!
- Returns the directory path of the file.
-
- If \e absPath is TRUE an absolute path is always returned.
-
- \sa dir(), filePath(), fileName(), isRelative()
-*/
-#ifndef QT_NO_DIR
-QString QFileInfo::dirPath( bool absPath ) const
-{
- QString s;
- if ( absPath )
- s = absFilePath();
- else
- s = fn;
- int pos = s.findRev( '/' );
- if ( pos == -1 ) {
- return QString::fromLatin1(".");
- } else {
- if ( pos == 0 )
- return QString::fromLatin1( "/" );
- return s.left( pos );
- }
-}
-#endif
-/*!
- Returns the name of the file, the file path is not included.
-
- Example:
- \code
- QFileInfo fi( "/tmp/abdomen.lower" );
- QString name = fi.fileName(); // name = "abdomen.lower"
- \endcode
-
- \sa isRelative(), filePath(), baseName(), extension()
-*/
-
-QString QFileInfo::fileName() const
-{
- int p = fn.findRev( '/' );
- if ( p == -1 ) {
- return fn;
- } else {
- return fn.mid(p+1);
- }
-}
-
-/*!
- Returns the absolute path name.
-
- The absolute path name is the file name including the absolute path. If
- the QFileInfo is absolute (i.e. not relative) this function will return
- the same string as filePath().
-
- Note that this function can be time-consuming under UNIX. (in the order
- of milliseconds on a 486 DX2/66 running Linux).
-
- \sa isRelative(), filePath()
-*/
-#ifndef QT_NO_DIR
-QString QFileInfo::absFilePath() const
-{
- if ( QDir::isRelativePath(fn) ) {
- QString tmp = QDir::currentDirPath();
- tmp += '/';
- tmp += fn;
- makeAbs( tmp );
- return QDir::cleanDirPath( tmp );
- } else {
- QString tmp = fn;
- makeAbs( tmp );
- return QDir::cleanDirPath( tmp );
- }
-
-}
-#endif
diff --git a/qtools/qgarray.cpp b/qtools/qgarray.cpp
deleted file mode 100644
index 2607a26..0000000
--- a/qtools/qgarray.cpp
+++ /dev/null
@@ -1,747 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QGArray class
-**
-** Created : 930906
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#define QGARRAY_CPP
-#include "qgarray.h"
-#include "qstring.h"
-#include <stdlib.h>
-
-#define USE_MALLOC // comment to use new/delete
-
-#undef NEW
-#undef DELETE
-
-#if defined(USE_MALLOC)
-#define NEW(type,size) ((type*)malloc(size*sizeof(type)))
-#define DELETE(array) (free((char*)array))
-#else
-#define NEW(type,size) (new type[size])
-#define DELETE(array) (delete[] array)
-#define DONT_USE_REALLOC // comment to use realloc()
-#endif
-
-
-// NOT REVISED
-/*!
- \class QShared qshared.h
- \brief The QShared struct is internally used for implementing shared classes.
-
- It only contains a reference count and member functions to increment and
- decrement it.
-
- Shared classes normally have internal classes that inherit QShared and
- add the shared data.
-
- \sa \link shclass.html Shared Classes\endlink
-*/
-
-
-/*!
- \class QGArray qgarray.h
- \brief The QGArray class is an internal class for implementing the QArray class.
-
- QGArray is a strictly internal class that acts as base class for the
- QArray template array.
-
- It contains an array of bytes and has no notion of an array element.
-*/
-
-
-/*!
- \internal
- Constructs a null array.
-*/
-
-QGArray::QGArray()
-{
- shd = newData();
- CHECK_PTR( shd );
-}
-
-/*!
- \internal
- Dummy constructor; does not allocate any data.
-
- This constructor does not initialize any array data so subclasses
- must do it. The intention is to make the code more efficient.
-*/
-
-QGArray::QGArray( int, int )
-{
-}
-
-/*!
- \internal
- Constructs an array with room for \e size bytes.
-*/
-
-QGArray::QGArray( int size )
-{
- if ( size < 0 ) {
-#if defined(CHECK_RANGE)
- qWarning( "QGArray: Cannot allocate array with negative length" );
-#endif
- size = 0;
- }
- shd = newData();
- CHECK_PTR( shd );
- if ( size == 0 ) // zero length
- return;
- shd->data = NEW(char,size);
- CHECK_PTR( shd->data );
- shd->len = size;
-}
-
-/*!
- \internal
- Constructs a shallow copy of \e a.
-*/
-
-QGArray::QGArray( const QGArray &a )
-{
- shd = a.shd;
- shd->ref();
-}
-
-/*!
- \internal
- Dereferences the array data and deletes it if this was the last
- reference.
-*/
-
-QGArray::~QGArray()
-{
- if ( shd && shd->deref() ) { // delete when last reference
- if ( shd->data ) // is lost
- DELETE(shd->data);
- deleteData( shd );
- }
-}
-
-
-/*!
- \fn QGArray &QGArray::operator=( const QGArray &a )
- \internal
- Assigns a shallow copy of \e a to this array and returns a reference to
- this array. Equivalent to assign().
-*/
-
-/*!
- \fn void QGArray::detach()
- \internal
- Detaches this array from shared array data.
-*/
-
-/*!
- \fn char *QGArray::data() const
- \internal
- Returns a pointer to the actual array data.
-*/
-
-/*!
- \fn uint QGArray::nrefs() const
- \internal
- Returns the reference count.
-*/
-
-/*!
- \fn uint QGArray::size() const
- \internal
- Returns the size of the array, in bytes.
-*/
-
-
-/*!
- \internal
- Returns TRUE if this array is equal to \e a, otherwise FALSE.
- The comparison is bitwise, of course.
-*/
-
-bool QGArray::isEqual( const QGArray &a ) const
-{
- if ( size() != a.size() ) // different size
- return FALSE;
- if ( data() == a.data() ) // has same data
- return TRUE;
- return (size() ? memcmp( data(), a.data(), size() ) : 0) == 0;
-}
-
-
-/*!
- \internal
- Resizes the array to \e newsize bytes.
-*/
-
-bool QGArray::resize( uint newsize )
-{
- if ( newsize == shd->len ) // nothing to do
- return TRUE;
- if ( newsize == 0 ) { // remove array
- duplicate( 0, 0 );
- return TRUE;
- }
- if ( shd->data ) { // existing data
-#if defined(DONT_USE_REALLOC)
- char *newdata = NEW(char,newsize); // manual realloc
- memcpy( newdata, shd->data, QMIN(shd->len,newsize) );
- DELETE(shd->data);
- shd->data = newdata;
-#else
- shd->data = (char *)realloc( shd->data, newsize );
-#endif
- } else {
- shd->data = NEW(char,newsize);
- }
- CHECK_PTR( shd->data );
- if ( !shd->data ) // no memory
- return FALSE;
- shd->len = newsize;
- return TRUE;
-}
-
-/*!
- \internal
- Fills the array with the repeated occurrences of \e d, which is
- \e sz bytes long.
- If \e len is specified as different from -1, then the array will be
- resized to \e len*sz before it is filled.
-
- Returns TRUE if successful, or FALSE if the memory cannot be allocated
- (only when \e len != -1).
-
- \sa resize()
-*/
-
-bool QGArray::fill( const char *d, int len, uint sz )
-{
- if ( len < 0 )
- len = shd->len/sz; // default: use array length
- else if ( !resize( len*sz ) )
- return FALSE;
- if ( sz == 1 ) // 8 bit elements
- memset( data(), *d, len );
- else if ( sz == 4 ) { // 32 bit elements
- Q_INT32 *x = (Q_INT32*)data();
- Q_INT32 v = *((Q_INT32*)d);
- while ( len-- )
- *x++ = v;
- } else if ( sz == 2 ) { // 16 bit elements
- Q_INT16 *x = (Q_INT16*)data();
- Q_INT16 v = *((Q_INT16*)d);
- while ( len-- )
- *x++ = v;
- } else { // any other size elements
- char *x = data();
- while ( len-- ) { // more complicated
- memcpy( x, d, sz );
- x += sz;
- }
- }
- return TRUE;
-}
-
-/*!
- \internal
- Shallow copy. Dereference the current array and references the data
- contained in \e a instead. Returns a reference to this array.
- \sa operator=()
-*/
-
-QGArray &QGArray::assign( const QGArray &a )
-{
- a.shd->ref(); // avoid 'a = a'
- if ( shd->deref() ) { // delete when last reference
- if ( shd->data ) // is lost
- DELETE(shd->data);
- deleteData( shd );
- }
- shd = a.shd;
- return *this;
-}
-
-/*!
- \internal
- Shallow copy. Dereference the current array and references the
- array data \e d, which contains \e len bytes.
- Returns a reference to this array.
-
- Do not delete \e d later, because QGArray takes care of that.
-*/
-
-QGArray &QGArray::assign( const char *d, uint len )
-{
- if ( shd->count > 1 ) { // disconnect this
- shd->count--;
- shd = newData();
- CHECK_PTR( shd );
- } else {
- if ( shd->data )
- DELETE(shd->data);
- }
- shd->data = (char *)d;
- shd->len = len;
- return *this;
-}
-
-/*!
- \internal
- Deep copy. Dereference the current array and obtains a copy of the data
- contained in \e a instead. Returns a reference to this array.
- \sa assign(), operator=()
-*/
-
-QGArray &QGArray::duplicate( const QGArray &a )
-{
- if ( a.shd == shd ) { // a.duplicate(a) !
- if ( shd->count > 1 ) {
- shd->count--;
- array_data *n = newData();
- CHECK_PTR( n );
- if ( (n->len=shd->len) ) {
- n->data = NEW(char,n->len);
- CHECK_PTR( n->data );
- if ( n->data )
- memcpy( n->data, shd->data, n->len );
- } else {
- n->data = 0;
- }
- shd = n;
- }
- return *this;
- }
- char *oldptr = 0;
- if ( shd->count > 1 ) { // disconnect this
- shd->count--;
- shd = newData();
- CHECK_PTR( shd );
- } else { // delete after copy was made
- oldptr = shd->data;
- }
- if ( a.shd->len ) { // duplicate data
- shd->data = NEW(char,a.shd->len);
- CHECK_PTR( shd->data );
- if ( shd->data )
- memcpy( shd->data, a.shd->data, a.shd->len );
- } else {
- shd->data = 0;
- }
- shd->len = a.shd->len;
- if ( oldptr )
- DELETE(oldptr);
- return *this;
-}
-
-/*!
- \internal
- Deep copy. Dereferences the current array and obtains a copy of the
- array data \e d instead. Returns a reference to this array.
- \sa assign(), operator=()
-*/
-
-QGArray &QGArray::duplicate( const char *d, uint len )
-{
- char *data;
- if ( d == 0 || len == 0 ) {
- data = 0;
- len = 0;
- } else {
- if ( shd->count == 1 && shd->len == len ) {
- memcpy( shd->data, d, len ); // use same buffer
- return *this;
- }
- data = NEW(char,len);
- CHECK_PTR( data );
- memcpy( data, d, len );
- }
- if ( shd->count > 1 ) { // detach
- shd->count--;
- shd = newData();
- CHECK_PTR( shd );
- } else { // just a single reference
- if ( shd->data )
- DELETE(shd->data);
- }
- shd->data = data;
- shd->len = len;
- return *this;
-}
-
-/*!
- \internal
- Resizes this array to \e len bytes and copies the \e len bytes at
- address \e into it.
-
- \warning This function disregards the reference count mechanism. If
- other QGArrays reference the same data as this, all will be updated.
-*/
-
-void QGArray::store( const char *d, uint len )
-{ // store, but not deref
- resize( len );
- memcpy( shd->data, d, len );
-}
-
-
-/*!
- \fn array_data *QGArray::sharedBlock() const
- \internal
- Returns a pointer to the shared array block.
-
- \warning
-
- Do not use this function. Using it is begging for trouble. We dare
- not remove it, for fear of breaking code, but we \e strongly
- discourage new use of it.
-*/
-
-/*!
- \fn void QGArray::setSharedBlock( array_data *p )
- \internal
- Sets the shared array block to \e p.
-
- \warning
-
- Do not use this function. Using it is begging for trouble. We dare
- not remove it, for fear of breaking code, but we \e strongly
- discourage new use of it.
-*/
-
-
-/*!
- \internal
- Sets raw data and returns a reference to the array.
-
- Dereferences the current array and sets the new array data to \e d and
- the new array size to \e len. Do not attempt to resize or re-assign the
- array data when raw data has been set.
- Call resetRawData(d,len) to reset the array.
-
- Setting raw data is useful because it set QArray data without allocating
- memory or copying data.
-
- Example of intended use:
- \code
- static uchar bindata[] = { 231, 1, 44, ... };
- QByteArray a;
- a.setRawData( bindata, sizeof(bindata) ); // a points to bindata
- QDataStream s( a, IO_ReadOnly ); // open on a's data
- s >> <something>; // read raw bindata
- s.close();
- a.resetRawData( bindata, sizeof(bindata) ); // finished
- \endcode
-
- Example of misuse (do not do this):
- \code
- static uchar bindata[] = { 231, 1, 44, ... };
- QByteArray a, b;
- a.setRawData( bindata, sizeof(bindata) ); // a points to bindata
- a.resize( 8 ); // will crash
- b = a; // will crash
- a[2] = 123; // might crash
- // forget to resetRawData - will crash
- \endcode
-
- \warning If you do not call resetRawData(), QGArray will attempt to
- deallocate or reallocate the raw data, which might not be too good.
- Be careful.
-*/
-
-QGArray &QGArray::setRawData( const char *d, uint len )
-{
- duplicate( 0, 0 ); // set null data
- shd->data = (char *)d;
- shd->len = len;
- return *this;
-}
-
-/*!
- \internal
- Resets raw data.
-
- The arguments must be the data and length that were passed to
- setRawData(). This is for consistency checking.
-*/
-
-void QGArray::resetRawData( const char *d, uint len )
-{
- if ( d != shd->data || len != shd->len ) {
-#if defined(CHECK_STATE)
- qWarning( "QGArray::resetRawData: Inconsistent arguments" );
-#endif
- return;
- }
- shd->data = 0;
- shd->len = 0;
-}
-
-
-/*!
- \internal
- Finds the first occurrence of \e d in the array from position \e index,
- where \e sz is the size of the \e d element.
-
- Note that \e index is given in units of \e sz, not bytes.
-
- This function only compares whole cells, not bytes.
-*/
-
-int QGArray::find( const char *d, uint index, uint sz ) const
-{
- index *= sz;
- if ( index >= shd->len ) {
-#if defined(CHECK_RANGE)
- qWarning( "QGArray::find: Index %d out of range", index/sz );
-#endif
- return -1;
- }
- uint i;
- uint ii;
- switch ( sz ) {
- case 1: { // 8 bit elements
- char *x = data() + index;
- char v = *d;
- for ( i=index; i<shd->len; i++ ) {
- if ( *x++ == v )
- break;
- }
- ii = i;
- }
- break;
- case 2: { // 16 bit elements
- Q_INT16 *x = (Q_INT16*)(data() + index);
- Q_INT16 v = *((Q_INT16*)d);
- for ( i=index; i<shd->len; i+=2 ) {
- if ( *x++ == v )
- break;
- }
- ii = i/2;
- }
- break;
- case 4: { // 32 bit elements
- Q_INT32 *x = (Q_INT32*)(data() + index);
- Q_INT32 v = *((Q_INT32*)d);
- for ( i=index; i<shd->len; i+=4 ) {
- if ( *x++ == v )
- break;
- }
- ii = i/4;
- }
- break;
- default: { // any size elements
- for ( i=index; i<shd->len; i+=sz ) {
- if ( memcmp( d, &shd->data[i], sz ) == 0 )
- break;
- }
- ii = i/sz;
- }
- break;
- }
- return i<shd->len ? (int)ii : -1;
-}
-
-/*!
- \internal
- Returns the number of occurrences of \e d in the array, where \e sz is
- the size of the \e d element.
-
- This function only compares whole cells, not bytes.
-*/
-
-int QGArray::contains( const char *d, uint sz ) const
-{
- uint i = shd->len;
- int count = 0;
- switch ( sz ) {
- case 1: { // 8 bit elements
- char *x = data();
- char v = *d;
- while ( i-- ) {
- if ( *x++ == v )
- count++;
- }
- }
- break;
- case 2: { // 16 bit elements
- Q_INT16 *x = (Q_INT16*)data();
- Q_INT16 v = *((Q_INT16*)d);
- i /= 2;
- while ( i-- ) {
- if ( *x++ == v )
- count++;
- }
- }
- break;
- case 4: { // 32 bit elements
- Q_INT32 *x = (Q_INT32*)data();
- Q_INT32 v = *((Q_INT32*)d);
- i /= 4;
- while ( i-- ) {
- if ( *x++ == v )
- count++;
- }
- }
- break;
- default: { // any size elements
- for ( i=0; i<shd->len; i+=sz ) {
- if ( memcmp(d, &shd->data[i], sz) == 0 )
- count++;
- }
- }
- break;
- }
- return count;
-}
-
-static int cmp_item_size = 0;
-
-#if defined(Q_C_CALLBACKS)
-extern "C" {
-#endif
-
-static int cmp_arr( const void *n1, const void *n2 )
-{
- return ( n1 && n2 ) ? memcmp( n1, n2, cmp_item_size )
- : (int)((intptr_t)n1 - (intptr_t)n2);
- // Qt 3.0: Add a virtual compareItems() method and call that instead
-}
-
-#if defined(Q_C_CALLBACKS)
-}
-#endif
-
-/*!
- \internal
-
- Sort the array.
-*/
-
-void QGArray::sort( uint sz )
-{
- int numItems = size() / sz;
- if ( numItems < 2 )
- return;
- cmp_item_size = sz;
- qsort( shd->data, numItems, sz, cmp_arr );
-}
-
-/*!
- \internal
-
- Binary search; assumes sorted array
-*/
-
-int QGArray::bsearch( const char *d, uint sz ) const
-{
- int numItems = size() / sz;
- if ( !numItems )
- return -1;
- cmp_item_size = sz;
- char* r = (char*)::bsearch( d, shd->data, numItems, sz, cmp_arr );
- if ( !r )
- return -1;
- while( (r >= shd->data + sz) && (cmp_arr( r - sz, d ) == 0) )
- r -= sz; // search to first of equal elements; bsearch is undef
- return (int)(( r - shd->data ) / sz);
-}
-
-
-/*!
- \fn char *QGArray::at( uint index ) const
- \internal
- Returns a pointer to the byte at offset \e index in the array.
-*/
-
-/*!
- \internal
- Expand the array if necessary, and copies (the first part of) its
- contents from the \e index*zx bytes at \e d.
-
- Returns TRUE if the operation succeeds, FALSE if it runs out of
- memory.
-
- \warning This function disregards the reference count mechanism. If
- other QGArrays reference the same data as this, all will be changed.
-*/
-
-bool QGArray::setExpand( uint index, const char *d, uint sz )
-{
- index *= sz;
- if ( index >= shd->len ) {
- if ( !resize( index+sz ) ) // no memory
- return FALSE;
- }
- memcpy( data() + index, d, sz );
- return TRUE;
-}
-
-
-/*!
- \internal
- Prints a warning message if at() or [] is given a bad index.
-*/
-
-void QGArray::msg_index( uint index )
-{
-#if defined(CHECK_RANGE)
- qWarning( "QGArray::at: Absolute index %d out of range", index );
-#else
- Q_UNUSED( index )
-#endif
-}
-
-
-/*!
- \internal
- Returns a new shared array block.
-*/
-
-QGArray::array_data * QGArray::newData()
-{
- return new array_data;
-}
-
-
-/*!
- \internal
- Deletes the shared array block.
-*/
-
-void QGArray::deleteData( array_data *p )
-{
- delete p;
- p = 0;
-}
diff --git a/qtools/qgarray.h b/qtools/qgarray.h
deleted file mode 100644
index 12c463b..0000000
--- a/qtools/qgarray.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QGArray class
-**
-** Created : 930906
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QGARRAY_H
-#define QGARRAY_H
-
-#ifndef QT_H
-#include "qshared.h"
-#endif // QT_H
-
-
-class Q_EXPORT QGArray // generic array
-{
-friend class QBuffer;
-public:
- //### DO NOT USE THIS. IT IS PUBLIC BUT DO NOT USE IT IN NEW CODE.
- struct array_data : public QShared { // shared array
- array_data() { data=0; len=0; }
- char *data; // actual array data
- uint len;
- };
- QGArray();
-protected:
- QGArray( int, int ); // dummy; does not alloc
- QGArray( int size ); // allocate 'size' bytes
- QGArray( const QGArray &a ); // shallow copy
- virtual ~QGArray();
-
- QGArray &operator=( const QGArray &a ) { return assign( a ); }
-
- virtual void detach() { duplicate(*this); }
-
- char *data() const { return shd->data; }
- uint nrefs() const { return shd->count; }
- uint size() const { return shd->len; }
- bool isEqual( const QGArray &a ) const;
-
- bool resize( uint newsize );
-
- bool fill( const char *d, int len, uint sz );
-
- QGArray &assign( const QGArray &a );
- QGArray &assign( const char *d, uint len );
- QGArray &duplicate( const QGArray &a );
- QGArray &duplicate( const char *d, uint len );
- void store( const char *d, uint len );
-
- array_data *sharedBlock() const { return shd; }
- void setSharedBlock( array_data *p ) { shd=(array_data*)p; }
-
- QGArray &setRawData( const char *d, uint len );
- void resetRawData( const char *d, uint len );
-
- int find( const char *d, uint index, uint sz ) const;
- int contains( const char *d, uint sz ) const;
-
- void sort( uint sz );
- int bsearch( const char *d, uint sz ) const;
-
- char *at( uint index ) const;
-
- bool setExpand( uint index, const char *d, uint sz );
-
-protected:
- virtual array_data *newData();
- virtual void deleteData( array_data *p );
-
-private:
- static void msg_index( uint );
- array_data *shd;
-};
-
-
-inline char *QGArray::at( uint index ) const
-{
-#if defined(CHECK_RANGE)
- if ( index >= size() ) {
- msg_index( index );
- index = 0;
- }
-#endif
- return &shd->data[index];
-}
-
-
-#endif // QGARRAY_H
diff --git a/qtools/qgdict.cpp b/qtools/qgdict.cpp
deleted file mode 100644
index a3db8de..0000000
--- a/qtools/qgdict.cpp
+++ /dev/null
@@ -1,1217 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QGDict and QGDictIterator classes
-**
-** Created : 920529
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qgdict.h"
-#include "qinternallist.h"
-#include "qstring.h"
-#include "qdatastream.h"
-#include <ctype.h>
-
-// NOT REVISED
-/*!
- \class QGDict qgdict.h
- \brief The QGDict class is an internal class for implementing QDict template classes.
-
- QGDict is a strictly internal class that acts as a base class for the
- \link collection.html collection classes\endlink QDict and QIntDict.
-
- QGDict has some virtual functions that can be reimplemented to customize
- the subclasses.
- <ul>
- <li> read() reads a collection/dictionary item from a QDataStream.
- <li> write() writes a collection/dictionary item to a QDataStream.
- </ul>
- Normally, you do not have to reimplement any of these functions.
-*/
-
-static const int op_find = 0;
-static const int op_insert = 1;
-static const int op_replace = 2;
-
-
-class QGDItList : public QInternalList<QGDictIterator>
-{
-public:
- QGDItList() : QInternalList<QGDictIterator>() {}
- QGDItList( const QGDItList &list ) : QInternalList<QGDictIterator>(list) {}
- ~QGDItList() { clear(); }
- QGDItList &operator=(const QGDItList &list)
- { return (QGDItList&)QInternalList<QGDictIterator>::operator=(list); }
-};
-
-
-/*****************************************************************************
- Default implementation of special and virtual functions
- *****************************************************************************/
-
-/*!
- \internal
- Returns the hash key for \e key, when key is a string.
-*/
-
-int QGDict::hashKeyString( const QCString &key )
-{
- return hashKeyAscii(key.data());
-}
-
-/*!
- \internal
- Returns the hash key for \a key, which is a C string.
-*/
-
-int QGDict::hashKeyAscii( const char *key )
-{
-#if defined(CHECK_NULL)
- if ( key == 0 )
- {
- qWarning( "QGDict::hashAsciiKey: Invalid null key" );
- return 0;
- }
-#endif
- const char *k = key;
- uint h=0;
- uint g;
- if ( cases ) { // case sensitive
- while ( *k ) {
- h = (h<<4) + *k++;
- if ( (g = h & 0xf0000000) )
- h ^= g >> 24;
- h &= ~g;
- }
- } else { // case insensitive
- while ( *k ) {
- h = (h<<4) + tolower(*k);
- if ( (g = h & 0xf0000000) )
- h ^= g >> 24;
- h &= ~g;
- k++;
- }
- }
- int index = h;
- if ( index < 0 ) // adjust index to table size
- index = -index;
- return index;
-}
-
-#if 0
-int QGDict::hashKeyAscii( const char *key )
-{
-#if defined(CHECK_NULL)
- if ( key == 0 )
- {
- qWarning( "QGDict::hashAsciiKey: Invalid null key" );
- return 0;
- }
-#endif
- unsigned int hash = 5381;
- int c;
- // use djb2 by Dan Bernstein
- if (cases)
- {
- while ((c=*key++)) hash = ((hash<<5)+hash)+c;
- }
- else
- {
- while ((c=*key++)) hash = ((hash<<5)+hash)+tolower(c);
- }
- int index = hash;
- return index<0 ? -index : index;
-}
-#endif
-
-#ifndef QT_NO_DATASTREAM
-
-/*!
- Reads a collection/dictionary item from the stream \e s and returns a
- reference to the stream.
-
- The default implementation sets \e item to 0.
-
- \sa write()
-*/
-
-QDataStream& QGDict::read( QDataStream &s, QCollection::Item &item )
-{
- item = 0;
- return s;
-}
-
-/*!
- Writes a collection/dictionary item to the stream \e s and returns a
- reference to the stream.
-
- \sa read()
-*/
-
-QDataStream& QGDict::write( QDataStream &s, QCollection::Item ) const
-{
- return s;
-}
-#endif //QT_NO_DATASTREAM
-
-/*****************************************************************************
- QGDict member functions
- *****************************************************************************/
-
-/*!
- \internal
- Constructs a dictionary.
-*/
-
-QGDict::QGDict( uint len, KeyType kt, bool caseSensitive, bool copyKeys )
-{
- init( len, kt, caseSensitive, copyKeys );
-}
-
-
-void QGDict::init( uint len, KeyType kt, bool caseSensitive, bool copyKeys )
-{
- vec = new QBaseBucket *[vlen = len]; // allocate hash table
- CHECK_PTR( vec );
- memset( (char*)vec, 0, vlen*sizeof(QBaseBucket*) );
- numItems = 0;
- iterators = 0;
- // The caseSensitive and copyKey options don't make sense for
- // all dict types.
- switch ( (keytype = (uint)kt) ) {
- case StringKey:
- cases = caseSensitive;
- copyk = FALSE;
- break;
- case AsciiKey:
- cases = caseSensitive;
- copyk = copyKeys;
- break;
- default:
- cases = FALSE;
- copyk = FALSE;
- break;
- }
-}
-
-
-/*!
- \internal
- Constructs a copy of \e dict.
-*/
-
-QGDict::QGDict( const QGDict & dict )
- : QCollection( dict )
-{
- init( dict.vlen, (KeyType)dict.keytype, dict.cases, dict.copyk );
- QGDictIterator it( dict );
- while ( it.get() ) { // copy from other dict
- switch ( keytype ) {
- case StringKey:
- look_string( it.getKeyString(), it.get(), op_insert );
- break;
- case AsciiKey:
- look_ascii( it.getKeyAscii(), it.get(), op_insert );
- break;
- case IntKey:
- look_int( it.getKeyInt(), it.get(), op_insert );
- break;
- case PtrKey:
- look_ptr( it.getKeyPtr(), it.get(), op_insert );
- break;
- }
- ++it;
- }
-}
-
-
-/*!
- \internal
- Removes all items from the dictionary and destroys it.
-*/
-
-QGDict::~QGDict()
-{
- clear(); // delete everything
- delete [] vec;
- if ( !iterators ) // no iterators for this dict
- return;
- QGDictIterator *i = iterators->first();
- while ( i ) { // notify all iterators that
- i->dict = 0; // this dict is deleted
- i = iterators->next();
- }
- delete iterators;
-}
-
-
-/*!
- \internal
- Assigns \e dict to this dictionary.
-*/
-
-QGDict &QGDict::operator=( const QGDict &dict )
-{
- clear();
- QGDictIterator it( dict );
- while ( it.get() ) { // copy from other dict
- switch ( keytype ) {
- case StringKey:
- look_string( it.getKeyString(), it.get(), op_insert );
- break;
- case AsciiKey:
- look_ascii( it.getKeyAscii(), it.get(), op_insert );
- break;
- case IntKey:
- look_int( it.getKeyInt(), it.get(), op_insert );
- break;
- case PtrKey:
- look_ptr( it.getKeyPtr(), it.get(), op_insert );
- break;
- }
- ++it;
- }
- return *this;
-}
-
-
-/*! \fn QCollection::Item QGDictIterator::get() const
-
- \internal
-*/
-
-
-/*! \fn QCString QGDictIterator::getKeyString() const
-
- \internal
-*/
-
-
-/*! \fn const char * QGDictIterator::getKeyAscii() const
-
- \internal
-*/
-
-
-/*! \fn void * QGDictIterator::getKeyPtr() const
-
- \internal
-*/
-
-
-/*! \fn long QGDictIterator::getKeyInt() const
-
- \internal
-*/
-
-
-/*!
- \fn uint QGDict::count() const
- \internal
- Returns the number of items in the dictionary.
-*/
-
-/*!
- \fn uint QGDict::size() const
- \internal
- Returns the size of the hash array.
-*/
-
-
-/*!
- \internal
- The do-it-all function; op is one of op_find, op_insert, op_replace
-*/
-
-QCollection::Item QGDict::look_string( const QCString &key, QCollection::Item d, int op )
-{
- QCStringBucket *n;
- int index = hashKeyString(key) % vlen;
- if ( op == op_find ) { // find
- if ( cases ) {
- for ( n=(QCStringBucket*)vec[index]; n;
- n=(QCStringBucket*)n->getNext() ) {
- if ( key == n->getKey() )
- return n->getData(); // item found
- }
- } else {
- QCString k = key.lower();
- for ( n=(QCStringBucket*)vec[index]; n;
- n=(QCStringBucket*)n->getNext() ) {
- if ( k == n->getKey().lower() )
- return n->getData(); // item found
- }
- }
- return 0; // not found
- }
- if ( op == op_replace ) { // replace
- if ( vec[index] != 0 ) // maybe something there
- remove_string( key );
- }
- // op_insert or op_replace
- n = new QCStringBucket(key,newItem(d),vec[index]);
- CHECK_PTR( n );
-#if defined(CHECK_NULL)
- if ( n->getData() == 0 )
- qWarning( "QDict: Cannot insert null item" );
-#endif
- vec[index] = n;
- numItems++;
- return n->getData();
-}
-
-
-/*! \internal */
-
-QCollection::Item QGDict::look_ascii( const char *key, QCollection::Item d, int op )
-{
- QAsciiBucket *n;
- int index = hashKeyAscii(key) % vlen;
- if ( op == op_find ) { // find
- if ( cases ) {
- for ( n=(QAsciiBucket*)vec[index]; n;
- n=(QAsciiBucket*)n->getNext() ) {
- if ( qstrcmp(n->getKey(),key) == 0 )
- return n->getData(); // item found
- }
- } else {
- for ( n=(QAsciiBucket*)vec[index]; n;
- n=(QAsciiBucket*)n->getNext() ) {
- if ( qstricmp(n->getKey(),key) == 0 )
- return n->getData(); // item found
- }
- }
- return 0; // not found
- }
- if ( op == op_replace ) { // replace
- if ( vec[index] != 0 ) // maybe something there
- remove_ascii( key );
- }
- // op_insert or op_replace
- n = new QAsciiBucket(copyk ? qstrdup(key) : key,newItem(d),vec[index]);
- CHECK_PTR( n );
-#if defined(CHECK_NULL)
- if ( n->getData() == 0 )
- qWarning( "QAsciiDict: Cannot insert null item" );
-#endif
- vec[index] = n;
- numItems++;
- return n->getData();
-}
-
-
-/*! \internal */
-
-QCollection::Item QGDict::look_int( long key, QCollection::Item d, int op )
-{
- QIntBucket *n;
- int index = (int)((ulong)key % vlen); // simple hash
- if ( op == op_find ) { // find
- for ( n=(QIntBucket*)vec[index]; n;
- n=(QIntBucket*)n->getNext() ) {
- if ( n->getKey() == key )
- return n->getData(); // item found
- }
- return 0; // not found
- }
- if ( op == op_replace ) { // replace
- if ( vec[index] != 0 ) // maybe something there
- remove_int( key );
- }
- // op_insert or op_replace
- n = new QIntBucket(key,newItem(d),vec[index]);
- CHECK_PTR( n );
-#if defined(CHECK_NULL)
- if ( n->getData() == 0 )
- qWarning( "QIntDict: Cannot insert null item" );
-#endif
- vec[index] = n;
- numItems++;
- return n->getData();
-}
-
-
-/*! \internal */
-
-QCollection::Item QGDict::look_ptr( void *key, QCollection::Item d, int op )
-{
- QPtrBucket *n;
- int index = (int)((uintptr_t)key % vlen); // simple hash
- if ( op == op_find ) { // find
- for ( n=(QPtrBucket*)vec[index]; n;
- n=(QPtrBucket*)n->getNext() ) {
- if ( n->getKey() == key )
- return n->getData(); // item found
- }
- return 0; // not found
- }
- if ( op == op_replace ) { // replace
- if ( vec[index] != 0 ) // maybe something there
- remove_ptr( key );
- }
- // op_insert or op_replace
- n = new QPtrBucket(key,newItem(d),vec[index]);
- CHECK_PTR( n );
-#if defined(CHECK_NULL)
- if ( n->getData() == 0 )
- qWarning( "QPtrDict: Cannot insert null item" );
-#endif
- vec[index] = n;
- numItems++;
- return n->getData();
-}
-
-
-/*!
- \internal
- Changes the size of the hashtable.
- The contents of the dictionary are preserved,
- but all iterators on the dictionary become invalid.
-*/
-void QGDict::resize( uint newsize )
-{
- // Save old information
- QBaseBucket **old_vec = vec;
- uint old_vlen = vlen;
- bool old_copyk = copyk;
-
- vec = new QBaseBucket *[vlen = newsize];
- CHECK_PTR( vec );
- memset( (char*)vec, 0, vlen*sizeof(QBaseBucket*) );
- numItems = 0;
- copyk = FALSE;
-
- // Reinsert every item from vec, deleting vec as we go
- for ( uint index = 0; index < old_vlen; index++ ) {
- switch ( keytype ) {
- case StringKey:
- {
- QCStringBucket *n=(QCStringBucket *)old_vec[index];
- while ( n ) {
- look_string( n->getKey(), n->getData(), op_insert );
- QCStringBucket *t=(QCStringBucket *)n->getNext();
- delete n;
- n = t;
- }
- }
- break;
- case AsciiKey:
- {
- QAsciiBucket *n=(QAsciiBucket *)old_vec[index];
- while ( n ) {
- look_ascii( n->getKey(), n->getData(), op_insert );
- QAsciiBucket *t=(QAsciiBucket *)n->getNext();
- delete n;
- n = t;
- }
- }
- break;
- case IntKey:
- {
- QIntBucket *n=(QIntBucket *)old_vec[index];
- while ( n ) {
- look_int( n->getKey(), n->getData(), op_insert );
- QIntBucket *t=(QIntBucket *)n->getNext();
- delete n;
- n = t;
- }
- }
- break;
- case PtrKey:
- {
- QPtrBucket *n=(QPtrBucket *)old_vec[index];
- while ( n ) {
- look_ptr( n->getKey(), n->getData(), op_insert );
- QPtrBucket *t=(QPtrBucket *)n->getNext();
- delete n;
- n = t;
- }
- }
- break;
- }
- }
- delete [] old_vec;
-
- // Restore state
- copyk = old_copyk;
-
- // Invalidate all iterators, since order is lost
- if ( iterators && iterators->count() ) {
- QGDictIterator *i = iterators->first();
- while ( i ) {
- i->toFirst();
- i = iterators->next();
- }
- }
-}
-
-/*!
- \internal
- Unlinks the bucket with the specified key (and specified data pointer,
- if it is set).
-*/
-
-void QGDict::unlink_common( int index, QBaseBucket *node, QBaseBucket *prev )
-{
- if ( iterators && iterators->count() ) { // update iterators
- QGDictIterator *i = iterators->first();
- while ( i ) { // invalidate all iterators
- if ( i->curNode == node ) // referring to pending node
- i->operator++();
- i = iterators->next();
- }
- }
- if ( prev ) // unlink node
- prev->setNext( node->getNext() );
- else
- vec[index] = node->getNext();
- numItems--;
-}
-
-QCStringBucket *QGDict::unlink_string( const QCString &key, QCollection::Item d )
-{
- if ( numItems == 0 ) // nothing in dictionary
- return 0;
- QCStringBucket *n;
- QCStringBucket *prev = 0;
- int index = hashKeyString(key) % vlen;
- if ( cases ) {
- for ( n=(QCStringBucket*)vec[index]; n;
- n=(QCStringBucket*)n->getNext() ) {
- bool found = (key == n->getKey());
- if ( found && d )
- found = (n->getData() == d);
- if ( found ) {
- unlink_common(index,n,prev);
- return n;
- }
- prev = n;
- }
- } else {
- QCString k = key.lower();
- for ( n=(QCStringBucket*)vec[index]; n;
- n=(QCStringBucket*)n->getNext() ) {
- bool found = (k == n->getKey().lower());
- if ( found && d )
- found = (n->getData() == d);
- if ( found ) {
- unlink_common(index,n,prev);
- return n;
- }
- prev = n;
- }
- }
- return 0;
-}
-
-QAsciiBucket *QGDict::unlink_ascii( const char *key, QCollection::Item d )
-{
- if ( numItems == 0 ) // nothing in dictionary
- return 0;
- QAsciiBucket *n;
- QAsciiBucket *prev = 0;
- int index = hashKeyAscii(key) % vlen;
- for ( n=(QAsciiBucket *)vec[index]; n; n=(QAsciiBucket *)n->getNext() ) {
- bool found = (cases ? qstrcmp(n->getKey(),key)
- : qstricmp(n->getKey(),key)) == 0;
- if ( found && d )
- found = (n->getData() == d);
- if ( found ) {
- unlink_common(index,n,prev);
- return n;
- }
- prev = n;
- }
- return 0;
-}
-
-QIntBucket *QGDict::unlink_int( long key, QCollection::Item d )
-{
- if ( numItems == 0 ) // nothing in dictionary
- return 0;
- QIntBucket *n;
- QIntBucket *prev = 0;
- int index = (int)((ulong)key % vlen);
- for ( n=(QIntBucket *)vec[index]; n; n=(QIntBucket *)n->getNext() ) {
- bool found = (n->getKey() == key);
- if ( found && d )
- found = (n->getData() == d);
- if ( found ) {
- unlink_common(index,n,prev);
- return n;
- }
- prev = n;
- }
- return 0;
-}
-
-QPtrBucket *QGDict::unlink_ptr( void *key, QCollection::Item d )
-{
- if ( numItems == 0 ) // nothing in dictionary
- return 0;
- QPtrBucket *n;
- QPtrBucket *prev = 0;
- int index = (int)((uintptr_t)key % vlen);
- for ( n=(QPtrBucket *)vec[index]; n; n=(QPtrBucket *)n->getNext() ) {
- bool found = (n->getKey() == key);
- if ( found && d )
- found = (n->getData() == d);
- if ( found ) {
- unlink_common(index,n,prev);
- return n;
- }
- prev = n;
- }
- return 0;
-}
-
-
-/*!
- \internal
- Removes the item with the specified key. If item is non-null,
- the remove will match the \a item as well (used to remove an
- item when several items have the same key).
-*/
-
-bool QGDict::remove_string( const QCString &key, QCollection::Item item )
-{
- QCStringBucket *n = unlink_string( key, item );
- if ( n ) {
- deleteItem( n->getData() );
- delete n;
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-
-/*! \internal */
-
-bool QGDict::remove_ascii( const char *key, QCollection::Item item )
-{
- QAsciiBucket *n = unlink_ascii( key, item );
- if ( n ) {
- if ( copyk )
- delete [] (char *)n->getKey();
- deleteItem( n->getData() );
- delete n;
- }
- return n != 0;
-}
-
-
-/*! \internal */
-
-bool QGDict::remove_int( long key, QCollection::Item item )
-{
- QIntBucket *n = unlink_int( key, item );
- if ( n ) {
- deleteItem( n->getData() );
- delete n;
- }
- return n != 0;
-}
-
-
-/*! \internal */
-
-bool QGDict::remove_ptr( void *key, QCollection::Item item )
-{
- QPtrBucket *n = unlink_ptr( key, item );
- if ( n ) {
- deleteItem( n->getData() );
- delete n;
- }
- return n != 0;
-}
-
-
-/*! \internal */
-
-QCollection::Item QGDict::take_string( const QCString &key )
-{
- QCStringBucket *n = unlink_string( key );
- Item d;
- if ( n ) {
- d = n->getData();
- delete n;
- } else {
- d = 0;
- }
- return d;
-}
-
-
-/*! \internal */
-
-QCollection::Item QGDict::take_ascii( const char *key )
-{
- QAsciiBucket *n = unlink_ascii( key );
- Item d;
- if ( n ) {
- if ( copyk )
- delete [] (char *)n->getKey();
- d = n->getData();
- delete n;
- } else {
- d = 0;
- }
- return d;
-}
-
-
-/*! \internal */
-
-QCollection::Item QGDict::take_int( long key )
-{
- QIntBucket *n = unlink_int( key );
- Item d;
- if ( n ) {
- d = n->getData();
- delete n;
- } else {
- d = 0;
- }
- return d;
-}
-
-
-/*! \internal */
-
-QCollection::Item QGDict::take_ptr( void *key )
-{
- QPtrBucket *n = unlink_ptr( key );
- Item d;
- if ( n ) {
- d = n->getData();
- delete n;
- } else {
- d = 0;
- }
- return d;
-}
-
-
-/*!
- \internal
- Removes all items from the dictionary.
-*/
-
-void QGDict::clear()
-{
- if ( !numItems )
- return;
- numItems = 0; // disable remove() function
- for ( uint j=0; j<vlen; j++ ) { // destroy hash table
- if ( vec[j] ) {
- switch ( keytype ) {
- case StringKey:
- {
- QCStringBucket *n=(QCStringBucket *)vec[j];
- while ( n ) {
- QCStringBucket *next = (QCStringBucket*)n->getNext();
- deleteItem( n->getData() );
- delete n;
- n = next;
- }
- }
- break;
- case AsciiKey:
- {
- QAsciiBucket *n=(QAsciiBucket *)vec[j];
- while ( n ) {
- QAsciiBucket *next = (QAsciiBucket*)n->getNext();
- if ( copyk )
- delete [] (char *)n->getKey();
- deleteItem( n->getData() );
- delete n;
- n = next;
- }
- }
- break;
- case IntKey:
- {
- QIntBucket *n=(QIntBucket *)vec[j];
- while ( n ) {
- QIntBucket *next = (QIntBucket*)n->getNext();
- deleteItem( n->getData() );
- delete n;
- n = next;
- }
- }
- break;
- case PtrKey:
- {
- QPtrBucket *n=(QPtrBucket *)vec[j];
- while ( n ) {
- QPtrBucket *next = (QPtrBucket*)n->getNext();
- deleteItem( n->getData() );
- delete n;
- n = next;
- }
- }
- break;
- }
- vec[j] = 0; // detach list of buckets
- }
- }
- if ( iterators && iterators->count() ) { // invalidate all iterators
- QGDictIterator *i = iterators->first();
- while ( i ) {
- i->curNode = 0;
- i = iterators->next();
- }
- }
-}
-
-
-/*!
- \internal
- Outputs debug statistics.
-*/
-
-void QGDict::statistics() const
-{
-#if defined(DEBUG)
- QCString line;
- line.fill( '-', 60 );
- double real, ideal;
- qDebug( "%s",line.data() );
- qDebug( "DICTIONARY STATISTICS:" );
- if ( count() == 0 ) {
- qDebug( "Empty!" );
- qDebug( "%s", line.data() );
- return;
- }
- real = 0.0;
- ideal = (float)count()/(2.0*size())*(count()+2.0*size()-1);
- uint i = 0;
- while ( i<size() ) {
- QBaseBucket *n = vec[i];
- int b = 0;
- while ( n ) { // count number of buckets
- b++;
- n = n->getNext();
- }
- real = real + (double)b * ((double)b+1.0)/2.0;
- char buf[80], *pbuf;
- if ( b > 78 )
- b = 78;
- pbuf = buf;
- while ( b-- )
- *pbuf++ = '*';
- *pbuf = '\0';
- qDebug( "%s", buf );
- i++;
- }
- qDebug( "Array size = %d", size() );
- qDebug( "# items = %d", count() );
- qDebug( "Real dist = %g", real );
- qDebug( "Rand dist = %g", ideal );
- qDebug( "Real/Rand = %g", real/ideal );
- qDebug( "%s",line.data() );
-#endif // DEBUG
-}
-
-
-/*****************************************************************************
- QGDict stream functions
- *****************************************************************************/
-#ifndef QT_NO_DATASTREAM
-QDataStream &operator>>( QDataStream &s, QGDict &dict )
-{
- return dict.read( s );
-}
-
-QDataStream &operator<<( QDataStream &s, const QGDict &dict )
-{
- return dict.write( s );
-}
-
-#if defined(_CC_DEC_) && defined(__alpha) && (__DECCXX_VER >= 50190001)
-#pragma message disable narrowptr
-#endif
-
-/*!
- \internal
- Reads a dictionary from the stream \e s.
-*/
-
-QDataStream &QGDict::read( QDataStream &s )
-{
- uint num;
- s >> num; // read number of items
- clear(); // clear dict
- while ( num-- ) { // read all items
- Item d;
- switch ( keytype ) {
- case StringKey:
- {
- QCString k;
- s >> k;
- read( s, d );
- look_string( k, d, op_insert );
- }
- break;
- case AsciiKey:
- {
- char *k;
- s >> k;
- read( s, d );
- look_ascii( k, d, op_insert );
- if ( copyk )
- delete [] k;
- }
- break;
- case IntKey:
- {
- Q_UINT32 k;
- s >> k;
- read( s, d );
- look_int( k, d, op_insert );
- }
- break;
- case PtrKey:
- {
- Q_UINT32 k;
- s >> k;
- read( s, d );
- // ### cannot insert 0 - this renders the thing
- // useless since all pointers are written as 0,
- // but hey, serializing pointers? can it be done
- // at all, ever?
- if ( k )
- look_ptr( (void *)(uintptr_t)k, d, op_insert );
- }
- break;
- }
- }
- return s;
-}
-
-/*!
- \internal
- Writes the dictionary to the stream \e s.
-*/
-
-QDataStream& QGDict::write( QDataStream &s ) const
-{
- s << count(); // write number of items
- uint i = 0;
- while ( i<size() ) {
- QBaseBucket *n = vec[i];
- while ( n ) { // write all buckets
- switch ( keytype ) {
- case StringKey:
- s << ((QCStringBucket*)n)->getKey();
- break;
- case AsciiKey:
- s << ((QAsciiBucket*)n)->getKey();
- break;
- case IntKey:
- s << (Q_UINT32)((QIntBucket*)n)->getKey();
- break;
- case PtrKey:
- s << (Q_UINT32)0; // ### cannot serialize a pointer
- break;
- }
- write( s, n->getData() ); // write data
- n = n->getNext();
- }
- i++;
- }
- return s;
-}
-#endif //QT_NO_DATASTREAM
-
-/*****************************************************************************
- QGDictIterator member functions
- *****************************************************************************/
-
-/*!
- \class QGDictIterator qgdict.h
- \brief An internal class for implementing QDictIterator and QIntDictIterator.
-
- QGDictIterator is a strictly internal class that does the heavy work for
- QDictIterator and QIntDictIterator.
-*/
-
-/*!
- \internal
- Constructs an iterator that operates on the dictionary \e d.
-*/
-
-QGDictIterator::QGDictIterator( const QGDict &d )
-{
- dict = (QGDict *)&d; // get reference to dict
- toFirst(); // set to first node
- if ( !dict->iterators ) {
- dict->iterators = new QGDItList; // create iterator list
- CHECK_PTR( dict->iterators );
- }
- dict->iterators->append( this ); // attach iterator to dict
-}
-
-/*!
- \internal
- Constructs a copy of the iterator \e it.
-*/
-
-QGDictIterator::QGDictIterator( const QGDictIterator &it )
-{
- dict = it.dict;
- curNode = it.curNode;
- curIndex = it.curIndex;
- if ( dict )
- dict->iterators->append( this ); // attach iterator to dict
-}
-
-/*!
- \internal
- Assigns a copy of the iterator \e it and returns a reference to this
- iterator.
-*/
-
-QGDictIterator &QGDictIterator::operator=( const QGDictIterator &it )
-{
- if ( dict ) // detach from old dict
- dict->iterators->removeRef( this );
- dict = it.dict;
- curNode = it.curNode;
- curIndex = it.curIndex;
- if ( dict )
- dict->iterators->append( this ); // attach to new list
- return *this;
-}
-
-/*!
- \internal
- Destroys the iterator.
-*/
-
-QGDictIterator::~QGDictIterator()
-{
- if ( dict ) // detach iterator from dict
- dict->iterators->removeRef( this );
-}
-
-
-/*!
- \internal
- Sets the iterator to point to the first item in the dictionary.
-*/
-
-QCollection::Item QGDictIterator::toFirst()
-{
- if ( !dict ) {
-#if defined(CHECK_NULL)
- qWarning( "QGDictIterator::toFirst: Dictionary has been deleted" );
-#endif
- return 0;
- }
- if ( dict->count() == 0 ) { // empty dictionary
- curNode = 0;
- return 0;
- }
- uint i = 0;
- QBaseBucket **v = dict->vec;
- while ( !(*v++) )
- i++;
- curNode = dict->vec[i];
- curIndex = i;
- return curNode->getData();
-}
-
-
-/*!
- \internal
- Moves to the next item (postfix).
-*/
-
-QCollection::Item QGDictIterator::operator()()
-{
- if ( !dict ) {
-#if defined(CHECK_NULL)
- qWarning( "QGDictIterator::operator(): Dictionary has been deleted" );
-#endif
- return 0;
- }
- if ( !curNode )
- return 0;
- QCollection::Item d = curNode->getData();
- this->operator++();
- return d;
-}
-
-/*!
- \internal
- Moves to the next item (prefix).
-*/
-
-QCollection::Item QGDictIterator::operator++()
-{
- if ( !dict ) {
-#if defined(CHECK_NULL)
- qWarning( "QGDictIterator::operator++: Dictionary has been deleted" );
-#endif
- return 0;
- }
- if ( !curNode )
- return 0;
- curNode = curNode->getNext();
- if ( !curNode ) { // no next bucket
- uint i = curIndex + 1; // look from next vec element
- QBaseBucket **v = &dict->vec[i];
- while ( i < dict->size() && !(*v++) )
- i++;
- if ( i == dict->size() ) { // nothing found
- curNode = 0;
- return 0;
- }
- curNode = dict->vec[i];
- curIndex = i;
- }
- return curNode->getData();
-}
-
-/*!
- \internal
- Moves \e jumps positions forward.
-*/
-
-QCollection::Item QGDictIterator::operator+=( uint jumps )
-{
- while ( curNode && jumps-- )
- operator++();
- return curNode ? curNode->getData() : 0;
-}
diff --git a/qtools/qgdict.h b/qtools/qgdict.h
deleted file mode 100644
index cf023fd..0000000
--- a/qtools/qgdict.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QGDict and QGDictIterator classes
-**
-** Created : 920529
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QGDICT_H
-#define QGDICT_H
-
-#ifndef QT_H
-#include "qcollection.h"
-#include "qcstring.h"
-#endif // QT_H
-
-class QGDictIterator;
-class QGDItList;
-
-
-class QBaseBucket // internal dict node
-{
-public:
- QCollection::Item getData() { return data; }
- QCollection::Item setData( QCollection::Item d ) { return data = d; }
- QBaseBucket *getNext() { return next; }
- void setNext( QBaseBucket *n) { next = n; }
-protected:
- QBaseBucket( QCollection::Item d, QBaseBucket *n ) : data(d), next(n) {}
- QCollection::Item data;
- QBaseBucket *next;
-};
-
-class QCStringBucket : public QBaseBucket
-{
-public:
- QCStringBucket( const QCString &k, QCollection::Item d, QBaseBucket *n )
- : QBaseBucket(d,n), key(k) {}
- const QCString &getKey() const { return key; }
-private:
- QCString key;
-};
-
-class QAsciiBucket : public QBaseBucket
-{
-public:
- QAsciiBucket( const char *k, QCollection::Item d, QBaseBucket *n )
- : QBaseBucket(d,n), key(k) {}
- const char *getKey() const { return key; }
-private:
- const char *key;
-};
-
-class QIntBucket : public QBaseBucket
-{
-public:
- QIntBucket( intptr_t k, QCollection::Item d, QBaseBucket *n )
- : QBaseBucket(d,n), key(k) {}
- intptr_t getKey() const { return key; }
-private:
- intptr_t key;
-};
-
-class QPtrBucket : public QBaseBucket
-{
-public:
- QPtrBucket( void *k, QCollection::Item d, QBaseBucket *n )
- : QBaseBucket(d,n), key(k) {}
- void *getKey() const { return key; }
-private:
- void *key;
-};
-
-
-class Q_EXPORT QGDict : public QCollection // generic dictionary class
-{
-public:
- uint count() const { return numItems; }
- uint size() const { return vlen; }
- QCollection::Item look_string( const QCString& key, QCollection::Item,
- int );
- QCollection::Item look_ascii( const char *key, QCollection::Item, int );
- QCollection::Item look_int( long key, QCollection::Item, int );
- QCollection::Item look_ptr( void *key, QCollection::Item, int );
-#ifndef QT_NO_DATASTREAM
- QDataStream &read( QDataStream & );
- QDataStream &write( QDataStream & ) const;
-#endif
-protected:
- enum KeyType { StringKey, AsciiKey, IntKey, PtrKey };
-
- QGDict( uint len, KeyType kt, bool cs, bool ck );
- QGDict( const QGDict & );
- ~QGDict();
-
- QGDict &operator=( const QGDict & );
-
- bool remove_string( const QCString &key, QCollection::Item item=0 );
- bool remove_ascii( const char *key, QCollection::Item item=0 );
- bool remove_int( long key, QCollection::Item item=0 );
- bool remove_ptr( void *key, QCollection::Item item=0 );
- QCollection::Item take_string( const QCString &key );
- QCollection::Item take_ascii( const char *key );
- QCollection::Item take_int( long key );
- QCollection::Item take_ptr( void *key );
-
- void clear();
- void resize( uint );
-
- int hashKeyString( const QCString & );
- int hashKeyAscii( const char * );
-
- void statistics() const;
-
-#ifndef QT_NO_DATASTREAM
- virtual QDataStream &read( QDataStream &, QCollection::Item & );
- virtual QDataStream &write( QDataStream &, QCollection::Item ) const;
-#endif
-private:
- QBaseBucket **vec;
- uint vlen;
- uint numItems;
- uint keytype : 2;
- uint cases : 1;
- uint copyk : 1;
- QGDItList *iterators;
- void unlink_common( int, QBaseBucket *, QBaseBucket * );
- QCStringBucket *unlink_string( const QCString &,
- QCollection::Item item = 0 );
- QAsciiBucket *unlink_ascii( const char *, QCollection::Item item = 0 );
- QIntBucket *unlink_int( long, QCollection::Item item = 0 );
- QPtrBucket *unlink_ptr( void *, QCollection::Item item = 0 );
- void init( uint, KeyType, bool, bool );
- friend class QGDictIterator;
-};
-
-
-class Q_EXPORT QGDictIterator // generic dictionary iterator
-{
-friend class QGDict;
-public:
- QGDictIterator( const QGDict & );
- QGDictIterator( const QGDictIterator & );
- QGDictIterator &operator=( const QGDictIterator & );
- ~QGDictIterator();
-
- QCollection::Item toFirst();
-
- QCollection::Item get() const;
- QCString getKeyString() const;
- const char *getKeyAscii() const;
- intptr_t getKeyInt() const;
- void *getKeyPtr() const;
-
- QCollection::Item operator()();
- QCollection::Item operator++();
- QCollection::Item operator+=(uint);
-
-protected:
- QGDict *dict;
-
-private:
- QBaseBucket *curNode;
- uint curIndex;
-};
-
-inline QCollection::Item QGDictIterator::get() const
-{
- return curNode ? curNode->getData() : 0;
-}
-
-inline QCString QGDictIterator::getKeyString() const
-{
- return curNode ? ((QCStringBucket*)curNode)->getKey() : QCString();
-}
-
-inline const char *QGDictIterator::getKeyAscii() const
-{
- return curNode ? ((QAsciiBucket*)curNode)->getKey() : 0;
-}
-
-inline intptr_t QGDictIterator::getKeyInt() const
-{
- return curNode ? ((QIntBucket*)curNode)->getKey() : 0;
-}
-
-inline void *QGDictIterator::getKeyPtr() const
-{
- return curNode ? ((QPtrBucket*)curNode)->getKey() : 0;
-}
-
-
-#endif // QGDICT_H
diff --git a/qtools/qgeneric.h b/qtools/qgeneric.h
deleted file mode 100644
index c2892a0..0000000
--- a/qtools/qgeneric.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/****************************************************************************
-**
-**
-** Macros for pasting tokens; utilized by our generic classes
-**
-** Created : 920529
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QGENERIC_H
-#define QGENERIC_H
-
-#error "do not include qgeneric.h any more"
-
-#endif // QGENERIC_H
diff --git a/qtools/qglist.cpp b/qtools/qglist.cpp
deleted file mode 100644
index 878aa04..0000000
--- a/qtools/qglist.cpp
+++ /dev/null
@@ -1,1203 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QGList and QGListIterator classes
-**
-** Created : 920624
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglist.h"
-#include "qdatastream.h"
-
-
-// NOT REVISED
-/*!
- \class QLNode qglist.h
- \brief The QLNode class is an internal class for the QList template collection.
-
- QLNode is a doubly linked list node; it has three pointers:
- <ol>
- <li> Pointer to the previous node.
- <li> Pointer to the next node.
- <li> Pointer to the actual data.
- </ol>
-
- Sometimes it might be practical to have direct access to the list nodes
- in a QList, but it is seldom required.
-
- \warning Be very careful if you want to access the list nodes. The heap
- can easily get corrupted if you make a mistake.
-
- \sa QList::currentNode(), QList::removeNode(), QList::takeNode()
-*/
-
-/*!
- \fn QCollection::Item QLNode::getData()
- Returns a pointer (\c void*) to the actual data in the list node.
-*/
-
-
-/*!
- \class QGList qglist.h
- \brief The QGList class is an internal class for implementing Qt collection classes.
-
- QGList is a strictly internal class that acts as a base class for several
- \link collection.html collection classes\endlink; QList, QQueue and
- QStack.
-
- QGList has some virtual functions that can be reimplemented to customize
- the subclasses.
- <ul>
- <li> compareItems() compares two collection/list items.
- <li> read() reads a collection/list item from a QDataStream.
- <li> write() writes a collection/list item to a QDataStream.
- </ul>
- Normally, you do not have to reimplement any of these functions.
- If you still want to reimplement them, see the QStrList class (qstrlist.h),
- which is a good example.
-*/
-
-
-/*****************************************************************************
- Default implementation of virtual functions
- *****************************************************************************/
-
-/*!
- This virtual function compares two list items.
-
- Returns:
- <ul>
- <li> 0 if \e item1 == \e item2
- <li> non-zero if \e item1 != \e item2
- </ul>
-
- This function returns \e int rather than \e bool so that
- reimplementations can return three values and use it to sort by:
-
- <ul>
- <li> 0 if \e item1 == \e item2
- <li> \> 0 (positive integer) if \e item1 \> \e item2
- <li> \< 0 (negative integer) if \e item1 \< \e item2
- </ul>
-
- The QList::inSort() function requires that compareItems() is implemented
- as described here.
-
- This function should not modify the list because some const functions
- call compareItems().
-
- The default implementation compares the pointers:
- \code
-
- \endcode
-*/
-
-int QGList::compareItems( QCollection::Item item1, QCollection::Item item2 )
-{
- return item1 != item2; // compare pointers
-}
-
-#ifndef QT_NO_DATASTREAM
-/*!
- Reads a collection/list item from the stream \a s and returns a reference
- to the stream.
-
- The default implementation sets \a item to 0.
-
- \sa write()
-*/
-
-QDataStream &QGList::read( QDataStream &s, QCollection::Item &item )
-{
- item = 0;
- return s;
-}
-
-/*!
- Writes a collection/list item to the stream \a s and returns a reference
- to the stream.
-
- The default implementation does nothing.
-
- \sa read()
-*/
-
-QDataStream &QGList::write( QDataStream &s, QCollection::Item ) const
-{
- return s;
-}
-#endif // QT_NO_DATASTREAM
-
-/*****************************************************************************
- QGList member functions
- *****************************************************************************/
-
-/*!
- \internal
- Constructs an empty list.
-*/
-
-QGList::QGList()
-{
- firstNode = lastNode = curNode = 0; // initialize list
- numNodes = 0;
- curIndex = -1;
- iterators = 0; // initialize iterator list
-}
-
-/*!
- \internal
- Constructs a copy of \e list.
-*/
-
-QGList::QGList( const QGList & list )
- : QCollection( list )
-{
- firstNode = lastNode = curNode = 0; // initialize list
- numNodes = 0;
- curIndex = -1;
- iterators = 0; // initialize iterator list
- QLNode *n = list.firstNode;
- while ( n ) { // copy all items from list
- append( n->data );
- n = n->next;
- }
-}
-
-/*!
- \internal
- Removes all items from the list and destroys the list.
-*/
-
-QGList::~QGList()
-{
- clear();
- if ( !iterators ) // no iterators for this list
- return;
- QGListIterator *i = (QGListIterator*)iterators->first();
- while ( i ) { // notify all iterators that
- i->list = 0; // this list is deleted
- i->curNode = 0;
- i = (QGListIterator*)iterators->next();
- }
- delete iterators;
-}
-
-
-/*!
- \internal
- Assigns \e list to this list.
-*/
-
-QGList& QGList::operator=( const QGList &list )
-{
- clear();
- if ( list.count() > 0 ) {
- QLNode *n = list.firstNode;
- while ( n ) { // copy all items from list
- append( n->data );
- n = n->next;
- }
- curNode = firstNode;
- curIndex = 0;
- }
- return *this;
-}
-
-/*!
- Compares this list with \a list. Returns TRUE if the lists
- contain the same data, else FALSE.
-*/
-
-bool QGList::operator==( const QGList &list ) const
-{
- if ( count() != list.count() )
- return FALSE;
-
- if ( count() == 0 )
- return TRUE;
-
- QLNode *n1 = firstNode;
- QLNode *n2 = list.firstNode;
- while ( n1 && n2 ) {
- // should be mutable
- if ( ( (QGList*)this )->compareItems( n1->data, n2->data ) != 0 )
- return FALSE;
- n1 = n1->next;
- n2 = n2->next;
- }
-
- return TRUE;
-}
-
-/*!
- \fn uint QGList::count() const
- \internal
- Returns the number of items in the list.
-*/
-
-
-/*!
- \internal
- Returns the node at position \e index. Sets this node to current.
-*/
-
-QLNode *QGList::locate( uint index )
-{
- if ( index == (uint)curIndex ) // current node ?
- return curNode;
- if ( !curNode && firstNode ) { // set current node
- curNode = firstNode;
- curIndex = 0;
- }
- QLNode *node;
- int distance = index - curIndex; // node distance to cur node
- bool forward; // direction to traverse
-
- if ( index >= numNodes ) {
-#if defined(CHECK_RANGE)
- qWarning( "QGList::locate: Index %d out of range", index );
-#endif
- return 0;
- }
-
- if ( distance < 0 )
- distance = -distance;
- if ( (uint)distance < index && (uint)distance < numNodes - index ) {
- node = curNode; // start from current node
- forward = index > (uint)curIndex;
- } else if ( index < numNodes - index ) { // start from first node
- node = firstNode;
- distance = index;
- forward = TRUE;
- } else { // start from last node
- node = lastNode;
- distance = numNodes - index - 1;
- if ( distance < 0 )
- distance = 0;
- forward = FALSE;
- }
- if ( forward ) { // now run through nodes
- while ( distance-- )
- node = node->next;
- } else {
- while ( distance-- )
- node = node->prev;
- }
- curIndex = index; // must update index
- return curNode = node;
-}
-
-
-/*!
- \internal
- Inserts an item at its sorted position in the list.
-*/
-
-void QGList::inSort( QCollection::Item d )
-{
- int index = 0;
- QLNode *n = firstNode;
- while ( n && compareItems(n->data,d) < 0 ){ // find position in list
- n = n->next;
- index++;
- }
- insertAt( index, d );
-}
-
-
-/*!
- \internal
- Inserts an item at the start of the list.
-*/
-
-void QGList::prepend( QCollection::Item d )
-{
- QLNode *n = new QLNode( newItem(d) );
- CHECK_PTR( n );
- n->prev = 0;
- if ( (n->next = firstNode) ) // list is not empty
- firstNode->prev = n;
- else // initialize list
- lastNode = n;
- firstNode = curNode = n; // curNode affected
- numNodes++;
- curIndex = 0;
-}
-
-
-/*!
- \internal
- Inserts an item at the end of the list.
-*/
-
-void QGList::append( QCollection::Item d )
-{
- QLNode *n = new QLNode( newItem(d) );
- CHECK_PTR( n );
- n->next = 0;
- if ( (n->prev = lastNode) ) // list is not empty
- lastNode->next = n;
- else // initialize list
- firstNode = n;
- lastNode = curNode = n; // curNode affected
- curIndex = numNodes;
- numNodes++;
-}
-
-
-/*!
- \internal
- Inserts an item at position \e index in the list.
-*/
-
-bool QGList::insertAt( uint index, QCollection::Item d )
-{
- if ( index == 0 ) { // insert at head of list
- prepend( d );
- return TRUE;
- } else if ( index == numNodes ) { // append at tail of list
- append( d );
- return TRUE;
- }
- QLNode *nextNode = locate( index );
- if ( !nextNode ) // illegal position
- return FALSE;
- QLNode *prevNode = nextNode->prev;
- QLNode *n = new QLNode( newItem(d) );
- CHECK_PTR( n );
- nextNode->prev = n;
- prevNode->next = n;
- n->prev = prevNode; // link new node into list
- n->next = nextNode;
- curNode = n; // curIndex set by locate()
- numNodes++;
- return TRUE;
-}
-
-
-/*!
- \internal
- Relinks node \e n and makes it the first node in the list.
-*/
-
-void QGList::relinkNode( QLNode *n )
-{
- if ( n == firstNode ) // already first
- return;
- curNode = n;
- unlink();
- n->prev = 0;
- if ( (n->next = firstNode) ) // list is not empty
- firstNode->prev = n;
- else // initialize list
- lastNode = n;
- firstNode = curNode = n; // curNode affected
- numNodes++;
- curIndex = 0;
-}
-
-
-/*!
- \internal
- Unlinks the current list node and returns a pointer to this node.
-*/
-
-QLNode *QGList::unlink()
-{
- if ( curNode == 0 ) // null current node
- return 0;
- QLNode *n = curNode; // unlink this node
- if ( n == firstNode ) { // removing first node ?
- if ( (firstNode = n->next) ) {
- firstNode->prev = 0;
- } else {
- lastNode = curNode = 0; // list becomes empty
- curIndex = -1;
- }
- } else {
- if ( n == lastNode ) { // removing last node ?
- lastNode = n->prev;
- lastNode->next = 0;
- } else { // neither last nor first node
- n->prev->next = n->next;
- n->next->prev = n->prev;
- }
- }
- if ( n->next ) { // change current node
- curNode = n->next;
- } else if ( n->prev ) {
- curNode = n->prev;
- curIndex--;
- }
- if ( iterators && iterators->count() ) { // update iterators
- QGListIterator *i = (QGListIterator*)iterators->first();
- while ( i ) { // fix all iterators that
- if ( i->curNode == n ) // refers to pending node
- i->curNode = curNode;
- i = (QGListIterator*)iterators->next();
- }
- }
- numNodes--;
- return n;
-}
-
-
-/*!
- \internal
- Removes the node \e n from the list.
-*/
-
-bool QGList::removeNode( QLNode *n )
-{
-#if defined(CHECK_NULL)
- if ( n == 0 || (n->prev && n->prev->next != n) ||
- (n->next && n->next->prev != n) ) {
- qWarning( "QGList::removeNode: Corrupted node" );
- return FALSE;
- }
-#endif
- curNode = n;
- unlink(); // unlink node
- deleteItem( n->data ); // deallocate this node
- delete n;
- curNode = firstNode;
- curIndex = curNode ? 0 : -1;
- return TRUE;
-}
-
-/*!
- \internal
- Removes the item \e d from the list. Uses compareItems() to find the item.
-*/
-
-bool QGList::remove( QCollection::Item d )
-{
- if ( d ) { // find the item
- if ( find(d) == -1 )
- return FALSE;
- }
- QLNode *n = unlink(); // unlink node
- if ( !n )
- return FALSE;
- deleteItem( n->data ); // deallocate this node
- delete n;
- return TRUE;
-}
-
-/*!
- \internal
- Removes the item \e d from the list.
-*/
-
-bool QGList::removeRef( QCollection::Item d )
-{
- if ( d ) { // find the item
- if ( findRef(d) == -1 )
- return FALSE;
- }
- QLNode *n = unlink(); // unlink node
- if ( !n )
- return FALSE;
- deleteItem( n->data ); // deallocate this node
- delete n;
- return TRUE;
-}
-
-/*!
- \fn bool QGList::removeFirst()
- \internal
- Removes the first item in the list.
-*/
-
-/*!
- \fn bool QGList::removeLast()
- \internal
- Removes the last item in the list.
-*/
-
-/*!
- \internal
- Removes the item at position \e index from the list.
-*/
-
-bool QGList::removeAt( uint index )
-{
- if ( !locate(index) )
- return FALSE;
- QLNode *n = unlink(); // unlink node
- if ( !n )
- return FALSE;
- deleteItem( n->data ); // deallocate this node
- delete n;
- return TRUE;
-}
-
-
-/*!
- \internal
- Takes the node \e n out of the list.
-*/
-
-QCollection::Item QGList::takeNode( QLNode *n )
-{
-#if defined(CHECK_NULL)
- if ( n == 0 || (n->prev && n->prev->next != n) ||
- (n->next && n->next->prev != n) ) {
- qWarning( "QGList::takeNode: Corrupted node" );
- return 0;
- }
-#endif
- curNode = n;
- unlink(); // unlink node
- Item d = n->data;
- delete n; // delete the node, not data
- curNode = firstNode;
- curIndex = curNode ? 0 : -1;
- return d;
-}
-
-/*!
- \internal
- Takes the current item out of the list.
-*/
-
-QCollection::Item QGList::take()
-{
- QLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n; // delete node, keep contents
- return d;
-}
-
-/*!
- \internal
- Takes the item at position \e index out of the list.
-*/
-
-QCollection::Item QGList::takeAt( uint index )
-{
- if ( !locate(index) )
- return 0;
- QLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n; // delete node, keep contents
- return d;
-}
-
-/*!
- \internal
- Takes the first item out of the list.
-*/
-
-QCollection::Item QGList::takeFirst()
-{
- first();
- QLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n;
- return d;
-}
-
-/*!
- \internal
- Takes the last item out of the list.
-*/
-
-QCollection::Item QGList::takeLast()
-{
- last();
- QLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n;
- return d;
-}
-
-
-/*!
- \internal
- Removes all items from the list.
-*/
-
-void QGList::clear()
-{
- QLNode *n = firstNode;
-
- firstNode = lastNode = curNode = 0; // initialize list
- numNodes = 0;
- curIndex = -1;
-
- if ( iterators && iterators->count() ) {
- QGListIterator *i = (QGListIterator*)iterators->first();
- while ( i ) { // notify all iterators that
- i->curNode = 0; // this list is empty
- i = (QGListIterator*)iterators->next();
- }
- }
-
- QLNode *prevNode;
- while ( n ) { // for all nodes ...
- deleteItem( n->data ); // deallocate data
- prevNode = n;
- n = n->next;
- delete prevNode; // deallocate node
- }
-}
-
-
-/*!
- \internal
- Finds an item in the list.
-*/
-
-int QGList::findRef( QCollection::Item d, bool fromStart )
-{
- QLNode *n;
- int index;
- if ( fromStart ) { // start from first node
- n = firstNode;
- index = 0;
- } else { // start from current node
- n = curNode;
- index = curIndex;
- }
- while ( n && n->data != d ) { // find exact match
- n = n->next;
- index++;
- }
- curNode = n;
- curIndex = n ? index : -1;
- return curIndex; // return position of item
-}
-
-/*!
- \internal
- Finds an item in the list. Uses compareItems().
-*/
-
-int QGList::find( QCollection::Item d, bool fromStart )
-{
- QLNode *n;
- int index;
- if ( fromStart ) { // start from first node
- n = firstNode;
- index = 0;
- } else { // start from current node
- n = curNode;
- index = curIndex;
- }
- while ( n && compareItems(n->data,d) ){ // find equal match
- n = n->next;
- index++;
- }
- curNode = n;
- curIndex = n ? index : -1;
- return curIndex; // return position of item
-}
-
-
-/*!
- \internal
- Counts the number an item occurs in the list.
-*/
-
-uint QGList::containsRef( QCollection::Item d ) const
-{
- QLNode *n = firstNode;
- uint count = 0;
- while ( n ) { // for all nodes...
- if ( n->data == d ) // count # exact matches
- count++;
- n = n->next;
- }
- return count;
-}
-
-/*!
- \internal
- Counts the number an item occurs in the list. Uses compareItems().
-*/
-
-uint QGList::contains( QCollection::Item d ) const
-{
- QLNode *n = firstNode;
- uint count = 0;
- QGList *that = (QGList*)this; // mutable for compareItems()
- while ( n ) { // for all nodes...
- if ( !that->compareItems(n->data,d) ) // count # equal matches
- count++;
- n = n->next;
- }
- return count;
-}
-
-
-/*!
- \fn QCollection::Item QGList::at( uint index )
- \internal
- Sets the item at position \e index to the current item.
-*/
-
-/*!
- \fn int QGList::at() const
- \internal
- Returns the current index.
-*/
-
-/*!
- \fn QLNode *QGList::currentNode() const
- \internal
- Returns the current node.
-*/
-
-/*!
- \fn QCollection::Item QGList::get() const
- \internal
- Returns the current item.
-*/
-
-/*!
- \fn QCollection::Item QGList::cfirst() const
- \internal
- Returns the first item in the list.
-*/
-
-/*!
- \fn QCollection::Item QGList::clast() const
- \internal
- Returns the last item in the list.
-*/
-
-
-/*!
- \internal
- Returns the first list item. Sets this to current.
-*/
-
-QCollection::Item QGList::first()
-{
- if ( firstNode ) {
- curIndex = 0;
- return (curNode=firstNode)->data;
- }
- return 0;
-}
-
-/*!
- \internal
- Returns the last list item. Sets this to current.
-*/
-
-QCollection::Item QGList::last()
-{
- if ( lastNode ) {
- curIndex = numNodes-1;
- return (curNode=lastNode)->data;
- }
- return 0;
-}
-
-/*!
- \internal
- Returns the next list item (after current). Sets this to current.
-*/
-
-QCollection::Item QGList::next()
-{
- if ( curNode ) {
- if ( curNode->next ) {
- curIndex++;
- curNode = curNode->next;
- return curNode->data;
- }
- curIndex = -1;
- curNode = 0;
- }
- return 0;
-}
-
-/*!
- \internal
- Returns the previous list item (before current). Sets this to current.
-*/
-
-QCollection::Item QGList::prev()
-{
- if ( curNode ) {
- if ( curNode->prev ) {
- curIndex--;
- curNode = curNode->prev;
- return curNode->data;
- }
- curIndex = -1;
- curNode = 0;
- }
- return 0;
-}
-
-
-void QGList::heapSortPushDown( QCollection::Item* heap, int first, int last )
-{
- int r = first;
- while( r <= last/2 ) {
- // Node r has only one child ?
- if ( last == 2*r ) {
- // Need for swapping ?
- if ( compareItems( heap[r], heap[ 2*r ] ) > 0 ) {
- QCollection::Item tmp = heap[r];
- heap[ r ] = heap[ 2*r ];
- heap[ 2*r ] = tmp;
- }
- // That's it ...
- r = last;
- } else {
- // Node has two children
- if ( compareItems( heap[r], heap[ 2*r ] ) > 0 &&
- compareItems( heap[ 2*r ], heap[ 2*r+1 ] ) <= 0 ) {
- // Swap with left child
- QCollection::Item tmp = heap[r];
- heap[ r ] = heap[ 2*r ];
- heap[ 2*r ] = tmp;
- r *= 2;
- } else if ( compareItems( heap[r], heap[ 2*r+1 ] ) > 0 &&
- compareItems( heap[ 2*r+1 ], heap[ 2*r ] ) < 0 ) {
- // Swap with right child
- QCollection::Item tmp = heap[r];
- heap[ r ] = heap[ 2*r+1 ];
- heap[ 2*r+1 ] = tmp;
- r = 2*r+1;
- } else {
- // We are done
- r = last;
- }
- }
- }
-}
-
-
-/*! Sorts the list by the result of the virtual compareItems() function.
-
- The Heap-Sort algorithm is used for sorting. It sorts n items with
- O(n*log n) compares. This is the asymptotic optimal solution of the
- sorting problem.
-*/
-
-void QGList::sort()
-{
- uint n = count();
- if ( n < 2 )
- return;
-
- // Create the heap
- QCollection::Item* realheap = new QCollection::Item[ n ];
- // Wow, what a fake. But I want the heap to be indexed as 1...n
- QCollection::Item* heap = realheap - 1;
- int size = 0;
- QLNode* insert = firstNode;
- for( ; insert != 0; insert = insert->next ) {
- heap[++size] = insert->data;
- int i = size;
- while( i > 1 && compareItems( heap[i], heap[ i / 2 ] ) < 0 ) {
- QCollection::Item tmp = heap[ i ];
- heap[ i ] = heap[ i/2 ];
- heap[ i/2 ] = tmp;
- i /= 2;
- }
- }
-
- insert = firstNode;
- // Now do the sorting
- for ( int i = n; i > 0; i-- ) {
- insert->data = heap[1];
- insert = insert->next;
- if ( i > 1 ) {
- heap[1] = heap[i];
- heapSortPushDown( heap, 1, i - 1 );
- }
- }
-
- delete [] realheap;
-}
-
-
-/*****************************************************************************
- QGList stream functions
- *****************************************************************************/
-
-#ifndef QT_NO_DATASTREAM
-QDataStream &operator>>( QDataStream &s, QGList &list )
-{ // read list
- return list.read( s );
-}
-
-QDataStream &operator<<( QDataStream &s, const QGList &list )
-{ // write list
- return list.write( s );
-}
-
-/*!
- \internal
- Reads a list from the stream \e s.
-*/
-
-QDataStream &QGList::read( QDataStream &s )
-{
- uint num;
- s >> num; // read number of items
- clear(); // clear list
- while ( num-- ) { // read all items
- Item d;
- read( s, d );
- CHECK_PTR( d );
- if ( !d ) // no memory
- break;
- QLNode *n = new QLNode( d );
- CHECK_PTR( n );
- if ( !n ) // no memory
- break;
- n->next = 0;
- if ( (n->prev = lastNode) ) // list is not empty
- lastNode->next = n;
- else // initialize list
- firstNode = n;
- lastNode = n;
- numNodes++;
- }
- curNode = firstNode;
- curIndex = curNode ? 0 : -1;
- return s;
-}
-
-/*!
- \internal
- Writes the list to the stream \e s.
-*/
-
-QDataStream &QGList::write( QDataStream &s ) const
-{
- s << count(); // write number of items
- QLNode *n = firstNode;
- while ( n ) { // write all items
- write( s, n->data );
- n = n->next;
- }
- return s;
-}
-
-#endif // QT_NO_DATASTREAM
-
-/*****************************************************************************
- QGListIterator member functions
- *****************************************************************************/
-
-/*!
- \class QGListIterator qglist.h
- \brief The QGListIterator class is an internal class for implementing QListIterator.
-
- QGListIterator is a strictly internal class that does the heavy work for
- QListIterator.
-*/
-
-/*!
- \internal
- Constructs an iterator that operates on the list \e l.
-*/
-
-QGListIterator::QGListIterator( const QGList &l )
-{
- list = (QGList *)&l; // get reference to list
- curNode = list->firstNode; // set to first node
- if ( !list->iterators ) {
- list->iterators = new QGList; // create iterator list
- CHECK_PTR( list->iterators );
- }
- list->iterators->append( this ); // attach iterator to list
-}
-
-/*!
- \internal
- Constructs a copy of the iterator \e it.
-*/
-
-QGListIterator::QGListIterator( const QGListIterator &it )
-{
- list = it.list;
- curNode = it.curNode;
- if ( list )
- list->iterators->append( this ); // attach iterator to list
-}
-
-/*!
- \internal
- Assigns a copy of the iterator \e it and returns a reference to this
- iterator.
-*/
-
-QGListIterator &QGListIterator::operator=( const QGListIterator &it )
-{
- if ( list ) // detach from old list
- list->iterators->removeRef( this );
- list = it.list;
- curNode = it.curNode;
- if ( list )
- list->iterators->append( this ); // attach to new list
- return *this;
-}
-
-/*!
- \internal
- Destroys the iterator.
-*/
-
-QGListIterator::~QGListIterator()
-{
- if ( list ) // detach iterator from list
- list->iterators->removeRef(this);
-}
-
-
-/*!
- \fn bool QGListIterator::atFirst() const
- \internal
- Returns TRUE if the iterator points to the first item, otherwise FALSE.
-*/
-
-/*!
- \fn bool QGListIterator::atLast() const
- \internal
- Returns TRUE if the iterator points to the last item, otherwise FALSE.
-*/
-
-
-/*!
- \internal
- Sets the list iterator to point to the first item in the list.
-*/
-
-QCollection::Item QGListIterator::toFirst()
-{
- if ( !list ) {
-#if defined(CHECK_NULL)
- qWarning( "QGListIterator::toFirst: List has been deleted" );
-#endif
- return 0;
- }
- return list->firstNode ? (curNode = list->firstNode)->getData() : 0;
-}
-
-/*!
- \internal
- Sets the list iterator to point to the last item in the list.
-*/
-
-QCollection::Item QGListIterator::toLast()
-{
- if ( !list ) {
-#if defined(CHECK_NULL)
- qWarning( "QGListIterator::toLast: List has been deleted" );
-#endif
- return 0;
- }
- return list->lastNode ? (curNode = list->lastNode)->getData() : 0;
-}
-
-
-/*!
- \fn QCollection::Item QGListIterator::get() const
- \internal
- Returns the iterator item.
-*/
-
-
-/*!
- \internal
- Moves to the next item (postfix).
-*/
-
-QCollection::Item QGListIterator::operator()()
-{
- if ( !curNode )
- return 0;
- QCollection::Item d = curNode->getData();
- curNode = curNode->next;
- return d;
-}
-
-/*!
- \internal
- Moves to the next item (prefix).
-*/
-
-QCollection::Item QGListIterator::operator++()
-{
- if ( !curNode )
- return 0;
- curNode = curNode->next;
- return curNode ? curNode->getData() : 0;
-}
-
-/*!
- \internal
- Moves \e jumps positions forward.
-*/
-
-QCollection::Item QGListIterator::operator+=( uint jumps )
-{
- while ( curNode && jumps-- )
- curNode = curNode->next;
- return curNode ? curNode->getData() : 0;
-}
-
-/*!
- \internal
- Moves to the previous item (prefix).
-*/
-
-QCollection::Item QGListIterator::operator--()
-{
- if ( !curNode )
- return 0;
- curNode = curNode->prev;
- return curNode ? curNode->getData() : 0;
-}
-
-/*!
- \internal
- Moves \e jumps positions backward.
-*/
-
-QCollection::Item QGListIterator::operator-=( uint jumps )
-{
- while ( curNode && jumps-- )
- curNode = curNode->prev;
- return curNode ? curNode->getData() : 0;
-}
diff --git a/qtools/qglist.h b/qtools/qglist.h
deleted file mode 100644
index 0f30594..0000000
--- a/qtools/qglist.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QGList and QGListIterator classes
-**
-** Created : 920624
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QGLIST_H
-#define QGLIST_H
-
-#ifndef QT_H
-#include "qcollection.h"
-#endif // QT_H
-
-
-/*****************************************************************************
- QLNode class (internal doubly linked list node)
- *****************************************************************************/
-
-class Q_EXPORT QLNode
-{
-friend class QGList;
-friend class QGListIterator;
-public:
- QCollection::Item getData() { return data; }
-private:
- QCollection::Item data;
- QLNode *prev;
- QLNode *next;
- QLNode( QCollection::Item d ) { data = d; }
-};
-
-
-/*****************************************************************************
- QGList class
- *****************************************************************************/
-
-class Q_EXPORT QGList : public QCollection // doubly linked generic list
-{
-friend class QGListIterator;
-public:
- uint count() const; // return number of nodes
-
-#ifndef QT_NO_DATASTREAM
- QDataStream &read( QDataStream & ); // read list from stream
- QDataStream &write( QDataStream & ) const; // write list to stream
-#endif
-protected:
- QGList(); // create empty list
- QGList( const QGList & ); // make copy of other list
- virtual ~QGList();
-
- QGList &operator=( const QGList & ); // assign from other list
- bool operator==( const QGList& ) const;
-
- void inSort( QCollection::Item ); // add item sorted in list
- void append( QCollection::Item ); // add item at end of list
- bool insertAt( uint index, QCollection::Item ); // add item at i'th position
- void relinkNode( QLNode * ); // relink as first item
- bool removeNode( QLNode * ); // remove node
- bool remove( QCollection::Item = 0 ); // remove item (0=current)
- bool removeRef( QCollection::Item = 0 ); // remove item (0=current)
- bool removeFirst(); // remove first item
- bool removeLast(); // remove last item
- bool removeAt( uint index ); // remove item at i'th position
- QCollection::Item takeNode( QLNode * ); // take out node
- QCollection::Item take(); // take out current item
- QCollection::Item takeAt( uint index ); // take out item at i'th pos
- QCollection::Item takeFirst(); // take out first item
- QCollection::Item takeLast(); // take out last item
-
- void sort(); // sort all items;
- void clear(); // remove all items
-
- int findRef( QCollection::Item, bool = TRUE ); // find exact item in list
- int find( QCollection::Item, bool = TRUE ); // find equal item in list
-
- uint containsRef( QCollection::Item ) const; // get number of exact matches
- uint contains( QCollection::Item ) const; // get number of equal matches
-
- QCollection::Item at( uint index ); // access item at i'th pos
- int at() const; // get current index
- QLNode *currentNode() const; // get current node
-
- QCollection::Item get() const; // get current item
-
- QCollection::Item cfirst() const; // get ptr to first list item
- QCollection::Item clast() const; // get ptr to last list item
- QCollection::Item first(); // set first item in list curr
- QCollection::Item last(); // set last item in list curr
- QCollection::Item next(); // set next item in list curr
- QCollection::Item prev(); // set prev item in list curr
-
- virtual int compareItems( QCollection::Item, QCollection::Item );
-
-#ifndef QT_NO_DATASTREAM
- virtual QDataStream &read( QDataStream &, QCollection::Item & );
- virtual QDataStream &write( QDataStream &, QCollection::Item ) const;
-#endif
-private:
- void prepend( QCollection::Item ); // add item at start of list
-
- void heapSortPushDown( QCollection::Item* heap, int first, int last );
-
- QLNode *firstNode; // first node
- QLNode *lastNode; // last node
- QLNode *curNode; // current node
- int curIndex; // current index
- uint numNodes; // number of nodes
- QGList *iterators; // list of iterators
-
- QLNode *locate( uint ); // get node at i'th pos
- QLNode *unlink(); // unlink node
-};
-
-
-inline uint QGList::count() const
-{
- return numNodes;
-}
-
-inline bool QGList::removeFirst()
-{
- first();
- return remove();
-}
-
-inline bool QGList::removeLast()
-{
- last();
- return remove();
-}
-
-inline int QGList::at() const
-{
- return curIndex;
-}
-
-inline QCollection::Item QGList::at( uint index )
-{
- QLNode *n = locate( index );
- return n ? n->data : 0;
-}
-
-inline QLNode *QGList::currentNode() const
-{
- return curNode;
-}
-
-inline QCollection::Item QGList::get() const
-{
- return curNode ? curNode->data : 0;
-}
-
-inline QCollection::Item QGList::cfirst() const
-{
- return firstNode ? firstNode->data : 0;
-}
-
-inline QCollection::Item QGList::clast() const
-{
- return lastNode ? lastNode->data : 0;
-}
-
-
-/*****************************************************************************
- QGList stream functions
- *****************************************************************************/
-
-#ifndef QT_NO_DATASTREAM
-Q_EXPORT QDataStream &operator>>( QDataStream &, QGList & );
-Q_EXPORT QDataStream &operator<<( QDataStream &, const QGList & );
-#endif
-
-/*****************************************************************************
- QGListIterator class
- *****************************************************************************/
-
-class Q_EXPORT QGListIterator // QGList iterator
-{
-friend class QGList;
-protected:
- QGListIterator( const QGList & );
- QGListIterator( const QGListIterator & );
- QGListIterator &operator=( const QGListIterator & );
- ~QGListIterator();
-
- bool atFirst() const; // test if at first item
- bool atLast() const; // test if at last item
- QCollection::Item toFirst(); // move to first item
- QCollection::Item toLast(); // move to last item
-
- QCollection::Item get() const; // get current item
- QCollection::Item operator()(); // get current and move to next
- QCollection::Item operator++(); // move to next item (prefix)
- QCollection::Item operator+=(uint); // move n positions forward
- QCollection::Item operator--(); // move to prev item (prefix)
- QCollection::Item operator-=(uint); // move n positions backward
-
-protected:
- QGList *list; // reference to list
-
-private:
- QLNode *curNode; // current node in list
-};
-
-
-inline bool QGListIterator::atFirst() const
-{
- return curNode == list->firstNode;
-}
-
-inline bool QGListIterator::atLast() const
-{
- return curNode == list->lastNode;
-}
-
-inline QCollection::Item QGListIterator::get() const
-{
- return curNode ? curNode->data : 0;
-}
-
-
-#endif // QGLIST_H
diff --git a/qtools/qglobal.cpp b/qtools/qglobal.cpp
deleted file mode 100644
index 444cb3b..0000000
--- a/qtools/qglobal.cpp
+++ /dev/null
@@ -1,685 +0,0 @@
-/****************************************************************************
-**
-**
-** Global functions
-**
-** Created : 920604
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qglobal.h"
-#include "qasciidict.h"
-#include "qstring.h"
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-// NOT REVISED
-
-/*!
- \relates QApplication
- Returns the Qt version number for the library, typically "1.30"
- or "2.1.0".
-*/
-
-const char *qVersion()
-{
- return QT_VERSION_STR;
-}
-
-
-/*****************************************************************************
- System detection routines
- *****************************************************************************/
-
-static bool si_alreadyDone = FALSE;
-static int si_wordSize;
-static bool si_bigEndian;
-
-/*!
- \relates QApplication
- Obtains information about the system.
-
- The system's word size in bits (typically 32) is returned in \e *wordSize.
- The \e *bigEndian is set to TRUE if this is a big-endian machine,
- or to FALSE if this is a little-endian machine.
-
- This function calls qFatal() with a message if the computer is truly weird
- (i.e. different endianess for 16 bit and 32 bit integers).
-*/
-
-bool qSysInfo( int *wordSize, bool *bigEndian )
-{
-#if defined(CHECK_NULL)
- ASSERT( wordSize != 0 );
- ASSERT( bigEndian != 0 );
-#endif
-
- if ( si_alreadyDone ) { // run it only once
- *wordSize = si_wordSize;
- *bigEndian = si_bigEndian;
- return TRUE;
- }
- si_alreadyDone = TRUE;
-
- si_wordSize = 0;
- uint n = (uint)(~0);
- while ( n ) { // detect word size
- si_wordSize++;
- n /= 2;
- }
- *wordSize = si_wordSize;
-
- if ( *wordSize != 64 &&
- *wordSize != 32 &&
- *wordSize != 16 ) { // word size: 16, 32 or 64
-#if defined(CHECK_RANGE)
- qFatal( "qSysInfo: Unsupported system word size %d", *wordSize );
-#endif
- return FALSE;
- }
- if ( sizeof(Q_INT8) != 1 || sizeof(Q_INT16) != 2 || sizeof(Q_INT32) != 4 ||
- sizeof(float) != 4 || sizeof(double) != 8 ) {
-#if defined(CHECK_RANGE)
- qFatal( "qSysInfo: Unsupported system data type size" );
-#endif
- return FALSE;
- }
-
- bool be16, be32; // determine byte ordering
- short ns = 0x1234;
- int nl = 0x12345678;
-
- unsigned char *p = (unsigned char *)(&ns); // 16-bit integer
- be16 = *p == 0x12;
-
- p = (unsigned char *)(&nl); // 32-bit integer
- if ( p[0] == 0x12 && p[1] == 0x34 && p[2] == 0x56 && p[3] == 0x78 )
- be32 = TRUE;
- else
- if ( p[0] == 0x78 && p[1] == 0x56 && p[2] == 0x34 && p[3] == 0x12 )
- be32 = FALSE;
- else
- be32 = !be16;
-
- if ( be16 != be32 ) { // strange machine!
-#if defined(CHECK_RANGE)
- qFatal( "qSysInfo: Inconsistent system byte order" );
-#endif
- return FALSE;
- }
-
- *bigEndian = si_bigEndian = be32;
- return TRUE;
-}
-
-
-/*****************************************************************************
- Debug output routines
- *****************************************************************************/
-
-/*!
- \fn void qDebug( const char *msg, ... )
-
- \relates QApplication
- Prints a debug message, or calls the message handler (if it has been
- installed).
-
- This function takes a format string and a list of arguments, similar to
- the C printf() function.
-
- Example:
- \code
- qDebug( "my window handle = %x", myWidget->id() );
- \endcode
-
- Under X11, the text is printed to stderr. Under Windows, the text is
- sent to the debugger.
-
- \warning The internal buffer is limited to 8196 bytes (including the
- 0-terminator).
-
- \sa qWarning(), qFatal(), qInstallMsgHandler(),
- \link debug.html Debugging\endlink
-*/
-
-/*!
- \fn void qWarning( const char *msg, ... )
-
- \relates QApplication
- Prints a warning message, or calls the message handler (if it has been
- installed).
-
- This function takes a format string and a list of arguments, similar to
- the C printf() function.
-
- Example:
- \code
- void f( int c )
- {
- if ( c > 200 )
- qWarning( "f: bad argument, c == %d", c );
- }
- \endcode
-
- Under X11, the text is printed to stderr. Under Windows, the text is
- sent to the debugger.
-
- \warning The internal buffer is limited to 8196 bytes (including the
- 0-terminator).
-
- \sa qDebug(), qFatal(), qInstallMsgHandler(),
- \link debug.html Debugging\endlink
-*/
-
-/*!
- \fn void qFatal( const char *msg, ... )
-
- \relates QApplication
- Prints a fatal error message and exits, or calls the message handler (if it
- has been installed).
-
- This function takes a format string and a list of arguments, similar to
- the C printf() function.
-
- Example:
- \code
- int divide( int a, int b )
- {
- if ( b == 0 ) // program error
- qFatal( "divide: cannot divide by zero" );
- return a/b;
- }
- \endcode
-
- Under X11, the text is printed to stderr. Under Windows, the text is
- sent to the debugger.
-
- \warning The internal buffer is limited to 8196 bytes (including the
- 0-terminator).
-
- \sa qDebug(), qWarning(), qInstallMsgHandler(),
- \link debug.html Debugging\endlink
-*/
-
-
-static msg_handler handler = 0; // pointer to debug handler
-
-
-#ifdef _OS_MAC_
-
-static FILE * mac_debug=0;
-
-void qDebug( const char *msg, ... )
-{
- mac_debug=fopen( "debug.txt", "a+" );
- if(mac_debug) {
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( mac_debug, msg, ap );
- va_end( ap );
- fprintf( mac_debug, "\n" ); // add newline
- fflush( mac_debug );
- }
- fclose(mac_debug);
- } else {
- exit(0);
- }
-}
-
-// copied... this looks really bad.
-void debug( const char *msg, ... )
-{
- mac_debug=fopen( "debug.txt", "a+" );
- if(mac_debug) {
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( mac_debug, msg, ap );
- va_end( ap );
- fprintf( mac_debug, "\n" ); // add newline
- fflush( mac_debug );
- }
- fclose(mac_debug);
- }
-}
-
-void qWarning( const char *msg, ... )
-{
- mac_debug=fopen( "debug.txt", "a+" );
- if(mac_debug) {
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( mac_debug, msg, ap );
- va_end( ap );
- fprintf( mac_debug, "\n" ); // add newline
- fflush( mac_debug );
- }
- fclose(mac_debug);
- }
-}
-
-// copied... this looks really bad.
-void warning( const char *msg, ... )
-{
- mac_debug=fopen( "debug.txt", "a+" );
- if(mac_debug) {
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( mac_debug, msg, ap );
- va_end( ap );
- fprintf( mac_debug, "\n" ); // add newline
- fflush( mac_debug );
- }
- fclose(mac_debug);
- }
-}
-
-void qFatal( const char *msg, ... )
-{
- mac_debug=fopen( "debug.txt", "a+");
- if(mac_debug) {
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( mac_debug, msg, ap );
- va_end( ap );
- fprintf( mac_debug, "\n" ); // add newline
- fflush( mac_debug );
- }
- fclose(mac_debug);
- }
- exit(0);
-}
-
-// copied... this looks really bad.
-void fatal( const char *msg, ... )
-{
- mac_debug=fopen( "debug.txt", "a+" );
- if(mac_debug) {
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( mac_debug, msg, ap );
- va_end( ap );
- fprintf( mac_debug, "\n" ); // add newline
- fflush( mac_debug );
- }
- fclose(mac_debug);
- }
- exit(0);
-}
-
-#else
-
-void qDebug( const char *msg, ... )
-{
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap ); // ### vsnprintf would be great here
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( stderr, msg, ap );
- va_end( ap );
- fprintf( stderr, "\n" ); // add newline
- }
-}
-
-// copied... this looks really bad.
-void debug( const char *msg, ... )
-{
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtDebugMsg, buf );
- } else {
- vfprintf( stderr, msg, ap );
- va_end( ap );
- fprintf( stderr, "\n" ); // add newline
- }
-}
-
-void qWarning( const char *msg, ... )
-{
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtWarningMsg, buf );
- } else {
- vfprintf( stderr, msg, ap );
- va_end( ap );
- fprintf( stderr, "\n" ); // add newline
- }
-}
-
-
-// again, copied
-void warning( const char *msg, ... )
-{
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtWarningMsg, buf );
- } else {
- vfprintf( stderr, msg, ap );
- va_end( ap );
- fprintf( stderr, "\n" ); // add newline
- }
-}
-
-void qFatal( const char *msg, ... )
-{
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtFatalMsg, buf );
- } else {
- vfprintf( stderr, msg, ap );
- va_end( ap );
- fprintf( stderr, "\n" ); // add newline
-#if defined(_OS_UNIX_) && defined(DEBUG)
- abort(); // trap; generates core dump
-#else
- exit( 1 ); // goodbye cruel world
-#endif
- }
-}
-
-// yet again, copied
-void fatal( const char *msg, ... )
-{
- char buf[8196];
- va_list ap;
- va_start( ap, msg ); // use variable arg list
- if ( handler ) {
- vsprintf( buf, msg, ap );
- va_end( ap );
- (*handler)( QtFatalMsg, buf );
- } else {
- vfprintf( stderr, msg, ap );
- va_end( ap );
- fprintf( stderr, "\n" ); // add newline
-#if defined(_OS_UNIX_) && defined(DEBUG)
- abort(); // trap; generates core dump
-#else
- exit( 1 ); // goodbye cruel world
-#endif
- }
-}
-
-#endif
-
-
-/*!
- \fn void ASSERT( bool test )
- \relates QApplication
- Prints a warning message containing the source code file name and line number
- if \e test is FALSE.
-
- This is really a macro defined in qglobal.h.
-
- ASSERT is useful for testing required conditions in your program.
-
- Example:
- \code
- //
- // File: div.cpp
- //
-
- #include <qglobal.h>
-
- int divide( int a, int b )
- {
- ASSERT( b != 0 ); // this is line 9
- return a/b;
- }
- \endcode
-
- If \c b is zero, the ASSERT statement will output the following message
- using the qWarning() function:
- \code
- ASSERT: "b == 0" in div.cpp (9)
- \endcode
-
- \sa qWarning(), \link debug.html Debugging\endlink
-*/
-
-
-/*!
- \fn void CHECK_PTR( void *p )
- \relates QApplication
- If \e p is null, a fatal messages says that the program ran out of memory
- and exits. If \e p is not null, nothing happens.
-
- This is really a macro defined in qglobal.h.
-
- Example:
- \code
- int *a;
- CHECK_PTR( a = new int[80] ); // never do this!
- // do this instead:
- a = new int[80];
- CHECK_PTR( a ); // this is fine
- \endcode
-
- \sa qFatal(), \link debug.html Debugging\endlink
-*/
-
-
-//
-// The CHECK_PTR macro calls this function to check if an allocation went ok.
-//
-
-bool qt_check_pointer( bool c, const char *n, int l )
-{
- if ( c )
- qFatal( "In file %s, line %d: Out of memory", n, l );
- return TRUE;
-}
-
-
-static bool firstObsoleteWarning(const char *obj, const char *oldfunc )
-{
- static QAsciiDict<int> *obsoleteDict = 0;
- if ( !obsoleteDict ) { // first time func is called
- obsoleteDict = new QAsciiDict<int>;
-#if defined(DEBUG)
- qDebug(
- "You are using obsolete functions in the Qt library. Call the function\n"
- "qSuppressObsoleteWarnings() to suppress obsolete warnings.\n"
- );
-#endif
- }
- QCString s( obj );
- s += "::";
- s += oldfunc;
- if ( obsoleteDict->find(s.data()) == 0 ) {
- obsoleteDict->insert( s.data(), (int*)1 ); // anything different from 0
- return TRUE;
- }
- return FALSE;
-}
-
-static bool suppressObsolete = FALSE;
-
-void qSuppressObsoleteWarnings( bool suppress )
-{
- suppressObsolete = suppress;
-}
-
-void qObsolete( const char *obj, const char *oldfunc, const char *newfunc )
-{
- if ( suppressObsolete )
- return;
- if ( !firstObsoleteWarning(obj, oldfunc) )
- return;
- if ( obj )
- qDebug( "%s::%s: This function is obsolete, use %s instead.",
- obj, oldfunc, newfunc );
- else
- qDebug( "%s: This function is obsolete, use %s instead.",
- oldfunc, newfunc );
-}
-
-void qObsolete( const char *obj, const char *oldfunc )
-{
- if ( suppressObsolete )
- return;
- if ( !firstObsoleteWarning(obj, oldfunc) )
- return;
- if ( obj )
- qDebug( "%s::%s: This function is obsolete.", obj, oldfunc );
- else
- qDebug( "%s: This function is obsolete.", oldfunc );
-}
-
-void qObsolete( const char *message )
-{
- if ( suppressObsolete )
- return;
- if ( !firstObsoleteWarning( "Qt", message) )
- return;
- qDebug( "%s", message );
-}
-
-
-/*!
- \relates QApplication
- Installs a Qt message handler. Returns a pointer to the message handler
- previously defined.
-
- The message handler is a function that prints out debug messages,
- warnings and fatal error messages. The Qt library (debug version)
- contains hundreds of warning messages that are printed when internal
- errors (usually invalid function arguments) occur. If you implement
- your own message handler, you get total control of these messages.
-
- The default message handler prints the message to the standard output
- under X11 or to the debugger under Windows. If it is a fatal message,
- the application aborts immediately.
-
- Only one message handler can be defined, since this is usually done on
- an application-wide basis to control debug output.
-
- To restore the message handler, call \c qInstallMsgHandler(0).
-
- Example:
- \code
- #include <qapplication.h>
- #include <stdio.h>
- #include <stdlib.h>
-
- void myMessageOutput( QtMsgType type, const char *msg )
- {
- switch ( type ) {
- case QtDebugMsg:
- fprintf( stderr, "Debug: %s\n", msg );
- break;
- case QtWarningMsg:
- fprintf( stderr, "Warning: %s\n", msg );
- break;
- case QtFatalMsg:
- fprintf( stderr, "Fatal: %s\n", msg );
- abort(); // dump core on purpose
- }
- }
-
- int main( int argc, char **argv )
- {
- qInstallMsgHandler( myMessageOutput );
- QApplication a( argc, argv );
- ...
- return a.exec();
- }
- \endcode
-
- \sa qDebug(), qWarning(), qFatal(), \link debug.html Debugging\endlink
-*/
-
-msg_handler qInstallMsgHandler( msg_handler h )
-{
- msg_handler old = handler;
- handler = h;
- return old;
-}
-
-
-#ifdef _WS_WIN_
-bool qt_winunicode=FALSE;
-#endif
diff --git a/qtools/qglobal.h b/qtools/qglobal.h
deleted file mode 100644
index 0deef5d..0000000
--- a/qtools/qglobal.h
+++ /dev/null
@@ -1,626 +0,0 @@
-/****************************************************************************
-**
-**
-** Global type declarations and definitions
-**
-** Created : 920529
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QGLOBAL_H
-#define QGLOBAL_H
-
-
-#define QT_VERSION 223
-#define QT_VERSION_STR "2.2.3"
-
-
-//
-// The operating system, must be one of: (_OS_x_)
-//
-// MAC - Macintosh
-// MSDOS - MS-DOS and Windows
-// OS2 - OS/2
-// OS2EMX - XFree86 on OS/2 (not PM)
-// WIN32 - Win32 (Windows 95/98 and Windows NT)
-// SUN - SunOS
-// SOLARIS - Sun Solaris
-// HPUX - HP-UX
-// ULTRIX - DEC Ultrix
-// LINUX - Linux
-// FREEBSD - FreeBSD
-// NETBSD - NetBSD
-// OPENBSD - OpenBSD
-// IRIX - SGI Irix
-// OSF - OSF Unix
-// BSDI - BSDI Unix
-// SCO - SCO of some sort
-// AIX - AIX Unix
-// UNIXWARE - SCO UnixWare
-// GNU - GNU Hurd
-// DGUX - DG Unix
-// UNIX - Any UNIX bsd/sysv system
-//
-
-#if defined(__APPLE__) || defined(macintosh)
-#define _OS_MAC_
-# ifdef MAC_OS_X_VERSION_MIN_REQUIRED
-# undef MAC_OS_X_VERSION_MIN_REQUIRED
-# endif
-# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_3
-#elif defined(MSDOS) || defined(_MSDOS) || defined(__MSDOS__)
-#define _OS_MSDOS_
-#elif defined(OS2) || defined(_OS2) || defined(__OS2__)
-#if defined(__EMX__)
-#define _OS_OS2EMX_
-#else
-#define _OS_OS2_
-#endif
-#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
-#define _OS_WIN32_
-#elif defined(__MWERKS__) && defined(__INTEL__)
-#define _OS_WIN32_
-#elif defined(sun) || defined(__sun) || defined(__sun__)
-#if defined(__SVR4)
-#define _OS_SOLARIS_
-#else
-#define _OS_SUN_
-#endif
-#elif defined(hpux) || defined(__hpux) || defined(__hpux__)
-#define _OS_HPUX_
-#elif defined(ultrix) || defined(__ultrix) || defined(__ultrix__)
-#define _OS_ULTRIX_
-#elif defined(reliantunix)
-#define _OS_RELIANTUNIX_
-#elif defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)
-#define _OS_LINUX_
-#elif defined(__FreeBSD__)
-#define _OS_FREEBSD_
-#elif defined(__NetBSD__)
-#define _OS_NETBSD_
-#elif defined(__OpenBSD__)
-#define _OS_OPENBSD_
-#elif defined(sgi) || defined(__sgi)
-#define _OS_IRIX_
-#elif defined(__osf__)
-#define _OS_OSF_
-#elif defined(bsdi) || defined(__bsdi__)
-#define _OS_BSDI_
-#elif defined(_AIX)
-#define _OS_AIX_
-#elif defined(__Lynx__)
-#define _OS_LYNXOS_
-#elif defined(_UNIXWARE)
-#define _OS_UNIXWARE_
-#elif defined(DGUX)
-#define _OS_DGUX_
-#elif defined(__QNX__)
-#define _OS_QNX_
-#elif defined(_SCO_DS) || defined(M_UNIX) || defined(M_XENIX)
-#define _OS_SCO_
-#elif defined(sco) || defined(_UNIXWARE7)
-#define _OS_UNIXWARE7_
-#elif !defined(_SCO_DS) && defined(__USLC__) && defined(__SCO_VERSION__)
-#define _OS_UNIXWARE7_
-#elif defined(__CYGWIN__)
-#define _OS_CYGWIN_
-#elif defined(__BEOS__)
-#define _OS_BEOS_
-#elif defined(__MINT__)
-#define _OS_MINT_
-#else
-#error "Qt has not been ported to this OS - talk to qt-bugs@trolltech.com"
-#endif
-
-#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_OS2_) || defined(_OS_WIN32_)
-#undef _OS_UNIX_
-#elif !defined(_OS_UNIX_)
-#define _OS_UNIX_
-// QT_CLEAN_NAMESPACE is not defined by default; it would break too
-// much code.
-#if !defined(QT_CLEAN_NAMESPACE) && !defined(UNIX)
-// ### remove 3.0
-#define UNIX
-#endif
-#endif
-
-
-//
-// The compiler, must be one of: (_CC_x_)
-//
-// SYM - Symantec C++ for both PC and Macintosh
-// MPW - MPW C++
-// MWERKS - Metrowerks CodeWarrior
-// MSVC - Microsoft Visual C/C++
-// BOR - Borland/Turbo C++
-// WAT - Watcom C++
-// GNU - GNU C++
-// COMEAU - Comeau C++
-// EDG - Edison Design Group C++
-// OC - CenterLine C++
-// SUN - Sun C++
-// DEC - DEC C++
-// HP - HPUX C++
-// USLC - SCO UnixWare7 C++
-// CDS - Reliant C++
-// KAI - KAI C++
-//
-
-
-// Should be sorted most-authoritative to least-authoritative
-
-#if defined(__SC__)
-#define _CC_SYM_
-#elif defined( __KCC )
-#define _CC_KAI_
-#define _CC_EDG_
-#define Q_HAS_BOOL_TYPE
-#elif defined(applec)
-#define _CC_MPW_
-#elif defined(__MWERKS__)
-#define _CC_MWERKS_
-#define Q_HAS_BOOL_TYPE
-#elif defined(_MSC_VER)
-#define _CC_MSVC_
-#elif defined(__BORLANDC__) || defined(__TURBOC__)
-#define _CC_BOR_
-#elif defined(__WATCOMC__)
-#define _CC_WAT_
-#define Q_HAS_BOOL_TYPE
-#elif defined(__GNUC__)
-#define _CC_GNU_
-#if __GNUC__ == 2 && __GNUC_MINOR__ <= 7
-#define Q_FULL_TEMPLATE_INSTANTIATION
-#define Q_TEMPLATE_NEEDS_CLASS_DECLARATION
-#define Q_TEMPLATE_NEEDS_EXPLICIT_CONVERSION
-#define Q_SPURIOUS_NON_VOID_WARNING
-#endif
-#if __GNUC__ == 2 && __GNUC_MINOR__ >= 95
-#define Q_DELETING_VOID_UNDEFINED
-#endif
-#if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)
-#define Q_PACKED __attribute__ ((packed))
-#endif
-#elif defined(__xlC__)
-#define _CC_XLC_
-#define Q_FULL_TEMPLATE_INSTANTIATION
-#if __xlC__ >= 0x400
-#define Q_HAS_BOOL_TYPE
-#endif
-#if __xlC__ <= 0x0306
-#define Q_TEMPLATE_NEEDS_EXPLICIT_CONVERSION
-#endif
-#elif defined(como40)
-#define _CC_EDG_
-#define _CC_COMEAU_
-#define Q_HAS_BOOL_TYPE
-#define Q_C_CALLBACKS
-#elif defined(__USLC__)
-#define _CC_USLC_
-#ifdef __EDG__ // UnixWare7
-#define Q_HAS_BOOL_TYPE
-#endif
-#elif defined(__DECCXX)
-#define _CC_DEC_
-#if __DECCXX_VER >= 60060005
-#define Q_HAS_BOOL_TYPE
-#endif
-#elif defined(__EDG) || defined(__EDG__)
-// one observed on SGI DCC, the other documented
-#define _CC_EDG_
-#elif defined(OBJECTCENTER) || defined(CENTERLINE_CLPP)
-#define _CC_OC_
-#if defined(_BOOL)
-#define Q_HAS_BOOL_TYPE
-#endif
-#elif defined(__SUNPRO_CC)
-#define _CC_SUN_
-#if __SUNPRO_CC >= 0x500
-#define Q_HAS_BOOL_TYPE
-#define Q_C_CALLBACKS
-#endif
-#elif defined(__CDS__)
-#define _CC_CDS_
-#define Q_HAS_BOOL_TYPE
-#elif defined(_OS_HPUX_)
-// this test is from aCC online help
-#if defined(__HP_aCC) || __cplusplus >= 199707L
-// this is the aCC
-#define _CC_HP_ACC_
-#define Q_HAS_BOOL_TYPE
-#else
-// this is the CC
-#define _CC_HP_
-#define Q_FULL_TEMPLATE_INSTANTIATION
-#define Q_TEMPLATE_NEEDS_EXPLICIT_CONVERSION
-#endif // __HP_aCC
-#else
-#error "Qt has not been tested with this compiler - talk to qt-bugs@trolltech.com"
-#endif
-
-// detect Microsoft compiler version
-#ifdef _CC_MSVC_
-#if _MSC_VER >= 1400
-#define _CC_V2005
-#elif _MSC_VER >= 1310
-#define _CC_V2003
-#elif _MSC_VER > 1300
-#define _CC_V2002
-#else
-#define _CC_V1998
-#endif
-#endif
-
-#ifndef Q_PACKED
-#define Q_PACKED
-#endif
-
-// Window system setting
-
-#if defined(_OS_MAC_)
-#define _WS_MAC_
-#elif defined(_OS_MSDOS_)
-#define _WS_WIN16_
-#error "Qt requires Win32 and does not work with Windows 3.x"
-#elif defined(_WIN32_X11_)
-#define _WS_X11_
-#elif defined(_OS_WIN32_)
-#define _WS_WIN32_
-#elif defined(_OS_OS2_)
-#error "Qt does not work with OS/2 Presentation Manager or Workplace Shell"
-#elif defined(_OS_UNIX_)
-#ifdef QWS
-#define _WS_QWS_
-#else
-#define _WS_X11_
-#endif
-#endif
-
-#if defined(_WS_WIN16_) || defined(_WS_WIN32_)
-#define _WS_WIN_
-#endif
-
-
-//
-// Some classes do not permit copies to be made of an object.
-// These classes contains a private copy constructor and operator=
-// to disable copying (the compiler gives an error message).
-// Undefine Q_DISABLE_COPY to turn off this checking.
-//
-
-#define Q_DISABLE_COPY
-
-
-//
-// Useful type definitions for Qt
-//
-
-#if defined(bool)
-#define Q_HAS_BOOL_TYPE
-#elif __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6)
-#define Q_HAS_BOOL_TYPE
-#elif _MSC_VER >= 1100 || __BORLANDC__ >= 0x500
-#define Q_HAS_BOOL_TYPE
-#elif defined(sgi) && defined(_BOOL)
-#define Q_HAS_BOOL_TYPE
-#endif
-
-#if (QT_VERSION >= 300)
-#error "Use an enum for bool"
-#endif
-
-#if !defined(Q_HAS_BOOL_TYPE)
-#if defined(_CC_MSVC_)
-#define _CC_BOOL_DEF_
-#define bool int
-#else
-typedef int bool;
-#endif
-#endif
-
-typedef unsigned char uchar;
-typedef unsigned short ushort;
-typedef unsigned uint;
-typedef unsigned long ulong;
-typedef char *pchar;
-typedef uchar *puchar;
-typedef const char *pcchar;
-#if defined(_OS_WIN32_) && !defined(_CC_GNU_)
-typedef __int64 int64;
-typedef unsigned __int64 uint64;
-#else
-#if !defined(_OS_AIX_) || !defined(_H_INTTYPES)
-typedef long long int64;
-#endif
-typedef unsigned long long uint64;
-#endif
-
-
-//
-// Constant bool values
-//
-
-#ifndef TRUE
-const bool FALSE = 0;
-const bool TRUE = !0;
-#endif
-
-
-#if defined(_CC_MSVC_)
-// Workaround for static const members.
-#define QT_STATIC_CONST static
-#define QT_STATIC_CONST_IMPL
-#else
-#define QT_STATIC_CONST static const
-#define QT_STATIC_CONST_IMPL const
-#endif
-
-
-
-//
-// Utility macros and inline functions
-//
-
-#define QMAX(a,b) ((a) > (b) ? (a) : (b))
-#define QMIN(a,b) ((a) < (b) ? (a) : (b))
-#define QABS(a) ((a) >= 0 ? (a) : -(a))
-
-inline int qRound( double d )
-{
- return d > 0.0 ? int(d+0.5) : int(d-0.5);
-}
-
-
-//
-// Size-dependent types (architecture-dependent byte order)
-//
-
-// QT_CLEAN_NAMESPACE is not defined by default; it would break too
-// much code.
-#if !defined(QT_CLEAN_NAMESPACE)
-typedef signed char INT8; // 8 bit signed
-typedef unsigned char UINT8; // 8 bit unsigned
-typedef short INT16; // 16 bit signed
-typedef unsigned short UINT16; // 16 bit unsigned
-typedef int INT32; // 32 bit signed
-typedef unsigned int UINT32; // 32 bit unsigned
-#endif
-
-typedef signed char Q_INT8; // 8 bit signed
-typedef unsigned char Q_UINT8; // 8 bit unsigned
-typedef short Q_INT16; // 16 bit signed
-typedef unsigned short Q_UINT16; // 16 bit unsigned
-typedef int Q_INT32; // 32 bit signed
-typedef unsigned int Q_UINT32; // 32 bit unsigned
-typedef long Q_INT64; // up to 64 bit signed
-typedef unsigned long Q_UINT64; // up to 64 bit unsigned
-
-//
-// Data stream functions is provided by many classes (defined in qdatastream.h)
-//
-
-class QDataStream;
-
-
-
-#ifdef _WS_WIN_
-extern bool qt_winunicode;
-#endif
-
-#ifndef QT_H
-#include <qfeatures.h>
-#endif // QT_H
-
-//
-// Create Qt DLL if QT_DLL is defined (Windows only)
-//
-
-#if defined(_OS_WIN32_)
-#if defined(QT_NODLL)
-#undef QT_MAKEDLL
-#undef QT_DLL
-#endif
-#ifdef QT_DLL
-#if defined(QT_MAKEDLL) /* create a Qt DLL library */
-#undef QT_DLL
-#define Q_EXPORT __declspec(dllexport)
-#define Q_TEMPLATEDLL
-#undef Q_DISABLE_COPY /* avoid unresolved externals */
-#endif
-#endif
-#if defined(QT_DLL) /* use a Qt DLL library */
-#define Q_EXPORT __declspec(dllimport)
-#define Q_TEMPLATEDLL
-#undef Q_DISABLE_COPY /* avoid unresolved externals */
-#endif
-#else // ! _OS_WIN32_
-#undef QT_MAKEDLL /* ignore these for other platforms */
-#undef QT_DLL
-#endif
-
-#ifndef Q_EXPORT
-#define Q_EXPORT
-#endif
-
-//
-// System information
-//
-
-Q_EXPORT const char *qVersion();
-Q_EXPORT bool qSysInfo( int *wordSize, bool *bigEndian );
-
-
-//
-// Debugging and error handling
-//
-
-#if !defined(NO_CHECK)
-#define CHECK_STATE // check state of objects etc.
-#define CHECK_RANGE // check range of indexes etc.
-#define CHECK_NULL // check null pointers
-#define CHECK_MATH // check math functions
-#endif
-
-#if !defined(NO_DEBUG) && !defined(DEBUG)
-#define DEBUG // display debug messages
-#endif
-
-//
-// Avoid some particularly useless warnings from some stupid compilers.
-// To get ALL C++ compiler warnings, define CC_WARNINGS or comment out
-// the line "#define Q_NO_WARNINGS"
-//
-
-#if !defined(CC_WARNINGS)
-#define Q_NO_WARNINGS
-#endif
-#if defined(Q_NO_WARNINGS)
-#if defined(_CC_MSVC_)
-#pragma warning(disable: 4244)
-#pragma warning(disable: 4275)
-#pragma warning(disable: 4514)
-#pragma warning(disable: 4097)
-#pragma warning(disable: 4706)
-#elif defined(_CC_BOR_)
-#pragma option -w-inl
-#pragma option -w-aus
-#pragma warn -inl
-#pragma warn -pia
-#pragma warn -ccc
-#pragma warn -rch
-#pragma warn -sig
-#elif defined(_CC_MWERKS_)
-#pragma warn_possunwant off
-#endif
-#endif // Q_NO_WARNINGS
-
-//
-// Avoid dead code
-//
-
-#if defined(_CC_EDG_) || defined(_CC_WAT_)
-#define Q_NO_DEAD_CODE
-#endif
-
-//
-// Use to avoid "unused parameter" warnings
-//
-
-#define Q_UNUSED(x) x=x;
-#define Q_CONST_UNUSED(x) (void)x;
-
-Q_EXPORT void qDebug( const char *, ... ) // print debug message
-#if defined(_CC_GNU_) && !defined(__INSURE__)
- __attribute__ ((format (printf, 1, 2)))
-#endif
-;
-
-Q_EXPORT void qWarning( const char *, ... ) // print warning message
-#if defined(_CC_GNU_) && !defined(__INSURE__)
- __attribute__ ((format (printf, 1, 2)))
-#endif
-;
-
-Q_EXPORT void qFatal( const char *, ... ) // print fatal message and exit
-#if defined(_CC_GNU_)
- __attribute__ ((format (printf, 1, 2)))
-#endif
-;
-
-
-// QT_CLEAN_NAMESPACE is not defined by default; it would break too
-// much code.
-#if !defined(QT_CLEAN_NAMESPACE)
-// in that case, also define the old ones...
-
-Q_EXPORT void debug( const char *, ... ) // print debug message
-#if defined(_CC_GNU_) && !defined(__INSURE__)
- __attribute__ ((format (printf, 1, 2)))
-#endif
-;
-
-Q_EXPORT void warning( const char *, ... ) // print warning message
-#if defined(_CC_GNU_) && !defined(__INSURE__)
- __attribute__ ((format (printf, 1, 2)))
-#endif
-;
-
-Q_EXPORT void fatal( const char *, ... ) // print fatal message and exit
-#if defined(_CC_GNU_) && !defined(__INSURE__)
- __attribute__ ((format (printf, 1, 2)))
-#endif
-;
-
-// okay, that was debug()/warning()/fatal()
-#endif
-
-#if !defined(ASSERT)
-#if defined(CHECK_STATE)
-#if defined(QT_FATAL_ASSERT)
-#define ASSERT(x) if ( !(x) )\
- qFatal("ASSERT: \"%s\" in %s (%d)",#x,__FILE__,__LINE__)
-#else
-#define ASSERT(x) if ( !(x) )\
- qWarning("ASSERT: \"%s\" in %s (%d)",#x,__FILE__,__LINE__)
-#endif
-#else
-#define ASSERT(x)
-#endif
-#endif
-
-Q_EXPORT bool qt_check_pointer( bool c, const char *, int );
-
-#if defined(CHECK_NULL)
-#define CHECK_PTR(p) (qt_check_pointer((p)==0,__FILE__,__LINE__))
-#else
-#define CHECK_PTR(p)
-#endif
-
-enum QtMsgType { QtDebugMsg, QtWarningMsg, QtFatalMsg };
-
-typedef void (*msg_handler)(QtMsgType, const char *);
-Q_EXPORT msg_handler qInstallMsgHandler( msg_handler );
-
-
-Q_EXPORT void qSuppressObsoleteWarnings( bool = TRUE );
-
-#if !defined(QT_REJECT_OBSOLETE)
-#define QT_OBSOLETE
-Q_EXPORT void qObsolete( const char *obj, const char *oldfunc,
- const char *newfunc );
-Q_EXPORT void qObsolete( const char *obj, const char *oldfunc );
-Q_EXPORT void qObsolete( const char *message );
-#endif
-
-// DvH: added to avoid warnings on recent gcc versions
-#define Q_DELETING_VOID_UNDEFINED
-
-#endif // QGLOBAL_H
diff --git a/qtools/qgstring.cpp b/qtools/qgstring.cpp
deleted file mode 100644
index 8b15675..0000000
--- a/qtools/qgstring.cpp
+++ /dev/null
@@ -1,258 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2004 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#include <stdio.h>
-#include "qgstring.h"
-
-#include <assert.h>
-
-#define BLOCK_SIZE 64
-#define ROUND_SIZE(x) ((x)+BLOCK_SIZE-1)&~(BLOCK_SIZE-1)
-
-#define DBG_STR(x) do { } while(0)
-//#define DBG_STR(x) printf x
-
-QGString::QGString() // make null string
- : m_data(0), m_len(0), m_memSize(0)
-{
- DBG_STR(("%p: QGString::QGString() %d:%s\n",this,m_len,m_data?m_data:"<none>"));
-}
-
-QGString::QGString(uint size)
-{
- if (size==0)
- {
- m_data=0;
- m_len=0;
- }
- else
- {
- m_memSize = ROUND_SIZE(size+1);
- m_data = (char*)malloc(m_memSize);
- memset(m_data,' ',size);
- m_data[size]='\0';
- m_len=size;
- }
- DBG_STR(("%p: QGString::QGString(uint size=%d) %d:%s\n",
- this,size,m_len,m_data?m_data:"<none>"));
-}
-
-QGString::QGString( const QGString &s )
-{
- if (s.m_memSize==0)
- {
- m_data = 0;
- m_len = 0;
- m_memSize = 0;
- }
- else
- {
- m_data = (char *)malloc(s.m_memSize);
- m_len = s.m_len;
- m_memSize = s.m_memSize;
- qstrcpy(m_data,s.m_data);
- }
- DBG_STR(("%p: QGString::QGString(const QGString &) %d:%s\n",this,m_len,m_data?m_data:"<none>"));
-}
-
-QGString::QGString( const char *str )
-{
- if (str==0)
- {
- m_data=0;
- m_len=0;
- m_memSize=0;
- }
- else
- {
- m_len = qstrlen(str);
- m_memSize = ROUND_SIZE(m_len+1);
- assert(m_memSize>=m_len+1);
- m_data = (char *)malloc(m_memSize);
- qstrcpy(m_data,str);
- }
- DBG_STR(("%p: QGString::QGString(const char *) %d:%s\n",this,m_len,m_data?m_data:"<none>"));
-}
-
-QGString::~QGString()
-{
- free(m_data);
- m_data=0;
- DBG_STR(("%p: QGString::~QGString() %d:%s\n",this,m_len,m_data?m_data:"<none>"));
-}
-
-bool QGString::resize( uint newlen )
-{
- m_len = 0;
- if (newlen==0)
- {
- if (m_data) { free(m_data); m_data=0; }
- m_memSize=0;
- DBG_STR(("%p: 1.QGString::resize() %d:%s\n",this,m_len,m_data?m_data:"<none>"));
- return TRUE;
- }
- m_memSize = ROUND_SIZE(newlen+1);
- assert(m_memSize>=newlen+1);
- if (m_data==0)
- {
- m_data = (char *)malloc(m_memSize);
- }
- else
- {
- m_data = (char *)realloc(m_data,m_memSize);
- }
- if (m_data==0)
- {
- DBG_STR(("%p: 2.QGString::resize() %d:%s\n",this,m_len,m_data?m_data:"<none>"));
- return FALSE;
- }
- m_data[newlen]='\0';
- m_len = qstrlen(m_data);
- DBG_STR(("%p: 3.QGString::resize() %d:%s\n",this,m_len,m_data?m_data:"<none>"));
- return TRUE;
-}
-
-bool QGString::enlarge( uint newlen )
-{
- if (newlen==0)
- {
- if (m_data) { free(m_data); m_data=0; }
- m_memSize=0;
- m_len=0;
- return TRUE;
- }
- uint newMemSize = ROUND_SIZE(newlen+1);
- if (newMemSize==m_memSize) return TRUE;
- m_memSize = newMemSize;
- if (m_data==0)
- {
- m_data = (char *)malloc(m_memSize);
- }
- else
- {
- m_data = (char *)realloc(m_data,m_memSize);
- }
- if (m_data==0)
- {
- return FALSE;
- }
- m_data[newlen-1]='\0';
- if (m_len>newlen) m_len=newlen;
- return TRUE;
-}
-
-void QGString::setLen( uint newlen )
-{
- m_len = newlen<=m_memSize ? newlen : m_memSize;
-}
-
-QGString &QGString::operator=( const QGString &s )
-{
- if (m_data) free(m_data);
- if (s.m_memSize==0) // null string
- {
- m_data = 0;
- m_len = 0;
- m_memSize = 0;
- }
- else
- {
- m_len = s.m_len;
- m_memSize = s.m_memSize;
- m_data = (char*)malloc(m_memSize);
- qstrcpy(m_data,s.m_data);
- }
- DBG_STR(("%p: QGString::operator=(const QGString &%p) %d:%s\n",
- this,&s,m_len,m_data?m_data:"<none>"));
- return *this;
-}
-
-QGString &QGString::operator=( const char *str )
-{
- if (m_data) free(m_data);
- if (str==0) // null string
- {
- m_data = 0;
- m_len = 0;
- m_memSize = 0;
- }
- else
- {
- m_len = qstrlen(str);
- m_memSize = ROUND_SIZE(m_len+1);
- assert(m_memSize>=m_len+1);
- m_data = (char*)malloc(m_memSize);
- qstrcpy(m_data,str);
- }
- DBG_STR(("%p: QGString::operator=(const char *) %d:%s\n",this,m_len,m_data?m_data:"<none>"));
- return *this;
-}
-
-QGString &QGString::operator+=( const QGString &s )
-{
- if (s.m_memSize==0) return *this;
- uint len1 = length();
- uint len2 = s.length();
- uint memSize = ROUND_SIZE(len1 + len2 + 1);
- assert(memSize>=len1+len2+1);
- char *newData = memSize!=m_memSize ? (char*)realloc( m_data, memSize ) : m_data;
- m_memSize = memSize;
- if (newData)
- {
- m_data = newData;
- memcpy( m_data + len1, s, len2 + 1 );
- }
- m_len = len1+len2;
- DBG_STR(("%p: QGString::operator+=(const QGString &) %d:%s\n",this,m_len,m_data?m_data:"<none>"));
- return *this;
-}
-
-QGString &QGString::operator+=( const char *str )
-{
- if (!str) return *this;
- uint len1 = length();
- uint len2 = qstrlen(str);
- uint memSize = ROUND_SIZE(len1 + len2 + 1);
- assert(memSize>=len1+len2+1);
- char *newData = memSize!=m_memSize ? (char *)realloc( m_data, memSize ) : m_data;
- m_memSize = memSize;
- if (newData)
- {
- m_data = newData;
- memcpy( m_data + len1, str, len2 + 1 );
- }
- m_len+=len2;
- DBG_STR(("%p: QGString::operator+=(const char *) %d:%s\n",this,m_len,m_data?m_data:"<none>"));
- return *this;
-}
-
-QGString &QGString::operator+=( char c )
-{
- uint len = m_len;
- uint memSize = ROUND_SIZE(len+2);
- assert(memSize>=len+2);
- char *newData = memSize!=m_memSize ? (char *)realloc( m_data, memSize ) : m_data;
- m_memSize = memSize;
- if (newData)
- {
- m_data = newData;
- m_data[len] = c;
- m_data[len+1] = '\0';
- }
- m_len++;
- DBG_STR(("%p: QGString::operator+=(char s) %d:%s\n",this,m_len,m_data?m_data:"<none>"));
- return *this;
-}
-
diff --git a/qtools/qgstring.h b/qtools/qgstring.h
deleted file mode 100644
index 0af1045..0000000
--- a/qtools/qgstring.h
+++ /dev/null
@@ -1,139 +0,0 @@
-#ifndef QGSTRING_H
-#define QGSTRING_H
-
-#include <stdlib.h>
-#include <string.h>
-
-#if defined(_OS_SUN_) && defined(_CC_GNU_)
-#include <strings.h>
-#endif
-
-#include "qcstring.h"
-
-/*****************************************************************************
- Fixes and workarounds for some platforms
- *****************************************************************************/
-
-/** This is an alternative implementation of QCString.
- */
-class QGString
-{
- public:
- QGString(); // make null string
- QGString(uint size);
- QGString( const QGString &s );
- QGString( const char *str );
- ~QGString() ;
-
- bool resize( uint newlen );
- bool enlarge( uint newlen );
- void setLen( uint newlen );
-
- QGString &operator=( const QGString &s );
- QGString &operator=( const char *str );
- QGString &operator+=( const QGString &s );
- QGString &operator+=( const char *str );
- QGString &operator+=( char c );
-
- bool isNull() const { return m_data==0; }
- bool isEmpty() const { return m_len==0; }
- uint length() const { return m_len; }
- uint size() const { return m_memSize; }
- char * data() const { return m_data; }
- bool truncate( uint pos ) { return resize(pos+1); }
- operator const char *() const { return (const char *)data(); }
- char &at( uint index ) const { return m_data[index]; }
- char &operator[]( uint i ) const { return at(i); }
-
- private:
- char * m_data;
- uint m_len;
- uint m_memSize;
-};
-
-/*****************************************************************************
- QGString non-member operators
- *****************************************************************************/
-
-Q_EXPORT inline bool operator==( const QGString &s1, const QGString &s2 )
-{ return qstrcmp(s1.data(),s2.data()) == 0; }
-
-Q_EXPORT inline bool operator==( const QGString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) == 0; }
-
-Q_EXPORT inline bool operator==( const char *s1, const QGString &s2 )
-{ return qstrcmp(s1,s2.data()) == 0; }
-
-Q_EXPORT inline bool operator!=( const QGString &s1, const QGString &s2 )
-{ return qstrcmp(s1.data(),s2.data()) != 0; }
-
-Q_EXPORT inline bool operator!=( const QGString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) != 0; }
-
-Q_EXPORT inline bool operator!=( const char *s1, const QGString &s2 )
-{ return qstrcmp(s1,s2.data()) != 0; }
-
-Q_EXPORT inline bool operator<( const QGString &s1, const QGString& s2 )
-{ return qstrcmp(s1.data(),s2.data()) < 0; }
-
-Q_EXPORT inline bool operator<( const QGString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) < 0; }
-
-Q_EXPORT inline bool operator<( const char *s1, const QGString &s2 )
-{ return qstrcmp(s1,s2.data()) < 0; }
-
-Q_EXPORT inline bool operator<=( const QGString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) <= 0; }
-
-Q_EXPORT inline bool operator<=( const char *s1, const QGString &s2 )
-{ return qstrcmp(s1,s2.data()) <= 0; }
-
-Q_EXPORT inline bool operator>( const QGString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) > 0; }
-
-Q_EXPORT inline bool operator>( const char *s1, const QGString &s2 )
-{ return qstrcmp(s1,s2.data()) > 0; }
-
-Q_EXPORT inline bool operator>=( const QGString &s1, const char *s2 )
-{ return qstrcmp(s1.data(),s2) >= 0; }
-
-Q_EXPORT inline bool operator>=( const char *s1, const QGString &s2 )
-{ return qstrcmp(s1,s2.data()) >= 0; }
-
-Q_EXPORT inline QGString operator+( const QGString &s1, const QGString &s2 )
-{
- QGString tmp( s1.data() );
- tmp += s2;
- return tmp;
-}
-
-Q_EXPORT inline QGString operator+( const QGString &s1, const char *s2 )
-{
- QGString tmp( s1.data() );
- tmp += s2;
- return tmp;
-}
-
-Q_EXPORT inline QGString operator+( const char *s1, const QGString &s2 )
-{
- QGString tmp( s1 );
- tmp += s2;
- return tmp;
-}
-
-Q_EXPORT inline QGString operator+( const QGString &s1, char c2 )
-{
- QGString tmp( s1.data() );
- tmp += c2;
- return tmp;
-}
-
-Q_EXPORT inline QGString operator+( char c1, const QGString &s2 )
-{
- QGString tmp;
- tmp += c1;
- tmp += s2;
- return tmp;
-}
-
-#endif // QGSTRING_H
diff --git a/qtools/qintdict.doc b/qtools/qintdict.doc
deleted file mode 100644
index 90625da..0000000
--- a/qtools/qintdict.doc
+++ /dev/null
@@ -1,475 +0,0 @@
-/****************************************************************************
-**
-**
-** QIntDict and QIntDictIterator class documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QIntDict documentation
- *****************************************************************************/
-
-/*!
- \class QIntDict qintdict.h
- \brief The QIntDict class is a template class that provides a dictionary based on \c long keys.
-
- \ingroup collection
- \ingroup tools
-
- QIntDict is implemented as a template class. Define a
- template instance QIntDict\<X\> to create a dictionary that operates on
- pointers to X, or X*.
-
- A dictionary is a collection that associates an item with a key.
- The key is used for inserting and looking up an item. QIntDict has
- \c long keys.
-
- The dictionary has very fast insertion and lookup.
-
- Example:
- \code
- #include <qintdict.h>
- #include <stdio.h>
-
- void main()
- {
- QIntDict<char> dict; // maps long ==> char*
-
- dict.insert( 33, "France" );
- dict.insert( 7, "Russia" );
- dict.insert( 49, "Norway" );
-
- printf( "%s\n", dict[49] );
- printf( "%s\n", dict[33] );
- printf( "%s\n", dict[7] );
-
- if ( !dict[39] )
- printf( "39 not defined\n" );
- }
- \endcode
-
- Program output:
- \code
- Norway
- France
- Russia
- 39 not defined
- \endcode
-
- The dictionary in our example maps \c long keys to \c char* items.
- QIntDict implements the \link operator[] [] operator\endlink to lookup
- an item.
-
- QIntDict is implemented by QGDict as a hash array with a fixed number of
- entries. Each array entry points to a singly linked list of buckets, in
- which the dictionary items are stored.
-
- When an item is inserted with a key, the key is converted (hashed) to
- an integer index into the hash array using the \c mod operation. The
- item is inserted before the first bucket in the list of buckets.
-
- Looking up an item is normally very fast. The key is again hashed to an
- array index. Then QIntDict scans the list of buckets and returns the item
- found or null if the item was not found. You cannot insert null pointers
- into a dictionary.
-
- The size of the hash array is very important. In order to get good
- performance, you should use a suitably large \link primes.html prime
- number\endlink. Suitable means equal to or larger than the maximum
- expected number of dictionary items.
-
- Items with equal keys are allowed. When inserting two items with the
- same key, only the last inserted item will be visible (last in, first out)
- until it is removed.
-
- Example:
- \code
- #include <qintdict.h>
- #include <stdio.h>
-
- void main()
- {
- QIntDict<char> dict; // maps long ==> char*
-
- dict.insert( 7, "Russia" );
- dict.insert( 7, "USSR" );
-
- printf( "%s\n", dict[7] );
- dict.remove( 7 ); // Gorbie was here
- printf( "%s\n", dict[7] );
- }
- \endcode
-
- Program output:
- \code
- USSR
- Russia
- \endcode
-
- The QIntDictIterator class can traverse the dictionary contents, but only
- in an arbitrary order. Multiple iterators may independently traverse the
- same dictionary.
-
- Calling setAutoDelete(TRUE) for a dictionary tells it to delete items
- that are removed . The default is to not delete items when they are
- removed.
-
- When inserting an item into a dictionary, only the pointer is copied, not
- the item itself. This is called a shallow copy. It is possible to make the
- dictionary copy all of the item's data (known as a deep copy) when an
- item is inserted. insert() calls the virtual function
- QCollection::newItem() for the item to be inserted.
- Inherit a dictionary and reimplement it if you want deep copies.
-
- When removing a dictionary item, the virtual function
- QCollection::deleteItem() is called. QIntDict's default implementation
- is to delete the item if auto-deletion is enabled.
-
- \sa QIntDictIterator, QDict, QAsciiDict, QPtrDict,
- \link collection.html Collection Classes\endlink
-*/
-
-
-/*!
- \fn QIntDict::QIntDict( int size )
- Constructs a dictionary using an internal hash array with the size
- \e size.
-
- Setting \e size to a suitably large \link primes.html prime number\endlink
- (equal to or greater than the expected number of entries) makes the hash
- distribution better and hence the lookup faster.
-*/
-
-/*!
- \fn QIntDict::QIntDict( const QIntDict<type> &dict )
- Constructs a copy of \e dict.
-
- Each item in \e dict are inserted into this dictionary.
- Only the pointers are copied (shallow copy).
-*/
-
-/*!
- \fn QIntDict::~QIntDict()
- Removes all items from the dictionary and destroys it.
-
- All iterators that access this dictionary will be reset.
-
- \sa setAutoDelete()
-*/
-
-/*!
- \fn QIntDict<type> &QIntDict::operator=(const QIntDict<type> &dict)
- Assigns \e dict to this dictionary and returns a reference to this
- dictionary.
-
- This dictionary is first cleared, then each item in \e dict is inserted
- into this dictionary.
- Only the pointers are copied (shallow copy), unless newItem() has been
- reimplemented.
-*/
-
-/*!
- \fn uint QIntDict::count() const
- Returns the number of items in the dictionary.
- \sa isEmpty()
-*/
-
-/*!
- \fn uint QIntDict::size() const
- Returns the size of the internal hash array (as specified in the
- constructor).
- \sa count()
-*/
-
-/*!
- \fn void QIntDict::resize( uint newsize )
- Changes the size of the hashtable the \a newsize.
- The contents of the dictionary are preserved,
- but all iterators on the dictionary become invalid.
-*/
-
-/*!
- \fn bool QIntDict::isEmpty() const
- Returns TRUE if the dictionary is empty, i.e. count() == 0. Returns FALSE
- otherwise.
- \sa count()
-*/
-
-/*!
- \fn void QIntDict::insert( long key, const type *item )
- Inserts the \e key with the \e item into the dictionary.
-
- The key does not have to be a unique dictionary key. If multiple items
- are inserted with the same key, only the last item will be visible.
-
- Null items are not allowed.
-
- \sa replace()
-*/
-
-/*!
- \fn void QIntDict::replace( long key, const type *item )
- Replaces an item which has a key equal to \e key with \e item.
-
- If the item does not already exist, it will be inserted.
-
- Null items are not allowed.
-
- Equivalent to:
- \code
- QIntDict<char> dict;
- ...
- if ( dict.find(key) )
- dict.remove( key );
- dict.insert( key, item );
- \endcode
-
- If there are two or more items with equal keys, then the last inserted
- of these will be replaced.
-
- \sa insert()
-*/
-
-/*!
- \fn bool QIntDict::remove( long key )
- Removes the item associated with \e key from the dictionary.
- Returns TRUE if successful, or FALSE if the key does not exist in the
- dictionary.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be removed.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- All dictionary iterators that refer to the removed item will be set to
- point to the next item in the dictionary traversing order.
-
- \sa take(), clear(), setAutoDelete()
-*/
-
-/*!
- \fn type *QIntDict::take( long key )
- Takes the item associated with \e key out of the dictionary without
- deleting it (even if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled).
-
- If there are two or more items with equal keys, then the last inserted
- of these will be taken.
-
- Returns a pointer to the item taken out, or null if the key does not
- exist in the dictionary.
-
- All dictionary iterators that refer to the taken item will be set to
- point to the next item in the dictionary traversing order.
-
- \sa remove(), clear(), setAutoDelete()
-*/
-
-/*!
- \fn void QIntDict::clear()
- Removes all items from the dictionary.
-
- The removed items are deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- All dictionary iterators that access this dictionary will be reset.
-
- \sa remove(), take(), setAutoDelete()
-*/
-
-/*!
- \fn type *QIntDict::find( long key ) const
- Returns the item associated with \e key, or null if the key does not
- exist in the dictionary.
-
- This function uses an internal hashing algorithm to optimize lookup.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be found.
-
- Equivalent to the [] operator.
-
- \sa operator[]()
-*/
-
-/*!
- \fn type *QIntDict::operator[]( long key ) const
- Returns the item associated with \e key, or null if the key does not
- exist in the dictionary.
-
- This function uses an internal hashing algorithm to optimize lookup.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be found.
-
- Equivalent to the find() function.
-
- \sa find()
-*/
-
-/*!
- \fn void QIntDict::statistics() const
- Debugging-only function that prints out the dictionary distribution
- using qDebug().
-*/
-
-
-/*****************************************************************************
- QIntDictIterator documentation
- *****************************************************************************/
-
-/*!
- \class QIntDictIterator qintdict.h
- \brief The QIntDictIterator class provides an iterator for QIntDict collections.
-
- \ingroup collection
- \ingroup tools
-
- QIntDictIterator is implemented as a template class.
- Define a template instance QIntDictIterator\<X\> to create a
- dictionary iterator that operates on QIntDict\<X\> (dictionary of X*).
-
- Example:
- \code
- #include <qintdict.h>
- #include <stdio.h>
-
- void main()
- {
- QIntDict<char> dict; // maps long ==> char*
-
- dict.insert( 33, "France" );
- dict.insert( 7, "Russia" );
- dict.insert( 49, "Norway" );
-
- QIntDictIterator<char> it( dict ); // iterator for dict
-
- while ( it.current() ) {
- printf( "%d -> %s\n", it.currentKey(), it.current() );
- ++it;
- }
- }
- \endcode
-
- Program output:
- \code
- 7 -> Russia
- 49 -> Norway
- 33 -> France
- \endcode
-
- Note that the traversal order is arbitrary, you are not guaranteed the
- order above.
-
- Multiple iterators may independently traverse the same dictionary.
- A QIntDict knows about all iterators that are operating on the dictionary.
- When an item is removed from the dictionary, QIntDict update all
- iterators that are referring the removed item to point to the next item
- in the traversing order.
-
- \sa QIntDict, \link collection.html Collection Classes\endlink
-*/
-
-/*!
- \fn QIntDictIterator::QIntDictIterator( const QIntDict<type> &dict )
- Constructs an iterator for \e dict. The current iterator item is
- set to point on the first item in the \e dict.
-*/
-
-/*!
- \fn QIntDictIterator::~QIntDictIterator()
- Destroys the iterator.
-*/
-
-/*!
- \fn uint QIntDictIterator::count() const
- Returns the number of items in the dictionary this iterator operates on.
- \sa isEmpty()
-*/
-
-/*!
- \fn bool QIntDictIterator::isEmpty() const
- Returns TRUE if the dictionary is empty, i.e. count() == 0. Returns FALSE
- otherwise.
- \sa count()
-*/
-
-/*!
- \fn type *QIntDictIterator::toFirst()
- Sets the current iterator item to point to the first item in the
- dictionary and returns a pointer to the item.
- If the dictionary is empty it sets the current item to null and
- returns null.
-*/
-
-/*!
- \fn QIntDictIterator::operator type *() const
- Cast operator. Returns a pointer to the current iterator item.
- Same as current().
-*/
-
-/*!
- \fn type *QIntDictIterator::current() const
- Returns a pointer to the current iterator item.
-*/
-
-/*!
- \fn long QIntDictIterator::currentKey() const
- Returns the key for the current iterator item.
-*/
-
-/*!
- \fn type *QIntDictIterator::operator()()
- Makes the succeeding item current and returns the original current item.
-
- If the current iterator item was the last item in the dictionary or if it
- was null, null is returned.
-*/
-
-/*!
- \fn type *QIntDictIterator::operator++()
- Prefix ++ makes the succeeding item current and returns the new current
- item.
-
- If the current iterator item was the last item in the dictionary or if it
- was null, null is returned.
-*/
-
-/*!
- \fn type *QIntDictIterator::operator+=( uint jump )
- Sets the current item to the item \e jump positions after the current item,
- and returns a pointer to that item.
-
- If that item is beyond the last item or if the dictionary is empty,
- it sets the current item to null and returns null.
-*/
diff --git a/qtools/qintdict.h b/qtools/qintdict.h
deleted file mode 100644
index 0606ec8..0000000
--- a/qtools/qintdict.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QIntDict template class
-**
-** Created : 940624
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QINTDICT_H
-#define QINTDICT_H
-
-#ifndef QT_H
-#include "qgdict.h"
-#endif // QT_H
-
-
-template<class type> class Q_EXPORT QIntDict : public QGDict
-{
-public:
- QIntDict(uint size=17) : QGDict(size,IntKey,0,0) {}
- QIntDict( const QIntDict<type> &d ) : QGDict(d) {}
- ~QIntDict() { clear(); }
- QIntDict<type> &operator=(const QIntDict<type> &d)
- { return (QIntDict<type>&)QGDict::operator=(d); }
- uint count() const { return QGDict::count(); }
- uint size() const { return QGDict::size(); }
- bool isEmpty() const { return QGDict::count() == 0; }
- void insert( long k, const type *d )
- { QGDict::look_int(k,(Item)d,1); }
- void replace( long k, const type *d )
- { QGDict::look_int(k,(Item)d,2); }
- bool remove( long k ) { return QGDict::remove_int(k); }
- type *take( long k ) { return (type*)QGDict::take_int(k); }
- type *find( long k ) const
- { return (type *)((QGDict*)this)->QGDict::look_int(k,0,0); }
- type *operator[]( long k ) const
- { return (type *)((QGDict*)this)->QGDict::look_int(k,0,0); }
- void clear() { QGDict::clear(); }
- void resize( uint n ) { QGDict::resize(n); }
- void statistics() const { QGDict::statistics(); }
-private:
- void deleteItem( Item d );
-};
-
-#if defined(Q_DELETING_VOID_UNDEFINED)
-template<> inline void QIntDict<void>::deleteItem( QCollection::Item )
-{
-}
-#endif
-
-template<class type> inline void QIntDict<type>::deleteItem( QCollection::Item d )
-{
- if ( del_item ) delete (type *)d;
-}
-
-template<class type> class Q_EXPORT QIntDictIterator : public QGDictIterator
-{
-public:
- QIntDictIterator(const QIntDict<type> &d) :QGDictIterator((QGDict &)d) {}
- ~QIntDictIterator() {}
- uint count() const { return dict->count(); }
- bool isEmpty() const { return dict->count() == 0; }
- type *toFirst() { return (type *)QGDictIterator::toFirst(); }
- operator type *() const { return (type *)QGDictIterator::get(); }
- type *current() const { return (type *)QGDictIterator::get(); }
- long currentKey() const { return QGDictIterator::getKeyInt(); }
- type *operator()() { return (type *)QGDictIterator::operator()(); }
- type *operator++() { return (type *)QGDictIterator::operator++(); }
- type *operator+=(uint j) { return (type *)QGDictIterator::operator+=(j);}
-};
-
-
-#endif // QINTDICT_H
diff --git a/qtools/qinternallist.h b/qtools/qinternallist.h
deleted file mode 100644
index b1cc64e..0000000
--- a/qtools/qinternallist.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QList template/macro class
-**
-** Created : 920701
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QINTERNALLIST_H
-#define QINTERNALLIST_H
-
-#ifndef QT_H
-#include "qglist.h"
-#endif // QT_H
-
-
-template<class type> class Q_EXPORT QInternalList : public QGList
-{
-public:
- QInternalList() {}
- QInternalList( const QInternalList<type> &l ) : QGList(l) {}
- ~QInternalList() { clear(); }
- QInternalList<type> &operator=(const QInternalList<type> &l)
- { return (QInternalList<type>&)QGList::operator=(l); }
- bool operator==( const QInternalList<type> &list ) const
- { return QGList::operator==( list ); }
- uint count() const { return QGList::count(); }
- bool isEmpty() const { return QGList::count() == 0; }
- bool insert( uint i, const type *d){ return QGList::insertAt(i,(QCollection::Item)d); }
- void inSort( const type *d ) { QGList::inSort((QCollection::Item)d); }
- void prepend( const type *d ) { QGList::insertAt(0,(QCollection::Item)d); }
- void append( const type *d ) { QGList::append((QCollection::Item)d); }
- bool remove( uint i ) { return QGList::removeAt(i); }
- bool remove() { return QGList::remove((QCollection::Item)0); }
- bool remove( const type *d ) { return QGList::remove((QCollection::Item)d); }
- bool removeRef( const type *d ) { return QGList::removeRef((QCollection::Item)d); }
- void removeNode( QLNode *n ) { QGList::removeNode(n); }
- bool removeFirst() { return QGList::removeFirst(); }
- bool removeLast() { return QGList::removeLast(); }
- type *take( uint i ) { return (type *)QGList::takeAt(i); }
- type *take() { return (type *)QGList::take(); }
- type *takeNode( QLNode *n ) { return (type *)QGList::takeNode(n); }
- void clear() { QGList::clear(); }
- void sort() { QGList::sort(); }
- int find( const type *d ) { return QGList::find((QCollection::Item)d); }
- int findNext( const type *d ) { return QGList::find((QCollection::Item)d,FALSE); }
- int findRef( const type *d ) { return QGList::findRef((QCollection::Item)d); }
- int findNextRef( const type *d ){ return QGList::findRef((QCollection::Item)d,FALSE);}
- uint contains( const type *d ) const { return QGList::contains((QCollection::Item)d); }
- uint containsRef( const type *d ) const
- { return QGList::containsRef((QCollection::Item)d); }
- type *at( uint i ) { return (type *)QGList::at(i); }
- int at() const { return QGList::at(); }
- type *current() const { return (type *)QGList::get(); }
- QLNode *currentNode() const { return QGList::currentNode(); }
- type *getFirst() const { return (type *)QGList::cfirst(); }
- type *getLast() const { return (type *)QGList::clast(); }
- type *first() { return (type *)QGList::first(); }
- type *last() { return (type *)QGList::last(); }
- type *next() { return (type *)QGList::next(); }
- type *prev() { return (type *)QGList::prev(); }
-private:
- void deleteItem( QCollection::Item d );
-};
-
-#if defined(Q_DELETING_VOID_UNDEFINED)
-template<> inline void QInternalList<void>::deleteItem( QCollection::Item )
-{
-}
-#endif
-
-template<class type> inline void QInternalList<type>::deleteItem( QCollection::Item d )
-{
- if ( del_item ) delete (type *)d;
-}
-
-
-template<class type> class Q_EXPORT QInternalListIterator : public QGListIterator
-{
-public:
- QInternalListIterator(const QInternalList<type> &l) :QGListIterator((QGList &)l) {}
- ~QInternalListIterator() {}
- uint count() const { return list->count(); }
- bool isEmpty() const { return list->count() == 0; }
- bool atFirst() const { return QGListIterator::atFirst(); }
- bool atLast() const { return QGListIterator::atLast(); }
- type *toFirst() { return (type *)QGListIterator::toFirst(); }
- type *toLast() { return (type *)QGListIterator::toLast(); }
- operator type *() const { return (type *)QGListIterator::get(); }
- type *operator*() { return (type *)QGListIterator::get(); }
-
- // No good, since QList<char> (ie. QStrList fails...
- //
- // MSVC++ gives warning
- // Sunpro C++ 4.1 gives error
- // type *operator->() { return (type *)QGListIterator::get(); }
-
- type *current() const { return (type *)QGListIterator::get(); }
- type *operator()() { return (type *)QGListIterator::operator()();}
- type *operator++() { return (type *)QGListIterator::operator++(); }
- type *operator+=(uint j) { return (type *)QGListIterator::operator+=(j);}
- type *operator--() { return (type *)QGListIterator::operator--(); }
- type *operator-=(uint j) { return (type *)QGListIterator::operator-=(j);}
- QInternalListIterator<type>& operator=(const QInternalListIterator<type>&it)
- { QGListIterator::operator=(it); return *this; }
-};
-
-
-#endif // QINTERNALLIST_H
diff --git a/qtools/qiodevice.cpp b/qtools/qiodevice.cpp
deleted file mode 100644
index b52475c..0000000
--- a/qtools/qiodevice.cpp
+++ /dev/null
@@ -1,638 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QIODevice class
-**
-** Created : 940913
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qiodevice.h"
-
-// NOT REVISED
-/*!
- \class QIODevice qiodevice.h
-
- \brief The QIODevice class is the base class of I/O devices.
-
- \ingroup io
-
- An I/O device represents a medium that one can read bytes from
- and/or write bytes to. The QIODevice class is the abstract
- superclass of all such devices; classes like QFile, QBuffer and
- QSocket inherit QIODevice and implement virtual functions like
- write() appropriately.
-
- While applications sometimes use QIODevice directly, mostly it is
- better to go through QTextStream and QDataStream, which provide
- stream operations on any QIODevice subclass. QTextStream provides
- text-oriented stream functionality (for human-readable ASCII files,
- for example), while QDataStream deals with binary data in a totally
- platform-independent manner.
-
- The public member functions in QIODevice roughly fall into two
- groups: The action functions and the state access functions. The
- most important action functions are: <ul>
-
- <li> open() opens a device for reading and/or writing, depending on
- the argument to open().
-
- <li> close() closes the device and tidies up.
-
- <li> readBlock() reads a block of data from the device.
-
- <li> writeBlock() writes a block of data to the device.
-
- <li> readLine() reads a line (of text, usually) from the device.
-
- <li> flush() ensures that all buffered data are written to the real device.
-
- </ul>There are also some other, less used, action functions: <ul>
-
- <li> getch() reads a single character.
-
- <li> ungetch() forgets the last call to getch(), if possible.
-
- <li> putch() writes a single character.
-
- <li> size() returns the size of the device, if there is one.
-
- <li> at() returns the current read/write pointer, if there is one
- for this device, or it moves the pointer.
-
- <li> atEnd() says whether there is more to read, if that is a
- meaningful question for this device.
-
- <li> reset() moves the read/write pointer to the start of the
- device, if that is possible for this device.
-
- </ul>The state access are all "get" functions. The QIODevice subclass
- calls setState() to update the state, and simple access functions
- tell the user of the device what the device's state is. Here are
- the settings, and their associated access functions: <ul>
-
- <li> Access type. Some devices are direct access (it is possible to
- read/write anywhere) while others are sequential. QIODevice
- provides the access functions isDirectAccess(), isSequentialAccess()
- and isCombinedAccess() to tell users what a given I/O device
- supports.
-
- <li> Buffering. Some devices are accessed in raw mode while others
- are buffered. Buffering usually provides greater efficiency,
- particularly for small read/write operations. isBuffered() tells
- the user whether a given device is buffered. (This can often be set
- by the application in the call to open().)
-
- <li> Synchronicity. Synchronous devices work there and then, for
- example files. When you read from a file, the file delivers its
- data right away. Others, such as a socket connected to a HTTP
- server, may not deliver the data until seconds after you ask to read
- it. isSynchronous() and isAsynchronous() tells the user how this
- device operates.
-
- <li> CR/LF translation. For simplicity, applications often like to
- see just a single CR/LF style, and QIODevice subclasses can provide
- that. isTranslated() returns TRUE if this object translates CR/LF
- to just LF. (This can often be set by the application in the call
- to open().)
-
- <li> Accessibility. Some files cannot be written, for example.
- isReadable(), isWritable and isReadWrite() tells the application
- whether it can read from and write to a given device. (This can
- often be set by the application in the call to open().)
-
- <li> Finally, isOpen() returns TRUE if the device is open. This can
- quite obviously be set using open() :)
-
- </ul>
-
- QIODevice provides numerous pure virtual functions you need to
- implement when subclassing it. Here is a skeleton subclass with all
- the members you are certain to need, and some it's likely that you
- will need:
-
- \code
- class YourDevice : public QIODevice
- {
- public:
- YourDevice();
- ~YourDevice();
-
- bool open( int mode );
- void close();
- void flush();
-
- uint size() const;
- int at() const; // not a pure virtual function
- bool at( int ); // not a pure virtual function
- bool atEnd() const; // not a pure virtual function
-
- int readBlock( char *data, uint maxlen );
- int writeBlock( const char *data, uint len );
- int readLine( char *data, uint maxlen );
-
- int getch();
- int putch( int );
- int ungetch( int );
- };
- \endcode
-
- The three non-pure virtual functions can be ignored if your device
- is sequential (e.g. an RS-232 port).
-
- \sa QDataStream, QTextStream
-*/
-
-
-/*!
- Constructs an I/O device.
-*/
-
-QIODevice::QIODevice()
-{
- ioMode = 0; // initial mode
- ioSt = IO_Ok;
- ioIndex = 0;
-}
-
-/*!
- Destructs the I/O device.
-*/
-
-QIODevice::~QIODevice()
-{
-}
-
-
-/*!
- \fn int QIODevice::flags() const
- Returns the current I/O device flags setting.
-
- Flags consists of mode flags and state flags.
-
- \sa mode(), state()
-*/
-
-/*!
- \fn int QIODevice::mode() const
- Returns bits OR'ed together that specify the current operation mode.
-
- These are the flags that were given to the open() function.
-
- The flags are: \c IO_ReadOnly, \c IO_WriteOnly, \c IO_ReadWrite,
- \c IO_Append, \c IO_Truncate and \c IO_Translate.
-*/
-
-/*!
- \fn int QIODevice::state() const
- Returns bits OR'ed together that specify the current state.
-
- The flags are: \c IO_Open.
-
- Subclasses may define more flags.
-*/
-
-/*!
- \fn bool QIODevice::isDirectAccess() const
- Returns TRUE if the I/O device is a direct access (not sequential) device,
- otherwise FALSE.
- \sa isSequentialAccess()
-*/
-
-/*!
- \fn bool QIODevice::isSequentialAccess() const
- Returns TRUE if the I/O device is a sequential access (not direct) device,
- otherwise FALSE. Operations involving size() and at(int) are not valid
- on sequential devices.
- \sa isDirectAccess()
-*/
-
-/*!
- \fn bool QIODevice::isCombinedAccess() const
- Returns TRUE if the I/O device is a combined access (both direct and
- sequential) device, otherwise FALSE.
-
- This access method is currently not in use.
-*/
-
-/*!
- \fn bool QIODevice::isBuffered() const
- Returns TRUE if the I/O device is a buffered (not raw) device, otherwise
- FALSE.
- \sa isRaw()
-*/
-
-/*!
- \fn bool QIODevice::isRaw() const
- Returns TRUE if the I/O device is a raw (not buffered) device, otherwise
- FALSE.
- \sa isBuffered()
-*/
-
-/*!
- \fn bool QIODevice::isSynchronous() const
- Returns TRUE if the I/O device is a synchronous device, otherwise
- FALSE.
- \sa isAsynchronous()
-*/
-
-/*!
- \fn bool QIODevice::isAsynchronous() const
- Returns TRUE if the I/O device is a asynchronous device, otherwise
- FALSE.
-
- This mode is currently not in use.
-
- \sa isSynchronous()
-*/
-
-/*!
- \fn bool QIODevice::isTranslated() const
- Returns TRUE if the I/O device translates carriage-return and linefeed
- characters.
-
- A QFile is translated if it is opened with the \c IO_Translate mode
- flag.
-*/
-
-/*!
- \fn bool QIODevice::isReadable() const
- Returns TRUE if the I/O device was opened using \c IO_ReadOnly or
- \c IO_ReadWrite mode.
- \sa isWritable(), isReadWrite()
-*/
-
-/*!
- \fn bool QIODevice::isWritable() const
- Returns TRUE if the I/O device was opened using \c IO_WriteOnly or
- \c IO_ReadWrite mode.
- \sa isReadable(), isReadWrite()
-*/
-
-/*!
- \fn bool QIODevice::isReadWrite() const
- Returns TRUE if the I/O device was opened using \c IO_ReadWrite mode.
- \sa isReadable(), isWritable()
-*/
-
-/*!
- \fn bool QIODevice::isInactive() const
- Returns TRUE if the I/O device state is 0, i.e. the device is not open.
- \sa isOpen()
-*/
-
-/*!
- \fn bool QIODevice::isOpen() const
- Returns TRUE if the I/O device state has been opened, otherwise FALSE.
- \sa isInactive()
-*/
-
-
-/*!
- \fn int QIODevice::status() const
- Returns the I/O device status.
-
- The I/O device status returns an error code. If open() returns FALSE
- or readBlock() or writeBlock() return -1, this function can be called to
- get the reason why the operation did not succeed.
-
- The status codes are:
- <ul>
- <li>\c IO_Ok The operation was successful.
- <li>\c IO_ReadError Could not read from the device.
- <li>\c IO_WriteError Could not write to the device.
- <li>\c IO_FatalError A fatal unrecoverable error occurred.
- <li>\c IO_OpenError Could not open the device.
- <li>\c IO_ConnectError Could not connect to the device.
- <li>\c IO_AbortError The operation was unexpectedly aborted.
- <li>\c IO_TimeOutError The operation timed out.
- <li>\c IO_OnCloseError An unspecified error happened on close.
- </ul>
-
- \sa resetStatus()
-*/
-
-/*!
- \fn void QIODevice::resetStatus()
-
- Sets the I/O device status to \c IO_Ok.
-
- \sa status()
-*/
-
-
-/*!
- \fn void QIODevice::setFlags( int f )
- \internal
- Used by subclasses to set the device flags.
-*/
-
-/*!
- \internal
- Used by subclasses to set the device type.
-*/
-
-void QIODevice::setType( int t )
-{
-#if defined(CHECK_RANGE)
- if ( (t & IO_TypeMask) != t )
- qWarning( "QIODevice::setType: Specified type out of range" );
-#endif
- ioMode &= ~IO_TypeMask; // reset type bits
- ioMode |= t;
-}
-
-/*!
- \internal
- Used by subclasses to set the device mode.
-*/
-
-void QIODevice::setMode( int m )
-{
-#if defined(CHECK_RANGE)
- if ( (m & IO_ModeMask) != m )
- qWarning( "QIODevice::setMode: Specified mode out of range" );
-#endif
- ioMode &= ~IO_ModeMask; // reset mode bits
- ioMode |= m;
-}
-
-/*!
- \internal
- Used by subclasses to set the device state.
-*/
-
-void QIODevice::setState( int s )
-{
-#if defined(CHECK_RANGE)
- if ( ((uint)s & IO_StateMask) != (uint)s )
- qWarning( "QIODevice::setState: Specified state out of range" );
-#endif
- ioMode &= ~IO_StateMask; // reset state bits
- ioMode |= (uint)s;
-}
-
-/*!
- \internal
- Used by subclasses to set the device status (not state).
-*/
-
-void QIODevice::setStatus( int s )
-{
- ioSt = s;
-}
-
-
-/*!
- \fn bool QIODevice::open( int mode )
- Opens the I/O device using the specified \e mode.
- Returns TRUE if successful, or FALSE if the device could not be opened.
-
- The mode parameter \e m must be a combination of the following flags.
- <ul>
- <li>\c IO_Raw specified raw (unbuffered) file access.
- <li>\c IO_ReadOnly opens a file in read-only mode.
- <li>\c IO_WriteOnly opens a file in write-only mode.
- <li>\c IO_ReadWrite opens a file in read/write mode.
- <li>\c IO_Append sets the file index to the end of the file.
- <li>\c IO_Truncate truncates the file.
- <li>\c IO_Translate enables carriage returns and linefeed translation
- for text files under MS-DOS, Window, OS/2 and Macintosh. On Unix systems
- this flag has no effect. Use with caution as it will also transform every linefeed
- written to the file into a CRLF pair. This is likely to corrupt your file when
- writing binary data to it. Cannot be combined with \c IO_Raw.
- </ul>
-
- This virtual function must be reimplemented by all subclasses.
-
- \sa close()
-*/
-
-/*!
- \fn void QIODevice::close()
- Closes the I/O device.
-
- This virtual function must be reimplemented by all subclasses.
-
- \sa open()
-*/
-
-/*!
- \fn void QIODevice::flush()
-
- Flushes an open I/O device.
-
- This virtual function must be reimplemented by all subclasses.
-*/
-
-
-/*!
- \fn uint QIODevice::size() const
- Virtual function that returns the size of the I/O device.
- \sa at()
-*/
-
-/*!
- Virtual function that returns the current I/O device index.
-
- This index is the data read/write head of the I/O device.
-
- \sa size()
-*/
-
-int QIODevice::at() const
-{
- return ioIndex;
-}
-
-/*!
- Virtual function that sets the I/O device index to \e pos.
- \sa size()
-*/
-
-bool QIODevice::at( int pos )
-{
-#if defined(CHECK_RANGE)
- if ( (uint)pos > size() ) {
- qWarning( "QIODevice::at: Index %d out of range", pos );
- return FALSE;
- }
-#endif
- ioIndex = pos;
- return TRUE;
-}
-
-/*!
- Virtual function that returns TRUE if the I/O device index is at the
- end of the input.
-*/
-
-bool QIODevice::atEnd() const
-{
- if ( isSequentialAccess() || isTranslated() ) {
- QIODevice* that = (QIODevice*)this;
- int c = that->getch();
- bool result = c < 0;
- that->ungetch(c);
- return result;
- } else {
- return at() == (int)size();
- }
-}
-
-/*!
- \fn bool QIODevice::reset()
- Sets the device index to 0.
- \sa at()
-*/
-
-
-/*!
- \fn int QIODevice::readBlock( char *data, uint maxlen )
- Reads at most \e maxlen bytes from the I/O device into \e data and
- returns the number of bytes actually read.
-
- This virtual function must be reimplemented by all subclasses.
-
- \sa writeBlock()
-*/
-
-/*!
- This convenience function returns all of the remaining data in the
- device. Note that this only works for direct access devices, such
- as QFile.
-
- \sa isDirectAccess()
-*/
-QByteArray QIODevice::readAll()
-{
- int n = size()-at();
- QByteArray ba(size()-at());
- char* c = ba.data();
- while ( n ) {
- int r = readBlock( c, n );
- if ( r < 0 )
- return QByteArray();
- n -= r;
- c += r;
- }
- return ba;
-}
-
-/*!
- \fn int QIODevice::writeBlock( const char *data, uint len )
- Writes \e len bytes from \e p to the I/O device and returns the number of
- bytes actually written.
-
- This virtual function must be reimplemented by all subclasses.
-
- \sa readBlock()
-*/
-
-/*!
- This convenience function is the same as calling
- writeBlock( data.data(), data.size() ).
-*/
-int QIODevice::writeBlock( const QByteArray& data )
-{
- return writeBlock( data.data(), data.size() );
-}
-
-/*!
- Reads a line of text, up to \e maxlen bytes including a terminating
- \0. If there is a newline at the end if the line, it is not stripped.
-
- Returns the number of bytes read, or -1 in case of error.
-
- This virtual function can be reimplemented much more efficiently by
- the most subclasses.
-
- \sa readBlock(), QTextStream::readLine()
-*/
-
-int QIODevice::readLine( char *data, uint maxlen )
-{
- if ( maxlen == 0 ) // application bug?
- return 0;
- int pos = at(); // get current position
- int s = (int)size(); // size of I/O device
- char *p = data;
- if ( pos >= s )
- return 0;
- while ( pos++ < s && --maxlen ) { // read one byte at a time
- readBlock( p, 1 );
- if ( *p++ == '\n' ) // end of line
- break;
- }
- *p++ = '\0';
- return (int)((intptr_t)p - (intptr_t)data);
-}
-
-
-/*!
- \fn int QIODevice::getch()
-
- Reads a single byte/character from the I/O device.
-
- Returns the byte/character read, or -1 if the end of the I/O device has been
- reached.
-
- This virtual function must be reimplemented by all subclasses.
-
- \sa putch(), ungetch()
-*/
-
-/*!
- \fn int QIODevice::putch( int ch )
-
- Writes the character \e ch to the I/O device.
-
- Returns \e ch, or -1 if some error occurred.
-
- This virtual function must be reimplemented by all subclasses.
-
- \sa getch(), ungetch()
-*/
-
-/*!
- \fn int QIODevice::ungetch( int ch )
-
- Puts the character \e ch back into the I/O device and decrements the
- index if it is not zero.
-
- This function is normally called to "undo" a getch() operation.
-
- Returns \e ch, or -1 if some error occurred.
-
- This virtual function must be reimplemented by all subclasses.
-
- \sa getch(), putch()
-*/
diff --git a/qtools/qiodevice.h b/qtools/qiodevice.h
deleted file mode 100644
index 1c54217..0000000
--- a/qtools/qiodevice.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QIODevice class
-**
-** Created : 940913
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QIODEVICE_H
-#define QIODEVICE_H
-
-#ifndef QT_H
-#include "qglobal.h"
-#include "qcstring.h"
-#endif // QT_H
-
-
-// IO device access types
-
-#define IO_Direct 0x0100 // direct access device
-#define IO_Sequential 0x0200 // sequential access device
-#define IO_Combined 0x0300 // combined direct/sequential
-#define IO_TypeMask 0x0f00
-
-// IO handling modes
-
-#define IO_Raw 0x0040 // raw access (not buffered)
-#define IO_Async 0x0080 // asynchronous mode
-
-// IO device open modes
-
-#define IO_ReadOnly 0x0001 // readable device
-#define IO_WriteOnly 0x0002 // writable device
-#define IO_ReadWrite 0x0003 // read+write device
-#define IO_Append 0x0004 // append
-#define IO_Truncate 0x0008 // truncate device
-#define IO_Translate 0x0010 // translate CR+LF
-#define IO_ModeMask 0x00ff
-
-// IO device state
-
-#define IO_Open 0x1000 // device is open
-#define IO_StateMask 0xf000
-
-
-// IO device status
-
-#define IO_Ok 0
-#define IO_ReadError 1 // read error
-#define IO_WriteError 2 // write error
-#define IO_FatalError 3 // fatal unrecoverable error
-#define IO_ResourceError 4 // resource limitation
-#define IO_OpenError 5 // cannot open device
-#define IO_ConnectError 5 // cannot connect to device
-#define IO_AbortError 6 // abort error
-#define IO_TimeOutError 7 // time out
-#define IO_UnspecifiedError 8 // unspecified error
-
-class Q_EXPORT QIODevice // IO device class
-{
-public:
- QIODevice();
- virtual ~QIODevice();
-
- int flags() const { return ioMode; }
- int mode() const { return ioMode & IO_ModeMask; }
- int state() const { return ioMode & IO_StateMask; }
-
- bool isDirectAccess() const { return ((ioMode & IO_Direct) == IO_Direct); }
- bool isSequentialAccess() const { return ((ioMode & IO_Sequential) == IO_Sequential); }
- bool isCombinedAccess() const { return ((ioMode & IO_Combined) == IO_Combined); }
- bool isBuffered() const { return ((ioMode & IO_Raw) != IO_Raw); }
- bool isRaw() const { return ((ioMode & IO_Raw) == IO_Raw); }
- bool isSynchronous() const { return ((ioMode & IO_Async) != IO_Async); }
- bool isAsynchronous() const { return ((ioMode & IO_Async) == IO_Async); }
- bool isTranslated() const { return ((ioMode & IO_Translate) == IO_Translate); }
- bool isReadable() const { return ((ioMode & IO_ReadOnly) == IO_ReadOnly); }
- bool isWritable() const { return ((ioMode & IO_WriteOnly) == IO_WriteOnly); }
- bool isReadWrite() const { return ((ioMode & IO_ReadWrite) == IO_ReadWrite); }
- bool isInactive() const { return state() == 0; }
- bool isOpen() const { return state() == IO_Open; }
-
- int status() const { return ioSt; }
- void resetStatus() { ioSt = IO_Ok; }
-
- virtual bool open( int mode ) = 0;
- virtual void close() = 0;
- virtual void flush() = 0;
-
- virtual uint size() const = 0;
- virtual int at() const;
- virtual bool at( int );
- virtual bool atEnd() const;
- bool reset() { return at(0); }
-
- virtual int readBlock( char *data, uint maxlen ) = 0;
- virtual int writeBlock( const char *data, uint len ) = 0;
- virtual int readLine( char *data, uint maxlen );
- int writeBlock( const QByteArray& data );
- QByteArray readAll();
-
- virtual int getch() = 0;
- virtual int putch( int ) = 0;
- virtual int ungetch( int ) = 0;
-
-protected:
- void setFlags( int f ) { ioMode = f; }
- void setType( int );
- void setMode( int );
- void setState( int );
- void setStatus( int );
- int ioIndex;
-
-private:
- int ioMode;
- int ioSt;
-
-private: // Disabled copy constructor and operator=
-#if defined(Q_DISABLE_COPY)
- QIODevice( const QIODevice & );
- QIODevice &operator=( const QIODevice & );
-#endif
-};
-
-
-#endif // QIODEVICE_H
diff --git a/qtools/qlist.doc b/qtools/qlist.doc
deleted file mode 100644
index d28d662..0000000
--- a/qtools/qlist.doc
+++ /dev/null
@@ -1,1035 +0,0 @@
-/****************************************************************************
-**
-**
-** QList and QListIterator class documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QList documentation
- *****************************************************************************/
-
-/*!
- \class QList qlist.h
- \brief The QList class is a template class that provides doubly linked lists.
-
- \ingroup collection
- \ingroup tools
-
- In Qt 2.0 QList is only implemented as a template class. Define a
- template instance QList\<X\> to create a list that operates on pointers
- to X, or X*.
-
- Example:
- \code
- #include <qlist.h>
- #include <qstring.h>
- #include <stdio.h>
-
- class Employee
- {
- public:
- Employee( const QString& name, int salary ) { n=name; s=salary; }
- QString name() const { return n; }
- int salary() const { return s; }
- private:
- QString n;
- int s;
- };
-
- void main()
- {
- QList<Employee> list; // list of pointers to Employee
- list.setAutoDelete( TRUE ); // delete items when they are removed
-
- list.append( new Employee("Bill", 50000) );
- list.append( new Employee("Steve",80000) );
- list.append( new Employee("Ron", 60000) );
-
- Employee *emp;
- for ( emp=list.first(); emp != 0; emp=list.next() )
- printf( "%s earns %d\n", emp->name().latin1(), emp->salary() );
- }
- \endcode
-
- Program output:
- \code
- Bill earns 50000
- Steve earns 80000
- Ron earns 60000
- \endcode
-
- The list class is indexable and has a \link at() current index\endlink
- and a \link current() current item\endlink. The first item corresponds
- to index 0. The current index is -1 if the current item is null.
-
- QList has several member functions for traversing the list, but using
- a QListIterator can be more practical. Multiple list iterators may
- traverse the same list, independent of each other and independent of
- the current list item.
-
- In the example above, we make the call setAutoDelete(TRUE).
- Enabling auto-deletion tells the list to delete items that are removed
- from the list. The default is to not delete items when they are
- removed, but that would cause a memory leak in our example since we have
- no other references to the list items.
-
- List items are stored as \c void* in an internal QLNode, which also
- holds pointers to the next and previous list items. The functions
- currentNode(), removeNode() and takeNode() operate directly on the
- QLNode, but they should be used with care.
-
- When inserting an item into a list, only the pointer is copied, not the
- item itself. This is called a shallow copy. It is possible to make the
- list copy all of the item's data (known as a deep copy) when an item is
- inserted. insert(), inSort() and append() call the virtual function
- QCollection::newItem() for the item to be inserted.
- Inherit a list and reimplement it if you want deep copies.
-
- When removing an item from a list, the virtual function
- QCollection::deleteItem() is called. QList's default implementation
- is to delete the item if auto-deletion is enabled.
-
- The virtual function QGList::compareItems() can be reimplemented to
- compare two list items. This function is called from all list functions
- that need to compare list items, for instance remove(const type*).
- If you only want to deal with pointers, there are functions that
- compare pointers instead, for instance removeRef(const type*).
- These functions are somewhat faster than those that call compareItems().
-
- The QStrList class in qstrlist.h is a list of \c char*. QStrList is
- a good example of a list that reimplements newItem(), deleteItem() and
- compareItems()
-
- \sa QListIterator, \link collection.html Collection Classes\endlink
-*/
-
-
-/*!
- \fn QList::QList()
- Constructs an empty list.
-*/
-
-/*!
- \fn QList::QList( const QList<type> &list )
- Constructs a copy of \e list.
-
- Each item in \e list is \link append() appended\endlink to this list.
- Only the pointers are copied (shallow copy).
-*/
-
-/*!
- \fn QList::~QList()
- Removes all items from the list and destroys the list.
-
- All list iterators that access this list will be reset.
-
- \sa setAutoDelete()
-*/
-
-/*!
- \fn QList<type> &QList::operator=(const QList<type> &list)
- Assigns \e list to this list and returns a reference to this list.
-
- This list is first cleared, then each item in \e list is
- \link append() appended\endlink to this list. Only the pointers are copied
- (shallow copy), unless newItem() has been reimplemented().
-*/
-
-/*!
- \fn bool QList::operator==(const QList<type> &list ) const
-
- Compares this list with \a list. Returns TRUE if the lists
- contain the same data, else FALSE.
-*/
-
-/*!
- \fn uint QList::count() const
- Returns the number of items in the list.
- \sa isEmpty()
-*/
-
-/*!
- \fn void QList::sort()
-
- Sorts the list by the result of the virtual compareItems() function.
-
- The Heap-Sort algorithm is used for sorting. It sorts n items with
- O(n*log n) compares. This is the asymptotic optimal solution of the
- sorting problem.
-
- If the items in your list support operator< and operator== then you
- might be better off with QSortedList since it implements the
- compareItems() function for you using these two operators.
-
- \sa inSort()
-*/
-
-/*!
- \fn bool QList::isEmpty() const
- Returns TRUE if the list is empty, i.e. count() == 0. Returns FALSE
- otherwise.
- \sa count()
-*/
-
-/*!
- \fn bool QList::insert( uint index, const type *item )
- Inserts the \e item at the position \e index in the list.
-
- Returns TRUE if successful, or FALSE if \e index is out of range.
- The valid range is <code>0 .. count()</code> inclusive.
- The item is appended if \e index == count().
-
- The inserted item becomes the current list item.
-
- The \e item must not be a null pointer.
-
- \sa append(), current()
-*/
-
-/*!
- \fn void QList::inSort( const type *item )
- Inserts the \e item at its sorted position in the list.
-
- The sort order depends on the virtual QGList::compareItems() function.
- All items must be inserted with inSort() to maintain the sorting order.
-
- The inserted item becomes the current list item.
-
- The \e item must not be a null pointer.
-
- Please note that inSort is slow. If you want to insert lots of items
- in a list and sort after inserting then you should use sort().
- inSort() takes up to O(n) compares. That means inserting n items in
- your list will need O(n^2) compares while sort() only needs O(n*logn)
- for the same task. So you inSort() only if you already have a pre-sorted
- list and want to insert only few additional items.
-
- \sa insert(), QGList::compareItems(), current(), sort()
-*/
-
-/*!
- \fn void QList::append( const type *item )
- Inserts the \e item at the end of the list.
-
- The inserted item becomes the current list item.
- This is equivalent to \c insert(count(),item).
-
-
- The \e item must not be a null pointer.
-
- \sa insert(), current(), prepend()
-*/
-
-/*!
- \fn void QList::prepend( const type *item )
-
- Inserts the \e item at the start of the list.
-
- The inserted item becomes the current list item.
- This is equivalent to \c insert(0,item).
-
- The \e item must not be a null pointer.
-
- \sa append(), insert(), current()
-*/
-
-/*!
- \fn bool QList::remove( uint index )
- Removes the item at position \e index in the list.
-
- Returns TRUE if successful, or FALSE if \e index is out of range.
- The valid range is <code>0 .. (count() - 1)</code> inclusive.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- The item after the removed item becomes the new current list item if
- the removed item is not the last item in the list. If the last item
- is removed, the new last item becomes the current item in Qt 2.x.
- In 3.0, the current item will be set to null. The current item is
- set to null if the list becomes empty.
-
- All list iterators that refer to the removed item will be set to point
- to the new current item.
-
- \sa take(), clear(), setAutoDelete(), current() removeRef()
-*/
-
-/*!
- \fn bool QList::remove()
- Removes the current list item.
-
- Returns TRUE if successful, or FALSE if the current item is null.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- The item after the removed item becomes the new current list item if
- the removed item is not the last item in the list. If the last item
- is removed, the new last item becomes the current item in Qt 2.x.
- In 3.0, the current item will be set to null. The current item is
- set to null if the list becomes empty.
-
- All list iterators that refer to the removed item will be set to point
- to the new current item.
-
- \sa take(), clear(), setAutoDelete(), current() removeRef()
-*/
-
-/*!
- \fn bool QList::remove( const type *item )
- Removes the first occurrence of \e item from the list.
-
- Returns TRUE if successful, or FALSE if the item could not be found in the
- list.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- The compareItems() function is called when searching for the item
- in the list. If compareItems() is not reimplemented, it is more
- efficient to call removeRef().
-
- The item after the removed item becomes the new current list item if
- the removed item is not the last item in the list. If the last item
- is removed, the new last item becomes the current item in Qt 2.x.
- In 3.0, the current item will be set to null. The current item is
- set to null if the list becomes empty.
-
- All list iterators that refer to the removed item will be set to point
- to the new current item.
-
- \sa removeRef(), take(), clear(), setAutoDelete(), compareItems(), current()
-*/
-
-/*!
- \fn bool QList::removeRef( const type *item )
- Removes the first occurrence of \e item from the list.
-
- Returns TRUE if successful, or FALSE if the item cannot be found in the
- list.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- The list is scanned until the pointer \e item is found. It is removed
- if it is found.
-
- Equivalent to:
- \code
- if ( list.findRef(item) != -1 )
- list.remove();
- \endcode
-
- The item after the removed item becomes the new current list item if
- the removed item is not the last item in the list. If the last item
- is removed, the new last item becomes the current item in Qt 2.x.
- In 3.0, the current item will be set to null. The current item is
- set to null if the list becomes empty.
-
- All list iterators that refer to the removed item will be set to point
- to the new current item.
-
- \sa remove(), clear(), setAutoDelete(), current()
-*/
-
-/*!
- \fn void QList::removeNode( QLNode *node )
- Removes the \e node from the list.
-
- This node must exist in the list, otherwise the program may crash.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- The first item in the list will become the new current list item.
- The current item is set to null if the list becomes empty.
-
- All list iterators that refer to the removed item will be set to point to
- the item succeeding this item, or the preceding item if the removed item
- was the last item.
-
- \warning Do not call this function unless you are an expert.
-
- \sa takeNode(), currentNode() remove() removeRef()
-*/
-
-/*!
- \fn bool QList::removeFirst()
- Removes the first item from the list.
- Returns TRUE if successful, or FALSE if the list is empty.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- The first item in the list becomes the new current list item.
- The current item is set to null if the list becomes empty.
-
- All list iterators that refer to the removed item will be set to point
- to the new current item.
-
- \sa removeLast(), setAutoDelete(), current() remove()
-*/
-
-/*!
- \fn bool QList::removeLast()
- Removes the last item from the list.
- Returns TRUE if successful, or FALSE if the list is empty.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- The last item in the list becomes the new current list item.
- The current item is set to null if the list becomes empty.
-
- All list iterators that refer to the removed item will be set to point
- to the new current item.
-
- \sa removeFirst(), setAutoDelete(), current()
-*/
-
-/*!
- \fn type *QList::take( uint index )
- Takes the item at position \e index out of the list without
- deleting it (even if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled).
-
- Returns a pointer to the item taken out of the list, or null if
- the index is out of range.
- The valid range is <code>0 .. (count() - 1)</code> inclusive.
-
- The item after the taken item becomes the new current list item if
- the taken item is not the last item in the list. If the last item
- is taken, the new last item becomes the current item in Qt 2.x. In
- 3.0, the current item will be set to null. The current item is set
- to null if the list becomes empty.
-
- All list iterators that refer to the taken item will be set to point to
- the new current item.
-
- \sa remove(), clear(), current()
-*/
-
-/*!
- \fn type *QList::take()
- Takes the current item out of the list without deleting it (even if
- \link QCollection::setAutoDelete() auto-deletion\endlink is enabled).
- Returns a pointer to the item taken out of the list, or null if
- the current item is null.
-
- The item after the taken item becomes the new current list item if
- the taken item is not the last item in the list. If the last item
- is taken, the new last item becomes the current item in Qt 2.x. In
- 3.0, the current item will be set to null. The current item is set
- to null if the list becomes empty.
-
- All list iterators that refer to the taken item will be set to point to
- the new current item.
-
- \sa remove(), clear(), current()
-*/
-
-/*!
- \fn type *QList::takeNode( QLNode *node )
- Takes the \e node out of the list without deleting its item (even if
- \link QCollection::setAutoDelete() auto-deletion\endlink is enabled).
- Returns a pointer to the item taken out of the list.
-
- This node must exist in the list, otherwise the program may crash.
-
- The first item in the list becomes the new current list item.
-
- All list iterators that refer to the taken item will be set to point to
- the item succeeding this item, or the preceding item if the taken item
- was the last item.
-
- \warning Do not call this function unless you are an expert.
-
- \sa removeNode(), currentNode()
-*/
-
-/*!
- \fn void QList::clear()
- Removes all items from the list.
-
- The removed items are deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- All list iterators that access this list will be reset.
-
- \sa remove(), take(), setAutoDelete()
-*/
-
-/*!
- \fn int QList::find( const type *item )
- Finds the first occurrence of \e item in the list.
-
- If the item is found, the list sets the current item to point to
- the found item and returns the index of this item.
- If the item is not found, the list sets the current item to null,
- the current index to -1 and returns -1.
-
- The compareItems() function is called when searching for the item
- in the list. If compareItems() is not reimplemented, it is more
- efficient to call findRef().
-
- \sa findNext(), findRef(), compareItems(), current()
-*/
-
-/*!
- \fn int QList::findNext( const type *item )
- Finds the next occurrence of \e item in the list, starting from
- the current list item.
-
- If the item is found, the list sets the current item to point to
- the found item and returns the index of this item.
- If the item is not found, the list sets the current item to null,
- the current index to -1 and returns -1.
-
- The compareItems() function is called when searching for the item
- in the list. If compareItems() is not reimplemented, it is more
- efficient to call findNextRef().
-
- \sa find(), findNextRef(), compareItems(), current()
-*/
-
-/*!
- \fn int QList::findRef( const type *item )
- Finds the first occurrence of \e item in the list.
-
- If the item is found, the list sets the current item to point to
- the found item and returns the index of this item.
- If the item is not found, the list sets the current item to null,
- the current index to -1 and returns -1.
-
- Calling this function is must faster than find(), because find()
- compares \e item with each list item using compareItems().
- This function only compares the pointers.
-
- \sa findNextRef(), find(), current()
-*/
-
-/*!
- \fn int QList::findNextRef( const type *item )
- Finds the next occurrence of \e item in the list, starting from the
- current list item.
-
- If the item is found, the list sets the current item to point to
- the found item and returns the index of this item.
- If the item is not found, the list sets the current item to null,
- the current index to -1 and returns -1.
-
- Calling this function is must faster than findNext(), because findNext()
- compares \e item with each list item using compareItems().
- This function only compares the pointers.
-
- \sa findRef(), findNext(), current()
-*/
-
-/*!
- \fn uint QList::contains( const type *item ) const
- Counts and returns the number of occurrences of \e item in the list.
-
- The compareItems() function is called when looking for the \e item
- in the list. If compareItems() is not reimplemented, it is more
- efficient to call containsRef().
-
- Does not affect the current list item.
-
- \sa containsRef(), compareItems()
-*/
-
-/*!
- \fn uint QList::containsRef( const type *item ) const
- Counts and returns the number of occurrences of \e item in the list.
-
- Calling this function is must faster than contains(), because contains()
- compares \e item with each list item using compareItems().
- This function only compares the pointers.
-
- Does not affect the current list item.
-
- \sa contains()
-*/
-
-/*!
- \fn type *QList::at( uint index )
- Returns a pointer to the item at position \e index in the list, or
- null if the index is out of range.
-
- Sets the current list item to this item if \e index is valid.
- The valid range is <code>0 .. (count() - 1)</code> inclusive.
-
- This function is very efficient. It starts scanning from the first
- item, last item or current item, whichever is closest to \e index.
-
- \sa current()
-*/
-
-/*!
- \fn int QList::at() const
- Returns the index of the current list item. The returned value is -1
- if the current item is null.
- \sa current()
-*/
-
-/*!
- \fn type *QList::current() const
- Returns a pointer to the current list item. The current item may be
- null (implies that the current index is -1).
- \sa at()
-*/
-
-/*!
- \fn QLNode *QList::currentNode() const
- Returns a pointer to the current list node.
-
- The node can be kept and removed later using removeNode().
- The advantage is that the item can be removed directly without
- searching the list.
-
- \warning Do not call this function unless you are an expert.
-
- \sa removeNode(), takeNode(), current()
-*/
-
-/*!
- \fn type *QList::getFirst() const
- Returns a pointer to the first item in the list, or null if the
- list is empty.
-
- Does not affect the current list item.
-
- \sa first(), getLast()
-*/
-
-/*!
- \fn type *QList::getLast() const
- Returns a pointer to the last item in the list, or null if the
- list is empty.
-
- Does not affect the current list item.
-
- \sa last(), getFirst()
-*/
-
-/*!
- \fn type *QList::first()
- Returns a pointer to the first item in the list and makes this the
- current list item, or null if the list is empty.
- \sa getFirst(), last(), next(), prev(), current()
-*/
-
-/*!
- \fn type *QList::last()
- Returns a pointer to the last item in the list and makes this the
- current list item, or null if the list is empty.
- \sa getLast(), first(), next(), prev(), current()
-*/
-
-/*!
- \fn type *QList::next()
- Returns a pointer to the item succeeding the current item.
- Returns null if the current item is null or equal to the last item.
-
- Makes the succeeding item current. If the current item before this
- function call was the last item, the current item will be set to null.
- If the current item was null, this function does nothing.
-
- \sa first(), last(), prev(), current()
-*/
-
-/*!
- \fn type *QList::prev()
- Returns a pointer to the item preceding the current item.
- Returns null if the current item is null or equal to the first item.
-
- Makes the preceding item current. If the current item before this
- function call was the first item, the current item will be set to null.
- If the current item was null, this function does nothing.
-
- \sa first(), last(), next(), current()
-*/
-
-/*****************************************************************************
- QListIterator documentation
- *****************************************************************************/
-
-/*!
- \class QListIterator qlist.h
- \brief The QListIterator class provides an iterator for QList collections.
-
- \ingroup collection
- \ingroup tools
-
- Define a template instance QListIterator\<X\> to create a list iterator
- that operates on QList\<X\> (list of X*).
-
- Example:
- \code
- #include <qlist.h>
- #include <qstring.h>
- #include <stdio.h>
-
- class Employee
- {
- public:
- Employee( const char *name, int salary ) { n=name; s=salary; }
- const char *name() const { return n; }
- int salary() const { return s; }
- private:
- QString n;
- int s;
- };
-
- void main()
- {
- QList<Employee> list; // list of pointers to Employee
- list.setAutoDelete( TRUE ); // delete items when they are removed
-
- list.append( new Employee("Bill", 50000) );
- list.append( new Employee("Steve",80000) );
- list.append( new Employee("Ron", 60000) );
-
- QListIterator<Employee> it(list); // iterator for employee list
- for ( ; it.current(); ++it ) {
- Employee *emp = it.current();
- printf( "%s earns %d\n", emp->name().latin1(), emp->salary() );
- }
- }
- \endcode
-
- Program output:
- \code
- Bill earns 50000
- Steve earns 80000
- Ron earns 60000
- \endcode
-
- Although QList has member functions to traverse the doubly linked list
- structure, using a list iterator is a much more robust way of traversing
- the list, because multiple list iterators can operate on the same list,
- independent of each other and independent of the QList's current item.
- An iterator has its own current list item and can get the next and
- previous list items. It can only traverse the list, never modify it.
-
- A QList knows about all list iterators that are operating on the list.
- When an item is removed from the list, the list update all iterators
- that are pointing the removed item to point to the new current list item.
-
- Example:
- \code
- #include <qlist.h>
- #include <qstring.h>
- #include <stdio.h>
-
- class Employee
- {
- ... // same as above
- };
-
- void main()
- {
- QList<Employee> list; // list of pointers to Employee
- list.setAutoDelete( TRUE ); // delete items when they are removed
-
- list.append( new Employee("Bill", 50000) );
- list.append( new Employee("Steve",80000) );
- list.append( new Employee("Ron", 60000) );
-
- QListIterator<Employee> it(list);
-
- list.at( 1 ); // current list item: "Steve"
- it.toLast(); // it: "Ron"
- --it; // it: "Steve"
-
- // Now, both the list and the iterator are referring the same item
-
- list.remove();
- printf( "%s\n", it.current()->name().latin1() );
- }
- \endcode
-
- Program output:
- \code
- Ron
- \endcode
-
- \sa QList, \link collection.html collection classes\endlink
-*/
-
-/*!
- \fn QListIterator::QListIterator( const QList<type> &list )
- Constructs an iterator for \e list. The current iterator item is
- set to point on the first item in the \e list.
-*/
-
-/*!
- \fn QListIterator::~QListIterator()
- Destroys the iterator.
-*/
-
-/*!
- \fn uint QListIterator::count() const
- Returns the number of items in the list this iterator operates on.
- \sa isEmpty()
-*/
-
-/*!
- \fn bool QListIterator::isEmpty() const
- Returns TRUE if the list is empty, i.e. count() == 0, otherwise FALSE.
- \sa count()
-*/
-
-/*!
- \fn bool QListIterator::atFirst() const
- Returns TRUE if the current iterator item is the first list item, otherwise
- FALSE.
- \sa toFirst(), atLast()
-*/
-
-/*!
- \fn bool QListIterator::atLast() const
- Returns TRUE if the current iterator item is the last list item, otherwise
- FALSE.
- \sa toLast(), atFirst()
-*/
-
-/*!
- \fn type *QListIterator::toFirst()
- Sets the current iterator item to point to the first list item and returns
- a pointer to the item. Sets the current item to null and returns null
- if the list is empty.
- \sa toLast(), atFirst()
-*/
-
-/*!
- \fn type *QListIterator::toLast()
- Sets the current iterator item to point to the last list item and returns
- a pointer to the item. Sets the current item to null and returns null
- if the list is empty.
- \sa toFirst(), atLast()
-*/
-
-/*!
- \fn QListIterator::operator type *() const
- Cast operator. Returns a pointer to the current iterator item.
- Same as current().
-*/
-
-/*!
- \fn type *QListIterator::operator*()
- Asterisk operator. Returns a pointer to the current iterator item.
- Same as current().
-*/
-
-/*!
- \fn type *QListIterator::current() const
- Returns a pointer to the current iterator item.
-*/
-
-/*!
- \fn type *QListIterator::operator()()
- Makes the succeeding item current and returns the original current item.
-
- If the current iterator item was the last item in the list or if it was
- null, null is returned.
-*/
-
-/*!
- \fn char *QStrListIterator::operator()()
- Makes the succeeding item current and returns the original current item.
-
- If the current iterator item was the last item in the list or if it was
- null, null is returned.
-*/
-
-/*!
- \fn type *QListIterator::operator++()
- Prefix ++ makes the succeeding item current and returns the new current
- item.
-
- If the current iterator item was the last item in the list or if it was
- null, null is returned.
-*/
-
-/*!
- \fn type *QListIterator::operator+=( uint jump )
- Sets the current item to the item \e jump positions after the current item,
- and returns a pointer to that item.
-
- If that item is beyond the last item or if the dictionary is empty,
- it sets the current item to null and returns null
-*/
-
-/*!
- \fn type *QListIterator::operator--()
- Prefix -- makes the preceding item current and returns the new current
- item.
-
- If the current iterator item was the first item in the list or if it was
- null, null is returned.
-*/
-
-/*!
- \fn type *QListIterator::operator-=( uint jump )
- Returns the item \e jump positions before the current item, or null if
- it is beyond the first item. Makes this the current item.
-*/
-
-/*!
- \fn QListIterator<type>& QListIterator::operator=( const QListIterator<type> &it )
- Assignment. Makes a copy of the iterator \a it and returns a reference
- to this iterator.
-*/
-
-
-/*****************************************************************************
- QStrList documentation
- *****************************************************************************/
-
-//typedef QList<char> QStrList
-
-/*!
- \class QStrList qstrlist.h
- \brief The QStrList class provides a doubly linked list of \c char*.
-
- \ingroup collection
- \ingroup tools
-
- This class is a QList\<char\> instance (a list of char*).
-
- QStrList can make deep or shallow copies of the strings that are inserted.
-
- A deep copy means to allocate space for the string and then copy the string
- data into it. A shallow copy is just a copy of the pointer value and not
- the string data.
-
- The disadvantage with shallow copies is that since a pointer can only
- be deleted once, the program must put all strings in a central place and
- know when it is safe to delete them (i.e. when the strings are no longer
- referenced by other parts of the program). This can make the program
- more complex. The advantage of shallow copies is that shallow copies
- consume far less memory than deep copies. It is also much faster
- to copy a pointer (typically 4 or 8 bytes) than to copy string data.
-
- A QStrList that operates on deep copies will by default turn on
- auto-deletion (see setAutoDelete()). Thus, by default, QStrList will
- deallocate any string copies it allocates.
-
- The virtual compareItems() function is reimplemented and does a case
- sensitive string comparison. The inSort() function will insert
- strings in a sorted order.
-
- The QStrListIterator class is an iterator for QStrList.
-*/
-
-/*!
- \fn QStrList::QStrList( bool deepCopies )
- Constructs an empty list of strings. Will make deep copies of all inserted
- strings if \e deepCopies is TRUE, or uses shallow copies if \e deepCopies
- is FALSE.
-*/
-
-/*!
- \fn QStrList::QStrList( const QStrList &list )
- Constructs a copy of \e list.
-
- If \e list has deep copies, this list will also get deep copies.
- Only the pointers are copied (shallow copy) if the other list does not
- use deep copies.
-*/
-
-/*!
- \fn QStrList::~QStrList()
- Destroys the list. All strings are removed.
-*/
-
-/*!
- \fn QStrList& QStrList::operator=( const QStrList& list )
- Assigns \e list to this list and returns a reference to this list.
-
- If \e list has deep copies, this list will also get deep copies.
- Only the pointers are copied (shallow copy) if the other list does not
- use deep copies.
-*/
-
-
-/*****************************************************************************
- QStrIList documentation
- *****************************************************************************/
-
-/*!
- \class QStrIList qstrlist.h
- \brief The QStrIList class provides a doubly linked list of \c char* with
-case insensitive compare.
-
- \ingroup collection
- \ingroup tools
-
- This class is a QList\<char\> instance (a list of char*).
-
- QStrIList is similar to QStrList except that it is case insensitive.
- The virtual compareItems() function is reimplemented and does a
- case insensitive string comparison.
- The inSort() function will insert strings in a sorted order.
-
- The QStrListIterator class is an iterator for QStrList.
-*/
-
-/*!
- \fn QStrIList::QStrIList( bool deepCopies )
- Constructs a list of strings. Will make deep copies of all inserted
- strings if \e deepCopies is TRUE, or uses shallow copies if \e deepCopies
- is FALSE.
-*/
-
-/*!
- \fn QStrIList::~QStrIList()
- Destroys the list. All strings are removed.
-*/
-
-
-/*****************************************************************************
- QStrListIterator documentation
- *****************************************************************************/
-
-/*!
- \class QStrListIterator qstrlist.h
- \brief The QStrListIterator class is an iterator for the QStrList and QStrIList classes.
-
- \ingroup tools
-
- This class is a QListIterator\<char\> instance.
- It can traverse the strings in the QStrList and QStrIList classes.
-*/
diff --git a/qtools/qlist.h b/qtools/qlist.h
deleted file mode 100644
index eaaa674..0000000
--- a/qtools/qlist.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QList template/macro class
-**
-** Created : 920701
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-/* This is a stripped version of the original QList, which has been renamed to
- QInternalList. This implementation doesn't expose the current node and index,
- nor direct access to the list nodes.
- This makes it possible to have more constant methods. It also provides
- a typesafe method to compare elements called compareValues() and a typesafe
- methods to create and delete elements called newValue() and deleteValue().
- */
-
-#ifndef QLIST_H
-#define QLIST_H
-
-#ifndef QT_H
-#include "qglist.h"
-#endif // QT_H
-
-
-template<class type> class Q_EXPORT QList : private QGList
-{
-public:
- QList() {}
- QList( const QList<type> &l ) : QGList(l) {}
- ~QList() { clear(); }
- QList<type> &operator=(const QList<type> &l)
- { return (QList<type>&)QGList::operator=(l); }
- bool operator==( const QList<type> &list ) const
- { return QGList::operator==( list ); }
-
- // capacity
- uint count() const { return QGList::count(); }
- bool isEmpty() const { return QGList::count() == 0; }
-
- // modifiers add
- bool insert( uint i, const type *d){ return QGList::insertAt(i,(QCollection::Item)d); }
- void inSort( const type *d ) { QGList::inSort((QCollection::Item)d); }
- void prepend( const type *d ) { QGList::insertAt(0,(QCollection::Item)d); }
- void append( const type *d ) { QGList::append((QCollection::Item)d); }
-
- // modifiers remove
- bool remove( uint i ) { return QGList::removeAt(i); }
- bool remove( const type *d ) { return QGList::remove((QCollection::Item)d); }
- bool removeRef( const type *d ) { return QGList::removeRef((QCollection::Item)d); }
- bool removeFirst() { return QGList::removeFirst(); }
- bool removeLast() { return QGList::removeLast(); }
- type *take( uint i ) { return (type *)QGList::takeAt(i); }
- void clear() { QGList::clear(); }
-
- // operations
- void sort() { QGList::sort(); }
-
- // search
- int find( const type *d ) const { return const_cast<QList<type>*>(this)->QGList::find((QCollection::Item)d); }
- int findRef( const type *d ) const { return const_cast<QList<type>*>(this)->QGList::findRef((QCollection::Item)d); }
- uint contains( const type *d ) const { return QGList::contains((QCollection::Item)d); }
- uint containsRef( const type *d ) const { return QGList::containsRef((QCollection::Item)d); }
-
- // element access
- type *at( uint i ) const { return (type *)const_cast<QList<type>*>(this)->QGList::at(i); }
- type *getFirst() const { return (type *)QGList::cfirst(); }
- type *getLast() const { return (type *)QGList::clast(); }
-
- // ownership
- void setAutoDelete( bool enable ) { QGList::setAutoDelete(enable); }
- bool autoDelete() const { return QGList::autoDelete(); }
-
-private:
- // new to be reimplemented methods
- virtual int compareValues(const type *t1,const type *t2) const
- { return const_cast<QList<type>*>(this)->QGList::compareItems((QCollection::Item)t1,(QCollection::Item)t2); }
- virtual type *newValue(type *item) const
- { return item; }
- virtual void deleteValue(type *item) const
- { if (del_item) delete item; }
-
- // reimplemented methods
- virtual Item newItem( Item item)
- { return (Item)newValue((type*)item); }
- virtual void deleteItem( QCollection::Item item )
- { deleteValue((type *)item); }
- virtual int compareItems(QCollection::Item i1,QCollection::Item i2)
- { return compareValues((const type*)i1,(const type*)i2); }
-};
-
-#if defined(Q_DELETING_VOID_UNDEFINED)
-template<> inline void QList<void>::deleteValue(void *) const
-{
-}
-#endif
-
-
-template<class type> class Q_EXPORT QListIterator : public QGListIterator
-{
-public:
- QListIterator(const QList<type> &l) :QGListIterator((QGList &)l) {}
- ~QListIterator() {}
- uint count() const { return list->count(); }
- bool isEmpty() const { return list->count() == 0; }
- bool atFirst() const { return QGListIterator::atFirst(); }
- bool atLast() const { return QGListIterator::atLast(); }
- type *toFirst() { return (type *)QGListIterator::toFirst(); }
- type *toLast() { return (type *)QGListIterator::toLast(); }
- operator type *() const { return (type *)QGListIterator::get(); }
- type *operator*() { return (type *)QGListIterator::get(); }
-
- // No good, since QList<char> (ie. QStrList fails...
- //
- // MSVC++ gives warning
- // Sunpro C++ 4.1 gives error
- // type *operator->() { return (type *)QGListIterator::get(); }
-
- type *current() const { return (type *)QGListIterator::get(); }
- type *operator()() { return (type *)QGListIterator::operator()();}
- type *operator++() { return (type *)QGListIterator::operator++(); }
- type *operator+=(uint j) { return (type *)QGListIterator::operator+=(j);}
- type *operator--() { return (type *)QGListIterator::operator--(); }
- type *operator-=(uint j) { return (type *)QGListIterator::operator-=(j);}
- QListIterator<type>& operator=(const QListIterator<type>&it)
- { QGListIterator::operator=(it); return *this; }
-};
-
-
-#endif // QLIST_H
diff --git a/qtools/qmap.cpp b/qtools/qmap.cpp
deleted file mode 100644
index 1d2510a..0000000
--- a/qtools/qmap.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QMap
-**
-** Created : 990406
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qmap.h"
-
-typedef QMapNodeBase* NodePtr;
-typedef QMapNodeBase Node;
-
-
-void QMapPrivateBase::rotateLeft( NodePtr x, NodePtr& root)
-{
- NodePtr y = x->right;
- x->right = y->left;
- if (y->left !=0)
- y->left->parent = x;
- y->parent = x->parent;
- if (x == root)
- root = y;
- else if (x == x->parent->left)
- x->parent->left = y;
- else
- x->parent->right = y;
- y->left = x;
- x->parent = y;
-}
-
-
-void QMapPrivateBase::rotateRight( NodePtr x, NodePtr& root )
-{
- NodePtr y = x->left;
- x->left = y->right;
- if (y->right != 0)
- y->right->parent = x;
- y->parent = x->parent;
- if (x == root)
- root = y;
- else if (x == x->parent->right)
- x->parent->right = y;
- else
- x->parent->left = y;
- y->right = x;
- x->parent = y;
-}
-
-
-void QMapPrivateBase::rebalance( NodePtr x, NodePtr& root)
-{
- x->color = Node::Red;
- while ( x != root && x->parent->color == Node::Red ) {
- if ( x->parent == x->parent->parent->left ) {
- NodePtr y = x->parent->parent->right;
- if (y && y->color == Node::Red) {
- x->parent->color = Node::Black;
- y->color = Node::Black;
- x->parent->parent->color = Node::Red;
- x = x->parent->parent;
- } else {
- if (x == x->parent->right) {
- x = x->parent;
- rotateLeft( x, root );
- }
- x->parent->color = Node::Black;
- x->parent->parent->color = Node::Red;
- rotateRight (x->parent->parent, root );
- }
- } else {
- NodePtr y = x->parent->parent->left;
- if ( y && y->color == Node::Red ) {
- x->parent->color = Node::Black;
- y->color = Node::Black;
- x->parent->parent->color = Node::Red;
- x = x->parent->parent;
- } else {
- if (x == x->parent->left) {
- x = x->parent;
- rotateRight( x, root );
- }
- x->parent->color = Node::Black;
- x->parent->parent->color = Node::Red;
- rotateLeft( x->parent->parent, root );
- }
- }
- }
- root->color = Node::Black;
-}
-
-
-NodePtr QMapPrivateBase::removeAndRebalance( NodePtr z, NodePtr& root,
- NodePtr& leftmost,
- NodePtr& rightmost )
-{
- NodePtr y = z;
- NodePtr x;
- NodePtr x_parent;
- if (y->left == 0) {
- x = y->right;
- } else {
- if (y->right == 0)
- x = y->left;
- else
- {
- y = y->right;
- while (y->left != 0)
- y = y->left;
- x = y->right;
- }
- }
- if (y != z) {
- z->left->parent = y;
- y->left = z->left;
- if (y != z->right) {
- x_parent = y->parent;
- if (x)
- x->parent = y->parent;
- y->parent->left = x;
- y->right = z->right;
- z->right->parent = y;
- } else {
- x_parent = y;
- }
- if (root == z)
- root = y;
- else if (z->parent->left == z)
- z->parent->left = y;
- else
- z->parent->right = y;
- y->parent = z->parent;
- // Swap the colors
- Node::Color c = y->color;
- y->color = z->color;
- z->color = c;
- y = z;
- } else {
- x_parent = y->parent;
- if (x)
- x->parent = y->parent;
- if (root == z)
- root = x;
- else if (z->parent->left == z)
- z->parent->left = x;
- else
- z->parent->right = x;
- if ( leftmost == z ) {
- if (z->right == 0)
- leftmost = z->parent;
- else
- leftmost = x->minimum();
- }
- if (rightmost == z) {
- if (z->left == 0)
- rightmost = z->parent;
- else
- rightmost = x->maximum();
- }
- }
- if (y->color != Node::Red) {
- while (x != root && (x == 0 || x->color == Node::Black)) {
- if (x == x_parent->left) {
- NodePtr w = x_parent->right;
- if (w->color == Node::Red) {
- w->color = Node::Black;
- x_parent->color = Node::Red;
- rotateLeft(x_parent, root);
- w = x_parent->right;
- }
- if ((w->left == 0 || w->left->color == Node::Black) &&
- (w->right == 0 || w->right->color == Node::Black)) {
- w->color = Node::Red;
- x = x_parent;
- x_parent = x_parent->parent;
- } else {
- if (w->right == 0 || w->right->color == Node::Black) {
- if (w->left)
- w->left->color = Node::Black;
- w->color = Node::Red;
- rotateRight(w, root);
- w = x_parent->right;
- }
- w->color = x_parent->color;
- x_parent->color = Node::Black;
- if (w->right)
- w->right->color = Node::Black;
- rotateLeft(x_parent, root);
- break;
- }
- } else {
- NodePtr w = x_parent->left;
- if (w->color == Node::Red) {
- w->color = Node::Black;
- x_parent->color = Node::Red;
- rotateRight(x_parent, root);
- w = x_parent->left;
- }
- if ((w->right == 0 || w->right->color == Node::Black) &&
- (w->left == 0 || w->left->color == Node::Black)) {
- w->color = Node::Red;
- x = x_parent;
- x_parent = x_parent->parent;
- } else {
- if (w->left == 0 || w->left->color == Node::Black) {
- if (w->right)
- w->right->color = Node::Black;
- w->color = Node::Red;
- rotateLeft(w, root);
- w = x_parent->left;
- }
- w->color = x_parent->color;
- x_parent->color = Node::Black;
- if (w->left)
- w->left->color = Node::Black;
- rotateRight(x_parent, root);
- break;
- }
- }
- }
- if (x)
- x->color = Node::Black;
- }
- return y;
-}
diff --git a/qtools/qmap.h b/qtools/qmap.h
deleted file mode 100644
index 0031e0d..0000000
--- a/qtools/qmap.h
+++ /dev/null
@@ -1,607 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QMap class
-**
-** Created : 990406
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QMAP_H
-#define QMAP_H
-
-#ifndef QT_H
-#include "qshared.h"
-#include "qdatastream.h"
-#endif // QT_H
-
-
-struct QMapNodeBase
-{
- enum Color { Red, Black };
-
- QMapNodeBase* left;
- QMapNodeBase* right;
- QMapNodeBase* parent;
-
- Color color;
-
- QMapNodeBase* minimum() {
- QMapNodeBase* x = this;
- while ( x->left )
- x = x->left;
- return x;
- }
-
- QMapNodeBase* maximum() {
- QMapNodeBase* x = this;
- while ( x->right )
- x = x->right;
- return x;
- }
-};
-
-
-template <class K, class T>
-struct QMapNode : public QMapNodeBase
-{
- QMapNode( const K& _key, const T& _data ) { data = _data; key = _key; }
- QMapNode( const K& _key ) { key = _key; }
- QMapNode( const QMapNode<K,T>& _n ) { key = _n.key; data = _n.data; }
- QMapNode() { }
- T data;
- K key;
-};
-
-
-template<class K, class T>
-class Q_EXPORT QMapIterator
-{
- public:
- /**
- * Typedefs
- */
- typedef QMapNode< K, T >* NodePtr;
-
- /**
- * Variables
- */
- QMapNode<K,T>* node;
-
- /**
- * Functions
- */
- QMapIterator() : node( 0 ) {}
- QMapIterator( QMapNode<K,T>* p ) : node( p ) {}
- QMapIterator( const QMapIterator<K,T>& it ) : node( it.node ) {}
- QMapIterator &operator=(const QMapIterator &it) = default;
-
- bool operator==( const QMapIterator<K,T>& it ) const { return node == it.node; }
- bool operator!=( const QMapIterator<K,T>& it ) const { return node != it.node; }
- T& operator*() { return node->data; }
- const T& operator*() const { return node->data; }
-
- // Cannot have this - some compilers are too stupid
- //T* operator->() const { return &(node->data); }
-
- const K& key() const { return node->key; }
- T& data() { return node->data; }
- const T& data() const { return node->data; }
-
-private:
- int inc() {
- QMapNodeBase* tmp = node;
- if ( tmp->right ) {
- tmp = tmp->right;
- while ( tmp->left )
- tmp = tmp->left;
- } else {
- QMapNodeBase* y = tmp->parent;
- while (tmp == y->right) {
- tmp = y;
- y = y->parent;
- }
- if (tmp->right != y)
- tmp = y;
- }
- node = (NodePtr)tmp;
- return 0;
- }
-
- int dec() {
- QMapNodeBase* tmp = node;
- if (tmp->color == QMapNodeBase::Red &&
- tmp->parent->parent == tmp ) {
- tmp = tmp->right;
- } else if (tmp->left != 0) {
- QMapNodeBase* y = tmp->left;
- while ( y->right )
- y = y->right;
- tmp = y;
- } else {
- QMapNodeBase* y = tmp->parent;
- while (tmp == y->left) {
- tmp = y;
- y = y->parent;
- }
- tmp = y;
- }
- node = (NodePtr)tmp;
- return 0;
- }
-
-public:
- QMapIterator<K,T>& operator++() {
- inc();
- return *this;
- }
-
- QMapIterator<K,T> operator++(int) {
- QMapIterator<K,T> tmp = *this;
- inc();
- return tmp;
- }
-
- QMapIterator<K,T>& operator--() {
- dec();
- return *this;
- }
-
- QMapIterator<K,T> operator--(int) {
- QMapIterator<K,T> tmp = *this;
- dec();
- return tmp;
- }
-};
-
-template<class K, class T>
-class Q_EXPORT QMapConstIterator
-{
- public:
- /**
- * Typedefs
- */
- typedef QMapNode< K, T >* NodePtr;
-
- /**
- * Variables
- */
- QMapNode<K,T>* node;
-
- /**
- * Functions
- */
- QMapConstIterator() : node( 0 ) {}
- QMapConstIterator( QMapNode<K,T>* p ) : node( p ) {}
- QMapConstIterator( const QMapConstIterator<K,T>& it ) : node( it.node ) {}
- QMapConstIterator( const QMapIterator<K,T>& it ) : node( it.node ) {}
-
- bool operator==( const QMapConstIterator<K,T>& it ) const { return node == it.node; }
- bool operator!=( const QMapConstIterator<K,T>& it ) const { return node != it.node; }
- const T& operator*() const { return node->data; }
-
- // Cannot have this - some compilers are too stupid
- //const T* operator->() const { return &(node->data); }
-
- const K& key() const { return node->key; }
- const T& data() const { return node->data; }
-
-private:
- int inc() {
- QMapNodeBase* tmp = node;
- if ( tmp->right ) {
- tmp = tmp->right;
- while ( tmp->left )
- tmp = tmp->left;
- } else {
- QMapNodeBase* y = tmp->parent;
- while (tmp == y->right) {
- tmp = y;
- y = y->parent;
- }
- if (tmp->right != y)
- tmp = y;
- }
- node = (NodePtr)tmp;
- return 0;
- }
-
- int dec() {
- QMapNodeBase* tmp = node;
- if (tmp->color == QMapNodeBase::Red &&
- tmp->parent->parent == tmp ) {
- tmp = tmp->right;
- } else if (tmp->left != 0) {
- QMapNodeBase* y = tmp->left;
- while ( y->right )
- y = y->right;
- tmp = y;
- } else {
- QMapNodeBase* y = tmp->parent;
- while (tmp == y->left) {
- tmp = y;
- y = y->parent;
- }
- tmp = y;
- }
- node = (NodePtr)tmp;
- return 0;
- }
-
-public:
- QMapConstIterator<K,T>& operator++() {
- inc();
- return *this;
- }
-
- QMapConstIterator<K,T> operator++(int) {
- QMapConstIterator<K,T> tmp = *this;
- inc();
- return tmp;
- }
-
- QMapConstIterator<K,T>& operator--() {
- dec();
- return *this;
- }
-
- QMapConstIterator<K,T> operator--(int) {
- QMapConstIterator<K,T> tmp = *this;
- dec();
- return tmp;
- }
-};
-
-
-class Q_EXPORT QMapPrivateBase : public QShared
-{
-public:
- QMapPrivateBase() {
- node_count = 0;
- }
- QMapPrivateBase( const QMapPrivateBase* _map) {
- node_count = _map->node_count;
- }
-
- /**
- * Implementations of basic tree algorithms
- */
- void rotateLeft( QMapNodeBase* x, QMapNodeBase*& root);
- void rotateRight( QMapNodeBase* x, QMapNodeBase*& root );
- void rebalance( QMapNodeBase* x, QMapNodeBase*& root );
- QMapNodeBase* removeAndRebalance( QMapNodeBase* z, QMapNodeBase*& root,
- QMapNodeBase*& leftmost,
- QMapNodeBase*& rightmost );
-
- /**
- * Variables
- */
- int node_count;
-};
-
-
-template <class Key, class T>
-class QMapPrivate : public QMapPrivateBase
-{
-public:
- /**
- * Typedefs
- */
- typedef QMapIterator< Key, T > Iterator;
- typedef QMapConstIterator< Key, T > ConstIterator;
- typedef QMapNode< Key, T > Node;
- typedef QMapNode< Key, T >* NodePtr;
-
- /**
- * Functions
- */
- QMapPrivate() {
- header = new Node;
- header->color = QMapNodeBase::Red; // Mark the header
- header->parent = 0;
- header->left = header->right = header;
- }
- QMapPrivate( const QMapPrivate< Key, T >* _map ) : QMapPrivateBase( _map ) {
- header = new Node;
- header->color = QMapNodeBase::Red; // Mark the header
- if ( _map->header->parent == 0 ) {
- header->parent = 0;
- header->left = header->right = header;
- } else {
- header->parent = copy( (NodePtr)(_map->header->parent) );
- header->parent->parent = header;
- header->left = header->parent->minimum();
- header->right = header->parent->maximum();
- }
- }
- ~QMapPrivate() { clear(); delete header; }
-
- NodePtr copy( NodePtr p ) {
- if ( !p )
- return 0;
- NodePtr n = new Node( *p );
- n->color = p->color;
- if ( p->left ) {
- n->left = copy( (NodePtr)(p->left) );
- n->left->parent = n;
- } else {
- n->left = 0;
- }
- if ( p->right ) {
- n->right = copy( (NodePtr)(p->right) );
- n->right->parent = n;
- } else {
- n->right = 0;
- }
- return n;
- }
-
- void clear() {
- clear( (NodePtr)(header->parent) );
- header->color = QMapNodeBase::Red;
- header->parent = 0;
- header->left = header->right = header;
- node_count = 0;
- }
-
- void clear( NodePtr p ) {
- while ( p != 0 ) {
- clear( (NodePtr)p->right );
- NodePtr y = (NodePtr)p->left;
- delete p;
- p = y;
- }
- }
-
- Iterator begin() { return Iterator( (NodePtr)(header->left ) ); }
- Iterator end() { return Iterator( header ); }
- ConstIterator begin() const { return ConstIterator( (NodePtr)(header->left ) ); }
- ConstIterator end() const { return ConstIterator( header ); }
-
- ConstIterator find(const Key& k) const {
- QMapNodeBase* y = header; // Last node
- QMapNodeBase* x = header->parent; // Root node.
-
- while ( x != 0 ) {
- // If as k <= key(x) go left
- if ( !( key(x) < k ) ) {
- y = x;
- x = x->left;
- } else {
- x = x->right;
- }
- }
-
- // Was k bigger/smaller then the biggest/smallest
- // element of the tree ? Return end()
- if ( y == header || k < key(y) )
- return ConstIterator( header );
- return ConstIterator( (NodePtr)y );
- }
-
- void remove( Iterator it ) {
- NodePtr del = (NodePtr) removeAndRebalance( it.node, header->parent, header->left, header->right );
- delete del;
- --node_count;
- }
-
-#ifdef QT_QMAP_DEBUG
- void inorder( QMapNodeBase* x = 0, int level = 0 ){
- if ( !x )
- x = header->parent;
- if ( x->left )
- inorder( x->left, level + 1 );
- //cout << level << " Key=" << key(x) << " Value=" << ((NodePtr)x)->data << endl;
- if ( x->right )
- inorder( x->right, level + 1 );
- }
-#endif
-
- Iterator insertMulti(const Key& v){
- QMapNodeBase* y = header;
- QMapNodeBase* x = header->parent;
- while (x != 0){
- y = x;
- x = ( v < key(x) ) ? x->left : x->right;
- }
- return insert(x, y, v);
- }
-
- Iterator insertSingle( const Key& k ) {
- // Search correct position in the tree
- QMapNodeBase* y = header;
- QMapNodeBase* x = header->parent;
- bool result = TRUE;
- while ( x != 0 ) {
- result = ( k < key(x) );
- y = x;
- x = result ? x->left : x->right;
- }
- // Get iterator on the last not empty one
- Iterator j( (NodePtr)y );
- if ( result ) {
- // Smaller then the leftmost one ?
- if ( j == begin() ) {
- return insert(x, y, k );
- } else {
- // Perhaps daddy is the right one ?
- --j;
- }
- }
- // Really bigger ?
- if ( (j.node->key) < k )
- return insert(x, y, k );
- // We are going to replace a node
- return j;
- }
-
- Iterator insert( QMapNodeBase* x, QMapNodeBase* y, const Key& k ) {
- NodePtr z = new Node( k );
- if (y == header || x != 0 || k < key(y) ) {
- y->left = z; // also makes leftmost = z when y == header
- if ( y == header ) {
- header->parent = z;
- header->right = z;
- } else if ( y == header->left )
- header->left = z; // maintain leftmost pointing to min node
- } else {
- y->right = z;
- if ( y == header->right )
- header->right = z; // maintain rightmost pointing to max node
- }
- z->parent = y;
- z->left = 0;
- z->right = 0;
- rebalance( z, header->parent );
- ++node_count;
- return Iterator(z);
- }
-
-protected:
- /**
- * Helpers
- */
- const Key& key( QMapNodeBase* b ) const { return ((NodePtr)b)->key; }
-
- /**
- * Variables
- */
- NodePtr header;
-};
-
-
-template<class Key, class T>
-class Q_EXPORT QMap
-{
-public:
- /**
- * Typedefs
- */
- typedef QMapIterator< Key, T > Iterator;
- typedef QMapConstIterator< Key, T > ConstIterator;
- typedef T ValueType;
- typedef QMapPrivate< Key, T > Priv;
-
- /**
- * API
- */
- QMap() { sh = new QMapPrivate< Key, T >; }
- QMap( const QMap<Key,T>& m ) { sh = m.sh; sh->ref(); }
- ~QMap() { if ( sh->deref() ) delete sh; }
-
- QMap<Key,T>& operator= ( const QMap<Key,T>& m )
- { m.sh->ref(); if ( sh->deref() ) delete sh; sh = m.sh; return *this; }
-
- Iterator begin() { detach(); return sh->begin(); }
- Iterator end() { detach(); return sh->end(); }
- ConstIterator begin() const { return ((const Priv*)sh)->begin(); }
- ConstIterator end() const { return ((const Priv*)sh)->end(); }
-
- Iterator find ( const Key& k )
- { detach(); return Iterator( sh->find( k ).node ); }
- ConstIterator find ( const Key& k ) const
- { return sh->find( k ); }
- T& operator[] ( const Key& k ) {
- detach(); QMapNode<Key,T>* p = sh->find( k ).node;
- if ( p != sh->end().node ) return p->data;
- return insert( k, T() ).data(); }
- const T& operator[] ( const Key& k ) const
- { return sh->find( k ).data(); }
- bool contains ( const Key& k ) const
- { return find( k ) != end(); }
- //{ return sh->find( k ) != ((const Priv*)sh)->end(); }
-
- uint count() const { return sh->node_count; }
-
- bool isEmpty() const { return sh->node_count == 0; }
-
- Iterator insert( const Key& key, const T& value ) {
- detach();
- Iterator it = sh->insertSingle( key );
- it.data() = value;
- return it;
- }
-
- void remove( Iterator it ) { detach(); sh->remove( it ); }
- void remove( const Key& k ) {
- detach();
- Iterator it( sh->find( k ).node );
- if ( it != end() )
- sh->remove( it );
- }
-
- Iterator replace( const Key& k, const T& v ) {
- remove( k );
- return insert( k, v );
- }
-
- void clear() { if ( sh->count == 1 ) sh->clear(); else { sh->deref(); sh = new QMapPrivate<Key,T>; } }
-
-#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
- bool operator==( const QMap<Key,T>& ) const { return FALSE; }
-#endif
-
-protected:
- /**
- * Helpers
- */
- void detach() { if ( sh->count > 1 ) { sh->deref(); sh = new QMapPrivate<Key,T>( sh ); } }
-
- Priv* sh;
-};
-
-
-#ifndef QT_NO_DATASTREAM
-template<class Key, class T>
-inline QDataStream& operator>>( QDataStream& s, QMap<Key,T>& m ) {
- m.clear();
- Q_UINT32 c;
- s >> c;
- for( Q_UINT32 i = 0; i < c; ++i ) {
- Key k; T t;
- s >> k >> t;
- m.insert( k, t );
- }
- return s;
-}
-
-
-template<class Key, class T>
-inline QDataStream& operator<<( QDataStream& s, const QMap<Key,T>& m ) {
- s << (Q_UINT32)m.count();
- QMapConstIterator<Key,T> it = m.begin();
- for( ; it != m.end(); ++it )
- s << it.key() << it.data();
- return s;
-}
-#endif
-
-#endif // QMAP_H
diff --git a/qtools/qmodules.h b/qtools/qmodules.h
deleted file mode 100644
index 08f0baf..0000000
--- a/qtools/qmodules.h
+++ /dev/null
@@ -1,11 +0,0 @@
-// These modules are licensed to you
-#define QT_MODULE_TOOLS
-#define QT_MODULE_KERNEL
-#define QT_MODULE_WIDGETS
-#define QT_MODULE_DIALOGS
-#define QT_MODULE_ICONVIEW
-#define QT_MODULE_WORKSPACE
-#define QT_MODULE_NETWORK
-#define QT_MODULE_CANVAS
-#define QT_MODULE_TABLE
-#define QT_MODULE_XML
diff --git a/qtools/qptrdict.doc b/qtools/qptrdict.doc
deleted file mode 100644
index 633536c..0000000
--- a/qtools/qptrdict.doc
+++ /dev/null
@@ -1,486 +0,0 @@
-/****************************************************************************
-**
-**
-** QPtrDict and QPtrDictIterator class documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QPtrDict documentation
- *****************************************************************************/
-
-/*!
- \class QPtrDict qptrdict.h
- \brief The QPtrDict class is a template class that provides a dictionary based on \c void* keys.
-
- \ingroup collection
- \ingroup tools
-
- QPtrDict is implemented as a template class. Define a
- template instance QPtrDict\<X\> to create a dictionary that operates on
- pointers to X, or X*.
-
- A dictionary is a collection that associates an item with a key.
- The key is used for inserting and looking up an item. QPtrDict has
- \c void* keys.
-
- The dictionary has very fast insertion and lookup.
-
- Example:
- \code
- #include <qptrdict.h>
- #include <stdio.h>
-
- void main()
- {
- int *a = new int[12];
- int *b = new int[10];
- int *c = new int[18];
- int *d = new int[13];
-
- QPtrDict<char> dict; // maps void* -> char*
-
- dict.insert( a, "a is int[12]" ); // describe pointers
- dict.insert( b, "b is int[10]" );
- dict.insert( c, "c is int[18]" );
-
- printf( "%s\n", dict[a] ); // print descriptions
- printf( "%s\n", dict[b] );
- printf( "%s\n", dict[c] );
-
- if ( !dict[d] )
- printf( "d not in dictionary\n" );
- }
- \endcode
-
- Program output:
- \code
- a is int[12]
- b is int[10]
- c is int[18]
- d not in dictionary
- \endcode
-
- The dictionary in our example maps \c int* keys to \c char* items.
- QPtrDict implements the \link operator[] [] operator\endlink to lookup
- an item.
-
- QPtrDict is implemented by QGDict as a hash array with a fixed number of
- entries. Each array entry points to a singly linked list of buckets, in
- which the dictionary items are stored.
-
- When an item is inserted with a key, the key is converted (hashed) to
- an integer index into the hash array using the \c mod operation. The
- item is inserted before the first bucket in the list of buckets.
-
- Looking up an item is normally very fast. The key is again hashed to an
- array index. Then QPtrDict scans the list of buckets and returns the item
- found or null if the item was not found. You cannot insert null pointers
- into a dictionary.
-
- The size of the hash array is very important. In order to get good
- performance, you should use a suitably large \link primes.html prime
- number\endlink. Suitable means equal to or larger than the maximum
- expected number of dictionary items.
-
- Items with equal keys are allowed. When inserting two items with the
- same key, only the last inserted item will be visible (last in, first out)
- until it is removed.
-
- Example:
- \code
- #include <qptrdict.h>
- #include <stdio.h>
-
- void main()
- {
- QPtrDict<char> dict; // maps char* ==> char*
-
- double *ptr = new double[28];
- dict.insert( ptr, "first" );
- dict.insert( ptr, "second" );
-
- printf( "%s\n", dict[ptr] );
- dict.remove( ptr );
- printf( "%s\n", dict[ptr] );
- }
- \endcode
-
- Program output:
- \code
- second
- first
- \endcode
-
- The QPtrDictIterator class can traverse the dictionary contents, but only
- in an arbitrary order. Multiple iterators may independently traverse the
- same dictionary.
-
- Calling setAutoDelete(TRUE) for a dictionary tells it to delete items
- that are removed . The default is to not delete items when they are
- removed.
-
- When inserting an item into a dictionary, only the pointer is copied, not
- the item itself. This is called a shallow copy. It is possible to make the
- dictionary copy all of the item's data (known as a deep copy) when an
- item is inserted. insert() calls the virtual function
- QCollection::newItem() for the item to be inserted.
- Inherit a dictionary and reimplement it if you want deep copies.
-
- When removing a dictionary item, the virtual function
- QCollection::deleteItem() is called. QPtrDict's default implementation
- is to delete the item if auto-deletion is enabled.
-
- \sa QPtrDictIterator, QDict, QAsciiDict, QIntDict,
- \link collection.html Collection Classes\endlink
-*/
-
-
-/*!
- \fn QPtrDict::QPtrDict( int size )
- Constructs a dictionary using an internal hash array with the size
- \e size.
-
- Setting \e size to a suitably large \link primes.html prime number\endlink
- (equal to or greater than the expected number of entries) makes the hash
- distribution better and hence the lookup faster.
-*/
-
-/*!
- \fn QPtrDict::QPtrDict( const QPtrDict<type> &dict )
- Constructs a copy of \e dict.
-
- Each item in \e dict are inserted into this dictionary.
- Only the pointers are copied (shallow copy).
-*/
-
-/*!
- \fn QPtrDict::~QPtrDict()
- Removes all items from the dictionary and destroys it.
-
- All iterators that access this dictionary will be reset.
-
- \sa setAutoDelete()
-*/
-
-/*!
- \fn QPtrDict<type> &QPtrDict::operator=(const QPtrDict<type> &dict)
- Assigns \e dict to this dictionary and returns a reference to this
- dictionary.
-
- This dictionary is first cleared, then each item in \e dict is inserted
- into this dictionary.
- Only the pointers are copied (shallow copy), unless newItem() has been
- reimplemented().
-*/
-
-/*!
- \fn uint QPtrDict::count() const
- Returns the number of items in the dictionary.
- \sa isEmpty()
-*/
-
-/*!
- \fn uint QPtrDict::size() const
- Returns the size of the internal hash array (as specified in the
- constructor).
- \sa count()
-*/
-
-/*!
- \fn void QPtrDict::resize( uint newsize )
- Changes the size of the hashtable the \a newsize.
- The contents of the dictionary are preserved,
- but all iterators on the dictionary become invalid.
-*/
-
-/*!
- \fn bool QPtrDict::isEmpty() const
- Returns TRUE if the dictionary is empty, i.e. count() == 0. Returns FALSE
- otherwise.
- \sa count()
-*/
-
-/*!
- \fn void QPtrDict::insert( void *key, const type *item )
- Inserts the \e key with the \e item into the dictionary.
-
- The key does not have to be a unique dictionary key. If multiple items
- are inserted with the same key, only the last item will be visible.
-
- Null items are not allowed.
-
- \sa replace()
-*/
-
-/*!
- \fn void QPtrDict::replace( void *key, const type *item )
- Replaces an item which has a key equal to \e key with \e item.
-
- If the item does not already exist, it will be inserted.
-
- Null items are not allowed.
-
- Equivalent to:
- \code
- QPtrDict<char> dict;
- ...
- if ( dict.find(key) )
- dict.remove( key );
- dict.insert( key, item );
- \endcode
-
- If there are two or more items with equal keys, then the last inserted
- of these will be replaced.
-
- \sa insert()
-*/
-
-/*!
- \fn bool QPtrDict::remove( void *key )
- Removes the item associated with \e key from the dictionary.
- Returns TRUE if successful, or FALSE if the key does not exist in the
- dictionary.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be removed.
-
- The removed item is deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- All dictionary iterators that refer to the removed item will be set to
- point to the next item in the dictionary traversing order.
-
- \sa take(), clear(), setAutoDelete()
-*/
-
-/*!
- \fn type *QPtrDict::take( void *key )
- Takes the item associated with \e key out of the dictionary without
- deleting it (even if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled).
-
- If there are two or more items with equal keys, then the last inserted
- of these will be taken.
-
- Returns a pointer to the item taken out, or null if the key does not
- exist in the dictionary.
-
- All dictionary iterators that refer to the taken item will be set to
- point to the next item in the dictionary traversing order.
-
- \sa remove(), clear(), setAutoDelete()
-*/
-
-/*!
- \fn void QPtrDict::clear()
- Removes all items from the dictionary.
-
- The removed items are deleted if \link QCollection::setAutoDelete()
- auto-deletion\endlink is enabled.
-
- All dictionary iterators that access this dictionary will be reset.
-
- \sa remove(), take(), setAutoDelete()
-*/
-
-/*!
- \fn type *QPtrDict::find( void *key ) const
- Returns the item associated with \e key, or null if the key does not
- exist in the dictionary.
-
- This function uses an internal hashing algorithm to optimize lookup.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be found.
-
- Equivalent to the [] operator.
-
- \sa operator[]()
-*/
-
-/*!
- \fn type *QPtrDict::operator[]( void *key ) const
- Returns the item associated with \e key, or null if the key does not
- exist in the dictionary.
-
- This function uses an internal hashing algorithm to optimize lookup.
-
- If there are two or more items with equal keys, then the last inserted
- of these will be found.
-
- Equivalent to the find() function.
-
- \sa find()
-*/
-
-/*!
- \fn void QPtrDict::statistics() const
- Debugging-only function that prints out the dictionary distribution
- using qDebug().
-*/
-
-
-/*****************************************************************************
- QPtrDictIterator documentation
- *****************************************************************************/
-
-/*!
- \class QPtrDictIterator qptrdict.h
- \brief The QPtrDictIterator class provides an iterator for QPtrDict collections.
-
- \ingroup collection
- \ingroup tools
-
- QPtrDictIterator is implemented as a template class.
- Define a template instance QPtrDictIterator\<X\> to create a
- dictionary iterator that operates on QPtrDict\<X\> (dictionary of X*).
-
- Example:
- \code
- #include <qptrdict.h>
- #include <stdio.h>
-
- void main()
- {
- int *a = new int[12];
- int *b = new int[10];
- int *c = new int[18];
- int *d = new int[13];
-
- QPtrDict<char> dict; // maps void* -> char*
-
- dict.insert( a, "a is int[12]" ); // describe pointers
- dict.insert( b, "b is int[10]" );
- dict.insert( c, "c is int[18]" );
-
- QPtrDictIterator<char> it( dict ); // iterator for dict
-
- while ( it.current() ) {
- printf( "%x -> %s\n", it.currentKey(), it.current() );
- ++it;
- }
- }
- \endcode
-
- Program output:
- \code
- 804a788 -> a is int[12]
- 804a7f0 -> c is int[18]
- 804a7c0 -> b is int[10]
- \endcode
-
- Note that the traversal order is arbitrary, you are not guaranteed the
- order above.
-
- Multiple iterators may independently traverse the same dictionary.
- A QPtrDict knows about all iterators that are operating on the dictionary.
- When an item is removed from the dictionary, QPtrDict update all
- iterators that are referring the removed item to point to the next item
- in the traversing order.
-
- \sa QPtrDict, \link collection.html Collection Classes\endlink
-*/
-
-/*!
- \fn QPtrDictIterator::QPtrDictIterator( const QPtrDict<type> &dict )
- Constructs an iterator for \e dict. The current iterator item is
- set to point on the first item in the \e dict.
-*/
-
-/*!
- \fn QPtrDictIterator::~QPtrDictIterator()
- Destroys the iterator.
-*/
-
-/*!
- \fn uint QPtrDictIterator::count() const
- Returns the number of items in the dictionary this iterator operates on.
- \sa isEmpty()
-*/
-
-/*!
- \fn bool QPtrDictIterator::isEmpty() const
- Returns TRUE if the dictionary is empty, i.e. count() == 0. Returns FALSE
- otherwise.
- \sa count()
-*/
-
-/*!
- \fn type *QPtrDictIterator::toFirst()
- Sets the current iterator item to point to the first item in the
- dictionary and returns a pointer to the item.
- If the dictionary is empty it sets the current item to null and
- returns null.
-*/
-
-/*!
- \fn QPtrDictIterator::operator type *() const
- Cast operator. Returns a pointer to the current iterator item.
- Same as current().
-*/
-
-/*!
- \fn type *QPtrDictIterator::current() const
- Returns a pointer to the current iterator item.
-*/
-
-/*!
- \fn void *QPtrDictIterator::currentKey() const
- Returns the key for the current iterator item.
-*/
-
-/*!
- \fn type *QPtrDictIterator::operator()()
- Makes the succeeding item current and returns the original current item.
-
- If the current iterator item was the last item in the dictionary or if it
- was null, null is returned.
-*/
-
-/*!
- \fn type *QPtrDictIterator::operator++()
- Prefix ++ makes the succeeding item current and returns the new current
- item.
-
- If the current iterator item was the last item in the dictionary or if it
- was null, null is returned.
-*/
-
-/*!
- \fn type *QPtrDictIterator::operator+=( uint jump )
- Sets the current item to the item \e jump positions after the current item,
- and returns a pointer to that item.
-
- If that item is beyond the last item or if the dictionary is empty,
- it sets the current item to null and returns null.
-*/
diff --git a/qtools/qptrdict.h b/qtools/qptrdict.h
deleted file mode 100644
index df8bcb4..0000000
--- a/qtools/qptrdict.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QPtrDict template class
-**
-** Created : 970415
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QPTRDICT_H
-#define QPTRDICT_H
-
-#ifndef QT_H
-#include "qgdict.h"
-#endif // QT_H
-
-
-template<class type> class Q_EXPORT QPtrDict : public QGDict
-{
-public:
- QPtrDict(uint size=17) : QGDict(size,PtrKey,0,0) {}
- QPtrDict( const QPtrDict<type> &d ) : QGDict(d) {}
- ~QPtrDict() { clear(); }
- QPtrDict<type> &operator=(const QPtrDict<type> &d)
- { return (QPtrDict<type>&)QGDict::operator=(d); }
- uint count() const { return QGDict::count(); }
- uint size() const { return QGDict::size(); }
- bool isEmpty() const { return QGDict::count() == 0; }
- void insert( void *k, const type *d )
- { QGDict::look_ptr(k,(Item)d,1); }
- void replace( void *k, const type *d )
- { QGDict::look_ptr(k,(Item)d,2); }
- bool remove( void *k ) { return QGDict::remove_ptr(k); }
- type *take( void *k ) { return (type*)QGDict::take_ptr(k); }
- type *find( void *k ) const
- { return (type *)((QGDict*)this)->QGDict::look_ptr(k,0,0); }
- type *operator[]( void *k ) const
- { return (type *)((QGDict*)this)->QGDict::look_ptr(k,0,0); }
- void clear() { QGDict::clear(); }
- void resize( uint n ) { QGDict::resize(n); }
- void statistics() const { QGDict::statistics(); }
-private:
- void deleteItem( Item d );
-};
-
-#if defined(Q_DELETING_VOID_UNDEFINED)
-template<> inline void QPtrDict<void>::deleteItem( QCollection::Item )
-{
-}
-#endif
-
-template<class type> inline void QPtrDict<type>::deleteItem( QCollection::Item d )
-{
- if ( del_item ) delete (type *)d;
-}
-
-
-template<class type> class Q_EXPORT QPtrDictIterator : public QGDictIterator
-{
-public:
- QPtrDictIterator(const QPtrDict<type> &d) :QGDictIterator((QGDict &)d) {}
- ~QPtrDictIterator() {}
- uint count() const { return dict->count(); }
- bool isEmpty() const { return dict->count() == 0; }
- type *toFirst() { return (type *)QGDictIterator::toFirst(); }
- operator type *() const { return (type *)QGDictIterator::get(); }
- type *current() const { return (type *)QGDictIterator::get(); }
- void *currentKey() const { return QGDictIterator::getKeyPtr(); }
- type *operator()() { return (type *)QGDictIterator::operator()(); }
- type *operator++() { return (type *)QGDictIterator::operator++(); }
- type *operator+=(uint j) { return (type *)QGDictIterator::operator+=(j);}
-};
-
-
-#endif // QPTRDICT_H
diff --git a/qtools/qqueue.h b/qtools/qqueue.h
deleted file mode 100644
index 94bc130..0000000
--- a/qtools/qqueue.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QQueue template/macro class
-**
-** Created : 920917
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QQUEUE_H
-#define QQUEUE_H
-
-#ifndef QT_H
-#include "qglist.h"
-#endif // QT_H
-
-
-template<class type> class QQueue : private QGList
-{
-public:
- QQueue() {}
- QQueue( const QQueue<type> &q ) : QGList(q) {}
- ~QQueue() { clear(); }
- QQueue<type>& operator=(const QQueue<type> &q)
- { return (QQueue<type>&)QGList::operator=(q); }
- bool autoDelete() const { return QCollection::autoDelete(); }
- void setAutoDelete( bool del ) { QCollection::setAutoDelete(del); }
- uint count() const { return QGList::count(); }
- bool isEmpty() const { return QGList::count() == 0; }
- void enqueue( const type *d ) { QGList::append(Item(d)); }
- type *dequeue() { return (type *)QGList::takeFirst();}
- bool remove() { return QGList::removeFirst(); }
- void clear() { QGList::clear(); }
- type *head() const { return (type *)QGList::cfirst(); }
- operator type *() const { return (type *)QGList::cfirst(); }
- type *current() const { return (type *)QGList::cfirst(); }
-private:
- void deleteItem( Item d ) { if ( del_item ) delete (type *)d; }
-};
-
-
-#endif // QQUEUE_H
diff --git a/qtools/qregexp.cpp b/qtools/qregexp.cpp
deleted file mode 100644
index 8709858..0000000
--- a/qtools/qregexp.cpp
+++ /dev/null
@@ -1,1093 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QRegExp class
-**
-** Created : 950126
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qregexp.h"
-#include <ctype.h>
-#include <stdlib.h>
-
-// NOT REVISED
-/*!
- \class QRegExp qregexp.h
- \ingroup tools
- \ingroup misc
- \brief The QRegExp class provides pattern matching using regular
- expressions or wildcards.
-
- QRegExp knows these regexp primitives:
- <ul plain>
- <li><dfn>c</dfn> matches the character 'c'
- <li><dfn>.</dfn> matches any character
- <li><dfn>^</dfn> matches start of input
- <li><dfn>$</dfn> matches end of input
- <li><dfn>[]</dfn> matches a defined set of characters - see below.
- <li><dfn>a*</dfn> matches a sequence of zero or more a's
- <li><dfn>a+</dfn> matches a sequence of one or more a's
- <li><dfn>a?</dfn> matches an optional a
- <li><dfn>\c</dfn> escape code for matching special characters such
- as \, [, *, +, . etc.
- <li><dfn>\t</dfn> matches the TAB character (9)
- <li><dfn>\n</dfn> matches newline (10)
- <li><dfn>\r</dfn> matches return (13)
- <li><dfn>\s</dfn> matches a white space (defined as any character
- for which QChar::isSpace() returns TRUE. This includes at least
- ASCII characters 9 (TAB), 10 (LF), 11 (VT), 12(FF), 13 (CR) and 32
- (Space)).
- <li><dfn>\d</dfn> matches a digit (defined as any character for
- which QChar::isDigit() returns TRUE. This includes at least ASCII
- characters '0'-'9').
- <li><dfn>\x1f6b</dfn> matches the character with unicode point U1f6b
- (hexadecimal 1f6b). \x0012 will match the ASCII/Latin1 character
- 0x12 (18 decimal, 12 hexadecimal).
- <li><dfn>\022</dfn> matches the ASCII/Latin1 character 022 (18
- decimal, 22 octal).
- </ul>
-
- In wildcard mode, it only knows four primitives:
- <ul plain>
- <li><dfn>c</dfn> matches the character 'c'
- <li><dfn>?</dfn> matches any character
- <li><dfn>*</dfn> matches any sequence of characters
- <li><dfn>[]</dfn> matches a defined set of characters - see below.
- </ul>
-
- QRegExp supports Unicode both in the pattern strings and in the
- strings to be matched.
-
- When writing regular expressions in C++ code, remember that C++
- processes \ characters. So in order to match e.g. a "." character,
- you must write "\\." in C++ source, not "\.".
-
- A character set matches a defined set of characters. For example,
- [BSD] matches any of 'B', 'D' and 'S'. Within a character set, the
- special characters '.', '*', '?', '^', '$', '+' and '[' lose their
- special meanings. The following special characters apply:
- <ul plain>
- <li><dfn>^</dfn> When placed first in the list, changes the
- character set to match any character \e not in the list. To include
- the character '^' itself in the set, escape it or place it anywhere
- but first.
- <li><dfn>-</dfn> Defines a range of characters. To include the
- character '-' itself in the set, escape it or place it last.
- <li><dfn>]</dfn> Ends the character set definition. To include the
- character ']' itself in the set, escape it or place it first (but
- after the negation operator '^', if present)
- </ul>
- Thus, [a-zA-Z0-9.] matches upper and lower case ASCII letters,
- digits and dot; and [^\s] matches everything except white space.
-
- \bug Case insensitive matching is not supported for non-ASCII/Latin1
- (non-8bit) characters. Any character with a non-zero QChar.row() is
- matched case sensitively even if the QRegExp is in case insensitive
- mode.
-
- \note In Qt 3.0, the language of regular expressions will contain
- five more special characters, namely '(', ')', '{', '|' and '}'. To
- ease porting, it's a good idea to escape these characters with a
- backslash in all the regular expressions you'll write from now on.
-*/
-
-
-//
-// The regexp pattern is internally represented as an array of uints,
-// each element containing an 16-bit character or a 32-bit code
-// (listed below). User-defined character classes (e.g. [a-zA-Z])
-// are encoded as this:
-// uint no: 1 2 3 ...
-// value: CCL | n from | to from | to
-//
-// where n is the (16-bit) number of following range definitions and
-// from and to define the ranges inclusive. from <= to is always true,
-// otherwise it is a built-in charclass (Pxx, eg \s - PWS). Single
-// characters in the class are coded as from==to. Negated classes
-// (e.g. [^a-z]) use CCN instead of CCL.
-
-const uint END = 0x00000000;
-const uint PWS = 0x10010000; // predef charclass: whitespace (\s)
-const uint PDG = 0x10020000; // predef charclass: digit (\d)
-const uint CCL = 0x20010000; // character class []
-const uint CCN = 0x20020000; // neg character class [^]
-const uint CHR = 0x40000000; // character
-const uint BOL = 0x80010000; // beginning of line ^
-const uint EOL = 0x80020000; // end of line $
-const uint BOW = 0x80030000; // beginning of word \<
-const uint EOW = 0x80040000; // end of word \>
-const uint ANY = 0x80050000; // any character .
-const uint CLO = 0x80070000; // Kleene closure *
-const uint OPT = 0x80080000; // Optional closure ?
-
-const uint MCC = 0x20000000; // character class bitmask
-const uint MCD = 0xffff0000; // code mask
-const uint MVL = 0x0000ffff; // value mask
-
-//
-// QRegExp::error codes (internal)
-//
-
-const int PatOk = 0; // pattern ok
-const int PatNull = 1; // no pattern defined
-const int PatSyntax = 2; // pattern syntax error
-const int PatOverflow = 4; // pattern too long
-
-
-/*****************************************************************************
- QRegExp member functions
- *****************************************************************************/
-
-/*!
- Constructs an empty regular expression.
-*/
-
-QRegExp::QRegExp()
-{
- rxdata = 0;
- cs = TRUE;
- wc = FALSE;
- error = PatOk;
-}
-
-/*!
- Constructs a regular expression.
-
- \arg \e pattern is the regular expression pattern string.
- \arg \e caseSensitive specifies whether or not to use case sensitive
- matching.
- \arg \e wildcard specifies whether the pattern string should be used for
- wildcard matching (also called globbing expression), normally used for
- matching file names.
-
- \sa setWildcard()
-*/
-
-QRegExp::QRegExp( const QCString &pattern, bool caseSensitive, bool wildcard )
-{
- rxstring = pattern;
- rxdata = 0;
- cs = caseSensitive;
- wc = wildcard;
- compile();
-}
-
-/*!
- Constructs a regular expression which is a copy of \e r.
- \sa operator=(const QRegExp&)
-*/
-
-QRegExp::QRegExp( const QRegExp &r )
-{
- rxstring = r.pattern();
- rxdata = 0;
- cs = r.caseSensitive();
- wc = r.wildcard();
- compile();
-}
-
-/*!
- Destructs the regular expression and cleans up its internal data.
-*/
-
-QRegExp::~QRegExp()
-{
- if ( rxdata ) // Avoid purify complaints
- delete [] rxdata;
-}
-
-/*!
- Copies the regexp \e r and returns a reference to this regexp.
- The case sensitivity and wildcard options are copied, as well.
-*/
-
-QRegExp &QRegExp::operator=( const QRegExp &r )
-{
- rxstring = r.rxstring;
- cs = r.cs;
- wc = r.wc;
- compile();
- return *this;
-}
-
-/*!
- \obsolete
- Consider using setPattern() instead of this method.
-
- Sets the pattern string to \e pattern and returns a reference to this regexp.
- The case sensitivity or wildcard options do not change.
-*/
-
-QRegExp &QRegExp::operator=( const QCString &pattern )
-{
- rxstring = pattern;
- compile();
- return *this;
-}
-
-
-/*!
- Returns TRUE if this regexp is equal to \e r.
-
- Two regexp objects are equal if they have equal pattern strings,
- case sensitivity options and wildcard options.
-*/
-
-bool QRegExp::operator==( const QRegExp &r ) const
-{
- return rxstring == r.rxstring && cs == r.cs && wc == r.wc;
-}
-
-/*!
- \fn bool QRegExp::operator!=( const QRegExp &r ) const
-
- Returns TRUE if this regexp is \e not equal to \e r.
-
- \sa operator==()
-*/
-
-/*!
- \fn bool QRegExp::isEmpty() const
- Returns TRUE if the regexp is empty.
-*/
-
-/*!
- \fn bool QRegExp::isValid() const
- Returns TRUE if the regexp is valid, or FALSE if it is invalid.
-
- The pattern "[a-z" is an example of an invalid pattern, since it lacks a
- closing bracket.
-*/
-
-
-/*!
- \fn bool QRegExp::wildcard() const
- Returns TRUE if wildcard mode is on, otherwise FALSE. \sa setWildcard().
-*/
-
-/*!
- Sets the wildcard option for the regular expression. The default
- is FALSE.
-
- Setting \e wildcard to TRUE makes it convenient to match filenames
- instead of plain text.
-
- For example, "qr*.cpp" matches the string "qregexp.cpp" in wildcard mode,
- but not "qicpp" (which would be matched in normal mode).
-
- \sa wildcard()
-*/
-
-void QRegExp::setWildcard( bool wildcard )
-{
- if ( wildcard != wc ) {
- wc = wildcard;
- compile();
- }
-}
-
-/*!
- \fn bool QRegExp::caseSensitive() const
-
- Returns TRUE if case sensitivity is enabled, otherwise FALSE. The
- default is TRUE.
-
- \sa setCaseSensitive()
-*/
-
-/*!
- Enables or disables case sensitive matching.
-
- In case sensitive mode, "a.e" matches "axe" but not "Axe".
-
- See also: caseSensitive()
-*/
-
-void QRegExp::setCaseSensitive( bool enable )
-{
- if ( cs != enable ) {
- cs = enable;
- compile();
- }
-}
-
-
-/*!
- \fn QCString QRegExp::pattern() const
- Returns the pattern string of the regexp.
-*/
-
-
-/*!
- \fn void QRegExp::setPattern(const QCString & pattern)
- Sets the pattern string to \a pattern and returns a reference to this regexp.
- The case sensitivity or wildcard options do not change.
-*/
-
-static inline bool iswordchar( int x )
-{
- return isalnum(x) || x == '_'; //# Only 8-bit support
-}
-
-
-/*!
- \internal
- Match character class
-*/
-
-static bool matchcharclass( uint *rxd, char c )
-{
- uint *d = rxd;
- uint clcode = *d & MCD;
- bool neg = clcode == CCN;
- if ( clcode != CCL && clcode != CCN)
- qWarning("QRegExp: Internal error, please report to qt-bugs@trolltech.com");
- uint numFields = *d & MVL;
- uint cval = (unsigned char)c; //(((uint)(c.row())) << 8) | ((uint)c.cell());
- bool found = FALSE;
- for ( int i = 0; i < (int)numFields; i++ ) {
- d++;
- if ( *d == PWS && isspace(c) ) {
- found = TRUE;
- break;
- }
- if ( *d == PDG && isdigit(c) ) {
- found = TRUE;
- break;
- }
- else {
- uint from = ( *d & MCD ) >> 16;
- uint to = *d & MVL;
- if ( (cval >= from) && (cval <= to) ) {
- found = TRUE;
- break;
- }
- }
- }
- return neg ? !found : found;
-}
-
-
-
-/*
- Internal: Recursively match string.
-*/
-
-static int matchstring( uint *rxd, const char *str, uint strlength,
- const char *bol, bool cs )
-{
- const char *p = str;
- const char *start = p;
- uint pl = strlength;
- uint *d = rxd;
-
- //### in all cases here: handle pl == 0! (don't read past strlen)
- while ( *d ) {
- if ( *d & CHR ) { // match char
- if ( !pl )
- return -1;
- char c = *d;
- if ( !cs /*&& !c.row()*/ ) { // case insensitive, #Only 8bit
- if ( tolower(*p) != c )
- return -1;
- p++;
- pl--;
- } else { // case insensitive
- if ( *p != c )
- return -1;
- p++;
- pl--;
- }
- d++;
- }
- else if ( *d & MCC ) { // match char class
- if ( !pl )
- return -1;
- if ( !matchcharclass( d, *p ) )
- return -1;
- p++;
- pl--;
- d += (*d & MVL) + 1;
- }
- else switch ( *d++ ) {
- case PWS: // match whitespace
- if ( !pl || !isspace(*p) )
- return -1;
- p++;
- pl--;
- break;
- case PDG: // match digits
- if ( !pl || !isdigit(*p) )
- return -1;
- p++;
- pl--;
- break;
- case ANY: // match anything
- if ( !pl )
- return -1;
- p++;
- pl--;
- break;
- case BOL: // match beginning of line
- if ( p != bol )
- return -1;
- break;
- case EOL: // match end of line
- if ( pl )
- return -1;
- break;
- case BOW: // match beginning of word
- if ( !iswordchar(*p) || (p > bol && iswordchar(*(p-1)) ) )
- return -1;
- break;
- case EOW: // match end of word
- if ( iswordchar(*p) || p == bol || !iswordchar(*(p-1)) )
- return -1;
- break;
- case CLO: // Kleene closure
- {
- const char *first_p = p;
- if ( *d & CHR ) { // match char
- char c = *d;
- if ( !cs /*&& !c.row()*/ ) { // case insensitive, #only 8bit
- while ( pl /*&& !p->row()*/ && tolower(*p)==c ) {
- p++;
- pl--;
- }
- }
- else { // case sensitive
- while ( pl && *p == c ) {
- p++;
- pl--;
- }
- }
- d++;
- }
- else if ( *d & MCC ) { // match char class
- while( pl && matchcharclass( d, *p ) ) {
- p++;
- pl--;
- }
- d += (*d & MVL) + 1;
- }
- else if ( *d == PWS ) {
- while ( pl && isspace(*p) ) {
- p++;
- pl--;
- }
- d++;
- }
- else if ( *d == PDG ) {
- while ( pl && isdigit(*p) ) {
- p++;
- pl--;
- }
- d++;
- }
- else if ( *d == ANY ) {
- p += pl;
- pl = 0;
- d++;
- }
- else {
- return -1; // error
- }
- d++; // skip CLO's END
- while ( p >= first_p ) { // go backwards
- int end = matchstring( d, p, pl, bol, cs );
- if ( end >= 0 )
- return ( (int)(p - start) ) + end;
- if ( !p )
- return -1;
- --p;
- ++pl;
- }
- }
- return -1;
- case OPT: // optional closure
- {
- const char *first_p = p;
- if ( *d & CHR ) { // match char
- char c = *d;
- if ( !cs /*&& !c.row()*/ ) { // case insensitive, #only 8bit
- if ( pl && /*!p->row() &&*/ tolower(*p) == c ) {
- p++;
- pl--;
- }
- }
- else { // case sensitive
- if ( pl && *p == c ) {
- p++;
- pl--;
- }
- }
- d++;
- }
- else if ( *d & MCC ) { // match char class
- if ( pl && matchcharclass( d, *p ) ) {
- p++;
- pl--;
- }
- d += (*d & MVL) + 1;
- }
- else if ( *d == PWS ) {
- if ( pl && isspace(*p) ) {
- p++;
- pl--;
- }
- d++;
- }
- else if ( *d == PDG ) {
- if ( pl && isdigit(*p) ) {
- p++;
- pl--;
- }
- d++;
- }
- else if ( *d == ANY ) {
- if ( pl ) {
- p++;
- pl--;
- }
- d++;
- }
- else {
- return -1; // error
- }
- d++; // skip OPT's END
- while ( p >= first_p ) { // go backwards
- int end = matchstring( d, p, pl, bol, cs );
- if ( end >= 0 )
- return ( (int)(p - start) ) + end;
- if ( !p )
- return -1;
- --p;
- ++pl;
- }
- }
- return -1;
-
- default: // error
- return -1;
- }
- }
- return (int)(p - start);
-}
-
-
-/*!
- \internal
- Recursively match string.
-*/
-
-// This is obsolete now, but since it is protected (not private), it
-// is still implemented on the off-chance that somebody has made a
-// class derived from QRegExp and calls this directly.
-// Qt 3.0: Remove this?
-
-#if 0
-const char *QRegExp::matchstr( uint *rxd, const QChar *str, uint strlength,
- const QChar *bol ) const
-{
- int len = matchstring( rxd, str, strlength, bol, cs );
- if ( len < 0 )
- return 0;
- return str + len;
-}
-#endif
-
-/*!
- Attempts to match in \e str, starting from position \e index.
- Returns the position of the match, or -1 if there was no match.
-
- If \e len is not a null pointer, the length of the match is stored in
- \e *len.
-
- If \e indexIsStart is TRUE (the default), the position \e index in
- the string will match the start-of-input primitive (^) in the
- regexp, if present. Otherwise, position 0 in \e str will match.
-
- Example:
- \code
- QRegExp r("[0-9]*\\.[0-9]+"); // matches floating point
- int len;
- r.match("pi = 3.1416", 0, &len); // returns 5, len == 6
- \endcode
-
- \note In Qt 3.0, this function will be replaced by find().
-*/
-
-int QRegExp::match( const QCString &str, int index, int *len,
- bool indexIsStart ) const
-{
- if ( !isValid() || isEmpty() )
- return -1;
- if ( str.length() < (uint)index )
- return -1;
- const char *start = str.data();
- const char *p = start + index;
- uint pl = str.length() - index;
- uint *d = rxdata;
- int ep = -1;
-
- if ( *d == BOL ) { // match from beginning of line
- ep = matchstring( d, p, pl, indexIsStart ? p : start, cs );
- } else {
- if ( *d & CHR ) {
- char c = *d;
- if ( !cs /*&& !c.row()*/ ) { // case sensitive, # only 8bit
- while ( pl && ( /*p->row() ||*/ tolower(*p) != c ) ) {
- p++;
- pl--;
- }
- } else { // case insensitive
- while ( pl && *p != c ) {
- p++;
- pl--;
- }
- }
- }
- while( 1 ) { // regular match
- ep = matchstring( d, p, pl, indexIsStart ? start+index : start, cs );
- if ( ep >= 0 )
- break;
- if ( !pl )
- break;
- p++;
- pl--;
- }
- }
- if ( len )
- *len = ep >= 0 ? ep : 0; // No match -> 0, for historical reasons
- return ep >= 0 ? (int)(p - start) : -1; // return index;
-}
-
-/*! \fn int QRegExp::find( const QCString& str, int index )
-
- Attempts to match in \e str, starting from position \e index.
- Returns the position of the match, or -1 if there was no match.
-
- \sa match()
-*/
-
-//
-// Translate wildcard pattern to standard regexp pattern.
-// Ex: *.cpp ==> ^.*\.cpp$
-//
-
-static QCString wc2rx( const QCString &pattern )
-{
- int patlen = (int)pattern.length();
- QCString wcpattern("^");
-
- char c;
- for( int i = 0; i < patlen; i++ ) {
- c = pattern[i];
- switch ( (char)c ) {
- case '*': // '*' ==> '.*'
- wcpattern += '.';
- break;
- case '?': // '?' ==> '.'
- c = '.';
- break;
- case '.': // quote special regexp chars
- case '+':
- case '\\':
- case '$':
- case '^':
- wcpattern += '\\';
- break;
- case '[':
- if ( (char)pattern[i+1] == '^' ) { // don't quote '^' after '['
- wcpattern += '[';
- c = pattern[i+1];
- i++;
- }
- break;
- }
- wcpattern += c;
-
- }
- wcpattern += '$';
- return wcpattern; // return new regexp pattern
-}
-
-
-//
-// Internal: Get char value and increment pointer.
-//
-
-static uint char_val( const char **str, uint *strlength ) // get char value
-{
- const char *p = *str;
- uint pl = *strlength;
- uint len = 1;
- uint v = 0;
- if ( (char)*p == '\\' ) { // escaped code
- p++;
- pl--;
- if ( !pl ) { // it is just a '\'
- (*str)++;
- (*strlength)--;
- return '\\';
- }
- len++; // length at least 2
- int i;
- char c;
- char ch = tolower((char)*p);
- switch ( ch ) {
- case 'b': v = '\b'; break; // bell
- case 'f': v = '\f'; break; // form feed
- case 'n': v = '\n'; break; // newline
- case 'r': v = '\r'; break; // return
- case 't': v = '\t'; break; // tab
- case 's': v = PWS; break; // whitespace charclass
- case 'd': v = PDG; break; // digit charclass
- case '<': v = BOW; break; // word beginning matcher
- case '>': v = EOW; break; // word ending matcher
-
- case 'x': { // hex code
- p++;
- pl--;
- for ( i = 0; (i < 4) && pl; i++ ) { //up to 4 hex digits
- c = tolower((char)*p);
- bool a = ( c >= 'a' && c <= 'f' );
- if ( (c >= '0' && c <= '9') || a ) {
- v <<= 4;
- v += a ? 10 + c - 'a' : c - '0';
- len++;
- }
- else {
- break;
- }
- p++;
- pl--;
- }
- }
- break;
-
- default: {
- if ( ch >= '0' && ch <= '7' ) { //octal code
- len--;
- for ( i = 0; (i < 3) && pl; i++ ) { // up to 3 oct digits
- c = (char)*p;
- if ( c >= '0' && c <= '7' ) {
- v <<= 3;
- v += c - '0';
- len++;
- }
- else {
- break;
- }
- p++;
- pl--;
- }
- }
- else { // not an octal number
- v = (uint)*p; //(((uint)(p->row())) << 8) | ((uint)p->cell());
- }
- }
- }
- } else {
- v = (uint)*p; //(((uint)(p->row())) << 8) | ((uint)p->cell());
- }
- *str += len;
- *strlength -= len;
- return v;
-}
-
-
-#if 0 //defined(DEBUG)
-static uint *dump( uint *p )
-{
- while ( *p != END ) {
- if ( *p & CHR ) {
- uchar uc = (uchar)*p;
- char c = (char)uc;
- uint u = (uint)uc; //(((uint)(uc.row())) << 8) | ((uint)uc.cell());
- qDebug( "\tCHR\tU%04x (%c)", u, (c ? c : ' '));
- p++;
- }
- else if ( *p & MCC ) {
- uint clcode = *p & MCD;
- uint numFields = *p & MVL;
- if ( clcode == CCL )
- qDebug( "\tCCL\t%i", numFields );
- else if ( clcode == CCN )
- qDebug( "\tCCN\t%i", numFields );
- else
- qDebug("coding error!");
- for ( int i = 0; i < (int)numFields; i++ ) {
- p++;
- if ( *p == PWS )
- qDebug( "\t\tPWS" );
- else if ( *p == PDG )
- qDebug( "\t\tPDG" );
- else {
- uint from = ( *p & MCD ) >> 16;
- uint to = *p & MVL;
- char fc = (char)from;
- char tc = (char)to;
- qDebug( "\t\tU%04x (%c) - U%04x (%c)", from,
- (fc ? fc : ' '), to, (tc ? tc : ' ') );
- }
- }
- p++;
- }
- else switch ( *p++ ) {
- case PWS:
- qDebug( "\tPWS" );
- break;
- case PDG:
- qDebug( "\tPDG" );
- break;
- case BOL:
- qDebug( "\tBOL" );
- break;
- case EOL:
- qDebug( "\tEOL" );
- break;
- case BOW:
- qDebug( "\tBOW" );
- break;
- case EOW:
- qDebug( "\tEOW" );
- break;
- case ANY:
- qDebug( "\tANY" );
- break;
- case CLO:
- qDebug( "\tCLO" );
- p = dump( p );
- break;
- case OPT:
- qDebug( "\tOPT" );
- p = dump( p );
- break;
- }
- }
- qDebug( "\tEND" );
- return p+1;
-}
-#endif // DEBUG
-
-
-
-/*!
- \internal
- Compiles the regular expression and stores the result in rxdata.
- The 'error' flag is set to non-zero if an error is detected.
- NOTE! This function is not reentrant!
-*/
-
-void QRegExp::compile()
-{
- const int maxlen = 1024; // max length of regexp array
- uint rxarray[ maxlen ]; // tmp regexp array
-
- if ( rxdata ) { // delete old data
- delete [] rxdata;
- rxdata = 0;
- }
- if ( rxstring.isEmpty() ) { // no regexp pattern set
- error = PatNull;
- return;
- }
-
- error = PatOk; // assume pattern is ok
-
- QCString pattern;
- if ( wc )
- pattern = wc2rx(rxstring);
- else
- pattern = rxstring;
- const char *start = pattern.data(); // pattern pointer
- const char *p = start; // pattern pointer
- uint pl = pattern.length();
- uint *d = rxarray; // data pointer
- uint *prev_d = 0;
-
-#define GEN(x) *d++ = (x)
-
- while ( pl ) {
- char ch = (char)*p;
- switch ( ch ) {
-
- case '^': // beginning of line
- prev_d = d;
- GEN( p == start ? BOL : (CHR | ch) );
- p++;
- pl--;
- break;
-
- case '$': // end of line
- prev_d = d;
- GEN( pl == 1 ? EOL : (CHR | ch) );
- p++;
- pl--;
- break;
-
- case '.': // any char
- prev_d = d;
- GEN( ANY );
- p++;
- pl--;
- break;
-
- case '[': // character class
- {
- prev_d = d;
- p++;
- pl--;
- if ( !pl ) {
- error = PatSyntax;
- return;
- }
- bool firstIsEscaped = ( (char)*p == '\\' );
- uint cch = char_val( &p, &pl );
- if ( cch == '^' && !firstIsEscaped ) { // negate!
- GEN( CCN );
- if ( !pl ) {
- error = PatSyntax;
- return;
- }
- cch = char_val( &p, &pl );
- } else {
- GEN( CCL );
- }
- uint numFields = 0;
- while ( pl ) {
- if ((pl>2) && ((char)*p == '-') && ((char)*(p+1) != ']')) {
- // Found a range
- char_val( &p, &pl ); // Read the '-'
- uint cch2 = char_val( &p, &pl ); // Read the range end
- if ( cch > cch2 ) { // swap start and stop
- int tmp = cch;
- cch = cch2;
- cch2 = tmp;
- }
- GEN( (cch << 16) | cch2 ); // from < to
- numFields++;
- }
- else {
- // Found a single character
- if ( cch & MCD ) // It's a code; will not be mistaken
- GEN( cch ); // for a range, since from > to
- else
- GEN( (cch << 16) | cch ); // from == to range
- numFields++;
- }
- if ( d >= rxarray + maxlen ) { // pattern too long
- error = PatOverflow;
- return;
- }
- if ( !pl ) { // At least ']' should be left
- error = PatSyntax;
- return;
- }
- bool nextIsEscaped = ( (char)*p == '\\' );
- cch = char_val( &p, &pl );
- if ( cch == (uint)']' && !nextIsEscaped )
- break;
- if ( !pl ) { // End, should have seen ']'
- error = PatSyntax;
- return;
- }
- }
- *prev_d |= numFields; // Store number of fields
- }
- break;
-
- case '*': // Kleene closure, or
- case '+': // positive closure, or
- case '?': // optional closure
- {
- if ( prev_d == 0 ) { // no previous expression
- error = PatSyntax; // empty closure
- return;
- }
- switch ( *prev_d ) { // test if invalid closure
- case BOL:
- case BOW:
- case EOW:
- case CLO:
- case OPT:
- error = PatSyntax;
- return;
- }
- int ddiff = (int)(d - prev_d);
- if ( *p == '+' ) { // convert to Kleene closure
- if ( d + ddiff >= rxarray + maxlen ) {
- error = PatOverflow; // pattern too long
- return;
- }
- memcpy( d, prev_d, ddiff*sizeof(uint) );
- d += ddiff;
- prev_d += ddiff;
- }
- memmove( prev_d+1, prev_d, ddiff*sizeof(uint) );
- *prev_d = ch == '?' ? OPT : CLO;
- d++;
- GEN( END );
- p++;
- pl--;
- }
- break;
-
- default:
- {
- prev_d = d;
- uint cv = char_val( &p, &pl );
- if ( cv & MCD ) { // It's a code
- GEN( cv );
- }
- else {
- if ( !cs && cv <= 0xff ) // #only 8bit support
- cv = tolower( cv );
- GEN( CHR | cv );
- }
- }
- }
- if ( d >= rxarray + maxlen ) { // oops!
- error = PatOverflow; // pattern too long
- return;
- }
- }
- GEN( END );
- int len = (int)(d - rxarray);
- rxdata = new uint[ len ]; // copy from rxarray to rxdata
- CHECK_PTR( rxdata );
- memcpy( rxdata, rxarray, len*sizeof(uint) );
-#if defined(DEBUG)
- //dump( rxdata ); // uncomment this line for debugging
-#endif
-}
diff --git a/qtools/qregexp.h b/qtools/qregexp.h
deleted file mode 100644
index 4bb0230..0000000
--- a/qtools/qregexp.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QRegExp class
-**
-** Created : 950126
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QREGEXP_H
-#define QREGEXP_H
-
-#ifndef QT_H
-#include "qcstring.h"
-#endif // QT_H
-
-
-class Q_EXPORT QRegExp
-{
-public:
- QRegExp();
- QRegExp( const QCString &, bool caseSensitive=TRUE, bool wildcard=FALSE );
- QRegExp( const QRegExp & );
- ~QRegExp();
- QRegExp &operator=( const QRegExp & );
- QRegExp &operator=( const QCString &pattern );
-
- bool operator==( const QRegExp & ) const;
- bool operator!=( const QRegExp &r ) const
- { return !(this->operator==(r)); }
-
- bool isEmpty() const { return rxdata == 0; }
- bool isValid() const { return error == 0; }
-
- bool caseSensitive() const { return cs; }
- void setCaseSensitive( bool );
-
- bool wildcard() const { return wc; }
- void setWildcard( bool );
-
- QCString pattern() const { return rxstring; }
- // ### in Qt 3.0, provide a real implementation
- void setPattern( const QCString& pattern )
- { operator=( pattern ); }
-
- int match( const QCString &str, int index=0, int *len=0,
- bool indexIsStart = TRUE ) const;
- int find( const QCString& str, int index )
- { return match( str, index ); }
-
-protected:
- void compile();
- const char *matchstr( uint *, const char *, uint, const char * ) const;
-
-private:
- QCString rxstring; // regular expression pattern
- uint *rxdata; // compiled regexp pattern
- int error; // error status
- bool cs; // case sensitive
- bool wc; // wildcard
-};
-
-
-#endif // QREGEXP_H
diff --git a/qtools/qshared.h b/qtools/qshared.h
deleted file mode 100644
index 58ad6fc..0000000
--- a/qtools/qshared.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QShared struct
-**
-** Created : 940112
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QSHARED_H
-#define QSHARED_H
-
-#ifndef QT_H
-#include "qglobal.h"
-#endif // QT_H
-
-#include <atomic>
-
-
-struct QShared
-{
- QShared() : count(1) { }
- void ref() { count++; }
- bool deref() { return !--count; }
- std::atomic_uint count;
-};
-
-
-#endif // QSHARED_H
diff --git a/qtools/qsortedlist.doc b/qtools/qsortedlist.doc
deleted file mode 100644
index 6f16f19..0000000
--- a/qtools/qsortedlist.doc
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-**
-** QSortedList documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QSortedList documentation
- *****************************************************************************/
-
-/*!
- \class QSortedList qsortedlist.h
- \brief The QSortedList class provides a list sorted by operator< and operator==
-
- \ingroup collection
- \ingroup tools
-
- If you want to sort a QList you have to reimplement the
- QGList::compareItems() method. If the elements of your list support
- operator<() and operator==() then you can use QSortedList instead.
- Its compareItems() calls operator<() and operator==() and returns an
- appropriate result.
-
- Otherwise, this is as QList.
-
- \sa QList, \link collection.html Collection Classes\endlink
-*/
-
-
-/*!
- \fn QSortedList::QSortedList()
- Constructs an empty list.
-*/
-
-/*!
- \fn QSortedList::QSortedList( const QSortedList<type> &list )
- Constructs a copy of \e list.
-
- Each item in \e list is copied to this new list.
-*/
-
-/*!
- \fn QSortedList::~QSortedList()
- Removes all items from the list and destroys the list.
-
- All list iterators that access this list will be reset.
-*/
-
-/*!
- \fn QSortedList<type>& QSortedList::operator=(const QSortedList<type>& list)
- Assigns \e list to this list and returns a reference to this list.
-
- This list is first cleared, then each item in \e list is
- appended to this list. Only the pointers are copied
- (shallow copy), unless newItem() has been reimplemented().
-*/
-
-/*!
- \fn int QSortedList::compareItems( QCollection::Item s1, QCollection::Item s2 )
-
- \reimp
-
- This reimplementation uses operator< and operator== to compare.
-*/
diff --git a/qtools/qsortedlist.h b/qtools/qsortedlist.h
deleted file mode 100644
index aeadd90..0000000
--- a/qtools/qsortedlist.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QList template/macro class
-**
-** Created : 920701
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QSORTEDLIST_H
-#define QSORTEDLIST_H
-
-#ifndef QT_H
-#include "qlist.h"
-#endif // QT_H
-
-
-template<class type> class Q_EXPORT QSortedList : public QList<type>
-{
-public:
- QSortedList() {}
- QSortedList( const QSortedList<type> &l ) : QList<type>(l) {}
- ~QSortedList() { clear(); }
- QSortedList<type> &operator=(const QSortedList<type> &l)
- { return (QSortedList<type>&)QList<type>::operator=(l); }
-
- virtual int compareItems( QCollection::Item s1, QCollection::Item s2 )
- { if ( *((type*)s1) == *((type*)s2) ) return 0; return ( *((type*)s1) < *((type*)s2) ? -1 : 1 ); }
-};
-
-#endif
diff --git a/qtools/qstack.doc b/qtools/qstack.doc
deleted file mode 100644
index ece1e2a..0000000
--- a/qtools/qstack.doc
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-**
-** QStack class documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QStack documentation
- *****************************************************************************/
-
-/*!
- \class QStack qstack.h
- \brief The QStack class is a template class that provides a stack.
-
- \ingroup collection
- \ingroup tools
-
- QStack is implemented as a template class. Define a template
- instance QStack\<X\> to create a stack that operates on pointers to
- X, or X*.
-
- A stack is a Last In, First Out (LIFO) structure. Items are added to
- the top of the stack with push() and retrieved from the top
- with pop().
-
- \sa \link collection.html Collection Classes\endlink
-*/
-
-/*! \fn QStack::QStack ()
- Creates and empty stack.
-*/
-
-/*! \fn QStack::QStack (const QStack<type>& s)
- Creates a stack by making a shallow copy of another stack.
-*/
-
-/*! \fn QStack::~QStack ()
- Destroys the stack. All items will be deleted if autoDelete() is TRUE.
-*/
-
-/*! \fn QStack<type>& QStack::operator= (const QStack<type>& s)
- Sets the contents of this stack by making a shallow copy of another stack.
- Elements currently in this stack will be deleted if autoDelete() is TRUE.
-*/
-
-/*! \fn bool QStack::isEmpty () const
- Returns TRUE is the stack contains no elements to be \link pop() popped\endlink.
-*/
-
-/*! \fn void QStack::push (const type* d)
- Adds an element to the top of the stack. Last in, first out.
-*/
-
-/*! \fn type* QStack::pop ()
- Removes the top item from the stack and returns it.
-*/
-
-/*! \fn bool QStack::remove ()
- Removes the top item from the stack and deletes it if
- autoDelete() is TRUE. Returns TRUE if there was an item to pop.
-
- \sa clear()
-*/
-
-/*! \fn void QStack::clear()
- Removes all items from the stack, deleting them if
- autoDelete() is TRUE.
-
- \sa remove()
-*/
-
-/*! \fn uint QStack::count() const
- Returns the number of items in the stack.
-
- \sa isEmpty()
-*/
-
-/*! \fn type* QStack::top () const
- Returns a reference to the top item on the stack (most recently pushed).
- The stack is not changed.
-*/
-
-/*! \fn QStack::operator type* ()const
- Returns a reference to the top item on the stack (most recently pushed).
- The stack is not changed.
-*/
-
-/*! \fn type* QStack::current () const
- Returns a reference to the top item on the stack (most recently pushed).
- The stack is not changed.
-*/
-
-/*! \fn bool QStack::autoDelete() const
-
- The same as QCollection::autoDelete().
-
- \sa setAutoDelete()
-*/
-
-/*! \fn void QStack::setAutoDelete( bool enable )
-
- The same as QCollection::setAutoDelete().
-
- \sa autoDelete()
-*/
diff --git a/qtools/qstack.h b/qtools/qstack.h
deleted file mode 100644
index c84d8d2..0000000
--- a/qtools/qstack.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QStack template/macro class
-**
-** Created : 920917
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QSTACK_H
-#define QSTACK_H
-
-#ifndef QT_H
-#include "qglist.h"
-#endif // QT_H
-
-
-template<class type> class QStack : private QGList
-{
-public:
- QStack() {}
- QStack( const QStack<type> &s ) : QGList(s) {}
- ~QStack() { clear(); }
- QStack<type> &operator=(const QStack<type> &s)
- { return (QStack<type>&)QGList::operator=(s); }
- bool autoDelete() const { return QCollection::autoDelete(); }
- void setAutoDelete( bool del ) { QCollection::setAutoDelete(del); }
- uint count() const { return QGList::count(); }
- bool isEmpty() const { return QGList::count() == 0; }
- void push( const type *d ) { QGList::insertAt(0,Item(d)); }
- type *pop() { return (type *)QGList::takeFirst(); }
- bool remove() { return QGList::removeFirst(); }
- void clear() { QGList::clear(); }
- type *bottom() const { return (type *)QGList::clast(); }
- type *top() const { return (type *)QGList::cfirst(); }
- operator type *() const { return (type *)QGList::cfirst(); }
- type *current() const { return (type *)QGList::cfirst(); }
-private:
- void deleteItem( Item d ) { if ( del_item ) delete (type *)d; }
-};
-
-
-#endif // QSTACK_H
diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp
deleted file mode 100644
index 3d57839..0000000
--- a/qtools/qstring.cpp
+++ /dev/null
@@ -1,15426 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of the QString class and related Unicode functions
-**
-** Created : 920722
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-// Don't define it while compiling this module, or USERS of Qt will
-// not be able to link.
-#ifdef QT_NO_CAST_ASCII
-#undef QT_NO_CAST_ASCII
-#endif
-
-#include "qstring.h"
-#include "qregexp.h"
-#include "qdatastream.h"
-#include "qtextcodec.h"
-#include "qstack.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <limits.h>
-
-
-/* -------------------------------------------------------------------------
- * unicode information
- * these tables are generated from the unicode reference file
- * ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html
- *
- * Lars Knoll <knoll@mpi-hd.mpg.de>
- * -------------------------------------------------------------------------
- */
-
-/* Perl script to generate (run perl -x tools/qstring.cpp)
-
-#!perl
-
-sub numberize
-{
- my(%r, $n, $id);
- for $id ( @_ ) {
- $id="" if $id eq "EMPTY";
- $r{$id}=$n++;
- }
- return %r;
-}
-
-
-# Code to integer mappings...
-#
-%category_code = numberize(qw{
- EMPTY
- Mn Mc Me
- Nd Nl No
- Zs Zl Zp
- Cc Cf Cs Co Cn
-
- Lu Ll Lt Lm Lo
- Pc Pd Ps Pe Pi Pf Po
- Sm Sc Sk So
-});
-%bidi_category_code = numberize(qw{
- L R EN ES ET AN CS B S WS ON LRE LRO AL RLE RLO PDF NSM BN});
-%character_decomposition_tag = numberize(qw{
- <single> <canonical> <font> <noBreak> <initial> <medial>
- <final> <isolated> <circle> <super> <sub> <vertical>
- <wide> <narrow> <small> <square> <compat> <fraction>
-});
-%mirrored_code = numberize(qw{N Y});
-
-%joining_code = numberize(qw{U D R C});
-
-# Read data into hashes...
-#
-open IN, "UnicodeData.txt";
-$position = 1;
-while (<IN>) {
- @fields = split /;/;
- $code = shift @fields;
- for $n (qw{
- name category combining_class bidi_category
- character_decomposition decimal_digit_value digit_value
- numeric_value mirrored oldname comment
- uppercase lowercase titlecase})
- {
- $id = shift @fields;
- $codes = "${n}_code";
- if ( defined %$codes && defined $$codes{$id} ) {
- $id = $$codes{$id};
- }
- ${$n}{$code}=$id;
- }
- $decomp = $character_decomposition{$code};
- if ( length $decomp == 0 ) {
- $decomp = "<single>";
- }
- if (substr($decomp, 0, 1) ne '<') {
- $decomp = "<canonical> " . $decomp;
- }
- @fields = split(" ", $decomp);
- $tag = shift @fields;
- $tag = $character_decomposition_tag{$tag};
- $decomp = join( ", 0x", @fields );
- $decomp = "0x".$decomp;
- $decomposition{$code} = $decomp;
- $decomposition_tag{$code} = $tag;
- $decomposition_pos{$code} = $position;
- $len = scalar(@fields);
- $decomposition_len{$code} = $len;
-
-# we use canonical decompositions longer than 1 char
-# and all arabic ligatures for the ligature table
- if(($len > 1 and $tag == 1) or ($tag > 3 and $tag < 8)) {
-# ligature to add...
- $start = shift @fields;
- $ligature{$start} = $ligature{$start}." ".$code;
- }
-
-# adjust position
- if($len != 0) {
- $position += $len + 3;
- }
-
-
-}
-
-open IN2, "ArabicShaping.txt";
-$position = 1;
-while (<IN2>) {
- @fields = split /;/;
- $code = shift @fields;
- $dummy = shift @fields;
- $join = shift @fields;
- $join =~ s/ //g;
- $join = $joining_code{$join};
- $joining{$code}=$join;
-}
-
-# Build pages...
-#
-$rowtable_txt =
- "static const Q_UINT8 * const unicode_info[256] = {";
-for $row ( 0..255 ) {
- $nonzero=0;
- $txt = "";
- for $cell ( 0..255 ) {
- $code = sprintf("%02X%02X",$row,$cell);
- $info = $category{$code};
- $info = 0 if !defined $info;
- $txt .= "\n " if $cell%8 == 0;
- $txt .= "$info, ";
- }
- $therow = $row{$txt};
- if ( !defined $therow ) {
- $size+=256;
- $therow = "ui_".sprintf("%02X",$row);
- $rowtext{$therow} =
- "static const Q_UINT8 ${therow}[] = {$txt\n};\n\n";
- $row{$txt}=$therow;
- }
- $rowtable_txt .= "\n " if $row%8 == 0;
- $rowtable_txt .= "$therow, ";
-}
-
-print "// START OF GENERATED DATA\n\n";
-print "#ifndef QT_NO_UNICODETABLES\n\n";
-
-# Print pages...
-#
-for $r ( sort keys %rowtext ) {
- print $rowtext{$r};
-}
-print "$rowtable_txt\n};\n";
-$size += 256*4;
-print "// $size bytes\n\n";
-
-# Build decomposition tables
-#
-$rowtable_txt =
- "static const Q_UINT16 * const decomposition_info[256] = {";
-$table_txt =
- "static const Q_UINT16 decomposition_map[] = {\n 0,\n";
-for $row ( 0..255 ) {
- $nonzero=0;
- $txt = "";
- for $cell ( 0..255 ) {
- $code = sprintf("%02X%02X",$row,$cell);
- $txt .= "\n " if $cell%8 == 0;
- if( $decomposition_tag{$code} != 0 ) {
- $txt .= " $decomposition_pos{$code},";
- $table_txt .= " $decomposition_tag{$code},";
- $table_txt .= " 0x$code,";
- $table_txt .= " $decomposition{$code}, 0,\n";
- $size += 2 * $decomposition_len{$code} + 6;
- } else {
- $txt .= " 0,";
- }
- }
- $therow = $row{$txt};
- if ( !defined $therow ) {
- $size+=512;
- $therow = "di_".sprintf("%02X",$row);
- $dec_rowtext{$therow} =
- "static const Q_UINT16 ${therow}[] = {$txt\n};\n\n";
- $row{$txt}=$therow;
- }
- $rowtable_txt .= "\n " if $row%8 == 0;
- $rowtable_txt .= "$therow, ";
-}
-
-# Print decomposition tables
-#
-print "$table_txt\n};\n\n";
-for $r ( sort keys %dec_rowtext ) {
- print $dec_rowtext{$r};
-}
-print "$rowtable_txt\n};\n";
-$size += 256*4;
-print "// $size bytes\n\n";
-
-
-# build ligature tables
-#
-$size = 0;
-$position = 1;
-$rowtable_txt =
- "static const Q_UINT16 * const ligature_info[256] = {";
-$table_txt =
- "static const Q_UINT16 ligature_map[] = {\n 0,\n";
-for $lig_row ( 0..255 ) {
- $nonzero=0;
- $txt = "";
- for $cell ( 0..255 ) {
- $code = sprintf("%02X%02X",$lig_row,$cell);
- $txt .= "\n " if $cell%8 == 0;
- if( defined $ligature{$code} ) {
- $txt .= " $position,";
- @ligature = split(" ", $ligature{$code});
-# we need to sort ligatures according to their length.
-# long ones have to come first!
- @ligature_sort = sort { $decomposition_len{$b} <=> $decomposition_len{$a} } @ligature;
-# now replace each code by it's position in
-# the decomposition map.
- undef(@lig_pos);
- for $n (@ligature_sort) {
- push(@lig_pos, $decomposition_pos{$n});
- }
-# debug info
- if( 0 ) {
- print "ligatures: $ligature{$code}\n";
- $sort = join(" ", @ligature_sort);
- print "sorted : $sort\n";
- }
- $lig = join(", ", @lig_pos);
- $table_txt .= " $lig, 0,\n";
- $size += 2 * scalar(@ligature) + 2;
- $position += scalar(@ligature) + 1;
- } else {
- $txt .= " 0,";
- }
- }
- $therow = $lig_row{$txt};
- if ( !defined $therow ) {
- $size+=512;
- $therow = "li_".sprintf("%02X",$lig_row);
- $lig_rowtext{$therow} =
- "static const Q_UINT16 ${therow}[] = {$txt\n};\n\n";
- $lig_row{$txt}=$therow;
- }
- $rowtable_txt .= "\n " if $lig_row%8 == 0;
- $rowtable_txt .= "$therow, ";
-}
-
-# Print ligature tables
-#
-print "$table_txt\n};\n\n";
-for $r ( sort keys %lig_rowtext ) {
- print $lig_rowtext{$r};
-}
-print "$rowtable_txt\n};\n";
-$size += 256*4;
-print "// $size bytes\n\n";
-
-
-
-# Build direction/joining/mirrored pages...
-#
-$rowtable_txt =
- "static const Q_UINT8 * const direction_info[256] = {";
-for $dir_row ( 0..255 ) {
- $nonzero=0;
- $txt = "";
- for $cell ( 0..255 ) {
- $code = sprintf("%02X%02X",$dir_row,$cell);
- $dir = $bidi_category{$code};
- $dir = 0 if !defined $dir;
- $join = $joining{$code};
- $join = 0 if !defined $join;
- $mirr = $mirrored{$code};
- $mirr = 0 if !defined $mirr;
- $info = $dir + 32*$join + 128*$mirr;
- $txt .= "\n " if $cell%8 == 0;
- $txt .= "$info, ";
- }
- $therow = $dir_row{$txt};
- if ( !defined $therow ) {
- $size+=256;
- $therow = "dir_".sprintf("%02X",$dir_row);
- $dir_rowtext{$therow} =
- "static const Q_UINT8 ${therow}[] = {$txt\n};\n\n";
- $dir_row{$txt}=$therow;
- }
- $rowtable_txt .= "\n " if $dir_row%8 == 0;
- $rowtable_txt .= "$therow, ";
-}
-
-# Print pages...
-#
-for $r ( sort keys %dir_rowtext ) {
- print $dir_rowtext{$r};
-}
-print "$rowtable_txt\n};\n";
-$size += 256*4;
-print "// $size bytes\n\n";
-
-
-
-print "#endif\n\n";
-print "// END OF GENERATED DATA\n\n";
-
-
-__END__
-
-*/
-
-
-// START OF GENERATED DATA
-
-static const Q_UINT8 ui_00[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 7, 26, 26, 26, 28, 26, 26, 26,
- 22, 23, 26, 27, 26, 21, 26, 26,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 26, 26, 27, 27, 27, 26,
- 26, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 22, 26, 23, 29, 20,
- 29, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 22, 27, 23, 27, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 7, 26, 28, 28, 28, 28, 30, 30,
- 29, 30, 16, 24, 27, 21, 30, 29,
- 30, 27, 6, 6, 29, 16, 30, 26,
- 29, 6, 16, 25, 6, 6, 6, 26,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 27,
- 15, 15, 15, 15, 15, 15, 15, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 27,
- 16, 16, 16, 16, 16, 16, 16, 16,
-};
-
-#ifndef QT_NO_UNICODETABLES
-
-static const Q_UINT8 ui_01[] = {
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 16, 15, 16, 15, 16, 15, 16, 15,
- 16, 15, 16, 15, 16, 15, 16, 15,
- 16, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 15, 16, 15, 16, 15, 16, 16,
- 16, 15, 15, 16, 15, 16, 15, 15,
- 16, 15, 15, 15, 16, 16, 15, 15,
- 15, 15, 16, 15, 15, 16, 15, 15,
- 15, 16, 16, 16, 15, 15, 16, 15,
- 15, 16, 15, 16, 15, 16, 15, 15,
- 16, 15, 16, 16, 15, 16, 15, 15,
- 16, 15, 15, 15, 16, 15, 16, 15,
- 15, 16, 16, 19, 15, 16, 16, 16,
- 19, 19, 19, 19, 15, 17, 16, 15,
- 17, 16, 15, 17, 16, 15, 16, 15,
- 16, 15, 16, 15, 16, 15, 16, 15,
- 16, 15, 16, 15, 16, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 16, 15, 17, 16, 15, 16, 15, 15,
- 15, 16, 15, 16, 15, 16, 15, 16,
-};
-
-static const Q_UINT8 ui_02[] = {
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 0, 0, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 0, 0,
- 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 29, 29, 18, 18, 18, 18, 18,
- 18, 18, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29,
- 18, 18, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29,
- 18, 18, 18, 18, 18, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 18, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_03[] = {
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 29, 29, 0, 0,
- 0, 0, 18, 0, 0, 0, 26, 0,
- 0, 0, 0, 0, 29, 29, 15, 26,
- 15, 15, 15, 0, 15, 0, 15, 15,
- 16, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 0, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 0,
- 16, 16, 15, 15, 15, 16, 16, 16,
- 0, 0, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 16, 16, 16, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_04[] = {
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 30, 1, 1, 1, 1, 0,
- 3, 3, 0, 0, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 15, 16, 15, 16, 0, 0, 15,
- 16, 0, 0, 15, 16, 0, 0, 0,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 0, 0,
- 15, 16, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_05[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 0,
- 0, 18, 26, 26, 26, 26, 26, 26,
- 0, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 0, 26, 21, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 26, 1,
- 26, 1, 1, 26, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 0, 0, 0, 0, 0,
- 19, 19, 19, 26, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_06[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 26, 0, 0, 0, 26,
- 0, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 0, 0, 0, 0, 0,
- 18, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 26, 26, 26, 26, 0, 0,
- 1, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 26, 19, 1, 1,
- 1, 1, 1, 1, 1, 3, 3, 1,
- 1, 1, 1, 1, 1, 18, 18, 1,
- 1, 30, 1, 1, 1, 1, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 19, 19, 19, 30, 30, 0,
-};
-
-static const Q_UINT8 ui_07[] = {
- 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 0, 11,
- 19, 1, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_08[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_09[] = {
- 0, 1, 1, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 0, 0, 1, 19, 2, 2,
- 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 1, 0, 0,
- 19, 1, 1, 1, 1, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 1, 1, 26, 26, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 19,
- 19, 0, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 0, 0, 0, 19, 19,
- 19, 19, 0, 0, 1, 0, 2, 2,
- 2, 1, 1, 1, 1, 0, 0, 2,
- 2, 0, 0, 2, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 19, 19, 0, 19,
- 19, 19, 1, 1, 0, 0, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 19, 19, 28, 28, 6, 6, 6, 6,
- 6, 6, 30, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_0A[] = {
- 0, 0, 1, 0, 0, 19, 19, 19,
- 19, 19, 19, 0, 0, 0, 0, 19,
- 19, 0, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 0, 19, 19, 0,
- 19, 19, 0, 0, 1, 0, 2, 2,
- 2, 1, 1, 0, 0, 0, 0, 1,
- 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 19, 19, 19, 19, 0, 19, 0,
- 0, 0, 0, 0, 0, 0, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 1, 1, 19, 19, 19, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 0, 19,
- 19, 19, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 0, 19, 19, 19,
- 19, 19, 0, 0, 1, 19, 2, 2,
- 2, 1, 1, 1, 1, 1, 0, 1,
- 1, 2, 0, 2, 2, 1, 0, 0,
- 19, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 0, 0, 0, 0, 0, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_0B[] = {
- 0, 1, 2, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 19,
- 19, 0, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 0, 0, 19, 19,
- 19, 19, 0, 0, 1, 19, 2, 1,
- 2, 1, 1, 1, 0, 0, 0, 2,
- 2, 0, 0, 2, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 2,
- 0, 0, 0, 0, 19, 19, 0, 19,
- 19, 19, 0, 0, 0, 0, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 30, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 0, 19, 19, 19,
- 19, 19, 19, 0, 0, 0, 19, 19,
- 19, 0, 19, 19, 19, 19, 0, 0,
- 0, 19, 19, 0, 19, 0, 19, 19,
- 0, 0, 0, 19, 19, 0, 0, 0,
- 19, 19, 19, 0, 0, 0, 19, 19,
- 19, 19, 19, 19, 19, 19, 0, 19,
- 19, 19, 0, 0, 0, 0, 2, 2,
- 1, 2, 2, 0, 0, 0, 2, 2,
- 2, 0, 2, 2, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 6, 6, 6, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_0C[] = {
- 0, 2, 2, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 19, 19,
- 19, 19, 0, 0, 0, 0, 1, 1,
- 1, 2, 2, 2, 2, 0, 1, 1,
- 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 0, 0, 0, 0, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 19, 19,
- 19, 19, 0, 0, 0, 0, 2, 1,
- 2, 2, 2, 2, 2, 0, 1, 2,
- 2, 0, 2, 2, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 0,
- 0, 0, 0, 0, 0, 0, 19, 0,
- 19, 19, 0, 0, 0, 0, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_0D[] = {
- 0, 0, 2, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 0, 0, 0, 0, 2, 2,
- 2, 1, 1, 1, 0, 0, 2, 2,
- 2, 0, 2, 2, 2, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 0, 0, 0, 0, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 2, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 19, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 1, 0, 0, 0, 0, 2,
- 2, 2, 1, 1, 1, 0, 1, 0,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 2, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_0E[] = {
- 0, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 1, 19, 19, 1, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 28,
- 19, 19, 19, 19, 19, 19, 18, 1,
- 1, 1, 1, 1, 1, 1, 1, 26,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 26, 26, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 19, 19, 0, 19, 0, 0, 19,
- 19, 0, 19, 0, 0, 19, 0, 0,
- 0, 0, 0, 0, 19, 19, 19, 19,
- 0, 19, 19, 19, 19, 19, 19, 19,
- 0, 19, 19, 19, 0, 19, 0, 19,
- 0, 0, 19, 19, 0, 19, 19, 19,
- 19, 1, 19, 19, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 19, 0, 0,
- 19, 19, 19, 19, 19, 0, 18, 0,
- 1, 1, 1, 1, 1, 1, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 0, 0, 19, 19, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_0F[] = {
- 19, 30, 30, 30, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 30, 30, 30, 30, 30,
- 1, 1, 30, 30, 30, 30, 30, 30,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 30, 1, 30, 1,
- 30, 1, 22, 23, 22, 23, 2, 2,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 0, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 1, 1, 1, 1, 26, 1, 1,
- 19, 19, 19, 19, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 30, 30,
- 30, 30, 30, 30, 30, 30, 1, 30,
- 30, 30, 30, 30, 30, 0, 0, 30,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_10[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 0, 19, 19, 19, 19, 19,
- 0, 19, 19, 0, 2, 1, 1, 1,
- 1, 2, 1, 0, 0, 0, 1, 1,
- 2, 1, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 26, 26, 26, 26, 26, 26,
- 19, 19, 19, 19, 19, 19, 2, 2,
- 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 0, 26, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_11[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 0, 0, 0, 0, 0, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_12[] = {
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 0, 19, 19, 19, 19, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 0, 19, 19, 19, 19, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 0, 19, 19, 19, 19, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 0, 19, 19, 19, 19, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 0, 19, 19, 19, 19, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
-};
-
-static const Q_UINT8 ui_13[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 0, 19, 19, 19, 19, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 0, 0, 0, 0, 0,
- 0, 26, 26, 26, 26, 26, 26, 26,
- 26, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_14[] = {
- 0, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
-};
-
-static const Q_UINT8 ui_15[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
-};
-
-static const Q_UINT8 ui_16[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 26, 26, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 22, 23, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 26, 26, 26, 6, 6,
- 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_17[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 2, 2, 2, 1,
- 1, 1, 1, 1, 1, 1, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2,
- 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 26, 26, 26, 26,
- 26, 26, 26, 28, 26, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_18[] = {
- 26, 26, 26, 26, 26, 26, 21, 26,
- 26, 26, 26, 11, 11, 11, 11, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 18, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_1E[] = {
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 16, 16,
- 16, 16, 16, 16, 0, 0, 0, 0,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 15, 16, 15, 16, 15, 16,
- 15, 16, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_1F[] = {
- 16, 16, 16, 16, 16, 16, 16, 16,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 16, 16, 16, 16, 16, 16, 0, 0,
- 15, 15, 15, 15, 15, 15, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 16, 16, 16, 16, 16, 16, 0, 0,
- 15, 15, 15, 15, 15, 15, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 0, 15, 0, 15, 0, 15, 0, 15,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 0, 0,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 16, 16, 16, 16, 16, 0, 16, 16,
- 15, 15, 15, 15, 17, 29, 16, 29,
- 29, 29, 16, 16, 16, 0, 16, 16,
- 15, 15, 15, 15, 17, 29, 29, 29,
- 16, 16, 16, 16, 0, 0, 16, 16,
- 15, 15, 15, 15, 0, 29, 29, 29,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 15, 15, 15, 15, 15, 29, 29, 29,
- 0, 0, 16, 16, 16, 0, 16, 16,
- 15, 15, 15, 15, 17, 29, 29, 0,
-};
-
-static const Q_UINT8 ui_20[] = {
- 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 11, 11, 11, 11,
- 21, 21, 21, 21, 21, 21, 26, 26,
- 24, 25, 22, 24, 24, 25, 22, 24,
- 26, 26, 26, 26, 26, 26, 26, 26,
- 8, 9, 11, 11, 11, 11, 11, 7,
- 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 24, 25, 26, 26, 26, 26, 20,
- 20, 26, 26, 26, 27, 22, 23, 0,
- 26, 26, 26, 26, 26, 26, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 11, 11, 11, 11, 11, 11,
- 6, 0, 0, 0, 6, 6, 6, 6,
- 6, 6, 27, 27, 27, 22, 23, 16,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 27, 27, 27, 22, 23, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 3, 3, 3,
- 3, 1, 3, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_21[] = {
- 30, 30, 15, 30, 30, 30, 30, 15,
- 30, 30, 16, 15, 15, 15, 16, 16,
- 15, 15, 15, 16, 30, 15, 30, 30,
- 30, 15, 15, 15, 15, 15, 30, 30,
- 30, 30, 30, 30, 15, 30, 15, 30,
- 15, 30, 15, 15, 15, 15, 30, 16,
- 15, 15, 30, 15, 16, 19, 19, 19,
- 19, 16, 30, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 27, 27, 27, 27, 30, 30, 30,
- 30, 30, 27, 27, 30, 30, 30, 30,
- 27, 30, 30, 27, 30, 30, 27, 30,
- 30, 30, 30, 30, 30, 30, 27, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 27, 27,
- 30, 30, 27, 30, 27, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_22[] = {
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_23[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 27, 27, 27, 27, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 27, 27, 30, 30, 30, 30, 30, 30,
- 30, 22, 23, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_24[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 6, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_25[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 27,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 27, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_26[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 0, 0, 0,
- 0, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 27,
- 30, 30, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_27[] = {
- 0, 30, 30, 30, 30, 0, 30, 30,
- 30, 30, 0, 0, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 0, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 30, 0, 30,
- 30, 30, 30, 0, 0, 0, 30, 0,
- 30, 30, 30, 30, 30, 30, 30, 0,
- 0, 30, 30, 30, 30, 30, 30, 30,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 30, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 0, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_28[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
-};
-
-static const Q_UINT8 ui_2E[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 0, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_2F[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_30[] = {
- 7, 26, 26, 26, 30, 18, 19, 5,
- 22, 23, 22, 23, 22, 23, 22, 23,
- 22, 23, 30, 30, 22, 23, 22, 23,
- 22, 23, 22, 23, 21, 22, 23, 23,
- 30, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 1, 1, 1, 1, 1, 1,
- 21, 18, 18, 18, 18, 18, 30, 30,
- 5, 5, 5, 0, 0, 0, 30, 30,
- 0, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 0,
- 0, 1, 1, 29, 29, 18, 18, 0,
- 0, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 20, 18, 18, 18, 0,
-};
-
-static const Q_UINT8 ui_31[] = {
- 0, 0, 0, 0, 0, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 0,
- 0, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 30, 30, 6, 6, 6, 6, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_32[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 0, 0, 30,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 0,
-};
-
-static const Q_UINT8 ui_33[] = {
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 0,
- 0, 0, 0, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 0,
-};
-
-static const Q_UINT8 ui_34[] = {
- 19, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_4D[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 19, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_9F[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 19, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_A4[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 0,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 0, 0, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 0, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 0, 30, 30, 30, 0, 30, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_D7[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 19, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_D8[] = {
- 12, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_DB[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 12,
- 12, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 12,
-};
-
-static const Q_UINT8 ui_DF[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 12,
-};
-
-static const Q_UINT8 ui_E0[] = {
- 13, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_F8[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 13,
-};
-
-static const Q_UINT8 ui_FA[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_FB[] = {
- 16, 16, 16, 16, 16, 16, 16, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 16, 16, 16, 16, 16,
- 0, 0, 0, 0, 0, 19, 1, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 27, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 19, 19, 19, 19, 19, 0, 19, 0,
- 19, 19, 0, 19, 19, 0, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
-};
-
-static const Q_UINT8 ui_FD[] = {
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 22, 23,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 0, 0, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 ui_FE[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 26, 21, 21, 20, 20, 22, 23, 22,
- 23, 22, 23, 22, 23, 22, 23, 22,
- 23, 22, 23, 22, 23, 0, 0, 0,
- 0, 26, 26, 26, 26, 20, 20, 20,
- 26, 26, 26, 0, 26, 26, 26, 26,
- 21, 22, 23, 22, 23, 22, 23, 26,
- 26, 26, 27, 21, 27, 27, 27, 0,
- 26, 28, 26, 26, 0, 0, 0, 0,
- 19, 19, 19, 0, 19, 0, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 0, 0, 11,
-};
-
-static const Q_UINT8 ui_FF[] = {
- 0, 26, 26, 26, 28, 26, 26, 26,
- 22, 23, 26, 27, 26, 21, 26, 26,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 26, 26, 27, 27, 27, 26,
- 26, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 22, 26, 23, 29, 20,
- 29, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 22, 27, 23, 27, 0,
- 0, 26, 22, 23, 26, 20, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 18, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 18, 18,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 0,
- 0, 0, 19, 19, 19, 19, 19, 19,
- 0, 0, 19, 19, 19, 19, 19, 19,
- 0, 0, 19, 19, 19, 19, 19, 19,
- 0, 0, 19, 19, 19, 0, 0, 0,
- 28, 28, 27, 29, 30, 28, 28, 0,
- 30, 27, 27, 27, 27, 30, 30, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 11, 11, 11, 30, 30, 0, 0,
-};
-
-static const Q_UINT8 * const unicode_info[256] = {
- ui_00, ui_01, ui_02, ui_03, ui_04, ui_05, ui_06, ui_07,
- ui_08, ui_09, ui_0A, ui_0B, ui_0C, ui_0D, ui_0E, ui_0F,
- ui_10, ui_11, ui_12, ui_13, ui_14, ui_15, ui_16, ui_17,
- ui_18, ui_08, ui_08, ui_08, ui_08, ui_08, ui_1E, ui_1F,
- ui_20, ui_21, ui_22, ui_23, ui_24, ui_25, ui_26, ui_27,
- ui_28, ui_08, ui_08, ui_08, ui_08, ui_08, ui_2E, ui_2F,
- ui_30, ui_31, ui_32, ui_33, ui_34, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_4D, ui_34, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_9F,
- ui_15, ui_15, ui_15, ui_15, ui_A4, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_34, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_D7,
- ui_D8, ui_08, ui_08, ui_DB, ui_D8, ui_08, ui_08, ui_DF,
- ui_E0, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08, ui_08,
- ui_F8, ui_15, ui_FA, ui_FB, ui_15, ui_FD, ui_FE, ui_FF,
-};
-// 15616 bytes
-
-static const Q_UINT16 decomposition_map [] = {
- 0,
- 3, 0x00A0, 0x0020, 0,
- 16, 0x00A8, 0x0020, 0x0308, 0,
- 9, 0x00AA, 0x0061, 0,
- 16, 0x00AF, 0x0020, 0x0304, 0,
- 9, 0x00B2, 0x0032, 0,
- 9, 0x00B3, 0x0033, 0,
- 16, 0x00B4, 0x0020, 0x0301, 0,
- 16, 0x00B5, 0x03BC, 0,
- 16, 0x00B8, 0x0020, 0x0327, 0,
- 9, 0x00B9, 0x0031, 0,
- 9, 0x00BA, 0x006F, 0,
- 17, 0x00BC, 0x0031, 0x2044, 0x0034, 0,
- 17, 0x00BD, 0x0031, 0x2044, 0x0032, 0,
- 17, 0x00BE, 0x0033, 0x2044, 0x0034, 0,
- 1, 0x00C0, 0x0041, 0x0300, 0,
- 1, 0x00C1, 0x0041, 0x0301, 0,
- 1, 0x00C2, 0x0041, 0x0302, 0,
- 1, 0x00C3, 0x0041, 0x0303, 0,
- 1, 0x00C4, 0x0041, 0x0308, 0,
- 1, 0x00C5, 0x0041, 0x030A, 0,
- 1, 0x00C7, 0x0043, 0x0327, 0,
- 1, 0x00C8, 0x0045, 0x0300, 0,
- 1, 0x00C9, 0x0045, 0x0301, 0,
- 1, 0x00CA, 0x0045, 0x0302, 0,
- 1, 0x00CB, 0x0045, 0x0308, 0,
- 1, 0x00CC, 0x0049, 0x0300, 0,
- 1, 0x00CD, 0x0049, 0x0301, 0,
- 1, 0x00CE, 0x0049, 0x0302, 0,
- 1, 0x00CF, 0x0049, 0x0308, 0,
- 1, 0x00D1, 0x004E, 0x0303, 0,
- 1, 0x00D2, 0x004F, 0x0300, 0,
- 1, 0x00D3, 0x004F, 0x0301, 0,
- 1, 0x00D4, 0x004F, 0x0302, 0,
- 1, 0x00D5, 0x004F, 0x0303, 0,
- 1, 0x00D6, 0x004F, 0x0308, 0,
- 1, 0x00D9, 0x0055, 0x0300, 0,
- 1, 0x00DA, 0x0055, 0x0301, 0,
- 1, 0x00DB, 0x0055, 0x0302, 0,
- 1, 0x00DC, 0x0055, 0x0308, 0,
- 1, 0x00DD, 0x0059, 0x0301, 0,
- 1, 0x00E0, 0x0061, 0x0300, 0,
- 1, 0x00E1, 0x0061, 0x0301, 0,
- 1, 0x00E2, 0x0061, 0x0302, 0,
- 1, 0x00E3, 0x0061, 0x0303, 0,
- 1, 0x00E4, 0x0061, 0x0308, 0,
- 1, 0x00E5, 0x0061, 0x030A, 0,
- 1, 0x00E7, 0x0063, 0x0327, 0,
- 1, 0x00E8, 0x0065, 0x0300, 0,
- 1, 0x00E9, 0x0065, 0x0301, 0,
- 1, 0x00EA, 0x0065, 0x0302, 0,
- 1, 0x00EB, 0x0065, 0x0308, 0,
- 1, 0x00EC, 0x0069, 0x0300, 0,
- 1, 0x00ED, 0x0069, 0x0301, 0,
- 1, 0x00EE, 0x0069, 0x0302, 0,
- 1, 0x00EF, 0x0069, 0x0308, 0,
- 1, 0x00F1, 0x006E, 0x0303, 0,
- 1, 0x00F2, 0x006F, 0x0300, 0,
- 1, 0x00F3, 0x006F, 0x0301, 0,
- 1, 0x00F4, 0x006F, 0x0302, 0,
- 1, 0x00F5, 0x006F, 0x0303, 0,
- 1, 0x00F6, 0x006F, 0x0308, 0,
- 1, 0x00F9, 0x0075, 0x0300, 0,
- 1, 0x00FA, 0x0075, 0x0301, 0,
- 1, 0x00FB, 0x0075, 0x0302, 0,
- 1, 0x00FC, 0x0075, 0x0308, 0,
- 1, 0x00FD, 0x0079, 0x0301, 0,
- 1, 0x00FF, 0x0079, 0x0308, 0,
- 1, 0x0100, 0x0041, 0x0304, 0,
- 1, 0x0101, 0x0061, 0x0304, 0,
- 1, 0x0102, 0x0041, 0x0306, 0,
- 1, 0x0103, 0x0061, 0x0306, 0,
- 1, 0x0104, 0x0041, 0x0328, 0,
- 1, 0x0105, 0x0061, 0x0328, 0,
- 1, 0x0106, 0x0043, 0x0301, 0,
- 1, 0x0107, 0x0063, 0x0301, 0,
- 1, 0x0108, 0x0043, 0x0302, 0,
- 1, 0x0109, 0x0063, 0x0302, 0,
- 1, 0x010A, 0x0043, 0x0307, 0,
- 1, 0x010B, 0x0063, 0x0307, 0,
- 1, 0x010C, 0x0043, 0x030C, 0,
- 1, 0x010D, 0x0063, 0x030C, 0,
- 1, 0x010E, 0x0044, 0x030C, 0,
- 1, 0x010F, 0x0064, 0x030C, 0,
- 1, 0x0112, 0x0045, 0x0304, 0,
- 1, 0x0113, 0x0065, 0x0304, 0,
- 1, 0x0114, 0x0045, 0x0306, 0,
- 1, 0x0115, 0x0065, 0x0306, 0,
- 1, 0x0116, 0x0045, 0x0307, 0,
- 1, 0x0117, 0x0065, 0x0307, 0,
- 1, 0x0118, 0x0045, 0x0328, 0,
- 1, 0x0119, 0x0065, 0x0328, 0,
- 1, 0x011A, 0x0045, 0x030C, 0,
- 1, 0x011B, 0x0065, 0x030C, 0,
- 1, 0x011C, 0x0047, 0x0302, 0,
- 1, 0x011D, 0x0067, 0x0302, 0,
- 1, 0x011E, 0x0047, 0x0306, 0,
- 1, 0x011F, 0x0067, 0x0306, 0,
- 1, 0x0120, 0x0047, 0x0307, 0,
- 1, 0x0121, 0x0067, 0x0307, 0,
- 1, 0x0122, 0x0047, 0x0327, 0,
- 1, 0x0123, 0x0067, 0x0327, 0,
- 1, 0x0124, 0x0048, 0x0302, 0,
- 1, 0x0125, 0x0068, 0x0302, 0,
- 1, 0x0128, 0x0049, 0x0303, 0,
- 1, 0x0129, 0x0069, 0x0303, 0,
- 1, 0x012A, 0x0049, 0x0304, 0,
- 1, 0x012B, 0x0069, 0x0304, 0,
- 1, 0x012C, 0x0049, 0x0306, 0,
- 1, 0x012D, 0x0069, 0x0306, 0,
- 1, 0x012E, 0x0049, 0x0328, 0,
- 1, 0x012F, 0x0069, 0x0328, 0,
- 1, 0x0130, 0x0049, 0x0307, 0,
- 16, 0x0132, 0x0049, 0x004A, 0,
- 16, 0x0133, 0x0069, 0x006A, 0,
- 1, 0x0134, 0x004A, 0x0302, 0,
- 1, 0x0135, 0x006A, 0x0302, 0,
- 1, 0x0136, 0x004B, 0x0327, 0,
- 1, 0x0137, 0x006B, 0x0327, 0,
- 1, 0x0139, 0x004C, 0x0301, 0,
- 1, 0x013A, 0x006C, 0x0301, 0,
- 1, 0x013B, 0x004C, 0x0327, 0,
- 1, 0x013C, 0x006C, 0x0327, 0,
- 1, 0x013D, 0x004C, 0x030C, 0,
- 1, 0x013E, 0x006C, 0x030C, 0,
- 16, 0x013F, 0x004C, 0x00B7, 0,
- 16, 0x0140, 0x006C, 0x00B7, 0,
- 1, 0x0143, 0x004E, 0x0301, 0,
- 1, 0x0144, 0x006E, 0x0301, 0,
- 1, 0x0145, 0x004E, 0x0327, 0,
- 1, 0x0146, 0x006E, 0x0327, 0,
- 1, 0x0147, 0x004E, 0x030C, 0,
- 1, 0x0148, 0x006E, 0x030C, 0,
- 16, 0x0149, 0x02BC, 0x006E, 0,
- 1, 0x014C, 0x004F, 0x0304, 0,
- 1, 0x014D, 0x006F, 0x0304, 0,
- 1, 0x014E, 0x004F, 0x0306, 0,
- 1, 0x014F, 0x006F, 0x0306, 0,
- 1, 0x0150, 0x004F, 0x030B, 0,
- 1, 0x0151, 0x006F, 0x030B, 0,
- 1, 0x0154, 0x0052, 0x0301, 0,
- 1, 0x0155, 0x0072, 0x0301, 0,
- 1, 0x0156, 0x0052, 0x0327, 0,
- 1, 0x0157, 0x0072, 0x0327, 0,
- 1, 0x0158, 0x0052, 0x030C, 0,
- 1, 0x0159, 0x0072, 0x030C, 0,
- 1, 0x015A, 0x0053, 0x0301, 0,
- 1, 0x015B, 0x0073, 0x0301, 0,
- 1, 0x015C, 0x0053, 0x0302, 0,
- 1, 0x015D, 0x0073, 0x0302, 0,
- 1, 0x015E, 0x0053, 0x0327, 0,
- 1, 0x015F, 0x0073, 0x0327, 0,
- 1, 0x0160, 0x0053, 0x030C, 0,
- 1, 0x0161, 0x0073, 0x030C, 0,
- 1, 0x0162, 0x0054, 0x0327, 0,
- 1, 0x0163, 0x0074, 0x0327, 0,
- 1, 0x0164, 0x0054, 0x030C, 0,
- 1, 0x0165, 0x0074, 0x030C, 0,
- 1, 0x0168, 0x0055, 0x0303, 0,
- 1, 0x0169, 0x0075, 0x0303, 0,
- 1, 0x016A, 0x0055, 0x0304, 0,
- 1, 0x016B, 0x0075, 0x0304, 0,
- 1, 0x016C, 0x0055, 0x0306, 0,
- 1, 0x016D, 0x0075, 0x0306, 0,
- 1, 0x016E, 0x0055, 0x030A, 0,
- 1, 0x016F, 0x0075, 0x030A, 0,
- 1, 0x0170, 0x0055, 0x030B, 0,
- 1, 0x0171, 0x0075, 0x030B, 0,
- 1, 0x0172, 0x0055, 0x0328, 0,
- 1, 0x0173, 0x0075, 0x0328, 0,
- 1, 0x0174, 0x0057, 0x0302, 0,
- 1, 0x0175, 0x0077, 0x0302, 0,
- 1, 0x0176, 0x0059, 0x0302, 0,
- 1, 0x0177, 0x0079, 0x0302, 0,
- 1, 0x0178, 0x0059, 0x0308, 0,
- 1, 0x0179, 0x005A, 0x0301, 0,
- 1, 0x017A, 0x007A, 0x0301, 0,
- 1, 0x017B, 0x005A, 0x0307, 0,
- 1, 0x017C, 0x007A, 0x0307, 0,
- 1, 0x017D, 0x005A, 0x030C, 0,
- 1, 0x017E, 0x007A, 0x030C, 0,
- 16, 0x017F, 0x0073, 0,
- 1, 0x01A0, 0x004F, 0x031B, 0,
- 1, 0x01A1, 0x006F, 0x031B, 0,
- 1, 0x01AF, 0x0055, 0x031B, 0,
- 1, 0x01B0, 0x0075, 0x031B, 0,
- 16, 0x01C4, 0x0044, 0x017D, 0,
- 16, 0x01C5, 0x0044, 0x017E, 0,
- 16, 0x01C6, 0x0064, 0x017E, 0,
- 16, 0x01C7, 0x004C, 0x004A, 0,
- 16, 0x01C8, 0x004C, 0x006A, 0,
- 16, 0x01C9, 0x006C, 0x006A, 0,
- 16, 0x01CA, 0x004E, 0x004A, 0,
- 16, 0x01CB, 0x004E, 0x006A, 0,
- 16, 0x01CC, 0x006E, 0x006A, 0,
- 1, 0x01CD, 0x0041, 0x030C, 0,
- 1, 0x01CE, 0x0061, 0x030C, 0,
- 1, 0x01CF, 0x0049, 0x030C, 0,
- 1, 0x01D0, 0x0069, 0x030C, 0,
- 1, 0x01D1, 0x004F, 0x030C, 0,
- 1, 0x01D2, 0x006F, 0x030C, 0,
- 1, 0x01D3, 0x0055, 0x030C, 0,
- 1, 0x01D4, 0x0075, 0x030C, 0,
- 1, 0x01D5, 0x00DC, 0x0304, 0,
- 1, 0x01D6, 0x00FC, 0x0304, 0,
- 1, 0x01D7, 0x00DC, 0x0301, 0,
- 1, 0x01D8, 0x00FC, 0x0301, 0,
- 1, 0x01D9, 0x00DC, 0x030C, 0,
- 1, 0x01DA, 0x00FC, 0x030C, 0,
- 1, 0x01DB, 0x00DC, 0x0300, 0,
- 1, 0x01DC, 0x00FC, 0x0300, 0,
- 1, 0x01DE, 0x00C4, 0x0304, 0,
- 1, 0x01DF, 0x00E4, 0x0304, 0,
- 1, 0x01E0, 0x0226, 0x0304, 0,
- 1, 0x01E1, 0x0227, 0x0304, 0,
- 1, 0x01E2, 0x00C6, 0x0304, 0,
- 1, 0x01E3, 0x00E6, 0x0304, 0,
- 1, 0x01E6, 0x0047, 0x030C, 0,
- 1, 0x01E7, 0x0067, 0x030C, 0,
- 1, 0x01E8, 0x004B, 0x030C, 0,
- 1, 0x01E9, 0x006B, 0x030C, 0,
- 1, 0x01EA, 0x004F, 0x0328, 0,
- 1, 0x01EB, 0x006F, 0x0328, 0,
- 1, 0x01EC, 0x01EA, 0x0304, 0,
- 1, 0x01ED, 0x01EB, 0x0304, 0,
- 1, 0x01EE, 0x01B7, 0x030C, 0,
- 1, 0x01EF, 0x0292, 0x030C, 0,
- 1, 0x01F0, 0x006A, 0x030C, 0,
- 16, 0x01F1, 0x0044, 0x005A, 0,
- 16, 0x01F2, 0x0044, 0x007A, 0,
- 16, 0x01F3, 0x0064, 0x007A, 0,
- 1, 0x01F4, 0x0047, 0x0301, 0,
- 1, 0x01F5, 0x0067, 0x0301, 0,
- 1, 0x01F8, 0x004E, 0x0300, 0,
- 1, 0x01F9, 0x006E, 0x0300, 0,
- 1, 0x01FA, 0x00C5, 0x0301, 0,
- 1, 0x01FB, 0x00E5, 0x0301, 0,
- 1, 0x01FC, 0x00C6, 0x0301, 0,
- 1, 0x01FD, 0x00E6, 0x0301, 0,
- 1, 0x01FE, 0x00D8, 0x0301, 0,
- 1, 0x01FF, 0x00F8, 0x0301, 0,
- 1, 0x0200, 0x0041, 0x030F, 0,
- 1, 0x0201, 0x0061, 0x030F, 0,
- 1, 0x0202, 0x0041, 0x0311, 0,
- 1, 0x0203, 0x0061, 0x0311, 0,
- 1, 0x0204, 0x0045, 0x030F, 0,
- 1, 0x0205, 0x0065, 0x030F, 0,
- 1, 0x0206, 0x0045, 0x0311, 0,
- 1, 0x0207, 0x0065, 0x0311, 0,
- 1, 0x0208, 0x0049, 0x030F, 0,
- 1, 0x0209, 0x0069, 0x030F, 0,
- 1, 0x020A, 0x0049, 0x0311, 0,
- 1, 0x020B, 0x0069, 0x0311, 0,
- 1, 0x020C, 0x004F, 0x030F, 0,
- 1, 0x020D, 0x006F, 0x030F, 0,
- 1, 0x020E, 0x004F, 0x0311, 0,
- 1, 0x020F, 0x006F, 0x0311, 0,
- 1, 0x0210, 0x0052, 0x030F, 0,
- 1, 0x0211, 0x0072, 0x030F, 0,
- 1, 0x0212, 0x0052, 0x0311, 0,
- 1, 0x0213, 0x0072, 0x0311, 0,
- 1, 0x0214, 0x0055, 0x030F, 0,
- 1, 0x0215, 0x0075, 0x030F, 0,
- 1, 0x0216, 0x0055, 0x0311, 0,
- 1, 0x0217, 0x0075, 0x0311, 0,
- 1, 0x0218, 0x0053, 0x0326, 0,
- 1, 0x0219, 0x0073, 0x0326, 0,
- 1, 0x021A, 0x0054, 0x0326, 0,
- 1, 0x021B, 0x0074, 0x0326, 0,
- 1, 0x021E, 0x0048, 0x030C, 0,
- 1, 0x021F, 0x0068, 0x030C, 0,
- 1, 0x0226, 0x0041, 0x0307, 0,
- 1, 0x0227, 0x0061, 0x0307, 0,
- 1, 0x0228, 0x0045, 0x0327, 0,
- 1, 0x0229, 0x0065, 0x0327, 0,
- 1, 0x022A, 0x00D6, 0x0304, 0,
- 1, 0x022B, 0x00F6, 0x0304, 0,
- 1, 0x022C, 0x00D5, 0x0304, 0,
- 1, 0x022D, 0x00F5, 0x0304, 0,
- 1, 0x022E, 0x004F, 0x0307, 0,
- 1, 0x022F, 0x006F, 0x0307, 0,
- 1, 0x0230, 0x022E, 0x0304, 0,
- 1, 0x0231, 0x022F, 0x0304, 0,
- 1, 0x0232, 0x0059, 0x0304, 0,
- 1, 0x0233, 0x0079, 0x0304, 0,
- 9, 0x02B0, 0x0068, 0,
- 9, 0x02B1, 0x0266, 0,
- 9, 0x02B2, 0x006A, 0,
- 9, 0x02B3, 0x0072, 0,
- 9, 0x02B4, 0x0279, 0,
- 9, 0x02B5, 0x027B, 0,
- 9, 0x02B6, 0x0281, 0,
- 9, 0x02B7, 0x0077, 0,
- 9, 0x02B8, 0x0079, 0,
- 16, 0x02D8, 0x0020, 0x0306, 0,
- 16, 0x02D9, 0x0020, 0x0307, 0,
- 16, 0x02DA, 0x0020, 0x030A, 0,
- 16, 0x02DB, 0x0020, 0x0328, 0,
- 16, 0x02DC, 0x0020, 0x0303, 0,
- 16, 0x02DD, 0x0020, 0x030B, 0,
- 9, 0x02E0, 0x0263, 0,
- 9, 0x02E1, 0x006C, 0,
- 9, 0x02E2, 0x0073, 0,
- 9, 0x02E3, 0x0078, 0,
- 9, 0x02E4, 0x0295, 0,
- 1, 0x0340, 0x0300, 0,
- 1, 0x0341, 0x0301, 0,
- 1, 0x0343, 0x0313, 0,
- 1, 0x0344, 0x0308, 0x0301, 0,
- 1, 0x0374, 0x02B9, 0,
- 16, 0x037A, 0x0020, 0x0345, 0,
- 1, 0x037E, 0x003B, 0,
- 16, 0x0384, 0x0020, 0x0301, 0,
- 1, 0x0385, 0x00A8, 0x0301, 0,
- 1, 0x0386, 0x0391, 0x0301, 0,
- 1, 0x0387, 0x00B7, 0,
- 1, 0x0388, 0x0395, 0x0301, 0,
- 1, 0x0389, 0x0397, 0x0301, 0,
- 1, 0x038A, 0x0399, 0x0301, 0,
- 1, 0x038C, 0x039F, 0x0301, 0,
- 1, 0x038E, 0x03A5, 0x0301, 0,
- 1, 0x038F, 0x03A9, 0x0301, 0,
- 1, 0x0390, 0x03CA, 0x0301, 0,
- 1, 0x03AA, 0x0399, 0x0308, 0,
- 1, 0x03AB, 0x03A5, 0x0308, 0,
- 1, 0x03AC, 0x03B1, 0x0301, 0,
- 1, 0x03AD, 0x03B5, 0x0301, 0,
- 1, 0x03AE, 0x03B7, 0x0301, 0,
- 1, 0x03AF, 0x03B9, 0x0301, 0,
- 1, 0x03B0, 0x03CB, 0x0301, 0,
- 1, 0x03CA, 0x03B9, 0x0308, 0,
- 1, 0x03CB, 0x03C5, 0x0308, 0,
- 1, 0x03CC, 0x03BF, 0x0301, 0,
- 1, 0x03CD, 0x03C5, 0x0301, 0,
- 1, 0x03CE, 0x03C9, 0x0301, 0,
- 16, 0x03D0, 0x03B2, 0,
- 16, 0x03D1, 0x03B8, 0,
- 16, 0x03D2, 0x03A5, 0,
- 1, 0x03D3, 0x03D2, 0x0301, 0,
- 1, 0x03D4, 0x03D2, 0x0308, 0,
- 16, 0x03D5, 0x03C6, 0,
- 16, 0x03D6, 0x03C0, 0,
- 16, 0x03F0, 0x03BA, 0,
- 16, 0x03F1, 0x03C1, 0,
- 16, 0x03F2, 0x03C2, 0,
- 1, 0x0400, 0x0415, 0x0300, 0,
- 1, 0x0401, 0x0415, 0x0308, 0,
- 1, 0x0403, 0x0413, 0x0301, 0,
- 1, 0x0407, 0x0406, 0x0308, 0,
- 1, 0x040C, 0x041A, 0x0301, 0,
- 1, 0x040D, 0x0418, 0x0300, 0,
- 1, 0x040E, 0x0423, 0x0306, 0,
- 1, 0x0419, 0x0418, 0x0306, 0,
- 1, 0x0439, 0x0438, 0x0306, 0,
- 1, 0x0450, 0x0435, 0x0300, 0,
- 1, 0x0451, 0x0435, 0x0308, 0,
- 1, 0x0453, 0x0433, 0x0301, 0,
- 1, 0x0457, 0x0456, 0x0308, 0,
- 1, 0x045C, 0x043A, 0x0301, 0,
- 1, 0x045D, 0x0438, 0x0300, 0,
- 1, 0x045E, 0x0443, 0x0306, 0,
- 1, 0x0476, 0x0474, 0x030F, 0,
- 1, 0x0477, 0x0475, 0x030F, 0,
- 1, 0x04C1, 0x0416, 0x0306, 0,
- 1, 0x04C2, 0x0436, 0x0306, 0,
- 1, 0x04D0, 0x0410, 0x0306, 0,
- 1, 0x04D1, 0x0430, 0x0306, 0,
- 1, 0x04D2, 0x0410, 0x0308, 0,
- 1, 0x04D3, 0x0430, 0x0308, 0,
- 1, 0x04D6, 0x0415, 0x0306, 0,
- 1, 0x04D7, 0x0435, 0x0306, 0,
- 1, 0x04DA, 0x04D8, 0x0308, 0,
- 1, 0x04DB, 0x04D9, 0x0308, 0,
- 1, 0x04DC, 0x0416, 0x0308, 0,
- 1, 0x04DD, 0x0436, 0x0308, 0,
- 1, 0x04DE, 0x0417, 0x0308, 0,
- 1, 0x04DF, 0x0437, 0x0308, 0,
- 1, 0x04E2, 0x0418, 0x0304, 0,
- 1, 0x04E3, 0x0438, 0x0304, 0,
- 1, 0x04E4, 0x0418, 0x0308, 0,
- 1, 0x04E5, 0x0438, 0x0308, 0,
- 1, 0x04E6, 0x041E, 0x0308, 0,
- 1, 0x04E7, 0x043E, 0x0308, 0,
- 1, 0x04EA, 0x04E8, 0x0308, 0,
- 1, 0x04EB, 0x04E9, 0x0308, 0,
- 1, 0x04EC, 0x042D, 0x0308, 0,
- 1, 0x04ED, 0x044D, 0x0308, 0,
- 1, 0x04EE, 0x0423, 0x0304, 0,
- 1, 0x04EF, 0x0443, 0x0304, 0,
- 1, 0x04F0, 0x0423, 0x0308, 0,
- 1, 0x04F1, 0x0443, 0x0308, 0,
- 1, 0x04F2, 0x0423, 0x030B, 0,
- 1, 0x04F3, 0x0443, 0x030B, 0,
- 1, 0x04F4, 0x0427, 0x0308, 0,
- 1, 0x04F5, 0x0447, 0x0308, 0,
- 1, 0x04F8, 0x042B, 0x0308, 0,
- 1, 0x04F9, 0x044B, 0x0308, 0,
- 16, 0x0587, 0x0565, 0x0582, 0,
- 1, 0x0622, 0x0627, 0x0653, 0,
- 1, 0x0623, 0x0627, 0x0654, 0,
- 1, 0x0624, 0x0648, 0x0654, 0,
- 1, 0x0625, 0x0627, 0x0655, 0,
- 1, 0x0626, 0x064A, 0x0654, 0,
- 16, 0x0675, 0x0627, 0x0674, 0,
- 16, 0x0676, 0x0648, 0x0674, 0,
- 16, 0x0677, 0x06C7, 0x0674, 0,
- 16, 0x0678, 0x064A, 0x0674, 0,
- 1, 0x06C0, 0x06D5, 0x0654, 0,
- 1, 0x06C2, 0x06C1, 0x0654, 0,
- 1, 0x06D3, 0x06D2, 0x0654, 0,
- 1, 0x0929, 0x0928, 0x093C, 0,
- 1, 0x0931, 0x0930, 0x093C, 0,
- 1, 0x0934, 0x0933, 0x093C, 0,
- 1, 0x0958, 0x0915, 0x093C, 0,
- 1, 0x0959, 0x0916, 0x093C, 0,
- 1, 0x095A, 0x0917, 0x093C, 0,
- 1, 0x095B, 0x091C, 0x093C, 0,
- 1, 0x095C, 0x0921, 0x093C, 0,
- 1, 0x095D, 0x0922, 0x093C, 0,
- 1, 0x095E, 0x092B, 0x093C, 0,
- 1, 0x095F, 0x092F, 0x093C, 0,
- 1, 0x09CB, 0x09C7, 0x09BE, 0,
- 1, 0x09CC, 0x09C7, 0x09D7, 0,
- 1, 0x09DC, 0x09A1, 0x09BC, 0,
- 1, 0x09DD, 0x09A2, 0x09BC, 0,
- 1, 0x09DF, 0x09AF, 0x09BC, 0,
- 1, 0x0A33, 0x0A32, 0x0A3C, 0,
- 1, 0x0A36, 0x0A38, 0x0A3C, 0,
- 1, 0x0A59, 0x0A16, 0x0A3C, 0,
- 1, 0x0A5A, 0x0A17, 0x0A3C, 0,
- 1, 0x0A5B, 0x0A1C, 0x0A3C, 0,
- 1, 0x0A5E, 0x0A2B, 0x0A3C, 0,
- 1, 0x0B48, 0x0B47, 0x0B56, 0,
- 1, 0x0B4B, 0x0B47, 0x0B3E, 0,
- 1, 0x0B4C, 0x0B47, 0x0B57, 0,
- 1, 0x0B5C, 0x0B21, 0x0B3C, 0,
- 1, 0x0B5D, 0x0B22, 0x0B3C, 0,
- 1, 0x0B94, 0x0B92, 0x0BD7, 0,
- 1, 0x0BCA, 0x0BC6, 0x0BBE, 0,
- 1, 0x0BCB, 0x0BC7, 0x0BBE, 0,
- 1, 0x0BCC, 0x0BC6, 0x0BD7, 0,
- 1, 0x0C48, 0x0C46, 0x0C56, 0,
- 1, 0x0CC0, 0x0CBF, 0x0CD5, 0,
- 1, 0x0CC7, 0x0CC6, 0x0CD5, 0,
- 1, 0x0CC8, 0x0CC6, 0x0CD6, 0,
- 1, 0x0CCA, 0x0CC6, 0x0CC2, 0,
- 1, 0x0CCB, 0x0CCA, 0x0CD5, 0,
- 1, 0x0D4A, 0x0D46, 0x0D3E, 0,
- 1, 0x0D4B, 0x0D47, 0x0D3E, 0,
- 1, 0x0D4C, 0x0D46, 0x0D57, 0,
- 1, 0x0DDA, 0x0DD9, 0x0DCA, 0,
- 1, 0x0DDC, 0x0DD9, 0x0DCF, 0,
- 1, 0x0DDD, 0x0DDC, 0x0DCA, 0,
- 1, 0x0DDE, 0x0DD9, 0x0DDF, 0,
- 16, 0x0E33, 0x0E4D, 0x0E32, 0,
- 16, 0x0EB3, 0x0ECD, 0x0EB2, 0,
- 16, 0x0EDC, 0x0EAB, 0x0E99, 0,
- 16, 0x0EDD, 0x0EAB, 0x0EA1, 0,
- 3, 0x0F0C, 0x0F0B, 0,
- 1, 0x0F43, 0x0F42, 0x0FB7, 0,
- 1, 0x0F4D, 0x0F4C, 0x0FB7, 0,
- 1, 0x0F52, 0x0F51, 0x0FB7, 0,
- 1, 0x0F57, 0x0F56, 0x0FB7, 0,
- 1, 0x0F5C, 0x0F5B, 0x0FB7, 0,
- 1, 0x0F69, 0x0F40, 0x0FB5, 0,
- 1, 0x0F73, 0x0F71, 0x0F72, 0,
- 1, 0x0F75, 0x0F71, 0x0F74, 0,
- 1, 0x0F76, 0x0FB2, 0x0F80, 0,
- 16, 0x0F77, 0x0FB2, 0x0F81, 0,
- 1, 0x0F78, 0x0FB3, 0x0F80, 0,
- 16, 0x0F79, 0x0FB3, 0x0F81, 0,
- 1, 0x0F81, 0x0F71, 0x0F80, 0,
- 1, 0x0F93, 0x0F92, 0x0FB7, 0,
- 1, 0x0F9D, 0x0F9C, 0x0FB7, 0,
- 1, 0x0FA2, 0x0FA1, 0x0FB7, 0,
- 1, 0x0FA7, 0x0FA6, 0x0FB7, 0,
- 1, 0x0FAC, 0x0FAB, 0x0FB7, 0,
- 1, 0x0FB9, 0x0F90, 0x0FB5, 0,
- 1, 0x1026, 0x1025, 0x102E, 0,
- 1, 0x1E00, 0x0041, 0x0325, 0,
- 1, 0x1E01, 0x0061, 0x0325, 0,
- 1, 0x1E02, 0x0042, 0x0307, 0,
- 1, 0x1E03, 0x0062, 0x0307, 0,
- 1, 0x1E04, 0x0042, 0x0323, 0,
- 1, 0x1E05, 0x0062, 0x0323, 0,
- 1, 0x1E06, 0x0042, 0x0331, 0,
- 1, 0x1E07, 0x0062, 0x0331, 0,
- 1, 0x1E08, 0x00C7, 0x0301, 0,
- 1, 0x1E09, 0x00E7, 0x0301, 0,
- 1, 0x1E0A, 0x0044, 0x0307, 0,
- 1, 0x1E0B, 0x0064, 0x0307, 0,
- 1, 0x1E0C, 0x0044, 0x0323, 0,
- 1, 0x1E0D, 0x0064, 0x0323, 0,
- 1, 0x1E0E, 0x0044, 0x0331, 0,
- 1, 0x1E0F, 0x0064, 0x0331, 0,
- 1, 0x1E10, 0x0044, 0x0327, 0,
- 1, 0x1E11, 0x0064, 0x0327, 0,
- 1, 0x1E12, 0x0044, 0x032D, 0,
- 1, 0x1E13, 0x0064, 0x032D, 0,
- 1, 0x1E14, 0x0112, 0x0300, 0,
- 1, 0x1E15, 0x0113, 0x0300, 0,
- 1, 0x1E16, 0x0112, 0x0301, 0,
- 1, 0x1E17, 0x0113, 0x0301, 0,
- 1, 0x1E18, 0x0045, 0x032D, 0,
- 1, 0x1E19, 0x0065, 0x032D, 0,
- 1, 0x1E1A, 0x0045, 0x0330, 0,
- 1, 0x1E1B, 0x0065, 0x0330, 0,
- 1, 0x1E1C, 0x0228, 0x0306, 0,
- 1, 0x1E1D, 0x0229, 0x0306, 0,
- 1, 0x1E1E, 0x0046, 0x0307, 0,
- 1, 0x1E1F, 0x0066, 0x0307, 0,
- 1, 0x1E20, 0x0047, 0x0304, 0,
- 1, 0x1E21, 0x0067, 0x0304, 0,
- 1, 0x1E22, 0x0048, 0x0307, 0,
- 1, 0x1E23, 0x0068, 0x0307, 0,
- 1, 0x1E24, 0x0048, 0x0323, 0,
- 1, 0x1E25, 0x0068, 0x0323, 0,
- 1, 0x1E26, 0x0048, 0x0308, 0,
- 1, 0x1E27, 0x0068, 0x0308, 0,
- 1, 0x1E28, 0x0048, 0x0327, 0,
- 1, 0x1E29, 0x0068, 0x0327, 0,
- 1, 0x1E2A, 0x0048, 0x032E, 0,
- 1, 0x1E2B, 0x0068, 0x032E, 0,
- 1, 0x1E2C, 0x0049, 0x0330, 0,
- 1, 0x1E2D, 0x0069, 0x0330, 0,
- 1, 0x1E2E, 0x00CF, 0x0301, 0,
- 1, 0x1E2F, 0x00EF, 0x0301, 0,
- 1, 0x1E30, 0x004B, 0x0301, 0,
- 1, 0x1E31, 0x006B, 0x0301, 0,
- 1, 0x1E32, 0x004B, 0x0323, 0,
- 1, 0x1E33, 0x006B, 0x0323, 0,
- 1, 0x1E34, 0x004B, 0x0331, 0,
- 1, 0x1E35, 0x006B, 0x0331, 0,
- 1, 0x1E36, 0x004C, 0x0323, 0,
- 1, 0x1E37, 0x006C, 0x0323, 0,
- 1, 0x1E38, 0x1E36, 0x0304, 0,
- 1, 0x1E39, 0x1E37, 0x0304, 0,
- 1, 0x1E3A, 0x004C, 0x0331, 0,
- 1, 0x1E3B, 0x006C, 0x0331, 0,
- 1, 0x1E3C, 0x004C, 0x032D, 0,
- 1, 0x1E3D, 0x006C, 0x032D, 0,
- 1, 0x1E3E, 0x004D, 0x0301, 0,
- 1, 0x1E3F, 0x006D, 0x0301, 0,
- 1, 0x1E40, 0x004D, 0x0307, 0,
- 1, 0x1E41, 0x006D, 0x0307, 0,
- 1, 0x1E42, 0x004D, 0x0323, 0,
- 1, 0x1E43, 0x006D, 0x0323, 0,
- 1, 0x1E44, 0x004E, 0x0307, 0,
- 1, 0x1E45, 0x006E, 0x0307, 0,
- 1, 0x1E46, 0x004E, 0x0323, 0,
- 1, 0x1E47, 0x006E, 0x0323, 0,
- 1, 0x1E48, 0x004E, 0x0331, 0,
- 1, 0x1E49, 0x006E, 0x0331, 0,
- 1, 0x1E4A, 0x004E, 0x032D, 0,
- 1, 0x1E4B, 0x006E, 0x032D, 0,
- 1, 0x1E4C, 0x00D5, 0x0301, 0,
- 1, 0x1E4D, 0x00F5, 0x0301, 0,
- 1, 0x1E4E, 0x00D5, 0x0308, 0,
- 1, 0x1E4F, 0x00F5, 0x0308, 0,
- 1, 0x1E50, 0x014C, 0x0300, 0,
- 1, 0x1E51, 0x014D, 0x0300, 0,
- 1, 0x1E52, 0x014C, 0x0301, 0,
- 1, 0x1E53, 0x014D, 0x0301, 0,
- 1, 0x1E54, 0x0050, 0x0301, 0,
- 1, 0x1E55, 0x0070, 0x0301, 0,
- 1, 0x1E56, 0x0050, 0x0307, 0,
- 1, 0x1E57, 0x0070, 0x0307, 0,
- 1, 0x1E58, 0x0052, 0x0307, 0,
- 1, 0x1E59, 0x0072, 0x0307, 0,
- 1, 0x1E5A, 0x0052, 0x0323, 0,
- 1, 0x1E5B, 0x0072, 0x0323, 0,
- 1, 0x1E5C, 0x1E5A, 0x0304, 0,
- 1, 0x1E5D, 0x1E5B, 0x0304, 0,
- 1, 0x1E5E, 0x0052, 0x0331, 0,
- 1, 0x1E5F, 0x0072, 0x0331, 0,
- 1, 0x1E60, 0x0053, 0x0307, 0,
- 1, 0x1E61, 0x0073, 0x0307, 0,
- 1, 0x1E62, 0x0053, 0x0323, 0,
- 1, 0x1E63, 0x0073, 0x0323, 0,
- 1, 0x1E64, 0x015A, 0x0307, 0,
- 1, 0x1E65, 0x015B, 0x0307, 0,
- 1, 0x1E66, 0x0160, 0x0307, 0,
- 1, 0x1E67, 0x0161, 0x0307, 0,
- 1, 0x1E68, 0x1E62, 0x0307, 0,
- 1, 0x1E69, 0x1E63, 0x0307, 0,
- 1, 0x1E6A, 0x0054, 0x0307, 0,
- 1, 0x1E6B, 0x0074, 0x0307, 0,
- 1, 0x1E6C, 0x0054, 0x0323, 0,
- 1, 0x1E6D, 0x0074, 0x0323, 0,
- 1, 0x1E6E, 0x0054, 0x0331, 0,
- 1, 0x1E6F, 0x0074, 0x0331, 0,
- 1, 0x1E70, 0x0054, 0x032D, 0,
- 1, 0x1E71, 0x0074, 0x032D, 0,
- 1, 0x1E72, 0x0055, 0x0324, 0,
- 1, 0x1E73, 0x0075, 0x0324, 0,
- 1, 0x1E74, 0x0055, 0x0330, 0,
- 1, 0x1E75, 0x0075, 0x0330, 0,
- 1, 0x1E76, 0x0055, 0x032D, 0,
- 1, 0x1E77, 0x0075, 0x032D, 0,
- 1, 0x1E78, 0x0168, 0x0301, 0,
- 1, 0x1E79, 0x0169, 0x0301, 0,
- 1, 0x1E7A, 0x016A, 0x0308, 0,
- 1, 0x1E7B, 0x016B, 0x0308, 0,
- 1, 0x1E7C, 0x0056, 0x0303, 0,
- 1, 0x1E7D, 0x0076, 0x0303, 0,
- 1, 0x1E7E, 0x0056, 0x0323, 0,
- 1, 0x1E7F, 0x0076, 0x0323, 0,
- 1, 0x1E80, 0x0057, 0x0300, 0,
- 1, 0x1E81, 0x0077, 0x0300, 0,
- 1, 0x1E82, 0x0057, 0x0301, 0,
- 1, 0x1E83, 0x0077, 0x0301, 0,
- 1, 0x1E84, 0x0057, 0x0308, 0,
- 1, 0x1E85, 0x0077, 0x0308, 0,
- 1, 0x1E86, 0x0057, 0x0307, 0,
- 1, 0x1E87, 0x0077, 0x0307, 0,
- 1, 0x1E88, 0x0057, 0x0323, 0,
- 1, 0x1E89, 0x0077, 0x0323, 0,
- 1, 0x1E8A, 0x0058, 0x0307, 0,
- 1, 0x1E8B, 0x0078, 0x0307, 0,
- 1, 0x1E8C, 0x0058, 0x0308, 0,
- 1, 0x1E8D, 0x0078, 0x0308, 0,
- 1, 0x1E8E, 0x0059, 0x0307, 0,
- 1, 0x1E8F, 0x0079, 0x0307, 0,
- 1, 0x1E90, 0x005A, 0x0302, 0,
- 1, 0x1E91, 0x007A, 0x0302, 0,
- 1, 0x1E92, 0x005A, 0x0323, 0,
- 1, 0x1E93, 0x007A, 0x0323, 0,
- 1, 0x1E94, 0x005A, 0x0331, 0,
- 1, 0x1E95, 0x007A, 0x0331, 0,
- 1, 0x1E96, 0x0068, 0x0331, 0,
- 1, 0x1E97, 0x0074, 0x0308, 0,
- 1, 0x1E98, 0x0077, 0x030A, 0,
- 1, 0x1E99, 0x0079, 0x030A, 0,
- 16, 0x1E9A, 0x0061, 0x02BE, 0,
- 1, 0x1E9B, 0x017F, 0x0307, 0,
- 1, 0x1EA0, 0x0041, 0x0323, 0,
- 1, 0x1EA1, 0x0061, 0x0323, 0,
- 1, 0x1EA2, 0x0041, 0x0309, 0,
- 1, 0x1EA3, 0x0061, 0x0309, 0,
- 1, 0x1EA4, 0x00C2, 0x0301, 0,
- 1, 0x1EA5, 0x00E2, 0x0301, 0,
- 1, 0x1EA6, 0x00C2, 0x0300, 0,
- 1, 0x1EA7, 0x00E2, 0x0300, 0,
- 1, 0x1EA8, 0x00C2, 0x0309, 0,
- 1, 0x1EA9, 0x00E2, 0x0309, 0,
- 1, 0x1EAA, 0x00C2, 0x0303, 0,
- 1, 0x1EAB, 0x00E2, 0x0303, 0,
- 1, 0x1EAC, 0x1EA0, 0x0302, 0,
- 1, 0x1EAD, 0x1EA1, 0x0302, 0,
- 1, 0x1EAE, 0x0102, 0x0301, 0,
- 1, 0x1EAF, 0x0103, 0x0301, 0,
- 1, 0x1EB0, 0x0102, 0x0300, 0,
- 1, 0x1EB1, 0x0103, 0x0300, 0,
- 1, 0x1EB2, 0x0102, 0x0309, 0,
- 1, 0x1EB3, 0x0103, 0x0309, 0,
- 1, 0x1EB4, 0x0102, 0x0303, 0,
- 1, 0x1EB5, 0x0103, 0x0303, 0,
- 1, 0x1EB6, 0x1EA0, 0x0306, 0,
- 1, 0x1EB7, 0x1EA1, 0x0306, 0,
- 1, 0x1EB8, 0x0045, 0x0323, 0,
- 1, 0x1EB9, 0x0065, 0x0323, 0,
- 1, 0x1EBA, 0x0045, 0x0309, 0,
- 1, 0x1EBB, 0x0065, 0x0309, 0,
- 1, 0x1EBC, 0x0045, 0x0303, 0,
- 1, 0x1EBD, 0x0065, 0x0303, 0,
- 1, 0x1EBE, 0x00CA, 0x0301, 0,
- 1, 0x1EBF, 0x00EA, 0x0301, 0,
- 1, 0x1EC0, 0x00CA, 0x0300, 0,
- 1, 0x1EC1, 0x00EA, 0x0300, 0,
- 1, 0x1EC2, 0x00CA, 0x0309, 0,
- 1, 0x1EC3, 0x00EA, 0x0309, 0,
- 1, 0x1EC4, 0x00CA, 0x0303, 0,
- 1, 0x1EC5, 0x00EA, 0x0303, 0,
- 1, 0x1EC6, 0x1EB8, 0x0302, 0,
- 1, 0x1EC7, 0x1EB9, 0x0302, 0,
- 1, 0x1EC8, 0x0049, 0x0309, 0,
- 1, 0x1EC9, 0x0069, 0x0309, 0,
- 1, 0x1ECA, 0x0049, 0x0323, 0,
- 1, 0x1ECB, 0x0069, 0x0323, 0,
- 1, 0x1ECC, 0x004F, 0x0323, 0,
- 1, 0x1ECD, 0x006F, 0x0323, 0,
- 1, 0x1ECE, 0x004F, 0x0309, 0,
- 1, 0x1ECF, 0x006F, 0x0309, 0,
- 1, 0x1ED0, 0x00D4, 0x0301, 0,
- 1, 0x1ED1, 0x00F4, 0x0301, 0,
- 1, 0x1ED2, 0x00D4, 0x0300, 0,
- 1, 0x1ED3, 0x00F4, 0x0300, 0,
- 1, 0x1ED4, 0x00D4, 0x0309, 0,
- 1, 0x1ED5, 0x00F4, 0x0309, 0,
- 1, 0x1ED6, 0x00D4, 0x0303, 0,
- 1, 0x1ED7, 0x00F4, 0x0303, 0,
- 1, 0x1ED8, 0x1ECC, 0x0302, 0,
- 1, 0x1ED9, 0x1ECD, 0x0302, 0,
- 1, 0x1EDA, 0x01A0, 0x0301, 0,
- 1, 0x1EDB, 0x01A1, 0x0301, 0,
- 1, 0x1EDC, 0x01A0, 0x0300, 0,
- 1, 0x1EDD, 0x01A1, 0x0300, 0,
- 1, 0x1EDE, 0x01A0, 0x0309, 0,
- 1, 0x1EDF, 0x01A1, 0x0309, 0,
- 1, 0x1EE0, 0x01A0, 0x0303, 0,
- 1, 0x1EE1, 0x01A1, 0x0303, 0,
- 1, 0x1EE2, 0x01A0, 0x0323, 0,
- 1, 0x1EE3, 0x01A1, 0x0323, 0,
- 1, 0x1EE4, 0x0055, 0x0323, 0,
- 1, 0x1EE5, 0x0075, 0x0323, 0,
- 1, 0x1EE6, 0x0055, 0x0309, 0,
- 1, 0x1EE7, 0x0075, 0x0309, 0,
- 1, 0x1EE8, 0x01AF, 0x0301, 0,
- 1, 0x1EE9, 0x01B0, 0x0301, 0,
- 1, 0x1EEA, 0x01AF, 0x0300, 0,
- 1, 0x1EEB, 0x01B0, 0x0300, 0,
- 1, 0x1EEC, 0x01AF, 0x0309, 0,
- 1, 0x1EED, 0x01B0, 0x0309, 0,
- 1, 0x1EEE, 0x01AF, 0x0303, 0,
- 1, 0x1EEF, 0x01B0, 0x0303, 0,
- 1, 0x1EF0, 0x01AF, 0x0323, 0,
- 1, 0x1EF1, 0x01B0, 0x0323, 0,
- 1, 0x1EF2, 0x0059, 0x0300, 0,
- 1, 0x1EF3, 0x0079, 0x0300, 0,
- 1, 0x1EF4, 0x0059, 0x0323, 0,
- 1, 0x1EF5, 0x0079, 0x0323, 0,
- 1, 0x1EF6, 0x0059, 0x0309, 0,
- 1, 0x1EF7, 0x0079, 0x0309, 0,
- 1, 0x1EF8, 0x0059, 0x0303, 0,
- 1, 0x1EF9, 0x0079, 0x0303, 0,
- 1, 0x1F00, 0x03B1, 0x0313, 0,
- 1, 0x1F01, 0x03B1, 0x0314, 0,
- 1, 0x1F02, 0x1F00, 0x0300, 0,
- 1, 0x1F03, 0x1F01, 0x0300, 0,
- 1, 0x1F04, 0x1F00, 0x0301, 0,
- 1, 0x1F05, 0x1F01, 0x0301, 0,
- 1, 0x1F06, 0x1F00, 0x0342, 0,
- 1, 0x1F07, 0x1F01, 0x0342, 0,
- 1, 0x1F08, 0x0391, 0x0313, 0,
- 1, 0x1F09, 0x0391, 0x0314, 0,
- 1, 0x1F0A, 0x1F08, 0x0300, 0,
- 1, 0x1F0B, 0x1F09, 0x0300, 0,
- 1, 0x1F0C, 0x1F08, 0x0301, 0,
- 1, 0x1F0D, 0x1F09, 0x0301, 0,
- 1, 0x1F0E, 0x1F08, 0x0342, 0,
- 1, 0x1F0F, 0x1F09, 0x0342, 0,
- 1, 0x1F10, 0x03B5, 0x0313, 0,
- 1, 0x1F11, 0x03B5, 0x0314, 0,
- 1, 0x1F12, 0x1F10, 0x0300, 0,
- 1, 0x1F13, 0x1F11, 0x0300, 0,
- 1, 0x1F14, 0x1F10, 0x0301, 0,
- 1, 0x1F15, 0x1F11, 0x0301, 0,
- 1, 0x1F18, 0x0395, 0x0313, 0,
- 1, 0x1F19, 0x0395, 0x0314, 0,
- 1, 0x1F1A, 0x1F18, 0x0300, 0,
- 1, 0x1F1B, 0x1F19, 0x0300, 0,
- 1, 0x1F1C, 0x1F18, 0x0301, 0,
- 1, 0x1F1D, 0x1F19, 0x0301, 0,
- 1, 0x1F20, 0x03B7, 0x0313, 0,
- 1, 0x1F21, 0x03B7, 0x0314, 0,
- 1, 0x1F22, 0x1F20, 0x0300, 0,
- 1, 0x1F23, 0x1F21, 0x0300, 0,
- 1, 0x1F24, 0x1F20, 0x0301, 0,
- 1, 0x1F25, 0x1F21, 0x0301, 0,
- 1, 0x1F26, 0x1F20, 0x0342, 0,
- 1, 0x1F27, 0x1F21, 0x0342, 0,
- 1, 0x1F28, 0x0397, 0x0313, 0,
- 1, 0x1F29, 0x0397, 0x0314, 0,
- 1, 0x1F2A, 0x1F28, 0x0300, 0,
- 1, 0x1F2B, 0x1F29, 0x0300, 0,
- 1, 0x1F2C, 0x1F28, 0x0301, 0,
- 1, 0x1F2D, 0x1F29, 0x0301, 0,
- 1, 0x1F2E, 0x1F28, 0x0342, 0,
- 1, 0x1F2F, 0x1F29, 0x0342, 0,
- 1, 0x1F30, 0x03B9, 0x0313, 0,
- 1, 0x1F31, 0x03B9, 0x0314, 0,
- 1, 0x1F32, 0x1F30, 0x0300, 0,
- 1, 0x1F33, 0x1F31, 0x0300, 0,
- 1, 0x1F34, 0x1F30, 0x0301, 0,
- 1, 0x1F35, 0x1F31, 0x0301, 0,
- 1, 0x1F36, 0x1F30, 0x0342, 0,
- 1, 0x1F37, 0x1F31, 0x0342, 0,
- 1, 0x1F38, 0x0399, 0x0313, 0,
- 1, 0x1F39, 0x0399, 0x0314, 0,
- 1, 0x1F3A, 0x1F38, 0x0300, 0,
- 1, 0x1F3B, 0x1F39, 0x0300, 0,
- 1, 0x1F3C, 0x1F38, 0x0301, 0,
- 1, 0x1F3D, 0x1F39, 0x0301, 0,
- 1, 0x1F3E, 0x1F38, 0x0342, 0,
- 1, 0x1F3F, 0x1F39, 0x0342, 0,
- 1, 0x1F40, 0x03BF, 0x0313, 0,
- 1, 0x1F41, 0x03BF, 0x0314, 0,
- 1, 0x1F42, 0x1F40, 0x0300, 0,
- 1, 0x1F43, 0x1F41, 0x0300, 0,
- 1, 0x1F44, 0x1F40, 0x0301, 0,
- 1, 0x1F45, 0x1F41, 0x0301, 0,
- 1, 0x1F48, 0x039F, 0x0313, 0,
- 1, 0x1F49, 0x039F, 0x0314, 0,
- 1, 0x1F4A, 0x1F48, 0x0300, 0,
- 1, 0x1F4B, 0x1F49, 0x0300, 0,
- 1, 0x1F4C, 0x1F48, 0x0301, 0,
- 1, 0x1F4D, 0x1F49, 0x0301, 0,
- 1, 0x1F50, 0x03C5, 0x0313, 0,
- 1, 0x1F51, 0x03C5, 0x0314, 0,
- 1, 0x1F52, 0x1F50, 0x0300, 0,
- 1, 0x1F53, 0x1F51, 0x0300, 0,
- 1, 0x1F54, 0x1F50, 0x0301, 0,
- 1, 0x1F55, 0x1F51, 0x0301, 0,
- 1, 0x1F56, 0x1F50, 0x0342, 0,
- 1, 0x1F57, 0x1F51, 0x0342, 0,
- 1, 0x1F59, 0x03A5, 0x0314, 0,
- 1, 0x1F5B, 0x1F59, 0x0300, 0,
- 1, 0x1F5D, 0x1F59, 0x0301, 0,
- 1, 0x1F5F, 0x1F59, 0x0342, 0,
- 1, 0x1F60, 0x03C9, 0x0313, 0,
- 1, 0x1F61, 0x03C9, 0x0314, 0,
- 1, 0x1F62, 0x1F60, 0x0300, 0,
- 1, 0x1F63, 0x1F61, 0x0300, 0,
- 1, 0x1F64, 0x1F60, 0x0301, 0,
- 1, 0x1F65, 0x1F61, 0x0301, 0,
- 1, 0x1F66, 0x1F60, 0x0342, 0,
- 1, 0x1F67, 0x1F61, 0x0342, 0,
- 1, 0x1F68, 0x03A9, 0x0313, 0,
- 1, 0x1F69, 0x03A9, 0x0314, 0,
- 1, 0x1F6A, 0x1F68, 0x0300, 0,
- 1, 0x1F6B, 0x1F69, 0x0300, 0,
- 1, 0x1F6C, 0x1F68, 0x0301, 0,
- 1, 0x1F6D, 0x1F69, 0x0301, 0,
- 1, 0x1F6E, 0x1F68, 0x0342, 0,
- 1, 0x1F6F, 0x1F69, 0x0342, 0,
- 1, 0x1F70, 0x03B1, 0x0300, 0,
- 1, 0x1F71, 0x03AC, 0,
- 1, 0x1F72, 0x03B5, 0x0300, 0,
- 1, 0x1F73, 0x03AD, 0,
- 1, 0x1F74, 0x03B7, 0x0300, 0,
- 1, 0x1F75, 0x03AE, 0,
- 1, 0x1F76, 0x03B9, 0x0300, 0,
- 1, 0x1F77, 0x03AF, 0,
- 1, 0x1F78, 0x03BF, 0x0300, 0,
- 1, 0x1F79, 0x03CC, 0,
- 1, 0x1F7A, 0x03C5, 0x0300, 0,
- 1, 0x1F7B, 0x03CD, 0,
- 1, 0x1F7C, 0x03C9, 0x0300, 0,
- 1, 0x1F7D, 0x03CE, 0,
- 1, 0x1F80, 0x1F00, 0x0345, 0,
- 1, 0x1F81, 0x1F01, 0x0345, 0,
- 1, 0x1F82, 0x1F02, 0x0345, 0,
- 1, 0x1F83, 0x1F03, 0x0345, 0,
- 1, 0x1F84, 0x1F04, 0x0345, 0,
- 1, 0x1F85, 0x1F05, 0x0345, 0,
- 1, 0x1F86, 0x1F06, 0x0345, 0,
- 1, 0x1F87, 0x1F07, 0x0345, 0,
- 1, 0x1F88, 0x1F08, 0x0345, 0,
- 1, 0x1F89, 0x1F09, 0x0345, 0,
- 1, 0x1F8A, 0x1F0A, 0x0345, 0,
- 1, 0x1F8B, 0x1F0B, 0x0345, 0,
- 1, 0x1F8C, 0x1F0C, 0x0345, 0,
- 1, 0x1F8D, 0x1F0D, 0x0345, 0,
- 1, 0x1F8E, 0x1F0E, 0x0345, 0,
- 1, 0x1F8F, 0x1F0F, 0x0345, 0,
- 1, 0x1F90, 0x1F20, 0x0345, 0,
- 1, 0x1F91, 0x1F21, 0x0345, 0,
- 1, 0x1F92, 0x1F22, 0x0345, 0,
- 1, 0x1F93, 0x1F23, 0x0345, 0,
- 1, 0x1F94, 0x1F24, 0x0345, 0,
- 1, 0x1F95, 0x1F25, 0x0345, 0,
- 1, 0x1F96, 0x1F26, 0x0345, 0,
- 1, 0x1F97, 0x1F27, 0x0345, 0,
- 1, 0x1F98, 0x1F28, 0x0345, 0,
- 1, 0x1F99, 0x1F29, 0x0345, 0,
- 1, 0x1F9A, 0x1F2A, 0x0345, 0,
- 1, 0x1F9B, 0x1F2B, 0x0345, 0,
- 1, 0x1F9C, 0x1F2C, 0x0345, 0,
- 1, 0x1F9D, 0x1F2D, 0x0345, 0,
- 1, 0x1F9E, 0x1F2E, 0x0345, 0,
- 1, 0x1F9F, 0x1F2F, 0x0345, 0,
- 1, 0x1FA0, 0x1F60, 0x0345, 0,
- 1, 0x1FA1, 0x1F61, 0x0345, 0,
- 1, 0x1FA2, 0x1F62, 0x0345, 0,
- 1, 0x1FA3, 0x1F63, 0x0345, 0,
- 1, 0x1FA4, 0x1F64, 0x0345, 0,
- 1, 0x1FA5, 0x1F65, 0x0345, 0,
- 1, 0x1FA6, 0x1F66, 0x0345, 0,
- 1, 0x1FA7, 0x1F67, 0x0345, 0,
- 1, 0x1FA8, 0x1F68, 0x0345, 0,
- 1, 0x1FA9, 0x1F69, 0x0345, 0,
- 1, 0x1FAA, 0x1F6A, 0x0345, 0,
- 1, 0x1FAB, 0x1F6B, 0x0345, 0,
- 1, 0x1FAC, 0x1F6C, 0x0345, 0,
- 1, 0x1FAD, 0x1F6D, 0x0345, 0,
- 1, 0x1FAE, 0x1F6E, 0x0345, 0,
- 1, 0x1FAF, 0x1F6F, 0x0345, 0,
- 1, 0x1FB0, 0x03B1, 0x0306, 0,
- 1, 0x1FB1, 0x03B1, 0x0304, 0,
- 1, 0x1FB2, 0x1F70, 0x0345, 0,
- 1, 0x1FB3, 0x03B1, 0x0345, 0,
- 1, 0x1FB4, 0x03AC, 0x0345, 0,
- 1, 0x1FB6, 0x03B1, 0x0342, 0,
- 1, 0x1FB7, 0x1FB6, 0x0345, 0,
- 1, 0x1FB8, 0x0391, 0x0306, 0,
- 1, 0x1FB9, 0x0391, 0x0304, 0,
- 1, 0x1FBA, 0x0391, 0x0300, 0,
- 1, 0x1FBB, 0x0386, 0,
- 1, 0x1FBC, 0x0391, 0x0345, 0,
- 16, 0x1FBD, 0x0020, 0x0313, 0,
- 1, 0x1FBE, 0x03B9, 0,
- 16, 0x1FBF, 0x0020, 0x0313, 0,
- 16, 0x1FC0, 0x0020, 0x0342, 0,
- 1, 0x1FC1, 0x00A8, 0x0342, 0,
- 1, 0x1FC2, 0x1F74, 0x0345, 0,
- 1, 0x1FC3, 0x03B7, 0x0345, 0,
- 1, 0x1FC4, 0x03AE, 0x0345, 0,
- 1, 0x1FC6, 0x03B7, 0x0342, 0,
- 1, 0x1FC7, 0x1FC6, 0x0345, 0,
- 1, 0x1FC8, 0x0395, 0x0300, 0,
- 1, 0x1FC9, 0x0388, 0,
- 1, 0x1FCA, 0x0397, 0x0300, 0,
- 1, 0x1FCB, 0x0389, 0,
- 1, 0x1FCC, 0x0397, 0x0345, 0,
- 1, 0x1FCD, 0x1FBF, 0x0300, 0,
- 1, 0x1FCE, 0x1FBF, 0x0301, 0,
- 1, 0x1FCF, 0x1FBF, 0x0342, 0,
- 1, 0x1FD0, 0x03B9, 0x0306, 0,
- 1, 0x1FD1, 0x03B9, 0x0304, 0,
- 1, 0x1FD2, 0x03CA, 0x0300, 0,
- 1, 0x1FD3, 0x0390, 0,
- 1, 0x1FD6, 0x03B9, 0x0342, 0,
- 1, 0x1FD7, 0x03CA, 0x0342, 0,
- 1, 0x1FD8, 0x0399, 0x0306, 0,
- 1, 0x1FD9, 0x0399, 0x0304, 0,
- 1, 0x1FDA, 0x0399, 0x0300, 0,
- 1, 0x1FDB, 0x038A, 0,
- 1, 0x1FDD, 0x1FFE, 0x0300, 0,
- 1, 0x1FDE, 0x1FFE, 0x0301, 0,
- 1, 0x1FDF, 0x1FFE, 0x0342, 0,
- 1, 0x1FE0, 0x03C5, 0x0306, 0,
- 1, 0x1FE1, 0x03C5, 0x0304, 0,
- 1, 0x1FE2, 0x03CB, 0x0300, 0,
- 1, 0x1FE3, 0x03B0, 0,
- 1, 0x1FE4, 0x03C1, 0x0313, 0,
- 1, 0x1FE5, 0x03C1, 0x0314, 0,
- 1, 0x1FE6, 0x03C5, 0x0342, 0,
- 1, 0x1FE7, 0x03CB, 0x0342, 0,
- 1, 0x1FE8, 0x03A5, 0x0306, 0,
- 1, 0x1FE9, 0x03A5, 0x0304, 0,
- 1, 0x1FEA, 0x03A5, 0x0300, 0,
- 1, 0x1FEB, 0x038E, 0,
- 1, 0x1FEC, 0x03A1, 0x0314, 0,
- 1, 0x1FED, 0x00A8, 0x0300, 0,
- 1, 0x1FEE, 0x0385, 0,
- 1, 0x1FEF, 0x0060, 0,
- 1, 0x1FF2, 0x1F7C, 0x0345, 0,
- 1, 0x1FF3, 0x03C9, 0x0345, 0,
- 1, 0x1FF4, 0x03CE, 0x0345, 0,
- 1, 0x1FF6, 0x03C9, 0x0342, 0,
- 1, 0x1FF7, 0x1FF6, 0x0345, 0,
- 1, 0x1FF8, 0x039F, 0x0300, 0,
- 1, 0x1FF9, 0x038C, 0,
- 1, 0x1FFA, 0x03A9, 0x0300, 0,
- 1, 0x1FFB, 0x038F, 0,
- 1, 0x1FFC, 0x03A9, 0x0345, 0,
- 1, 0x1FFD, 0x00B4, 0,
- 16, 0x1FFE, 0x0020, 0x0314, 0,
- 1, 0x2000, 0x2002, 0,
- 1, 0x2001, 0x2003, 0,
- 16, 0x2002, 0x0020, 0,
- 16, 0x2003, 0x0020, 0,
- 16, 0x2004, 0x0020, 0,
- 16, 0x2005, 0x0020, 0,
- 16, 0x2006, 0x0020, 0,
- 3, 0x2007, 0x0020, 0,
- 16, 0x2008, 0x0020, 0,
- 16, 0x2009, 0x0020, 0,
- 16, 0x200A, 0x0020, 0,
- 3, 0x2011, 0x2010, 0,
- 16, 0x2017, 0x0020, 0x0333, 0,
- 16, 0x2024, 0x002E, 0,
- 16, 0x2025, 0x002E, 0x002E, 0,
- 16, 0x2026, 0x002E, 0x002E, 0x002E, 0,
- 3, 0x202F, 0x0020, 0,
- 16, 0x2033, 0x2032, 0x2032, 0,
- 16, 0x2034, 0x2032, 0x2032, 0x2032, 0,
- 16, 0x2036, 0x2035, 0x2035, 0,
- 16, 0x2037, 0x2035, 0x2035, 0x2035, 0,
- 16, 0x203C, 0x0021, 0x0021, 0,
- 16, 0x203E, 0x0020, 0x0305, 0,
- 16, 0x2048, 0x003F, 0x0021, 0,
- 16, 0x2049, 0x0021, 0x003F, 0,
- 9, 0x2070, 0x0030, 0,
- 9, 0x2074, 0x0034, 0,
- 9, 0x2075, 0x0035, 0,
- 9, 0x2076, 0x0036, 0,
- 9, 0x2077, 0x0037, 0,
- 9, 0x2078, 0x0038, 0,
- 9, 0x2079, 0x0039, 0,
- 9, 0x207A, 0x002B, 0,
- 9, 0x207B, 0x2212, 0,
- 9, 0x207C, 0x003D, 0,
- 9, 0x207D, 0x0028, 0,
- 9, 0x207E, 0x0029, 0,
- 9, 0x207F, 0x006E, 0,
- 10, 0x2080, 0x0030, 0,
- 10, 0x2081, 0x0031, 0,
- 10, 0x2082, 0x0032, 0,
- 10, 0x2083, 0x0033, 0,
- 10, 0x2084, 0x0034, 0,
- 10, 0x2085, 0x0035, 0,
- 10, 0x2086, 0x0036, 0,
- 10, 0x2087, 0x0037, 0,
- 10, 0x2088, 0x0038, 0,
- 10, 0x2089, 0x0039, 0,
- 10, 0x208A, 0x002B, 0,
- 10, 0x208B, 0x2212, 0,
- 10, 0x208C, 0x003D, 0,
- 10, 0x208D, 0x0028, 0,
- 10, 0x208E, 0x0029, 0,
- 16, 0x20A8, 0x0052, 0x0073, 0,
- 16, 0x2100, 0x0061, 0x002F, 0x0063, 0,
- 16, 0x2101, 0x0061, 0x002F, 0x0073, 0,
- 2, 0x2102, 0x0043, 0,
- 16, 0x2103, 0x00B0, 0x0043, 0,
- 16, 0x2105, 0x0063, 0x002F, 0x006F, 0,
- 16, 0x2106, 0x0063, 0x002F, 0x0075, 0,
- 16, 0x2107, 0x0190, 0,
- 16, 0x2109, 0x00B0, 0x0046, 0,
- 2, 0x210A, 0x0067, 0,
- 2, 0x210B, 0x0048, 0,
- 2, 0x210C, 0x0048, 0,
- 2, 0x210D, 0x0048, 0,
- 2, 0x210E, 0x0068, 0,
- 2, 0x210F, 0x0127, 0,
- 2, 0x2110, 0x0049, 0,
- 2, 0x2111, 0x0049, 0,
- 2, 0x2112, 0x004C, 0,
- 2, 0x2113, 0x006C, 0,
- 2, 0x2115, 0x004E, 0,
- 16, 0x2116, 0x004E, 0x006F, 0,
- 2, 0x2119, 0x0050, 0,
- 2, 0x211A, 0x0051, 0,
- 2, 0x211B, 0x0052, 0,
- 2, 0x211C, 0x0052, 0,
- 2, 0x211D, 0x0052, 0,
- 9, 0x2120, 0x0053, 0x004D, 0,
- 16, 0x2121, 0x0054, 0x0045, 0x004C, 0,
- 9, 0x2122, 0x0054, 0x004D, 0,
- 2, 0x2124, 0x005A, 0,
- 1, 0x2126, 0x03A9, 0,
- 2, 0x2128, 0x005A, 0,
- 1, 0x212A, 0x004B, 0,
- 1, 0x212B, 0x00C5, 0,
- 2, 0x212C, 0x0042, 0,
- 2, 0x212D, 0x0043, 0,
- 2, 0x212F, 0x0065, 0,
- 2, 0x2130, 0x0045, 0,
- 2, 0x2131, 0x0046, 0,
- 2, 0x2133, 0x004D, 0,
- 2, 0x2134, 0x006F, 0,
- 16, 0x2135, 0x05D0, 0,
- 16, 0x2136, 0x05D1, 0,
- 16, 0x2137, 0x05D2, 0,
- 16, 0x2138, 0x05D3, 0,
- 2, 0x2139, 0x0069, 0,
- 17, 0x2153, 0x0031, 0x2044, 0x0033, 0,
- 17, 0x2154, 0x0032, 0x2044, 0x0033, 0,
- 17, 0x2155, 0x0031, 0x2044, 0x0035, 0,
- 17, 0x2156, 0x0032, 0x2044, 0x0035, 0,
- 17, 0x2157, 0x0033, 0x2044, 0x0035, 0,
- 17, 0x2158, 0x0034, 0x2044, 0x0035, 0,
- 17, 0x2159, 0x0031, 0x2044, 0x0036, 0,
- 17, 0x215A, 0x0035, 0x2044, 0x0036, 0,
- 17, 0x215B, 0x0031, 0x2044, 0x0038, 0,
- 17, 0x215C, 0x0033, 0x2044, 0x0038, 0,
- 17, 0x215D, 0x0035, 0x2044, 0x0038, 0,
- 17, 0x215E, 0x0037, 0x2044, 0x0038, 0,
- 17, 0x215F, 0x0031, 0x2044, 0,
- 16, 0x2160, 0x0049, 0,
- 16, 0x2161, 0x0049, 0x0049, 0,
- 16, 0x2162, 0x0049, 0x0049, 0x0049, 0,
- 16, 0x2163, 0x0049, 0x0056, 0,
- 16, 0x2164, 0x0056, 0,
- 16, 0x2165, 0x0056, 0x0049, 0,
- 16, 0x2166, 0x0056, 0x0049, 0x0049, 0,
- 16, 0x2167, 0x0056, 0x0049, 0x0049, 0x0049, 0,
- 16, 0x2168, 0x0049, 0x0058, 0,
- 16, 0x2169, 0x0058, 0,
- 16, 0x216A, 0x0058, 0x0049, 0,
- 16, 0x216B, 0x0058, 0x0049, 0x0049, 0,
- 16, 0x216C, 0x004C, 0,
- 16, 0x216D, 0x0043, 0,
- 16, 0x216E, 0x0044, 0,
- 16, 0x216F, 0x004D, 0,
- 16, 0x2170, 0x0069, 0,
- 16, 0x2171, 0x0069, 0x0069, 0,
- 16, 0x2172, 0x0069, 0x0069, 0x0069, 0,
- 16, 0x2173, 0x0069, 0x0076, 0,
- 16, 0x2174, 0x0076, 0,
- 16, 0x2175, 0x0076, 0x0069, 0,
- 16, 0x2176, 0x0076, 0x0069, 0x0069, 0,
- 16, 0x2177, 0x0076, 0x0069, 0x0069, 0x0069, 0,
- 16, 0x2178, 0x0069, 0x0078, 0,
- 16, 0x2179, 0x0078, 0,
- 16, 0x217A, 0x0078, 0x0069, 0,
- 16, 0x217B, 0x0078, 0x0069, 0x0069, 0,
- 16, 0x217C, 0x006C, 0,
- 16, 0x217D, 0x0063, 0,
- 16, 0x217E, 0x0064, 0,
- 16, 0x217F, 0x006D, 0,
- 1, 0x219A, 0x2190, 0x0338, 0,
- 1, 0x219B, 0x2192, 0x0338, 0,
- 1, 0x21AE, 0x2194, 0x0338, 0,
- 1, 0x21CD, 0x21D0, 0x0338, 0,
- 1, 0x21CE, 0x21D4, 0x0338, 0,
- 1, 0x21CF, 0x21D2, 0x0338, 0,
- 1, 0x2204, 0x2203, 0x0338, 0,
- 1, 0x2209, 0x2208, 0x0338, 0,
- 1, 0x220C, 0x220B, 0x0338, 0,
- 1, 0x2224, 0x2223, 0x0338, 0,
- 1, 0x2226, 0x2225, 0x0338, 0,
- 16, 0x222C, 0x222B, 0x222B, 0,
- 16, 0x222D, 0x222B, 0x222B, 0x222B, 0,
- 16, 0x222F, 0x222E, 0x222E, 0,
- 16, 0x2230, 0x222E, 0x222E, 0x222E, 0,
- 1, 0x2241, 0x223C, 0x0338, 0,
- 1, 0x2244, 0x2243, 0x0338, 0,
- 1, 0x2247, 0x2245, 0x0338, 0,
- 1, 0x2249, 0x2248, 0x0338, 0,
- 1, 0x2260, 0x003D, 0x0338, 0,
- 1, 0x2262, 0x2261, 0x0338, 0,
- 1, 0x226D, 0x224D, 0x0338, 0,
- 1, 0x226E, 0x003C, 0x0338, 0,
- 1, 0x226F, 0x003E, 0x0338, 0,
- 1, 0x2270, 0x2264, 0x0338, 0,
- 1, 0x2271, 0x2265, 0x0338, 0,
- 1, 0x2274, 0x2272, 0x0338, 0,
- 1, 0x2275, 0x2273, 0x0338, 0,
- 1, 0x2278, 0x2276, 0x0338, 0,
- 1, 0x2279, 0x2277, 0x0338, 0,
- 1, 0x2280, 0x227A, 0x0338, 0,
- 1, 0x2281, 0x227B, 0x0338, 0,
- 1, 0x2284, 0x2282, 0x0338, 0,
- 1, 0x2285, 0x2283, 0x0338, 0,
- 1, 0x2288, 0x2286, 0x0338, 0,
- 1, 0x2289, 0x2287, 0x0338, 0,
- 1, 0x22AC, 0x22A2, 0x0338, 0,
- 1, 0x22AD, 0x22A8, 0x0338, 0,
- 1, 0x22AE, 0x22A9, 0x0338, 0,
- 1, 0x22AF, 0x22AB, 0x0338, 0,
- 1, 0x22E0, 0x227C, 0x0338, 0,
- 1, 0x22E1, 0x227D, 0x0338, 0,
- 1, 0x22E2, 0x2291, 0x0338, 0,
- 1, 0x22E3, 0x2292, 0x0338, 0,
- 1, 0x22EA, 0x22B2, 0x0338, 0,
- 1, 0x22EB, 0x22B3, 0x0338, 0,
- 1, 0x22EC, 0x22B4, 0x0338, 0,
- 1, 0x22ED, 0x22B5, 0x0338, 0,
- 1, 0x2329, 0x3008, 0,
- 1, 0x232A, 0x3009, 0,
- 8, 0x2460, 0x0031, 0,
- 8, 0x2461, 0x0032, 0,
- 8, 0x2462, 0x0033, 0,
- 8, 0x2463, 0x0034, 0,
- 8, 0x2464, 0x0035, 0,
- 8, 0x2465, 0x0036, 0,
- 8, 0x2466, 0x0037, 0,
- 8, 0x2467, 0x0038, 0,
- 8, 0x2468, 0x0039, 0,
- 8, 0x2469, 0x0031, 0x0030, 0,
- 8, 0x246A, 0x0031, 0x0031, 0,
- 8, 0x246B, 0x0031, 0x0032, 0,
- 8, 0x246C, 0x0031, 0x0033, 0,
- 8, 0x246D, 0x0031, 0x0034, 0,
- 8, 0x246E, 0x0031, 0x0035, 0,
- 8, 0x246F, 0x0031, 0x0036, 0,
- 8, 0x2470, 0x0031, 0x0037, 0,
- 8, 0x2471, 0x0031, 0x0038, 0,
- 8, 0x2472, 0x0031, 0x0039, 0,
- 8, 0x2473, 0x0032, 0x0030, 0,
- 16, 0x2474, 0x0028, 0x0031, 0x0029, 0,
- 16, 0x2475, 0x0028, 0x0032, 0x0029, 0,
- 16, 0x2476, 0x0028, 0x0033, 0x0029, 0,
- 16, 0x2477, 0x0028, 0x0034, 0x0029, 0,
- 16, 0x2478, 0x0028, 0x0035, 0x0029, 0,
- 16, 0x2479, 0x0028, 0x0036, 0x0029, 0,
- 16, 0x247A, 0x0028, 0x0037, 0x0029, 0,
- 16, 0x247B, 0x0028, 0x0038, 0x0029, 0,
- 16, 0x247C, 0x0028, 0x0039, 0x0029, 0,
- 16, 0x247D, 0x0028, 0x0031, 0x0030, 0x0029, 0,
- 16, 0x247E, 0x0028, 0x0031, 0x0031, 0x0029, 0,
- 16, 0x247F, 0x0028, 0x0031, 0x0032, 0x0029, 0,
- 16, 0x2480, 0x0028, 0x0031, 0x0033, 0x0029, 0,
- 16, 0x2481, 0x0028, 0x0031, 0x0034, 0x0029, 0,
- 16, 0x2482, 0x0028, 0x0031, 0x0035, 0x0029, 0,
- 16, 0x2483, 0x0028, 0x0031, 0x0036, 0x0029, 0,
- 16, 0x2484, 0x0028, 0x0031, 0x0037, 0x0029, 0,
- 16, 0x2485, 0x0028, 0x0031, 0x0038, 0x0029, 0,
- 16, 0x2486, 0x0028, 0x0031, 0x0039, 0x0029, 0,
- 16, 0x2487, 0x0028, 0x0032, 0x0030, 0x0029, 0,
- 16, 0x2488, 0x0031, 0x002E, 0,
- 16, 0x2489, 0x0032, 0x002E, 0,
- 16, 0x248A, 0x0033, 0x002E, 0,
- 16, 0x248B, 0x0034, 0x002E, 0,
- 16, 0x248C, 0x0035, 0x002E, 0,
- 16, 0x248D, 0x0036, 0x002E, 0,
- 16, 0x248E, 0x0037, 0x002E, 0,
- 16, 0x248F, 0x0038, 0x002E, 0,
- 16, 0x2490, 0x0039, 0x002E, 0,
- 16, 0x2491, 0x0031, 0x0030, 0x002E, 0,
- 16, 0x2492, 0x0031, 0x0031, 0x002E, 0,
- 16, 0x2493, 0x0031, 0x0032, 0x002E, 0,
- 16, 0x2494, 0x0031, 0x0033, 0x002E, 0,
- 16, 0x2495, 0x0031, 0x0034, 0x002E, 0,
- 16, 0x2496, 0x0031, 0x0035, 0x002E, 0,
- 16, 0x2497, 0x0031, 0x0036, 0x002E, 0,
- 16, 0x2498, 0x0031, 0x0037, 0x002E, 0,
- 16, 0x2499, 0x0031, 0x0038, 0x002E, 0,
- 16, 0x249A, 0x0031, 0x0039, 0x002E, 0,
- 16, 0x249B, 0x0032, 0x0030, 0x002E, 0,
- 16, 0x249C, 0x0028, 0x0061, 0x0029, 0,
- 16, 0x249D, 0x0028, 0x0062, 0x0029, 0,
- 16, 0x249E, 0x0028, 0x0063, 0x0029, 0,
- 16, 0x249F, 0x0028, 0x0064, 0x0029, 0,
- 16, 0x24A0, 0x0028, 0x0065, 0x0029, 0,
- 16, 0x24A1, 0x0028, 0x0066, 0x0029, 0,
- 16, 0x24A2, 0x0028, 0x0067, 0x0029, 0,
- 16, 0x24A3, 0x0028, 0x0068, 0x0029, 0,
- 16, 0x24A4, 0x0028, 0x0069, 0x0029, 0,
- 16, 0x24A5, 0x0028, 0x006A, 0x0029, 0,
- 16, 0x24A6, 0x0028, 0x006B, 0x0029, 0,
- 16, 0x24A7, 0x0028, 0x006C, 0x0029, 0,
- 16, 0x24A8, 0x0028, 0x006D, 0x0029, 0,
- 16, 0x24A9, 0x0028, 0x006E, 0x0029, 0,
- 16, 0x24AA, 0x0028, 0x006F, 0x0029, 0,
- 16, 0x24AB, 0x0028, 0x0070, 0x0029, 0,
- 16, 0x24AC, 0x0028, 0x0071, 0x0029, 0,
- 16, 0x24AD, 0x0028, 0x0072, 0x0029, 0,
- 16, 0x24AE, 0x0028, 0x0073, 0x0029, 0,
- 16, 0x24AF, 0x0028, 0x0074, 0x0029, 0,
- 16, 0x24B0, 0x0028, 0x0075, 0x0029, 0,
- 16, 0x24B1, 0x0028, 0x0076, 0x0029, 0,
- 16, 0x24B2, 0x0028, 0x0077, 0x0029, 0,
- 16, 0x24B3, 0x0028, 0x0078, 0x0029, 0,
- 16, 0x24B4, 0x0028, 0x0079, 0x0029, 0,
- 16, 0x24B5, 0x0028, 0x007A, 0x0029, 0,
- 8, 0x24B6, 0x0041, 0,
- 8, 0x24B7, 0x0042, 0,
- 8, 0x24B8, 0x0043, 0,
- 8, 0x24B9, 0x0044, 0,
- 8, 0x24BA, 0x0045, 0,
- 8, 0x24BB, 0x0046, 0,
- 8, 0x24BC, 0x0047, 0,
- 8, 0x24BD, 0x0048, 0,
- 8, 0x24BE, 0x0049, 0,
- 8, 0x24BF, 0x004A, 0,
- 8, 0x24C0, 0x004B, 0,
- 8, 0x24C1, 0x004C, 0,
- 8, 0x24C2, 0x004D, 0,
- 8, 0x24C3, 0x004E, 0,
- 8, 0x24C4, 0x004F, 0,
- 8, 0x24C5, 0x0050, 0,
- 8, 0x24C6, 0x0051, 0,
- 8, 0x24C7, 0x0052, 0,
- 8, 0x24C8, 0x0053, 0,
- 8, 0x24C9, 0x0054, 0,
- 8, 0x24CA, 0x0055, 0,
- 8, 0x24CB, 0x0056, 0,
- 8, 0x24CC, 0x0057, 0,
- 8, 0x24CD, 0x0058, 0,
- 8, 0x24CE, 0x0059, 0,
- 8, 0x24CF, 0x005A, 0,
- 8, 0x24D0, 0x0061, 0,
- 8, 0x24D1, 0x0062, 0,
- 8, 0x24D2, 0x0063, 0,
- 8, 0x24D3, 0x0064, 0,
- 8, 0x24D4, 0x0065, 0,
- 8, 0x24D5, 0x0066, 0,
- 8, 0x24D6, 0x0067, 0,
- 8, 0x24D7, 0x0068, 0,
- 8, 0x24D8, 0x0069, 0,
- 8, 0x24D9, 0x006A, 0,
- 8, 0x24DA, 0x006B, 0,
- 8, 0x24DB, 0x006C, 0,
- 8, 0x24DC, 0x006D, 0,
- 8, 0x24DD, 0x006E, 0,
- 8, 0x24DE, 0x006F, 0,
- 8, 0x24DF, 0x0070, 0,
- 8, 0x24E0, 0x0071, 0,
- 8, 0x24E1, 0x0072, 0,
- 8, 0x24E2, 0x0073, 0,
- 8, 0x24E3, 0x0074, 0,
- 8, 0x24E4, 0x0075, 0,
- 8, 0x24E5, 0x0076, 0,
- 8, 0x24E6, 0x0077, 0,
- 8, 0x24E7, 0x0078, 0,
- 8, 0x24E8, 0x0079, 0,
- 8, 0x24E9, 0x007A, 0,
- 8, 0x24EA, 0x0030, 0,
- 16, 0x2E9F, 0x6BCD, 0,
- 16, 0x2EF3, 0x9F9F, 0,
- 16, 0x2F00, 0x4E00, 0,
- 16, 0x2F01, 0x4E28, 0,
- 16, 0x2F02, 0x4E36, 0,
- 16, 0x2F03, 0x4E3F, 0,
- 16, 0x2F04, 0x4E59, 0,
- 16, 0x2F05, 0x4E85, 0,
- 16, 0x2F06, 0x4E8C, 0,
- 16, 0x2F07, 0x4EA0, 0,
- 16, 0x2F08, 0x4EBA, 0,
- 16, 0x2F09, 0x513F, 0,
- 16, 0x2F0A, 0x5165, 0,
- 16, 0x2F0B, 0x516B, 0,
- 16, 0x2F0C, 0x5182, 0,
- 16, 0x2F0D, 0x5196, 0,
- 16, 0x2F0E, 0x51AB, 0,
- 16, 0x2F0F, 0x51E0, 0,
- 16, 0x2F10, 0x51F5, 0,
- 16, 0x2F11, 0x5200, 0,
- 16, 0x2F12, 0x529B, 0,
- 16, 0x2F13, 0x52F9, 0,
- 16, 0x2F14, 0x5315, 0,
- 16, 0x2F15, 0x531A, 0,
- 16, 0x2F16, 0x5338, 0,
- 16, 0x2F17, 0x5341, 0,
- 16, 0x2F18, 0x535C, 0,
- 16, 0x2F19, 0x5369, 0,
- 16, 0x2F1A, 0x5382, 0,
- 16, 0x2F1B, 0x53B6, 0,
- 16, 0x2F1C, 0x53C8, 0,
- 16, 0x2F1D, 0x53E3, 0,
- 16, 0x2F1E, 0x56D7, 0,
- 16, 0x2F1F, 0x571F, 0,
- 16, 0x2F20, 0x58EB, 0,
- 16, 0x2F21, 0x5902, 0,
- 16, 0x2F22, 0x590A, 0,
- 16, 0x2F23, 0x5915, 0,
- 16, 0x2F24, 0x5927, 0,
- 16, 0x2F25, 0x5973, 0,
- 16, 0x2F26, 0x5B50, 0,
- 16, 0x2F27, 0x5B80, 0,
- 16, 0x2F28, 0x5BF8, 0,
- 16, 0x2F29, 0x5C0F, 0,
- 16, 0x2F2A, 0x5C22, 0,
- 16, 0x2F2B, 0x5C38, 0,
- 16, 0x2F2C, 0x5C6E, 0,
- 16, 0x2F2D, 0x5C71, 0,
- 16, 0x2F2E, 0x5DDB, 0,
- 16, 0x2F2F, 0x5DE5, 0,
- 16, 0x2F30, 0x5DF1, 0,
- 16, 0x2F31, 0x5DFE, 0,
- 16, 0x2F32, 0x5E72, 0,
- 16, 0x2F33, 0x5E7A, 0,
- 16, 0x2F34, 0x5E7F, 0,
- 16, 0x2F35, 0x5EF4, 0,
- 16, 0x2F36, 0x5EFE, 0,
- 16, 0x2F37, 0x5F0B, 0,
- 16, 0x2F38, 0x5F13, 0,
- 16, 0x2F39, 0x5F50, 0,
- 16, 0x2F3A, 0x5F61, 0,
- 16, 0x2F3B, 0x5F73, 0,
- 16, 0x2F3C, 0x5FC3, 0,
- 16, 0x2F3D, 0x6208, 0,
- 16, 0x2F3E, 0x6236, 0,
- 16, 0x2F3F, 0x624B, 0,
- 16, 0x2F40, 0x652F, 0,
- 16, 0x2F41, 0x6534, 0,
- 16, 0x2F42, 0x6587, 0,
- 16, 0x2F43, 0x6597, 0,
- 16, 0x2F44, 0x65A4, 0,
- 16, 0x2F45, 0x65B9, 0,
- 16, 0x2F46, 0x65E0, 0,
- 16, 0x2F47, 0x65E5, 0,
- 16, 0x2F48, 0x66F0, 0,
- 16, 0x2F49, 0x6708, 0,
- 16, 0x2F4A, 0x6728, 0,
- 16, 0x2F4B, 0x6B20, 0,
- 16, 0x2F4C, 0x6B62, 0,
- 16, 0x2F4D, 0x6B79, 0,
- 16, 0x2F4E, 0x6BB3, 0,
- 16, 0x2F4F, 0x6BCB, 0,
- 16, 0x2F50, 0x6BD4, 0,
- 16, 0x2F51, 0x6BDB, 0,
- 16, 0x2F52, 0x6C0F, 0,
- 16, 0x2F53, 0x6C14, 0,
- 16, 0x2F54, 0x6C34, 0,
- 16, 0x2F55, 0x706B, 0,
- 16, 0x2F56, 0x722A, 0,
- 16, 0x2F57, 0x7236, 0,
- 16, 0x2F58, 0x723B, 0,
- 16, 0x2F59, 0x723F, 0,
- 16, 0x2F5A, 0x7247, 0,
- 16, 0x2F5B, 0x7259, 0,
- 16, 0x2F5C, 0x725B, 0,
- 16, 0x2F5D, 0x72AC, 0,
- 16, 0x2F5E, 0x7384, 0,
- 16, 0x2F5F, 0x7389, 0,
- 16, 0x2F60, 0x74DC, 0,
- 16, 0x2F61, 0x74E6, 0,
- 16, 0x2F62, 0x7518, 0,
- 16, 0x2F63, 0x751F, 0,
- 16, 0x2F64, 0x7528, 0,
- 16, 0x2F65, 0x7530, 0,
- 16, 0x2F66, 0x758B, 0,
- 16, 0x2F67, 0x7592, 0,
- 16, 0x2F68, 0x7676, 0,
- 16, 0x2F69, 0x767D, 0,
- 16, 0x2F6A, 0x76AE, 0,
- 16, 0x2F6B, 0x76BF, 0,
- 16, 0x2F6C, 0x76EE, 0,
- 16, 0x2F6D, 0x77DB, 0,
- 16, 0x2F6E, 0x77E2, 0,
- 16, 0x2F6F, 0x77F3, 0,
- 16, 0x2F70, 0x793A, 0,
- 16, 0x2F71, 0x79B8, 0,
- 16, 0x2F72, 0x79BE, 0,
- 16, 0x2F73, 0x7A74, 0,
- 16, 0x2F74, 0x7ACB, 0,
- 16, 0x2F75, 0x7AF9, 0,
- 16, 0x2F76, 0x7C73, 0,
- 16, 0x2F77, 0x7CF8, 0,
- 16, 0x2F78, 0x7F36, 0,
- 16, 0x2F79, 0x7F51, 0,
- 16, 0x2F7A, 0x7F8A, 0,
- 16, 0x2F7B, 0x7FBD, 0,
- 16, 0x2F7C, 0x8001, 0,
- 16, 0x2F7D, 0x800C, 0,
- 16, 0x2F7E, 0x8012, 0,
- 16, 0x2F7F, 0x8033, 0,
- 16, 0x2F80, 0x807F, 0,
- 16, 0x2F81, 0x8089, 0,
- 16, 0x2F82, 0x81E3, 0,
- 16, 0x2F83, 0x81EA, 0,
- 16, 0x2F84, 0x81F3, 0,
- 16, 0x2F85, 0x81FC, 0,
- 16, 0x2F86, 0x820C, 0,
- 16, 0x2F87, 0x821B, 0,
- 16, 0x2F88, 0x821F, 0,
- 16, 0x2F89, 0x826E, 0,
- 16, 0x2F8A, 0x8272, 0,
- 16, 0x2F8B, 0x8278, 0,
- 16, 0x2F8C, 0x864D, 0,
- 16, 0x2F8D, 0x866B, 0,
- 16, 0x2F8E, 0x8840, 0,
- 16, 0x2F8F, 0x884C, 0,
- 16, 0x2F90, 0x8863, 0,
- 16, 0x2F91, 0x897E, 0,
- 16, 0x2F92, 0x898B, 0,
- 16, 0x2F93, 0x89D2, 0,
- 16, 0x2F94, 0x8A00, 0,
- 16, 0x2F95, 0x8C37, 0,
- 16, 0x2F96, 0x8C46, 0,
- 16, 0x2F97, 0x8C55, 0,
- 16, 0x2F98, 0x8C78, 0,
- 16, 0x2F99, 0x8C9D, 0,
- 16, 0x2F9A, 0x8D64, 0,
- 16, 0x2F9B, 0x8D70, 0,
- 16, 0x2F9C, 0x8DB3, 0,
- 16, 0x2F9D, 0x8EAB, 0,
- 16, 0x2F9E, 0x8ECA, 0,
- 16, 0x2F9F, 0x8F9B, 0,
- 16, 0x2FA0, 0x8FB0, 0,
- 16, 0x2FA1, 0x8FB5, 0,
- 16, 0x2FA2, 0x9091, 0,
- 16, 0x2FA3, 0x9149, 0,
- 16, 0x2FA4, 0x91C6, 0,
- 16, 0x2FA5, 0x91CC, 0,
- 16, 0x2FA6, 0x91D1, 0,
- 16, 0x2FA7, 0x9577, 0,
- 16, 0x2FA8, 0x9580, 0,
- 16, 0x2FA9, 0x961C, 0,
- 16, 0x2FAA, 0x96B6, 0,
- 16, 0x2FAB, 0x96B9, 0,
- 16, 0x2FAC, 0x96E8, 0,
- 16, 0x2FAD, 0x9751, 0,
- 16, 0x2FAE, 0x975E, 0,
- 16, 0x2FAF, 0x9762, 0,
- 16, 0x2FB0, 0x9769, 0,
- 16, 0x2FB1, 0x97CB, 0,
- 16, 0x2FB2, 0x97ED, 0,
- 16, 0x2FB3, 0x97F3, 0,
- 16, 0x2FB4, 0x9801, 0,
- 16, 0x2FB5, 0x98A8, 0,
- 16, 0x2FB6, 0x98DB, 0,
- 16, 0x2FB7, 0x98DF, 0,
- 16, 0x2FB8, 0x9996, 0,
- 16, 0x2FB9, 0x9999, 0,
- 16, 0x2FBA, 0x99AC, 0,
- 16, 0x2FBB, 0x9AA8, 0,
- 16, 0x2FBC, 0x9AD8, 0,
- 16, 0x2FBD, 0x9ADF, 0,
- 16, 0x2FBE, 0x9B25, 0,
- 16, 0x2FBF, 0x9B2F, 0,
- 16, 0x2FC0, 0x9B32, 0,
- 16, 0x2FC1, 0x9B3C, 0,
- 16, 0x2FC2, 0x9B5A, 0,
- 16, 0x2FC3, 0x9CE5, 0,
- 16, 0x2FC4, 0x9E75, 0,
- 16, 0x2FC5, 0x9E7F, 0,
- 16, 0x2FC6, 0x9EA5, 0,
- 16, 0x2FC7, 0x9EBB, 0,
- 16, 0x2FC8, 0x9EC3, 0,
- 16, 0x2FC9, 0x9ECD, 0,
- 16, 0x2FCA, 0x9ED1, 0,
- 16, 0x2FCB, 0x9EF9, 0,
- 16, 0x2FCC, 0x9EFD, 0,
- 16, 0x2FCD, 0x9F0E, 0,
- 16, 0x2FCE, 0x9F13, 0,
- 16, 0x2FCF, 0x9F20, 0,
- 16, 0x2FD0, 0x9F3B, 0,
- 16, 0x2FD1, 0x9F4A, 0,
- 16, 0x2FD2, 0x9F52, 0,
- 16, 0x2FD3, 0x9F8D, 0,
- 16, 0x2FD4, 0x9F9C, 0,
- 16, 0x2FD5, 0x9FA0, 0,
- 12, 0x3000, 0x0020, 0,
- 16, 0x3036, 0x3012, 0,
- 16, 0x3038, 0x5341, 0,
- 16, 0x3039, 0x5344, 0,
- 16, 0x303A, 0x5345, 0,
- 1, 0x304C, 0x304B, 0x3099, 0,
- 1, 0x304E, 0x304D, 0x3099, 0,
- 1, 0x3050, 0x304F, 0x3099, 0,
- 1, 0x3052, 0x3051, 0x3099, 0,
- 1, 0x3054, 0x3053, 0x3099, 0,
- 1, 0x3056, 0x3055, 0x3099, 0,
- 1, 0x3058, 0x3057, 0x3099, 0,
- 1, 0x305A, 0x3059, 0x3099, 0,
- 1, 0x305C, 0x305B, 0x3099, 0,
- 1, 0x305E, 0x305D, 0x3099, 0,
- 1, 0x3060, 0x305F, 0x3099, 0,
- 1, 0x3062, 0x3061, 0x3099, 0,
- 1, 0x3065, 0x3064, 0x3099, 0,
- 1, 0x3067, 0x3066, 0x3099, 0,
- 1, 0x3069, 0x3068, 0x3099, 0,
- 1, 0x3070, 0x306F, 0x3099, 0,
- 1, 0x3071, 0x306F, 0x309A, 0,
- 1, 0x3073, 0x3072, 0x3099, 0,
- 1, 0x3074, 0x3072, 0x309A, 0,
- 1, 0x3076, 0x3075, 0x3099, 0,
- 1, 0x3077, 0x3075, 0x309A, 0,
- 1, 0x3079, 0x3078, 0x3099, 0,
- 1, 0x307A, 0x3078, 0x309A, 0,
- 1, 0x307C, 0x307B, 0x3099, 0,
- 1, 0x307D, 0x307B, 0x309A, 0,
- 1, 0x3094, 0x3046, 0x3099, 0,
- 16, 0x309B, 0x0020, 0x3099, 0,
- 16, 0x309C, 0x0020, 0x309A, 0,
- 1, 0x309E, 0x309D, 0x3099, 0,
- 1, 0x30AC, 0x30AB, 0x3099, 0,
- 1, 0x30AE, 0x30AD, 0x3099, 0,
- 1, 0x30B0, 0x30AF, 0x3099, 0,
- 1, 0x30B2, 0x30B1, 0x3099, 0,
- 1, 0x30B4, 0x30B3, 0x3099, 0,
- 1, 0x30B6, 0x30B5, 0x3099, 0,
- 1, 0x30B8, 0x30B7, 0x3099, 0,
- 1, 0x30BA, 0x30B9, 0x3099, 0,
- 1, 0x30BC, 0x30BB, 0x3099, 0,
- 1, 0x30BE, 0x30BD, 0x3099, 0,
- 1, 0x30C0, 0x30BF, 0x3099, 0,
- 1, 0x30C2, 0x30C1, 0x3099, 0,
- 1, 0x30C5, 0x30C4, 0x3099, 0,
- 1, 0x30C7, 0x30C6, 0x3099, 0,
- 1, 0x30C9, 0x30C8, 0x3099, 0,
- 1, 0x30D0, 0x30CF, 0x3099, 0,
- 1, 0x30D1, 0x30CF, 0x309A, 0,
- 1, 0x30D3, 0x30D2, 0x3099, 0,
- 1, 0x30D4, 0x30D2, 0x309A, 0,
- 1, 0x30D6, 0x30D5, 0x3099, 0,
- 1, 0x30D7, 0x30D5, 0x309A, 0,
- 1, 0x30D9, 0x30D8, 0x3099, 0,
- 1, 0x30DA, 0x30D8, 0x309A, 0,
- 1, 0x30DC, 0x30DB, 0x3099, 0,
- 1, 0x30DD, 0x30DB, 0x309A, 0,
- 1, 0x30F4, 0x30A6, 0x3099, 0,
- 1, 0x30F7, 0x30EF, 0x3099, 0,
- 1, 0x30F8, 0x30F0, 0x3099, 0,
- 1, 0x30F9, 0x30F1, 0x3099, 0,
- 1, 0x30FA, 0x30F2, 0x3099, 0,
- 1, 0x30FE, 0x30FD, 0x3099, 0,
- 16, 0x3131, 0x1100, 0,
- 16, 0x3132, 0x1101, 0,
- 16, 0x3133, 0x11AA, 0,
- 16, 0x3134, 0x1102, 0,
- 16, 0x3135, 0x11AC, 0,
- 16, 0x3136, 0x11AD, 0,
- 16, 0x3137, 0x1103, 0,
- 16, 0x3138, 0x1104, 0,
- 16, 0x3139, 0x1105, 0,
- 16, 0x313A, 0x11B0, 0,
- 16, 0x313B, 0x11B1, 0,
- 16, 0x313C, 0x11B2, 0,
- 16, 0x313D, 0x11B3, 0,
- 16, 0x313E, 0x11B4, 0,
- 16, 0x313F, 0x11B5, 0,
- 16, 0x3140, 0x111A, 0,
- 16, 0x3141, 0x1106, 0,
- 16, 0x3142, 0x1107, 0,
- 16, 0x3143, 0x1108, 0,
- 16, 0x3144, 0x1121, 0,
- 16, 0x3145, 0x1109, 0,
- 16, 0x3146, 0x110A, 0,
- 16, 0x3147, 0x110B, 0,
- 16, 0x3148, 0x110C, 0,
- 16, 0x3149, 0x110D, 0,
- 16, 0x314A, 0x110E, 0,
- 16, 0x314B, 0x110F, 0,
- 16, 0x314C, 0x1110, 0,
- 16, 0x314D, 0x1111, 0,
- 16, 0x314E, 0x1112, 0,
- 16, 0x314F, 0x1161, 0,
- 16, 0x3150, 0x1162, 0,
- 16, 0x3151, 0x1163, 0,
- 16, 0x3152, 0x1164, 0,
- 16, 0x3153, 0x1165, 0,
- 16, 0x3154, 0x1166, 0,
- 16, 0x3155, 0x1167, 0,
- 16, 0x3156, 0x1168, 0,
- 16, 0x3157, 0x1169, 0,
- 16, 0x3158, 0x116A, 0,
- 16, 0x3159, 0x116B, 0,
- 16, 0x315A, 0x116C, 0,
- 16, 0x315B, 0x116D, 0,
- 16, 0x315C, 0x116E, 0,
- 16, 0x315D, 0x116F, 0,
- 16, 0x315E, 0x1170, 0,
- 16, 0x315F, 0x1171, 0,
- 16, 0x3160, 0x1172, 0,
- 16, 0x3161, 0x1173, 0,
- 16, 0x3162, 0x1174, 0,
- 16, 0x3163, 0x1175, 0,
- 16, 0x3164, 0x1160, 0,
- 16, 0x3165, 0x1114, 0,
- 16, 0x3166, 0x1115, 0,
- 16, 0x3167, 0x11C7, 0,
- 16, 0x3168, 0x11C8, 0,
- 16, 0x3169, 0x11CC, 0,
- 16, 0x316A, 0x11CE, 0,
- 16, 0x316B, 0x11D3, 0,
- 16, 0x316C, 0x11D7, 0,
- 16, 0x316D, 0x11D9, 0,
- 16, 0x316E, 0x111C, 0,
- 16, 0x316F, 0x11DD, 0,
- 16, 0x3170, 0x11DF, 0,
- 16, 0x3171, 0x111D, 0,
- 16, 0x3172, 0x111E, 0,
- 16, 0x3173, 0x1120, 0,
- 16, 0x3174, 0x1122, 0,
- 16, 0x3175, 0x1123, 0,
- 16, 0x3176, 0x1127, 0,
- 16, 0x3177, 0x1129, 0,
- 16, 0x3178, 0x112B, 0,
- 16, 0x3179, 0x112C, 0,
- 16, 0x317A, 0x112D, 0,
- 16, 0x317B, 0x112E, 0,
- 16, 0x317C, 0x112F, 0,
- 16, 0x317D, 0x1132, 0,
- 16, 0x317E, 0x1136, 0,
- 16, 0x317F, 0x1140, 0,
- 16, 0x3180, 0x1147, 0,
- 16, 0x3181, 0x114C, 0,
- 16, 0x3182, 0x11F1, 0,
- 16, 0x3183, 0x11F2, 0,
- 16, 0x3184, 0x1157, 0,
- 16, 0x3185, 0x1158, 0,
- 16, 0x3186, 0x1159, 0,
- 16, 0x3187, 0x1184, 0,
- 16, 0x3188, 0x1185, 0,
- 16, 0x3189, 0x1188, 0,
- 16, 0x318A, 0x1191, 0,
- 16, 0x318B, 0x1192, 0,
- 16, 0x318C, 0x1194, 0,
- 16, 0x318D, 0x119E, 0,
- 16, 0x318E, 0x11A1, 0,
- 9, 0x3192, 0x4E00, 0,
- 9, 0x3193, 0x4E8C, 0,
- 9, 0x3194, 0x4E09, 0,
- 9, 0x3195, 0x56DB, 0,
- 9, 0x3196, 0x4E0A, 0,
- 9, 0x3197, 0x4E2D, 0,
- 9, 0x3198, 0x4E0B, 0,
- 9, 0x3199, 0x7532, 0,
- 9, 0x319A, 0x4E59, 0,
- 9, 0x319B, 0x4E19, 0,
- 9, 0x319C, 0x4E01, 0,
- 9, 0x319D, 0x5929, 0,
- 9, 0x319E, 0x5730, 0,
- 9, 0x319F, 0x4EBA, 0,
- 16, 0x3200, 0x0028, 0x1100, 0x0029, 0,
- 16, 0x3201, 0x0028, 0x1102, 0x0029, 0,
- 16, 0x3202, 0x0028, 0x1103, 0x0029, 0,
- 16, 0x3203, 0x0028, 0x1105, 0x0029, 0,
- 16, 0x3204, 0x0028, 0x1106, 0x0029, 0,
- 16, 0x3205, 0x0028, 0x1107, 0x0029, 0,
- 16, 0x3206, 0x0028, 0x1109, 0x0029, 0,
- 16, 0x3207, 0x0028, 0x110B, 0x0029, 0,
- 16, 0x3208, 0x0028, 0x110C, 0x0029, 0,
- 16, 0x3209, 0x0028, 0x110E, 0x0029, 0,
- 16, 0x320A, 0x0028, 0x110F, 0x0029, 0,
- 16, 0x320B, 0x0028, 0x1110, 0x0029, 0,
- 16, 0x320C, 0x0028, 0x1111, 0x0029, 0,
- 16, 0x320D, 0x0028, 0x1112, 0x0029, 0,
- 16, 0x320E, 0x0028, 0x1100, 0x1161, 0x0029, 0,
- 16, 0x320F, 0x0028, 0x1102, 0x1161, 0x0029, 0,
- 16, 0x3210, 0x0028, 0x1103, 0x1161, 0x0029, 0,
- 16, 0x3211, 0x0028, 0x1105, 0x1161, 0x0029, 0,
- 16, 0x3212, 0x0028, 0x1106, 0x1161, 0x0029, 0,
- 16, 0x3213, 0x0028, 0x1107, 0x1161, 0x0029, 0,
- 16, 0x3214, 0x0028, 0x1109, 0x1161, 0x0029, 0,
- 16, 0x3215, 0x0028, 0x110B, 0x1161, 0x0029, 0,
- 16, 0x3216, 0x0028, 0x110C, 0x1161, 0x0029, 0,
- 16, 0x3217, 0x0028, 0x110E, 0x1161, 0x0029, 0,
- 16, 0x3218, 0x0028, 0x110F, 0x1161, 0x0029, 0,
- 16, 0x3219, 0x0028, 0x1110, 0x1161, 0x0029, 0,
- 16, 0x321A, 0x0028, 0x1111, 0x1161, 0x0029, 0,
- 16, 0x321B, 0x0028, 0x1112, 0x1161, 0x0029, 0,
- 16, 0x321C, 0x0028, 0x110C, 0x116E, 0x0029, 0,
- 16, 0x3220, 0x0028, 0x4E00, 0x0029, 0,
- 16, 0x3221, 0x0028, 0x4E8C, 0x0029, 0,
- 16, 0x3222, 0x0028, 0x4E09, 0x0029, 0,
- 16, 0x3223, 0x0028, 0x56DB, 0x0029, 0,
- 16, 0x3224, 0x0028, 0x4E94, 0x0029, 0,
- 16, 0x3225, 0x0028, 0x516D, 0x0029, 0,
- 16, 0x3226, 0x0028, 0x4E03, 0x0029, 0,
- 16, 0x3227, 0x0028, 0x516B, 0x0029, 0,
- 16, 0x3228, 0x0028, 0x4E5D, 0x0029, 0,
- 16, 0x3229, 0x0028, 0x5341, 0x0029, 0,
- 16, 0x322A, 0x0028, 0x6708, 0x0029, 0,
- 16, 0x322B, 0x0028, 0x706B, 0x0029, 0,
- 16, 0x322C, 0x0028, 0x6C34, 0x0029, 0,
- 16, 0x322D, 0x0028, 0x6728, 0x0029, 0,
- 16, 0x322E, 0x0028, 0x91D1, 0x0029, 0,
- 16, 0x322F, 0x0028, 0x571F, 0x0029, 0,
- 16, 0x3230, 0x0028, 0x65E5, 0x0029, 0,
- 16, 0x3231, 0x0028, 0x682A, 0x0029, 0,
- 16, 0x3232, 0x0028, 0x6709, 0x0029, 0,
- 16, 0x3233, 0x0028, 0x793E, 0x0029, 0,
- 16, 0x3234, 0x0028, 0x540D, 0x0029, 0,
- 16, 0x3235, 0x0028, 0x7279, 0x0029, 0,
- 16, 0x3236, 0x0028, 0x8CA1, 0x0029, 0,
- 16, 0x3237, 0x0028, 0x795D, 0x0029, 0,
- 16, 0x3238, 0x0028, 0x52B4, 0x0029, 0,
- 16, 0x3239, 0x0028, 0x4EE3, 0x0029, 0,
- 16, 0x323A, 0x0028, 0x547C, 0x0029, 0,
- 16, 0x323B, 0x0028, 0x5B66, 0x0029, 0,
- 16, 0x323C, 0x0028, 0x76E3, 0x0029, 0,
- 16, 0x323D, 0x0028, 0x4F01, 0x0029, 0,
- 16, 0x323E, 0x0028, 0x8CC7, 0x0029, 0,
- 16, 0x323F, 0x0028, 0x5354, 0x0029, 0,
- 16, 0x3240, 0x0028, 0x796D, 0x0029, 0,
- 16, 0x3241, 0x0028, 0x4F11, 0x0029, 0,
- 16, 0x3242, 0x0028, 0x81EA, 0x0029, 0,
- 16, 0x3243, 0x0028, 0x81F3, 0x0029, 0,
- 8, 0x3260, 0x1100, 0,
- 8, 0x3261, 0x1102, 0,
- 8, 0x3262, 0x1103, 0,
- 8, 0x3263, 0x1105, 0,
- 8, 0x3264, 0x1106, 0,
- 8, 0x3265, 0x1107, 0,
- 8, 0x3266, 0x1109, 0,
- 8, 0x3267, 0x110B, 0,
- 8, 0x3268, 0x110C, 0,
- 8, 0x3269, 0x110E, 0,
- 8, 0x326A, 0x110F, 0,
- 8, 0x326B, 0x1110, 0,
- 8, 0x326C, 0x1111, 0,
- 8, 0x326D, 0x1112, 0,
- 8, 0x326E, 0x1100, 0x1161, 0,
- 8, 0x326F, 0x1102, 0x1161, 0,
- 8, 0x3270, 0x1103, 0x1161, 0,
- 8, 0x3271, 0x1105, 0x1161, 0,
- 8, 0x3272, 0x1106, 0x1161, 0,
- 8, 0x3273, 0x1107, 0x1161, 0,
- 8, 0x3274, 0x1109, 0x1161, 0,
- 8, 0x3275, 0x110B, 0x1161, 0,
- 8, 0x3276, 0x110C, 0x1161, 0,
- 8, 0x3277, 0x110E, 0x1161, 0,
- 8, 0x3278, 0x110F, 0x1161, 0,
- 8, 0x3279, 0x1110, 0x1161, 0,
- 8, 0x327A, 0x1111, 0x1161, 0,
- 8, 0x327B, 0x1112, 0x1161, 0,
- 8, 0x3280, 0x4E00, 0,
- 8, 0x3281, 0x4E8C, 0,
- 8, 0x3282, 0x4E09, 0,
- 8, 0x3283, 0x56DB, 0,
- 8, 0x3284, 0x4E94, 0,
- 8, 0x3285, 0x516D, 0,
- 8, 0x3286, 0x4E03, 0,
- 8, 0x3287, 0x516B, 0,
- 8, 0x3288, 0x4E5D, 0,
- 8, 0x3289, 0x5341, 0,
- 8, 0x328A, 0x6708, 0,
- 8, 0x328B, 0x706B, 0,
- 8, 0x328C, 0x6C34, 0,
- 8, 0x328D, 0x6728, 0,
- 8, 0x328E, 0x91D1, 0,
- 8, 0x328F, 0x571F, 0,
- 8, 0x3290, 0x65E5, 0,
- 8, 0x3291, 0x682A, 0,
- 8, 0x3292, 0x6709, 0,
- 8, 0x3293, 0x793E, 0,
- 8, 0x3294, 0x540D, 0,
- 8, 0x3295, 0x7279, 0,
- 8, 0x3296, 0x8CA1, 0,
- 8, 0x3297, 0x795D, 0,
- 8, 0x3298, 0x52B4, 0,
- 8, 0x3299, 0x79D8, 0,
- 8, 0x329A, 0x7537, 0,
- 8, 0x329B, 0x5973, 0,
- 8, 0x329C, 0x9069, 0,
- 8, 0x329D, 0x512A, 0,
- 8, 0x329E, 0x5370, 0,
- 8, 0x329F, 0x6CE8, 0,
- 8, 0x32A0, 0x9805, 0,
- 8, 0x32A1, 0x4F11, 0,
- 8, 0x32A2, 0x5199, 0,
- 8, 0x32A3, 0x6B63, 0,
- 8, 0x32A4, 0x4E0A, 0,
- 8, 0x32A5, 0x4E2D, 0,
- 8, 0x32A6, 0x4E0B, 0,
- 8, 0x32A7, 0x5DE6, 0,
- 8, 0x32A8, 0x53F3, 0,
- 8, 0x32A9, 0x533B, 0,
- 8, 0x32AA, 0x5B97, 0,
- 8, 0x32AB, 0x5B66, 0,
- 8, 0x32AC, 0x76E3, 0,
- 8, 0x32AD, 0x4F01, 0,
- 8, 0x32AE, 0x8CC7, 0,
- 8, 0x32AF, 0x5354, 0,
- 8, 0x32B0, 0x591C, 0,
- 16, 0x32C0, 0x0031, 0x6708, 0,
- 16, 0x32C1, 0x0032, 0x6708, 0,
- 16, 0x32C2, 0x0033, 0x6708, 0,
- 16, 0x32C3, 0x0034, 0x6708, 0,
- 16, 0x32C4, 0x0035, 0x6708, 0,
- 16, 0x32C5, 0x0036, 0x6708, 0,
- 16, 0x32C6, 0x0037, 0x6708, 0,
- 16, 0x32C7, 0x0038, 0x6708, 0,
- 16, 0x32C8, 0x0039, 0x6708, 0,
- 16, 0x32C9, 0x0031, 0x0030, 0x6708, 0,
- 16, 0x32CA, 0x0031, 0x0031, 0x6708, 0,
- 16, 0x32CB, 0x0031, 0x0032, 0x6708, 0,
- 8, 0x32D0, 0x30A2, 0,
- 8, 0x32D1, 0x30A4, 0,
- 8, 0x32D2, 0x30A6, 0,
- 8, 0x32D3, 0x30A8, 0,
- 8, 0x32D4, 0x30AA, 0,
- 8, 0x32D5, 0x30AB, 0,
- 8, 0x32D6, 0x30AD, 0,
- 8, 0x32D7, 0x30AF, 0,
- 8, 0x32D8, 0x30B1, 0,
- 8, 0x32D9, 0x30B3, 0,
- 8, 0x32DA, 0x30B5, 0,
- 8, 0x32DB, 0x30B7, 0,
- 8, 0x32DC, 0x30B9, 0,
- 8, 0x32DD, 0x30BB, 0,
- 8, 0x32DE, 0x30BD, 0,
- 8, 0x32DF, 0x30BF, 0,
- 8, 0x32E0, 0x30C1, 0,
- 8, 0x32E1, 0x30C4, 0,
- 8, 0x32E2, 0x30C6, 0,
- 8, 0x32E3, 0x30C8, 0,
- 8, 0x32E4, 0x30CA, 0,
- 8, 0x32E5, 0x30CB, 0,
- 8, 0x32E6, 0x30CC, 0,
- 8, 0x32E7, 0x30CD, 0,
- 8, 0x32E8, 0x30CE, 0,
- 8, 0x32E9, 0x30CF, 0,
- 8, 0x32EA, 0x30D2, 0,
- 8, 0x32EB, 0x30D5, 0,
- 8, 0x32EC, 0x30D8, 0,
- 8, 0x32ED, 0x30DB, 0,
- 8, 0x32EE, 0x30DE, 0,
- 8, 0x32EF, 0x30DF, 0,
- 8, 0x32F0, 0x30E0, 0,
- 8, 0x32F1, 0x30E1, 0,
- 8, 0x32F2, 0x30E2, 0,
- 8, 0x32F3, 0x30E4, 0,
- 8, 0x32F4, 0x30E6, 0,
- 8, 0x32F5, 0x30E8, 0,
- 8, 0x32F6, 0x30E9, 0,
- 8, 0x32F7, 0x30EA, 0,
- 8, 0x32F8, 0x30EB, 0,
- 8, 0x32F9, 0x30EC, 0,
- 8, 0x32FA, 0x30ED, 0,
- 8, 0x32FB, 0x30EF, 0,
- 8, 0x32FC, 0x30F0, 0,
- 8, 0x32FD, 0x30F1, 0,
- 8, 0x32FE, 0x30F2, 0,
- 15, 0x3300, 0x30A2, 0x30D1, 0x30FC, 0x30C8, 0,
- 15, 0x3301, 0x30A2, 0x30EB, 0x30D5, 0x30A1, 0,
- 15, 0x3302, 0x30A2, 0x30F3, 0x30DA, 0x30A2, 0,
- 15, 0x3303, 0x30A2, 0x30FC, 0x30EB, 0,
- 15, 0x3304, 0x30A4, 0x30CB, 0x30F3, 0x30B0, 0,
- 15, 0x3305, 0x30A4, 0x30F3, 0x30C1, 0,
- 15, 0x3306, 0x30A6, 0x30A9, 0x30F3, 0,
- 15, 0x3307, 0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9, 0,
- 15, 0x3308, 0x30A8, 0x30FC, 0x30AB, 0x30FC, 0,
- 15, 0x3309, 0x30AA, 0x30F3, 0x30B9, 0,
- 15, 0x330A, 0x30AA, 0x30FC, 0x30E0, 0,
- 15, 0x330B, 0x30AB, 0x30A4, 0x30EA, 0,
- 15, 0x330C, 0x30AB, 0x30E9, 0x30C3, 0x30C8, 0,
- 15, 0x330D, 0x30AB, 0x30ED, 0x30EA, 0x30FC, 0,
- 15, 0x330E, 0x30AC, 0x30ED, 0x30F3, 0,
- 15, 0x330F, 0x30AC, 0x30F3, 0x30DE, 0,
- 15, 0x3310, 0x30AE, 0x30AC, 0,
- 15, 0x3311, 0x30AE, 0x30CB, 0x30FC, 0,
- 15, 0x3312, 0x30AD, 0x30E5, 0x30EA, 0x30FC, 0,
- 15, 0x3313, 0x30AE, 0x30EB, 0x30C0, 0x30FC, 0,
- 15, 0x3314, 0x30AD, 0x30ED, 0,
- 15, 0x3315, 0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0, 0,
- 15, 0x3316, 0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB, 0,
- 15, 0x3317, 0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8, 0,
- 15, 0x3318, 0x30B0, 0x30E9, 0x30E0, 0,
- 15, 0x3319, 0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3, 0,
- 15, 0x331A, 0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED, 0,
- 15, 0x331B, 0x30AF, 0x30ED, 0x30FC, 0x30CD, 0,
- 15, 0x331C, 0x30B1, 0x30FC, 0x30B9, 0,
- 15, 0x331D, 0x30B3, 0x30EB, 0x30CA, 0,
- 15, 0x331E, 0x30B3, 0x30FC, 0x30DD, 0,
- 15, 0x331F, 0x30B5, 0x30A4, 0x30AF, 0x30EB, 0,
- 15, 0x3320, 0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0, 0,
- 15, 0x3321, 0x30B7, 0x30EA, 0x30F3, 0x30B0, 0,
- 15, 0x3322, 0x30BB, 0x30F3, 0x30C1, 0,
- 15, 0x3323, 0x30BB, 0x30F3, 0x30C8, 0,
- 15, 0x3324, 0x30C0, 0x30FC, 0x30B9, 0,
- 15, 0x3325, 0x30C7, 0x30B7, 0,
- 15, 0x3326, 0x30C9, 0x30EB, 0,
- 15, 0x3327, 0x30C8, 0x30F3, 0,
- 15, 0x3328, 0x30CA, 0x30CE, 0,
- 15, 0x3329, 0x30CE, 0x30C3, 0x30C8, 0,
- 15, 0x332A, 0x30CF, 0x30A4, 0x30C4, 0,
- 15, 0x332B, 0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8, 0,
- 15, 0x332C, 0x30D1, 0x30FC, 0x30C4, 0,
- 15, 0x332D, 0x30D0, 0x30FC, 0x30EC, 0x30EB, 0,
- 15, 0x332E, 0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB, 0,
- 15, 0x332F, 0x30D4, 0x30AF, 0x30EB, 0,
- 15, 0x3330, 0x30D4, 0x30B3, 0,
- 15, 0x3331, 0x30D3, 0x30EB, 0,
- 15, 0x3332, 0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9, 0,
- 15, 0x3333, 0x30D5, 0x30A3, 0x30FC, 0x30C8, 0,
- 15, 0x3334, 0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB, 0,
- 15, 0x3335, 0x30D5, 0x30E9, 0x30F3, 0,
- 15, 0x3336, 0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB, 0,
- 15, 0x3337, 0x30DA, 0x30BD, 0,
- 15, 0x3338, 0x30DA, 0x30CB, 0x30D2, 0,
- 15, 0x3339, 0x30D8, 0x30EB, 0x30C4, 0,
- 15, 0x333A, 0x30DA, 0x30F3, 0x30B9, 0,
- 15, 0x333B, 0x30DA, 0x30FC, 0x30B8, 0,
- 15, 0x333C, 0x30D9, 0x30FC, 0x30BF, 0,
- 15, 0x333D, 0x30DD, 0x30A4, 0x30F3, 0x30C8, 0,
- 15, 0x333E, 0x30DC, 0x30EB, 0x30C8, 0,
- 15, 0x333F, 0x30DB, 0x30F3, 0,
- 15, 0x3340, 0x30DD, 0x30F3, 0x30C9, 0,
- 15, 0x3341, 0x30DB, 0x30FC, 0x30EB, 0,
- 15, 0x3342, 0x30DB, 0x30FC, 0x30F3, 0,
- 15, 0x3343, 0x30DE, 0x30A4, 0x30AF, 0x30ED, 0,
- 15, 0x3344, 0x30DE, 0x30A4, 0x30EB, 0,
- 15, 0x3345, 0x30DE, 0x30C3, 0x30CF, 0,
- 15, 0x3346, 0x30DE, 0x30EB, 0x30AF, 0,
- 15, 0x3347, 0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3, 0,
- 15, 0x3348, 0x30DF, 0x30AF, 0x30ED, 0x30F3, 0,
- 15, 0x3349, 0x30DF, 0x30EA, 0,
- 15, 0x334A, 0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB, 0,
- 15, 0x334B, 0x30E1, 0x30AC, 0,
- 15, 0x334C, 0x30E1, 0x30AC, 0x30C8, 0x30F3, 0,
- 15, 0x334D, 0x30E1, 0x30FC, 0x30C8, 0x30EB, 0,
- 15, 0x334E, 0x30E4, 0x30FC, 0x30C9, 0,
- 15, 0x334F, 0x30E4, 0x30FC, 0x30EB, 0,
- 15, 0x3350, 0x30E6, 0x30A2, 0x30F3, 0,
- 15, 0x3351, 0x30EA, 0x30C3, 0x30C8, 0x30EB, 0,
- 15, 0x3352, 0x30EA, 0x30E9, 0,
- 15, 0x3353, 0x30EB, 0x30D4, 0x30FC, 0,
- 15, 0x3354, 0x30EB, 0x30FC, 0x30D6, 0x30EB, 0,
- 15, 0x3355, 0x30EC, 0x30E0, 0,
- 15, 0x3356, 0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3, 0,
- 15, 0x3357, 0x30EF, 0x30C3, 0x30C8, 0,
- 16, 0x3358, 0x0030, 0x70B9, 0,
- 16, 0x3359, 0x0031, 0x70B9, 0,
- 16, 0x335A, 0x0032, 0x70B9, 0,
- 16, 0x335B, 0x0033, 0x70B9, 0,
- 16, 0x335C, 0x0034, 0x70B9, 0,
- 16, 0x335D, 0x0035, 0x70B9, 0,
- 16, 0x335E, 0x0036, 0x70B9, 0,
- 16, 0x335F, 0x0037, 0x70B9, 0,
- 16, 0x3360, 0x0038, 0x70B9, 0,
- 16, 0x3361, 0x0039, 0x70B9, 0,
- 16, 0x3362, 0x0031, 0x0030, 0x70B9, 0,
- 16, 0x3363, 0x0031, 0x0031, 0x70B9, 0,
- 16, 0x3364, 0x0031, 0x0032, 0x70B9, 0,
- 16, 0x3365, 0x0031, 0x0033, 0x70B9, 0,
- 16, 0x3366, 0x0031, 0x0034, 0x70B9, 0,
- 16, 0x3367, 0x0031, 0x0035, 0x70B9, 0,
- 16, 0x3368, 0x0031, 0x0036, 0x70B9, 0,
- 16, 0x3369, 0x0031, 0x0037, 0x70B9, 0,
- 16, 0x336A, 0x0031, 0x0038, 0x70B9, 0,
- 16, 0x336B, 0x0031, 0x0039, 0x70B9, 0,
- 16, 0x336C, 0x0032, 0x0030, 0x70B9, 0,
- 16, 0x336D, 0x0032, 0x0031, 0x70B9, 0,
- 16, 0x336E, 0x0032, 0x0032, 0x70B9, 0,
- 16, 0x336F, 0x0032, 0x0033, 0x70B9, 0,
- 16, 0x3370, 0x0032, 0x0034, 0x70B9, 0,
- 15, 0x3371, 0x0068, 0x0050, 0x0061, 0,
- 15, 0x3372, 0x0064, 0x0061, 0,
- 15, 0x3373, 0x0041, 0x0055, 0,
- 15, 0x3374, 0x0062, 0x0061, 0x0072, 0,
- 15, 0x3375, 0x006F, 0x0056, 0,
- 15, 0x3376, 0x0070, 0x0063, 0,
- 15, 0x337B, 0x5E73, 0x6210, 0,
- 15, 0x337C, 0x662D, 0x548C, 0,
- 15, 0x337D, 0x5927, 0x6B63, 0,
- 15, 0x337E, 0x660E, 0x6CBB, 0,
- 15, 0x337F, 0x682A, 0x5F0F, 0x4F1A, 0x793E, 0,
- 15, 0x3380, 0x0070, 0x0041, 0,
- 15, 0x3381, 0x006E, 0x0041, 0,
- 15, 0x3382, 0x03BC, 0x0041, 0,
- 15, 0x3383, 0x006D, 0x0041, 0,
- 15, 0x3384, 0x006B, 0x0041, 0,
- 15, 0x3385, 0x004B, 0x0042, 0,
- 15, 0x3386, 0x004D, 0x0042, 0,
- 15, 0x3387, 0x0047, 0x0042, 0,
- 15, 0x3388, 0x0063, 0x0061, 0x006C, 0,
- 15, 0x3389, 0x006B, 0x0063, 0x0061, 0x006C, 0,
- 15, 0x338A, 0x0070, 0x0046, 0,
- 15, 0x338B, 0x006E, 0x0046, 0,
- 15, 0x338C, 0x03BC, 0x0046, 0,
- 15, 0x338D, 0x03BC, 0x0067, 0,
- 15, 0x338E, 0x006D, 0x0067, 0,
- 15, 0x338F, 0x006B, 0x0067, 0,
- 15, 0x3390, 0x0048, 0x007A, 0,
- 15, 0x3391, 0x006B, 0x0048, 0x007A, 0,
- 15, 0x3392, 0x004D, 0x0048, 0x007A, 0,
- 15, 0x3393, 0x0047, 0x0048, 0x007A, 0,
- 15, 0x3394, 0x0054, 0x0048, 0x007A, 0,
- 15, 0x3395, 0x03BC, 0x2113, 0,
- 15, 0x3396, 0x006D, 0x2113, 0,
- 15, 0x3397, 0x0064, 0x2113, 0,
- 15, 0x3398, 0x006B, 0x2113, 0,
- 15, 0x3399, 0x0066, 0x006D, 0,
- 15, 0x339A, 0x006E, 0x006D, 0,
- 15, 0x339B, 0x03BC, 0x006D, 0,
- 15, 0x339C, 0x006D, 0x006D, 0,
- 15, 0x339D, 0x0063, 0x006D, 0,
- 15, 0x339E, 0x006B, 0x006D, 0,
- 15, 0x339F, 0x006D, 0x006D, 0x00B2, 0,
- 15, 0x33A0, 0x0063, 0x006D, 0x00B2, 0,
- 15, 0x33A1, 0x006D, 0x00B2, 0,
- 15, 0x33A2, 0x006B, 0x006D, 0x00B2, 0,
- 15, 0x33A3, 0x006D, 0x006D, 0x00B3, 0,
- 15, 0x33A4, 0x0063, 0x006D, 0x00B3, 0,
- 15, 0x33A5, 0x006D, 0x00B3, 0,
- 15, 0x33A6, 0x006B, 0x006D, 0x00B3, 0,
- 15, 0x33A7, 0x006D, 0x2215, 0x0073, 0,
- 15, 0x33A8, 0x006D, 0x2215, 0x0073, 0x00B2, 0,
- 15, 0x33A9, 0x0050, 0x0061, 0,
- 15, 0x33AA, 0x006B, 0x0050, 0x0061, 0,
- 15, 0x33AB, 0x004D, 0x0050, 0x0061, 0,
- 15, 0x33AC, 0x0047, 0x0050, 0x0061, 0,
- 15, 0x33AD, 0x0072, 0x0061, 0x0064, 0,
- 15, 0x33AE, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0,
- 15, 0x33AF, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00B2, 0,
- 15, 0x33B0, 0x0070, 0x0073, 0,
- 15, 0x33B1, 0x006E, 0x0073, 0,
- 15, 0x33B2, 0x03BC, 0x0073, 0,
- 15, 0x33B3, 0x006D, 0x0073, 0,
- 15, 0x33B4, 0x0070, 0x0056, 0,
- 15, 0x33B5, 0x006E, 0x0056, 0,
- 15, 0x33B6, 0x03BC, 0x0056, 0,
- 15, 0x33B7, 0x006D, 0x0056, 0,
- 15, 0x33B8, 0x006B, 0x0056, 0,
- 15, 0x33B9, 0x004D, 0x0056, 0,
- 15, 0x33BA, 0x0070, 0x0057, 0,
- 15, 0x33BB, 0x006E, 0x0057, 0,
- 15, 0x33BC, 0x03BC, 0x0057, 0,
- 15, 0x33BD, 0x006D, 0x0057, 0,
- 15, 0x33BE, 0x006B, 0x0057, 0,
- 15, 0x33BF, 0x004D, 0x0057, 0,
- 15, 0x33C0, 0x006B, 0x03A9, 0,
- 15, 0x33C1, 0x004D, 0x03A9, 0,
- 15, 0x33C2, 0x0061, 0x002E, 0x006D, 0x002E, 0,
- 15, 0x33C3, 0x0042, 0x0071, 0,
- 15, 0x33C4, 0x0063, 0x0063, 0,
- 15, 0x33C5, 0x0063, 0x0064, 0,
- 15, 0x33C6, 0x0043, 0x2215, 0x006B, 0x0067, 0,
- 15, 0x33C7, 0x0043, 0x006F, 0x002E, 0,
- 15, 0x33C8, 0x0064, 0x0042, 0,
- 15, 0x33C9, 0x0047, 0x0079, 0,
- 15, 0x33CA, 0x0068, 0x0061, 0,
- 15, 0x33CB, 0x0048, 0x0050, 0,
- 15, 0x33CC, 0x0069, 0x006E, 0,
- 15, 0x33CD, 0x004B, 0x004B, 0,
- 15, 0x33CE, 0x004B, 0x004D, 0,
- 15, 0x33CF, 0x006B, 0x0074, 0,
- 15, 0x33D0, 0x006C, 0x006D, 0,
- 15, 0x33D1, 0x006C, 0x006E, 0,
- 15, 0x33D2, 0x006C, 0x006F, 0x0067, 0,
- 15, 0x33D3, 0x006C, 0x0078, 0,
- 15, 0x33D4, 0x006D, 0x0062, 0,
- 15, 0x33D5, 0x006D, 0x0069, 0x006C, 0,
- 15, 0x33D6, 0x006D, 0x006F, 0x006C, 0,
- 15, 0x33D7, 0x0050, 0x0048, 0,
- 15, 0x33D8, 0x0070, 0x002E, 0x006D, 0x002E, 0,
- 15, 0x33D9, 0x0050, 0x0050, 0x004D, 0,
- 15, 0x33DA, 0x0050, 0x0052, 0,
- 15, 0x33DB, 0x0073, 0x0072, 0,
- 15, 0x33DC, 0x0053, 0x0076, 0,
- 15, 0x33DD, 0x0057, 0x0062, 0,
- 16, 0x33E0, 0x0031, 0x65E5, 0,
- 16, 0x33E1, 0x0032, 0x65E5, 0,
- 16, 0x33E2, 0x0033, 0x65E5, 0,
- 16, 0x33E3, 0x0034, 0x65E5, 0,
- 16, 0x33E4, 0x0035, 0x65E5, 0,
- 16, 0x33E5, 0x0036, 0x65E5, 0,
- 16, 0x33E6, 0x0037, 0x65E5, 0,
- 16, 0x33E7, 0x0038, 0x65E5, 0,
- 16, 0x33E8, 0x0039, 0x65E5, 0,
- 16, 0x33E9, 0x0031, 0x0030, 0x65E5, 0,
- 16, 0x33EA, 0x0031, 0x0031, 0x65E5, 0,
- 16, 0x33EB, 0x0031, 0x0032, 0x65E5, 0,
- 16, 0x33EC, 0x0031, 0x0033, 0x65E5, 0,
- 16, 0x33ED, 0x0031, 0x0034, 0x65E5, 0,
- 16, 0x33EE, 0x0031, 0x0035, 0x65E5, 0,
- 16, 0x33EF, 0x0031, 0x0036, 0x65E5, 0,
- 16, 0x33F0, 0x0031, 0x0037, 0x65E5, 0,
- 16, 0x33F1, 0x0031, 0x0038, 0x65E5, 0,
- 16, 0x33F2, 0x0031, 0x0039, 0x65E5, 0,
- 16, 0x33F3, 0x0032, 0x0030, 0x65E5, 0,
- 16, 0x33F4, 0x0032, 0x0031, 0x65E5, 0,
- 16, 0x33F5, 0x0032, 0x0032, 0x65E5, 0,
- 16, 0x33F6, 0x0032, 0x0033, 0x65E5, 0,
- 16, 0x33F7, 0x0032, 0x0034, 0x65E5, 0,
- 16, 0x33F8, 0x0032, 0x0035, 0x65E5, 0,
- 16, 0x33F9, 0x0032, 0x0036, 0x65E5, 0,
- 16, 0x33FA, 0x0032, 0x0037, 0x65E5, 0,
- 16, 0x33FB, 0x0032, 0x0038, 0x65E5, 0,
- 16, 0x33FC, 0x0032, 0x0039, 0x65E5, 0,
- 16, 0x33FD, 0x0033, 0x0030, 0x65E5, 0,
- 16, 0x33FE, 0x0033, 0x0031, 0x65E5, 0,
- 1, 0xF900, 0x8C48, 0,
- 1, 0xF901, 0x66F4, 0,
- 1, 0xF902, 0x8ECA, 0,
- 1, 0xF903, 0x8CC8, 0,
- 1, 0xF904, 0x6ED1, 0,
- 1, 0xF905, 0x4E32, 0,
- 1, 0xF906, 0x53E5, 0,
- 1, 0xF907, 0x9F9C, 0,
- 1, 0xF908, 0x9F9C, 0,
- 1, 0xF909, 0x5951, 0,
- 1, 0xF90A, 0x91D1, 0,
- 1, 0xF90B, 0x5587, 0,
- 1, 0xF90C, 0x5948, 0,
- 1, 0xF90D, 0x61F6, 0,
- 1, 0xF90E, 0x7669, 0,
- 1, 0xF90F, 0x7F85, 0,
- 1, 0xF910, 0x863F, 0,
- 1, 0xF911, 0x87BA, 0,
- 1, 0xF912, 0x88F8, 0,
- 1, 0xF913, 0x908F, 0,
- 1, 0xF914, 0x6A02, 0,
- 1, 0xF915, 0x6D1B, 0,
- 1, 0xF916, 0x70D9, 0,
- 1, 0xF917, 0x73DE, 0,
- 1, 0xF918, 0x843D, 0,
- 1, 0xF919, 0x916A, 0,
- 1, 0xF91A, 0x99F1, 0,
- 1, 0xF91B, 0x4E82, 0,
- 1, 0xF91C, 0x5375, 0,
- 1, 0xF91D, 0x6B04, 0,
- 1, 0xF91E, 0x721B, 0,
- 1, 0xF91F, 0x862D, 0,
- 1, 0xF920, 0x9E1E, 0,
- 1, 0xF921, 0x5D50, 0,
- 1, 0xF922, 0x6FEB, 0,
- 1, 0xF923, 0x85CD, 0,
- 1, 0xF924, 0x8964, 0,
- 1, 0xF925, 0x62C9, 0,
- 1, 0xF926, 0x81D8, 0,
- 1, 0xF927, 0x881F, 0,
- 1, 0xF928, 0x5ECA, 0,
- 1, 0xF929, 0x6717, 0,
- 1, 0xF92A, 0x6D6A, 0,
- 1, 0xF92B, 0x72FC, 0,
- 1, 0xF92C, 0x90CE, 0,
- 1, 0xF92D, 0x4F86, 0,
- 1, 0xF92E, 0x51B7, 0,
- 1, 0xF92F, 0x52DE, 0,
- 1, 0xF930, 0x64C4, 0,
- 1, 0xF931, 0x6AD3, 0,
- 1, 0xF932, 0x7210, 0,
- 1, 0xF933, 0x76E7, 0,
- 1, 0xF934, 0x8001, 0,
- 1, 0xF935, 0x8606, 0,
- 1, 0xF936, 0x865C, 0,
- 1, 0xF937, 0x8DEF, 0,
- 1, 0xF938, 0x9732, 0,
- 1, 0xF939, 0x9B6F, 0,
- 1, 0xF93A, 0x9DFA, 0,
- 1, 0xF93B, 0x788C, 0,
- 1, 0xF93C, 0x797F, 0,
- 1, 0xF93D, 0x7DA0, 0,
- 1, 0xF93E, 0x83C9, 0,
- 1, 0xF93F, 0x9304, 0,
- 1, 0xF940, 0x9E7F, 0,
- 1, 0xF941, 0x8AD6, 0,
- 1, 0xF942, 0x58DF, 0,
- 1, 0xF943, 0x5F04, 0,
- 1, 0xF944, 0x7C60, 0,
- 1, 0xF945, 0x807E, 0,
- 1, 0xF946, 0x7262, 0,
- 1, 0xF947, 0x78CA, 0,
- 1, 0xF948, 0x8CC2, 0,
- 1, 0xF949, 0x96F7, 0,
- 1, 0xF94A, 0x58D8, 0,
- 1, 0xF94B, 0x5C62, 0,
- 1, 0xF94C, 0x6A13, 0,
- 1, 0xF94D, 0x6DDA, 0,
- 1, 0xF94E, 0x6F0F, 0,
- 1, 0xF94F, 0x7D2F, 0,
- 1, 0xF950, 0x7E37, 0,
- 1, 0xF951, 0x96FB, 0,
- 1, 0xF952, 0x52D2, 0,
- 1, 0xF953, 0x808B, 0,
- 1, 0xF954, 0x51DC, 0,
- 1, 0xF955, 0x51CC, 0,
- 1, 0xF956, 0x7A1C, 0,
- 1, 0xF957, 0x7DBE, 0,
- 1, 0xF958, 0x83F1, 0,
- 1, 0xF959, 0x9675, 0,
- 1, 0xF95A, 0x8B80, 0,
- 1, 0xF95B, 0x62CF, 0,
- 1, 0xF95C, 0x6A02, 0,
- 1, 0xF95D, 0x8AFE, 0,
- 1, 0xF95E, 0x4E39, 0,
- 1, 0xF95F, 0x5BE7, 0,
- 1, 0xF960, 0x6012, 0,
- 1, 0xF961, 0x7387, 0,
- 1, 0xF962, 0x7570, 0,
- 1, 0xF963, 0x5317, 0,
- 1, 0xF964, 0x78FB, 0,
- 1, 0xF965, 0x4FBF, 0,
- 1, 0xF966, 0x5FA9, 0,
- 1, 0xF967, 0x4E0D, 0,
- 1, 0xF968, 0x6CCC, 0,
- 1, 0xF969, 0x6578, 0,
- 1, 0xF96A, 0x7D22, 0,
- 1, 0xF96B, 0x53C3, 0,
- 1, 0xF96C, 0x585E, 0,
- 1, 0xF96D, 0x7701, 0,
- 1, 0xF96E, 0x8449, 0,
- 1, 0xF96F, 0x8AAA, 0,
- 1, 0xF970, 0x6BBA, 0,
- 1, 0xF971, 0x8FB0, 0,
- 1, 0xF972, 0x6C88, 0,
- 1, 0xF973, 0x62FE, 0,
- 1, 0xF974, 0x82E5, 0,
- 1, 0xF975, 0x63A0, 0,
- 1, 0xF976, 0x7565, 0,
- 1, 0xF977, 0x4EAE, 0,
- 1, 0xF978, 0x5169, 0,
- 1, 0xF979, 0x51C9, 0,
- 1, 0xF97A, 0x6881, 0,
- 1, 0xF97B, 0x7CE7, 0,
- 1, 0xF97C, 0x826F, 0,
- 1, 0xF97D, 0x8AD2, 0,
- 1, 0xF97E, 0x91CF, 0,
- 1, 0xF97F, 0x52F5, 0,
- 1, 0xF980, 0x5442, 0,
- 1, 0xF981, 0x5973, 0,
- 1, 0xF982, 0x5EEC, 0,
- 1, 0xF983, 0x65C5, 0,
- 1, 0xF984, 0x6FFE, 0,
- 1, 0xF985, 0x792A, 0,
- 1, 0xF986, 0x95AD, 0,
- 1, 0xF987, 0x9A6A, 0,
- 1, 0xF988, 0x9E97, 0,
- 1, 0xF989, 0x9ECE, 0,
- 1, 0xF98A, 0x529B, 0,
- 1, 0xF98B, 0x66C6, 0,
- 1, 0xF98C, 0x6B77, 0,
- 1, 0xF98D, 0x8F62, 0,
- 1, 0xF98E, 0x5E74, 0,
- 1, 0xF98F, 0x6190, 0,
- 1, 0xF990, 0x6200, 0,
- 1, 0xF991, 0x649A, 0,
- 1, 0xF992, 0x6F23, 0,
- 1, 0xF993, 0x7149, 0,
- 1, 0xF994, 0x7489, 0,
- 1, 0xF995, 0x79CA, 0,
- 1, 0xF996, 0x7DF4, 0,
- 1, 0xF997, 0x806F, 0,
- 1, 0xF998, 0x8F26, 0,
- 1, 0xF999, 0x84EE, 0,
- 1, 0xF99A, 0x9023, 0,
- 1, 0xF99B, 0x934A, 0,
- 1, 0xF99C, 0x5217, 0,
- 1, 0xF99D, 0x52A3, 0,
- 1, 0xF99E, 0x54BD, 0,
- 1, 0xF99F, 0x70C8, 0,
- 1, 0xF9A0, 0x88C2, 0,
- 1, 0xF9A1, 0x8AAA, 0,
- 1, 0xF9A2, 0x5EC9, 0,
- 1, 0xF9A3, 0x5FF5, 0,
- 1, 0xF9A4, 0x637B, 0,
- 1, 0xF9A5, 0x6BAE, 0,
- 1, 0xF9A6, 0x7C3E, 0,
- 1, 0xF9A7, 0x7375, 0,
- 1, 0xF9A8, 0x4EE4, 0,
- 1, 0xF9A9, 0x56F9, 0,
- 1, 0xF9AA, 0x5BE7, 0,
- 1, 0xF9AB, 0x5DBA, 0,
- 1, 0xF9AC, 0x601C, 0,
- 1, 0xF9AD, 0x73B2, 0,
- 1, 0xF9AE, 0x7469, 0,
- 1, 0xF9AF, 0x7F9A, 0,
- 1, 0xF9B0, 0x8046, 0,
- 1, 0xF9B1, 0x9234, 0,
- 1, 0xF9B2, 0x96F6, 0,
- 1, 0xF9B3, 0x9748, 0,
- 1, 0xF9B4, 0x9818, 0,
- 1, 0xF9B5, 0x4F8B, 0,
- 1, 0xF9B6, 0x79AE, 0,
- 1, 0xF9B7, 0x91B4, 0,
- 1, 0xF9B8, 0x96B8, 0,
- 1, 0xF9B9, 0x60E1, 0,
- 1, 0xF9BA, 0x4E86, 0,
- 1, 0xF9BB, 0x50DA, 0,
- 1, 0xF9BC, 0x5BEE, 0,
- 1, 0xF9BD, 0x5C3F, 0,
- 1, 0xF9BE, 0x6599, 0,
- 1, 0xF9BF, 0x6A02, 0,
- 1, 0xF9C0, 0x71CE, 0,
- 1, 0xF9C1, 0x7642, 0,
- 1, 0xF9C2, 0x84FC, 0,
- 1, 0xF9C3, 0x907C, 0,
- 1, 0xF9C4, 0x9F8D, 0,
- 1, 0xF9C5, 0x6688, 0,
- 1, 0xF9C6, 0x962E, 0,
- 1, 0xF9C7, 0x5289, 0,
- 1, 0xF9C8, 0x677B, 0,
- 1, 0xF9C9, 0x67F3, 0,
- 1, 0xF9CA, 0x6D41, 0,
- 1, 0xF9CB, 0x6E9C, 0,
- 1, 0xF9CC, 0x7409, 0,
- 1, 0xF9CD, 0x7559, 0,
- 1, 0xF9CE, 0x786B, 0,
- 1, 0xF9CF, 0x7D10, 0,
- 1, 0xF9D0, 0x985E, 0,
- 1, 0xF9D1, 0x516D, 0,
- 1, 0xF9D2, 0x622E, 0,
- 1, 0xF9D3, 0x9678, 0,
- 1, 0xF9D4, 0x502B, 0,
- 1, 0xF9D5, 0x5D19, 0,
- 1, 0xF9D6, 0x6DEA, 0,
- 1, 0xF9D7, 0x8F2A, 0,
- 1, 0xF9D8, 0x5F8B, 0,
- 1, 0xF9D9, 0x6144, 0,
- 1, 0xF9DA, 0x6817, 0,
- 1, 0xF9DB, 0x7387, 0,
- 1, 0xF9DC, 0x9686, 0,
- 1, 0xF9DD, 0x5229, 0,
- 1, 0xF9DE, 0x540F, 0,
- 1, 0xF9DF, 0x5C65, 0,
- 1, 0xF9E0, 0x6613, 0,
- 1, 0xF9E1, 0x674E, 0,
- 1, 0xF9E2, 0x68A8, 0,
- 1, 0xF9E3, 0x6CE5, 0,
- 1, 0xF9E4, 0x7406, 0,
- 1, 0xF9E5, 0x75E2, 0,
- 1, 0xF9E6, 0x7F79, 0,
- 1, 0xF9E7, 0x88CF, 0,
- 1, 0xF9E8, 0x88E1, 0,
- 1, 0xF9E9, 0x91CC, 0,
- 1, 0xF9EA, 0x96E2, 0,
- 1, 0xF9EB, 0x533F, 0,
- 1, 0xF9EC, 0x6EBA, 0,
- 1, 0xF9ED, 0x541D, 0,
- 1, 0xF9EE, 0x71D0, 0,
- 1, 0xF9EF, 0x7498, 0,
- 1, 0xF9F0, 0x85FA, 0,
- 1, 0xF9F1, 0x96A3, 0,
- 1, 0xF9F2, 0x9C57, 0,
- 1, 0xF9F3, 0x9E9F, 0,
- 1, 0xF9F4, 0x6797, 0,
- 1, 0xF9F5, 0x6DCB, 0,
- 1, 0xF9F6, 0x81E8, 0,
- 1, 0xF9F7, 0x7ACB, 0,
- 1, 0xF9F8, 0x7B20, 0,
- 1, 0xF9F9, 0x7C92, 0,
- 1, 0xF9FA, 0x72C0, 0,
- 1, 0xF9FB, 0x7099, 0,
- 1, 0xF9FC, 0x8B58, 0,
- 1, 0xF9FD, 0x4EC0, 0,
- 1, 0xF9FE, 0x8336, 0,
- 1, 0xF9FF, 0x523A, 0,
- 1, 0xFA00, 0x5207, 0,
- 1, 0xFA01, 0x5EA6, 0,
- 1, 0xFA02, 0x62D3, 0,
- 1, 0xFA03, 0x7CD6, 0,
- 1, 0xFA04, 0x5B85, 0,
- 1, 0xFA05, 0x6D1E, 0,
- 1, 0xFA06, 0x66B4, 0,
- 1, 0xFA07, 0x8F3B, 0,
- 1, 0xFA08, 0x884C, 0,
- 1, 0xFA09, 0x964D, 0,
- 1, 0xFA0A, 0x898B, 0,
- 1, 0xFA0B, 0x5ED3, 0,
- 1, 0xFA0C, 0x5140, 0,
- 1, 0xFA0D, 0x55C0, 0,
- 1, 0xFA10, 0x585A, 0,
- 1, 0xFA12, 0x6674, 0,
- 1, 0xFA15, 0x51DE, 0,
- 1, 0xFA16, 0x732A, 0,
- 1, 0xFA17, 0x76CA, 0,
- 1, 0xFA18, 0x793C, 0,
- 1, 0xFA19, 0x795E, 0,
- 1, 0xFA1A, 0x7965, 0,
- 1, 0xFA1B, 0x798F, 0,
- 1, 0xFA1C, 0x9756, 0,
- 1, 0xFA1D, 0x7CBE, 0,
- 1, 0xFA1E, 0x7FBD, 0,
- 1, 0xFA20, 0x8612, 0,
- 1, 0xFA22, 0x8AF8, 0,
- 1, 0xFA25, 0x9038, 0,
- 1, 0xFA26, 0x90FD, 0,
- 1, 0xFA2A, 0x98EF, 0,
- 1, 0xFA2B, 0x98FC, 0,
- 1, 0xFA2C, 0x9928, 0,
- 1, 0xFA2D, 0x9DB4, 0,
- 16, 0xFB00, 0x0066, 0x0066, 0,
- 16, 0xFB01, 0x0066, 0x0069, 0,
- 16, 0xFB02, 0x0066, 0x006C, 0,
- 16, 0xFB03, 0x0066, 0x0066, 0x0069, 0,
- 16, 0xFB04, 0x0066, 0x0066, 0x006C, 0,
- 16, 0xFB05, 0x017F, 0x0074, 0,
- 16, 0xFB06, 0x0073, 0x0074, 0,
- 16, 0xFB13, 0x0574, 0x0576, 0,
- 16, 0xFB14, 0x0574, 0x0565, 0,
- 16, 0xFB15, 0x0574, 0x056B, 0,
- 16, 0xFB16, 0x057E, 0x0576, 0,
- 16, 0xFB17, 0x0574, 0x056D, 0,
- 1, 0xFB1D, 0x05D9, 0x05B4, 0,
- 1, 0xFB1F, 0x05F2, 0x05B7, 0,
- 2, 0xFB20, 0x05E2, 0,
- 2, 0xFB21, 0x05D0, 0,
- 2, 0xFB22, 0x05D3, 0,
- 2, 0xFB23, 0x05D4, 0,
- 2, 0xFB24, 0x05DB, 0,
- 2, 0xFB25, 0x05DC, 0,
- 2, 0xFB26, 0x05DD, 0,
- 2, 0xFB27, 0x05E8, 0,
- 2, 0xFB28, 0x05EA, 0,
- 2, 0xFB29, 0x002B, 0,
- 1, 0xFB2A, 0x05E9, 0x05C1, 0,
- 1, 0xFB2B, 0x05E9, 0x05C2, 0,
- 1, 0xFB2C, 0xFB49, 0x05C1, 0,
- 1, 0xFB2D, 0xFB49, 0x05C2, 0,
- 1, 0xFB2E, 0x05D0, 0x05B7, 0,
- 1, 0xFB2F, 0x05D0, 0x05B8, 0,
- 1, 0xFB30, 0x05D0, 0x05BC, 0,
- 1, 0xFB31, 0x05D1, 0x05BC, 0,
- 1, 0xFB32, 0x05D2, 0x05BC, 0,
- 1, 0xFB33, 0x05D3, 0x05BC, 0,
- 1, 0xFB34, 0x05D4, 0x05BC, 0,
- 1, 0xFB35, 0x05D5, 0x05BC, 0,
- 1, 0xFB36, 0x05D6, 0x05BC, 0,
- 1, 0xFB38, 0x05D8, 0x05BC, 0,
- 1, 0xFB39, 0x05D9, 0x05BC, 0,
- 1, 0xFB3A, 0x05DA, 0x05BC, 0,
- 1, 0xFB3B, 0x05DB, 0x05BC, 0,
- 1, 0xFB3C, 0x05DC, 0x05BC, 0,
- 1, 0xFB3E, 0x05DE, 0x05BC, 0,
- 1, 0xFB40, 0x05E0, 0x05BC, 0,
- 1, 0xFB41, 0x05E1, 0x05BC, 0,
- 1, 0xFB43, 0x05E3, 0x05BC, 0,
- 1, 0xFB44, 0x05E4, 0x05BC, 0,
- 1, 0xFB46, 0x05E6, 0x05BC, 0,
- 1, 0xFB47, 0x05E7, 0x05BC, 0,
- 1, 0xFB48, 0x05E8, 0x05BC, 0,
- 1, 0xFB49, 0x05E9, 0x05BC, 0,
- 1, 0xFB4A, 0x05EA, 0x05BC, 0,
- 1, 0xFB4B, 0x05D5, 0x05B9, 0,
- 1, 0xFB4C, 0x05D1, 0x05BF, 0,
- 1, 0xFB4D, 0x05DB, 0x05BF, 0,
- 1, 0xFB4E, 0x05E4, 0x05BF, 0,
- 16, 0xFB4F, 0x05D0, 0x05DC, 0,
- 7, 0xFB50, 0x0671, 0,
- 6, 0xFB51, 0x0671, 0,
- 7, 0xFB52, 0x067B, 0,
- 6, 0xFB53, 0x067B, 0,
- 4, 0xFB54, 0x067B, 0,
- 5, 0xFB55, 0x067B, 0,
- 7, 0xFB56, 0x067E, 0,
- 6, 0xFB57, 0x067E, 0,
- 4, 0xFB58, 0x067E, 0,
- 5, 0xFB59, 0x067E, 0,
- 7, 0xFB5A, 0x0680, 0,
- 6, 0xFB5B, 0x0680, 0,
- 4, 0xFB5C, 0x0680, 0,
- 5, 0xFB5D, 0x0680, 0,
- 7, 0xFB5E, 0x067A, 0,
- 6, 0xFB5F, 0x067A, 0,
- 4, 0xFB60, 0x067A, 0,
- 5, 0xFB61, 0x067A, 0,
- 7, 0xFB62, 0x067F, 0,
- 6, 0xFB63, 0x067F, 0,
- 4, 0xFB64, 0x067F, 0,
- 5, 0xFB65, 0x067F, 0,
- 7, 0xFB66, 0x0679, 0,
- 6, 0xFB67, 0x0679, 0,
- 4, 0xFB68, 0x0679, 0,
- 5, 0xFB69, 0x0679, 0,
- 7, 0xFB6A, 0x06A4, 0,
- 6, 0xFB6B, 0x06A4, 0,
- 4, 0xFB6C, 0x06A4, 0,
- 5, 0xFB6D, 0x06A4, 0,
- 7, 0xFB6E, 0x06A6, 0,
- 6, 0xFB6F, 0x06A6, 0,
- 4, 0xFB70, 0x06A6, 0,
- 5, 0xFB71, 0x06A6, 0,
- 7, 0xFB72, 0x0684, 0,
- 6, 0xFB73, 0x0684, 0,
- 4, 0xFB74, 0x0684, 0,
- 5, 0xFB75, 0x0684, 0,
- 7, 0xFB76, 0x0683, 0,
- 6, 0xFB77, 0x0683, 0,
- 4, 0xFB78, 0x0683, 0,
- 5, 0xFB79, 0x0683, 0,
- 7, 0xFB7A, 0x0686, 0,
- 6, 0xFB7B, 0x0686, 0,
- 4, 0xFB7C, 0x0686, 0,
- 5, 0xFB7D, 0x0686, 0,
- 7, 0xFB7E, 0x0687, 0,
- 6, 0xFB7F, 0x0687, 0,
- 4, 0xFB80, 0x0687, 0,
- 5, 0xFB81, 0x0687, 0,
- 7, 0xFB82, 0x068D, 0,
- 6, 0xFB83, 0x068D, 0,
- 7, 0xFB84, 0x068C, 0,
- 6, 0xFB85, 0x068C, 0,
- 7, 0xFB86, 0x068E, 0,
- 6, 0xFB87, 0x068E, 0,
- 7, 0xFB88, 0x0688, 0,
- 6, 0xFB89, 0x0688, 0,
- 7, 0xFB8A, 0x0698, 0,
- 6, 0xFB8B, 0x0698, 0,
- 7, 0xFB8C, 0x0691, 0,
- 6, 0xFB8D, 0x0691, 0,
- 7, 0xFB8E, 0x06A9, 0,
- 6, 0xFB8F, 0x06A9, 0,
- 4, 0xFB90, 0x06A9, 0,
- 5, 0xFB91, 0x06A9, 0,
- 7, 0xFB92, 0x06AF, 0,
- 6, 0xFB93, 0x06AF, 0,
- 4, 0xFB94, 0x06AF, 0,
- 5, 0xFB95, 0x06AF, 0,
- 7, 0xFB96, 0x06B3, 0,
- 6, 0xFB97, 0x06B3, 0,
- 4, 0xFB98, 0x06B3, 0,
- 5, 0xFB99, 0x06B3, 0,
- 7, 0xFB9A, 0x06B1, 0,
- 6, 0xFB9B, 0x06B1, 0,
- 4, 0xFB9C, 0x06B1, 0,
- 5, 0xFB9D, 0x06B1, 0,
- 7, 0xFB9E, 0x06BA, 0,
- 6, 0xFB9F, 0x06BA, 0,
- 7, 0xFBA0, 0x06BB, 0,
- 6, 0xFBA1, 0x06BB, 0,
- 4, 0xFBA2, 0x06BB, 0,
- 5, 0xFBA3, 0x06BB, 0,
- 7, 0xFBA4, 0x06C0, 0,
- 6, 0xFBA5, 0x06C0, 0,
- 7, 0xFBA6, 0x06C1, 0,
- 6, 0xFBA7, 0x06C1, 0,
- 4, 0xFBA8, 0x06C1, 0,
- 5, 0xFBA9, 0x06C1, 0,
- 7, 0xFBAA, 0x06BE, 0,
- 6, 0xFBAB, 0x06BE, 0,
- 4, 0xFBAC, 0x06BE, 0,
- 5, 0xFBAD, 0x06BE, 0,
- 7, 0xFBAE, 0x06D2, 0,
- 6, 0xFBAF, 0x06D2, 0,
- 7, 0xFBB0, 0x06D3, 0,
- 6, 0xFBB1, 0x06D3, 0,
- 7, 0xFBD3, 0x06AD, 0,
- 6, 0xFBD4, 0x06AD, 0,
- 4, 0xFBD5, 0x06AD, 0,
- 5, 0xFBD6, 0x06AD, 0,
- 7, 0xFBD7, 0x06C7, 0,
- 6, 0xFBD8, 0x06C7, 0,
- 7, 0xFBD9, 0x06C6, 0,
- 6, 0xFBDA, 0x06C6, 0,
- 7, 0xFBDB, 0x06C8, 0,
- 6, 0xFBDC, 0x06C8, 0,
- 7, 0xFBDD, 0x0677, 0,
- 7, 0xFBDE, 0x06CB, 0,
- 6, 0xFBDF, 0x06CB, 0,
- 7, 0xFBE0, 0x06C5, 0,
- 6, 0xFBE1, 0x06C5, 0,
- 7, 0xFBE2, 0x06C9, 0,
- 6, 0xFBE3, 0x06C9, 0,
- 7, 0xFBE4, 0x06D0, 0,
- 6, 0xFBE5, 0x06D0, 0,
- 4, 0xFBE6, 0x06D0, 0,
- 5, 0xFBE7, 0x06D0, 0,
- 4, 0xFBE8, 0x0649, 0,
- 5, 0xFBE9, 0x0649, 0,
- 7, 0xFBEA, 0x0626, 0x0627, 0,
- 6, 0xFBEB, 0x0626, 0x0627, 0,
- 7, 0xFBEC, 0x0626, 0x06D5, 0,
- 6, 0xFBED, 0x0626, 0x06D5, 0,
- 7, 0xFBEE, 0x0626, 0x0648, 0,
- 6, 0xFBEF, 0x0626, 0x0648, 0,
- 7, 0xFBF0, 0x0626, 0x06C7, 0,
- 6, 0xFBF1, 0x0626, 0x06C7, 0,
- 7, 0xFBF2, 0x0626, 0x06C6, 0,
- 6, 0xFBF3, 0x0626, 0x06C6, 0,
- 7, 0xFBF4, 0x0626, 0x06C8, 0,
- 6, 0xFBF5, 0x0626, 0x06C8, 0,
- 7, 0xFBF6, 0x0626, 0x06D0, 0,
- 6, 0xFBF7, 0x0626, 0x06D0, 0,
- 4, 0xFBF8, 0x0626, 0x06D0, 0,
- 7, 0xFBF9, 0x0626, 0x0649, 0,
- 6, 0xFBFA, 0x0626, 0x0649, 0,
- 4, 0xFBFB, 0x0626, 0x0649, 0,
- 7, 0xFBFC, 0x06CC, 0,
- 6, 0xFBFD, 0x06CC, 0,
- 4, 0xFBFE, 0x06CC, 0,
- 5, 0xFBFF, 0x06CC, 0,
- 7, 0xFC00, 0x0626, 0x062C, 0,
- 7, 0xFC01, 0x0626, 0x062D, 0,
- 7, 0xFC02, 0x0626, 0x0645, 0,
- 7, 0xFC03, 0x0626, 0x0649, 0,
- 7, 0xFC04, 0x0626, 0x064A, 0,
- 7, 0xFC05, 0x0628, 0x062C, 0,
- 7, 0xFC06, 0x0628, 0x062D, 0,
- 7, 0xFC07, 0x0628, 0x062E, 0,
- 7, 0xFC08, 0x0628, 0x0645, 0,
- 7, 0xFC09, 0x0628, 0x0649, 0,
- 7, 0xFC0A, 0x0628, 0x064A, 0,
- 7, 0xFC0B, 0x062A, 0x062C, 0,
- 7, 0xFC0C, 0x062A, 0x062D, 0,
- 7, 0xFC0D, 0x062A, 0x062E, 0,
- 7, 0xFC0E, 0x062A, 0x0645, 0,
- 7, 0xFC0F, 0x062A, 0x0649, 0,
- 7, 0xFC10, 0x062A, 0x064A, 0,
- 7, 0xFC11, 0x062B, 0x062C, 0,
- 7, 0xFC12, 0x062B, 0x0645, 0,
- 7, 0xFC13, 0x062B, 0x0649, 0,
- 7, 0xFC14, 0x062B, 0x064A, 0,
- 7, 0xFC15, 0x062C, 0x062D, 0,
- 7, 0xFC16, 0x062C, 0x0645, 0,
- 7, 0xFC17, 0x062D, 0x062C, 0,
- 7, 0xFC18, 0x062D, 0x0645, 0,
- 7, 0xFC19, 0x062E, 0x062C, 0,
- 7, 0xFC1A, 0x062E, 0x062D, 0,
- 7, 0xFC1B, 0x062E, 0x0645, 0,
- 7, 0xFC1C, 0x0633, 0x062C, 0,
- 7, 0xFC1D, 0x0633, 0x062D, 0,
- 7, 0xFC1E, 0x0633, 0x062E, 0,
- 7, 0xFC1F, 0x0633, 0x0645, 0,
- 7, 0xFC20, 0x0635, 0x062D, 0,
- 7, 0xFC21, 0x0635, 0x0645, 0,
- 7, 0xFC22, 0x0636, 0x062C, 0,
- 7, 0xFC23, 0x0636, 0x062D, 0,
- 7, 0xFC24, 0x0636, 0x062E, 0,
- 7, 0xFC25, 0x0636, 0x0645, 0,
- 7, 0xFC26, 0x0637, 0x062D, 0,
- 7, 0xFC27, 0x0637, 0x0645, 0,
- 7, 0xFC28, 0x0638, 0x0645, 0,
- 7, 0xFC29, 0x0639, 0x062C, 0,
- 7, 0xFC2A, 0x0639, 0x0645, 0,
- 7, 0xFC2B, 0x063A, 0x062C, 0,
- 7, 0xFC2C, 0x063A, 0x0645, 0,
- 7, 0xFC2D, 0x0641, 0x062C, 0,
- 7, 0xFC2E, 0x0641, 0x062D, 0,
- 7, 0xFC2F, 0x0641, 0x062E, 0,
- 7, 0xFC30, 0x0641, 0x0645, 0,
- 7, 0xFC31, 0x0641, 0x0649, 0,
- 7, 0xFC32, 0x0641, 0x064A, 0,
- 7, 0xFC33, 0x0642, 0x062D, 0,
- 7, 0xFC34, 0x0642, 0x0645, 0,
- 7, 0xFC35, 0x0642, 0x0649, 0,
- 7, 0xFC36, 0x0642, 0x064A, 0,
- 7, 0xFC37, 0x0643, 0x0627, 0,
- 7, 0xFC38, 0x0643, 0x062C, 0,
- 7, 0xFC39, 0x0643, 0x062D, 0,
- 7, 0xFC3A, 0x0643, 0x062E, 0,
- 7, 0xFC3B, 0x0643, 0x0644, 0,
- 7, 0xFC3C, 0x0643, 0x0645, 0,
- 7, 0xFC3D, 0x0643, 0x0649, 0,
- 7, 0xFC3E, 0x0643, 0x064A, 0,
- 7, 0xFC3F, 0x0644, 0x062C, 0,
- 7, 0xFC40, 0x0644, 0x062D, 0,
- 7, 0xFC41, 0x0644, 0x062E, 0,
- 7, 0xFC42, 0x0644, 0x0645, 0,
- 7, 0xFC43, 0x0644, 0x0649, 0,
- 7, 0xFC44, 0x0644, 0x064A, 0,
- 7, 0xFC45, 0x0645, 0x062C, 0,
- 7, 0xFC46, 0x0645, 0x062D, 0,
- 7, 0xFC47, 0x0645, 0x062E, 0,
- 7, 0xFC48, 0x0645, 0x0645, 0,
- 7, 0xFC49, 0x0645, 0x0649, 0,
- 7, 0xFC4A, 0x0645, 0x064A, 0,
- 7, 0xFC4B, 0x0646, 0x062C, 0,
- 7, 0xFC4C, 0x0646, 0x062D, 0,
- 7, 0xFC4D, 0x0646, 0x062E, 0,
- 7, 0xFC4E, 0x0646, 0x0645, 0,
- 7, 0xFC4F, 0x0646, 0x0649, 0,
- 7, 0xFC50, 0x0646, 0x064A, 0,
- 7, 0xFC51, 0x0647, 0x062C, 0,
- 7, 0xFC52, 0x0647, 0x0645, 0,
- 7, 0xFC53, 0x0647, 0x0649, 0,
- 7, 0xFC54, 0x0647, 0x064A, 0,
- 7, 0xFC55, 0x064A, 0x062C, 0,
- 7, 0xFC56, 0x064A, 0x062D, 0,
- 7, 0xFC57, 0x064A, 0x062E, 0,
- 7, 0xFC58, 0x064A, 0x0645, 0,
- 7, 0xFC59, 0x064A, 0x0649, 0,
- 7, 0xFC5A, 0x064A, 0x064A, 0,
- 7, 0xFC5B, 0x0630, 0x0670, 0,
- 7, 0xFC5C, 0x0631, 0x0670, 0,
- 7, 0xFC5D, 0x0649, 0x0670, 0,
- 7, 0xFC5E, 0x0020, 0x064C, 0x0651, 0,
- 7, 0xFC5F, 0x0020, 0x064D, 0x0651, 0,
- 7, 0xFC60, 0x0020, 0x064E, 0x0651, 0,
- 7, 0xFC61, 0x0020, 0x064F, 0x0651, 0,
- 7, 0xFC62, 0x0020, 0x0650, 0x0651, 0,
- 7, 0xFC63, 0x0020, 0x0651, 0x0670, 0,
- 6, 0xFC64, 0x0626, 0x0631, 0,
- 6, 0xFC65, 0x0626, 0x0632, 0,
- 6, 0xFC66, 0x0626, 0x0645, 0,
- 6, 0xFC67, 0x0626, 0x0646, 0,
- 6, 0xFC68, 0x0626, 0x0649, 0,
- 6, 0xFC69, 0x0626, 0x064A, 0,
- 6, 0xFC6A, 0x0628, 0x0631, 0,
- 6, 0xFC6B, 0x0628, 0x0632, 0,
- 6, 0xFC6C, 0x0628, 0x0645, 0,
- 6, 0xFC6D, 0x0628, 0x0646, 0,
- 6, 0xFC6E, 0x0628, 0x0649, 0,
- 6, 0xFC6F, 0x0628, 0x064A, 0,
- 6, 0xFC70, 0x062A, 0x0631, 0,
- 6, 0xFC71, 0x062A, 0x0632, 0,
- 6, 0xFC72, 0x062A, 0x0645, 0,
- 6, 0xFC73, 0x062A, 0x0646, 0,
- 6, 0xFC74, 0x062A, 0x0649, 0,
- 6, 0xFC75, 0x062A, 0x064A, 0,
- 6, 0xFC76, 0x062B, 0x0631, 0,
- 6, 0xFC77, 0x062B, 0x0632, 0,
- 6, 0xFC78, 0x062B, 0x0645, 0,
- 6, 0xFC79, 0x062B, 0x0646, 0,
- 6, 0xFC7A, 0x062B, 0x0649, 0,
- 6, 0xFC7B, 0x062B, 0x064A, 0,
- 6, 0xFC7C, 0x0641, 0x0649, 0,
- 6, 0xFC7D, 0x0641, 0x064A, 0,
- 6, 0xFC7E, 0x0642, 0x0649, 0,
- 6, 0xFC7F, 0x0642, 0x064A, 0,
- 6, 0xFC80, 0x0643, 0x0627, 0,
- 6, 0xFC81, 0x0643, 0x0644, 0,
- 6, 0xFC82, 0x0643, 0x0645, 0,
- 6, 0xFC83, 0x0643, 0x0649, 0,
- 6, 0xFC84, 0x0643, 0x064A, 0,
- 6, 0xFC85, 0x0644, 0x0645, 0,
- 6, 0xFC86, 0x0644, 0x0649, 0,
- 6, 0xFC87, 0x0644, 0x064A, 0,
- 6, 0xFC88, 0x0645, 0x0627, 0,
- 6, 0xFC89, 0x0645, 0x0645, 0,
- 6, 0xFC8A, 0x0646, 0x0631, 0,
- 6, 0xFC8B, 0x0646, 0x0632, 0,
- 6, 0xFC8C, 0x0646, 0x0645, 0,
- 6, 0xFC8D, 0x0646, 0x0646, 0,
- 6, 0xFC8E, 0x0646, 0x0649, 0,
- 6, 0xFC8F, 0x0646, 0x064A, 0,
- 6, 0xFC90, 0x0649, 0x0670, 0,
- 6, 0xFC91, 0x064A, 0x0631, 0,
- 6, 0xFC92, 0x064A, 0x0632, 0,
- 6, 0xFC93, 0x064A, 0x0645, 0,
- 6, 0xFC94, 0x064A, 0x0646, 0,
- 6, 0xFC95, 0x064A, 0x0649, 0,
- 6, 0xFC96, 0x064A, 0x064A, 0,
- 4, 0xFC97, 0x0626, 0x062C, 0,
- 4, 0xFC98, 0x0626, 0x062D, 0,
- 4, 0xFC99, 0x0626, 0x062E, 0,
- 4, 0xFC9A, 0x0626, 0x0645, 0,
- 4, 0xFC9B, 0x0626, 0x0647, 0,
- 4, 0xFC9C, 0x0628, 0x062C, 0,
- 4, 0xFC9D, 0x0628, 0x062D, 0,
- 4, 0xFC9E, 0x0628, 0x062E, 0,
- 4, 0xFC9F, 0x0628, 0x0645, 0,
- 4, 0xFCA0, 0x0628, 0x0647, 0,
- 4, 0xFCA1, 0x062A, 0x062C, 0,
- 4, 0xFCA2, 0x062A, 0x062D, 0,
- 4, 0xFCA3, 0x062A, 0x062E, 0,
- 4, 0xFCA4, 0x062A, 0x0645, 0,
- 4, 0xFCA5, 0x062A, 0x0647, 0,
- 4, 0xFCA6, 0x062B, 0x0645, 0,
- 4, 0xFCA7, 0x062C, 0x062D, 0,
- 4, 0xFCA8, 0x062C, 0x0645, 0,
- 4, 0xFCA9, 0x062D, 0x062C, 0,
- 4, 0xFCAA, 0x062D, 0x0645, 0,
- 4, 0xFCAB, 0x062E, 0x062C, 0,
- 4, 0xFCAC, 0x062E, 0x0645, 0,
- 4, 0xFCAD, 0x0633, 0x062C, 0,
- 4, 0xFCAE, 0x0633, 0x062D, 0,
- 4, 0xFCAF, 0x0633, 0x062E, 0,
- 4, 0xFCB0, 0x0633, 0x0645, 0,
- 4, 0xFCB1, 0x0635, 0x062D, 0,
- 4, 0xFCB2, 0x0635, 0x062E, 0,
- 4, 0xFCB3, 0x0635, 0x0645, 0,
- 4, 0xFCB4, 0x0636, 0x062C, 0,
- 4, 0xFCB5, 0x0636, 0x062D, 0,
- 4, 0xFCB6, 0x0636, 0x062E, 0,
- 4, 0xFCB7, 0x0636, 0x0645, 0,
- 4, 0xFCB8, 0x0637, 0x062D, 0,
- 4, 0xFCB9, 0x0638, 0x0645, 0,
- 4, 0xFCBA, 0x0639, 0x062C, 0,
- 4, 0xFCBB, 0x0639, 0x0645, 0,
- 4, 0xFCBC, 0x063A, 0x062C, 0,
- 4, 0xFCBD, 0x063A, 0x0645, 0,
- 4, 0xFCBE, 0x0641, 0x062C, 0,
- 4, 0xFCBF, 0x0641, 0x062D, 0,
- 4, 0xFCC0, 0x0641, 0x062E, 0,
- 4, 0xFCC1, 0x0641, 0x0645, 0,
- 4, 0xFCC2, 0x0642, 0x062D, 0,
- 4, 0xFCC3, 0x0642, 0x0645, 0,
- 4, 0xFCC4, 0x0643, 0x062C, 0,
- 4, 0xFCC5, 0x0643, 0x062D, 0,
- 4, 0xFCC6, 0x0643, 0x062E, 0,
- 4, 0xFCC7, 0x0643, 0x0644, 0,
- 4, 0xFCC8, 0x0643, 0x0645, 0,
- 4, 0xFCC9, 0x0644, 0x062C, 0,
- 4, 0xFCCA, 0x0644, 0x062D, 0,
- 4, 0xFCCB, 0x0644, 0x062E, 0,
- 4, 0xFCCC, 0x0644, 0x0645, 0,
- 4, 0xFCCD, 0x0644, 0x0647, 0,
- 4, 0xFCCE, 0x0645, 0x062C, 0,
- 4, 0xFCCF, 0x0645, 0x062D, 0,
- 4, 0xFCD0, 0x0645, 0x062E, 0,
- 4, 0xFCD1, 0x0645, 0x0645, 0,
- 4, 0xFCD2, 0x0646, 0x062C, 0,
- 4, 0xFCD3, 0x0646, 0x062D, 0,
- 4, 0xFCD4, 0x0646, 0x062E, 0,
- 4, 0xFCD5, 0x0646, 0x0645, 0,
- 4, 0xFCD6, 0x0646, 0x0647, 0,
- 4, 0xFCD7, 0x0647, 0x062C, 0,
- 4, 0xFCD8, 0x0647, 0x0645, 0,
- 4, 0xFCD9, 0x0647, 0x0670, 0,
- 4, 0xFCDA, 0x064A, 0x062C, 0,
- 4, 0xFCDB, 0x064A, 0x062D, 0,
- 4, 0xFCDC, 0x064A, 0x062E, 0,
- 4, 0xFCDD, 0x064A, 0x0645, 0,
- 4, 0xFCDE, 0x064A, 0x0647, 0,
- 5, 0xFCDF, 0x0626, 0x0645, 0,
- 5, 0xFCE0, 0x0626, 0x0647, 0,
- 5, 0xFCE1, 0x0628, 0x0645, 0,
- 5, 0xFCE2, 0x0628, 0x0647, 0,
- 5, 0xFCE3, 0x062A, 0x0645, 0,
- 5, 0xFCE4, 0x062A, 0x0647, 0,
- 5, 0xFCE5, 0x062B, 0x0645, 0,
- 5, 0xFCE6, 0x062B, 0x0647, 0,
- 5, 0xFCE7, 0x0633, 0x0645, 0,
- 5, 0xFCE8, 0x0633, 0x0647, 0,
- 5, 0xFCE9, 0x0634, 0x0645, 0,
- 5, 0xFCEA, 0x0634, 0x0647, 0,
- 5, 0xFCEB, 0x0643, 0x0644, 0,
- 5, 0xFCEC, 0x0643, 0x0645, 0,
- 5, 0xFCED, 0x0644, 0x0645, 0,
- 5, 0xFCEE, 0x0646, 0x0645, 0,
- 5, 0xFCEF, 0x0646, 0x0647, 0,
- 5, 0xFCF0, 0x064A, 0x0645, 0,
- 5, 0xFCF1, 0x064A, 0x0647, 0,
- 5, 0xFCF2, 0x0640, 0x064E, 0x0651, 0,
- 5, 0xFCF3, 0x0640, 0x064F, 0x0651, 0,
- 5, 0xFCF4, 0x0640, 0x0650, 0x0651, 0,
- 7, 0xFCF5, 0x0637, 0x0649, 0,
- 7, 0xFCF6, 0x0637, 0x064A, 0,
- 7, 0xFCF7, 0x0639, 0x0649, 0,
- 7, 0xFCF8, 0x0639, 0x064A, 0,
- 7, 0xFCF9, 0x063A, 0x0649, 0,
- 7, 0xFCFA, 0x063A, 0x064A, 0,
- 7, 0xFCFB, 0x0633, 0x0649, 0,
- 7, 0xFCFC, 0x0633, 0x064A, 0,
- 7, 0xFCFD, 0x0634, 0x0649, 0,
- 7, 0xFCFE, 0x0634, 0x064A, 0,
- 7, 0xFCFF, 0x062D, 0x0649, 0,
- 7, 0xFD00, 0x062D, 0x064A, 0,
- 7, 0xFD01, 0x062C, 0x0649, 0,
- 7, 0xFD02, 0x062C, 0x064A, 0,
- 7, 0xFD03, 0x062E, 0x0649, 0,
- 7, 0xFD04, 0x062E, 0x064A, 0,
- 7, 0xFD05, 0x0635, 0x0649, 0,
- 7, 0xFD06, 0x0635, 0x064A, 0,
- 7, 0xFD07, 0x0636, 0x0649, 0,
- 7, 0xFD08, 0x0636, 0x064A, 0,
- 7, 0xFD09, 0x0634, 0x062C, 0,
- 7, 0xFD0A, 0x0634, 0x062D, 0,
- 7, 0xFD0B, 0x0634, 0x062E, 0,
- 7, 0xFD0C, 0x0634, 0x0645, 0,
- 7, 0xFD0D, 0x0634, 0x0631, 0,
- 7, 0xFD0E, 0x0633, 0x0631, 0,
- 7, 0xFD0F, 0x0635, 0x0631, 0,
- 7, 0xFD10, 0x0636, 0x0631, 0,
- 6, 0xFD11, 0x0637, 0x0649, 0,
- 6, 0xFD12, 0x0637, 0x064A, 0,
- 6, 0xFD13, 0x0639, 0x0649, 0,
- 6, 0xFD14, 0x0639, 0x064A, 0,
- 6, 0xFD15, 0x063A, 0x0649, 0,
- 6, 0xFD16, 0x063A, 0x064A, 0,
- 6, 0xFD17, 0x0633, 0x0649, 0,
- 6, 0xFD18, 0x0633, 0x064A, 0,
- 6, 0xFD19, 0x0634, 0x0649, 0,
- 6, 0xFD1A, 0x0634, 0x064A, 0,
- 6, 0xFD1B, 0x062D, 0x0649, 0,
- 6, 0xFD1C, 0x062D, 0x064A, 0,
- 6, 0xFD1D, 0x062C, 0x0649, 0,
- 6, 0xFD1E, 0x062C, 0x064A, 0,
- 6, 0xFD1F, 0x062E, 0x0649, 0,
- 6, 0xFD20, 0x062E, 0x064A, 0,
- 6, 0xFD21, 0x0635, 0x0649, 0,
- 6, 0xFD22, 0x0635, 0x064A, 0,
- 6, 0xFD23, 0x0636, 0x0649, 0,
- 6, 0xFD24, 0x0636, 0x064A, 0,
- 6, 0xFD25, 0x0634, 0x062C, 0,
- 6, 0xFD26, 0x0634, 0x062D, 0,
- 6, 0xFD27, 0x0634, 0x062E, 0,
- 6, 0xFD28, 0x0634, 0x0645, 0,
- 6, 0xFD29, 0x0634, 0x0631, 0,
- 6, 0xFD2A, 0x0633, 0x0631, 0,
- 6, 0xFD2B, 0x0635, 0x0631, 0,
- 6, 0xFD2C, 0x0636, 0x0631, 0,
- 4, 0xFD2D, 0x0634, 0x062C, 0,
- 4, 0xFD2E, 0x0634, 0x062D, 0,
- 4, 0xFD2F, 0x0634, 0x062E, 0,
- 4, 0xFD30, 0x0634, 0x0645, 0,
- 4, 0xFD31, 0x0633, 0x0647, 0,
- 4, 0xFD32, 0x0634, 0x0647, 0,
- 4, 0xFD33, 0x0637, 0x0645, 0,
- 5, 0xFD34, 0x0633, 0x062C, 0,
- 5, 0xFD35, 0x0633, 0x062D, 0,
- 5, 0xFD36, 0x0633, 0x062E, 0,
- 5, 0xFD37, 0x0634, 0x062C, 0,
- 5, 0xFD38, 0x0634, 0x062D, 0,
- 5, 0xFD39, 0x0634, 0x062E, 0,
- 5, 0xFD3A, 0x0637, 0x0645, 0,
- 5, 0xFD3B, 0x0638, 0x0645, 0,
- 6, 0xFD3C, 0x0627, 0x064B, 0,
- 7, 0xFD3D, 0x0627, 0x064B, 0,
- 4, 0xFD50, 0x062A, 0x062C, 0x0645, 0,
- 6, 0xFD51, 0x062A, 0x062D, 0x062C, 0,
- 4, 0xFD52, 0x062A, 0x062D, 0x062C, 0,
- 4, 0xFD53, 0x062A, 0x062D, 0x0645, 0,
- 4, 0xFD54, 0x062A, 0x062E, 0x0645, 0,
- 4, 0xFD55, 0x062A, 0x0645, 0x062C, 0,
- 4, 0xFD56, 0x062A, 0x0645, 0x062D, 0,
- 4, 0xFD57, 0x062A, 0x0645, 0x062E, 0,
- 6, 0xFD58, 0x062C, 0x0645, 0x062D, 0,
- 4, 0xFD59, 0x062C, 0x0645, 0x062D, 0,
- 6, 0xFD5A, 0x062D, 0x0645, 0x064A, 0,
- 6, 0xFD5B, 0x062D, 0x0645, 0x0649, 0,
- 4, 0xFD5C, 0x0633, 0x062D, 0x062C, 0,
- 4, 0xFD5D, 0x0633, 0x062C, 0x062D, 0,
- 6, 0xFD5E, 0x0633, 0x062C, 0x0649, 0,
- 6, 0xFD5F, 0x0633, 0x0645, 0x062D, 0,
- 4, 0xFD60, 0x0633, 0x0645, 0x062D, 0,
- 4, 0xFD61, 0x0633, 0x0645, 0x062C, 0,
- 6, 0xFD62, 0x0633, 0x0645, 0x0645, 0,
- 4, 0xFD63, 0x0633, 0x0645, 0x0645, 0,
- 6, 0xFD64, 0x0635, 0x062D, 0x062D, 0,
- 4, 0xFD65, 0x0635, 0x062D, 0x062D, 0,
- 6, 0xFD66, 0x0635, 0x0645, 0x0645, 0,
- 6, 0xFD67, 0x0634, 0x062D, 0x0645, 0,
- 4, 0xFD68, 0x0634, 0x062D, 0x0645, 0,
- 6, 0xFD69, 0x0634, 0x062C, 0x064A, 0,
- 6, 0xFD6A, 0x0634, 0x0645, 0x062E, 0,
- 4, 0xFD6B, 0x0634, 0x0645, 0x062E, 0,
- 6, 0xFD6C, 0x0634, 0x0645, 0x0645, 0,
- 4, 0xFD6D, 0x0634, 0x0645, 0x0645, 0,
- 6, 0xFD6E, 0x0636, 0x062D, 0x0649, 0,
- 6, 0xFD6F, 0x0636, 0x062E, 0x0645, 0,
- 4, 0xFD70, 0x0636, 0x062E, 0x0645, 0,
- 6, 0xFD71, 0x0637, 0x0645, 0x062D, 0,
- 4, 0xFD72, 0x0637, 0x0645, 0x062D, 0,
- 4, 0xFD73, 0x0637, 0x0645, 0x0645, 0,
- 6, 0xFD74, 0x0637, 0x0645, 0x064A, 0,
- 6, 0xFD75, 0x0639, 0x062C, 0x0645, 0,
- 6, 0xFD76, 0x0639, 0x0645, 0x0645, 0,
- 4, 0xFD77, 0x0639, 0x0645, 0x0645, 0,
- 6, 0xFD78, 0x0639, 0x0645, 0x0649, 0,
- 6, 0xFD79, 0x063A, 0x0645, 0x0645, 0,
- 6, 0xFD7A, 0x063A, 0x0645, 0x064A, 0,
- 6, 0xFD7B, 0x063A, 0x0645, 0x0649, 0,
- 6, 0xFD7C, 0x0641, 0x062E, 0x0645, 0,
- 4, 0xFD7D, 0x0641, 0x062E, 0x0645, 0,
- 6, 0xFD7E, 0x0642, 0x0645, 0x062D, 0,
- 6, 0xFD7F, 0x0642, 0x0645, 0x0645, 0,
- 6, 0xFD80, 0x0644, 0x062D, 0x0645, 0,
- 6, 0xFD81, 0x0644, 0x062D, 0x064A, 0,
- 6, 0xFD82, 0x0644, 0x062D, 0x0649, 0,
- 4, 0xFD83, 0x0644, 0x062C, 0x062C, 0,
- 6, 0xFD84, 0x0644, 0x062C, 0x062C, 0,
- 6, 0xFD85, 0x0644, 0x062E, 0x0645, 0,
- 4, 0xFD86, 0x0644, 0x062E, 0x0645, 0,
- 6, 0xFD87, 0x0644, 0x0645, 0x062D, 0,
- 4, 0xFD88, 0x0644, 0x0645, 0x062D, 0,
- 4, 0xFD89, 0x0645, 0x062D, 0x062C, 0,
- 4, 0xFD8A, 0x0645, 0x062D, 0x0645, 0,
- 6, 0xFD8B, 0x0645, 0x062D, 0x064A, 0,
- 4, 0xFD8C, 0x0645, 0x062C, 0x062D, 0,
- 4, 0xFD8D, 0x0645, 0x062C, 0x0645, 0,
- 4, 0xFD8E, 0x0645, 0x062E, 0x062C, 0,
- 4, 0xFD8F, 0x0645, 0x062E, 0x0645, 0,
- 4, 0xFD92, 0x0645, 0x062C, 0x062E, 0,
- 4, 0xFD93, 0x0647, 0x0645, 0x062C, 0,
- 4, 0xFD94, 0x0647, 0x0645, 0x0645, 0,
- 4, 0xFD95, 0x0646, 0x062D, 0x0645, 0,
- 6, 0xFD96, 0x0646, 0x062D, 0x0649, 0,
- 6, 0xFD97, 0x0646, 0x062C, 0x0645, 0,
- 4, 0xFD98, 0x0646, 0x062C, 0x0645, 0,
- 6, 0xFD99, 0x0646, 0x062C, 0x0649, 0,
- 6, 0xFD9A, 0x0646, 0x0645, 0x064A, 0,
- 6, 0xFD9B, 0x0646, 0x0645, 0x0649, 0,
- 6, 0xFD9C, 0x064A, 0x0645, 0x0645, 0,
- 4, 0xFD9D, 0x064A, 0x0645, 0x0645, 0,
- 6, 0xFD9E, 0x0628, 0x062E, 0x064A, 0,
- 6, 0xFD9F, 0x062A, 0x062C, 0x064A, 0,
- 6, 0xFDA0, 0x062A, 0x062C, 0x0649, 0,
- 6, 0xFDA1, 0x062A, 0x062E, 0x064A, 0,
- 6, 0xFDA2, 0x062A, 0x062E, 0x0649, 0,
- 6, 0xFDA3, 0x062A, 0x0645, 0x064A, 0,
- 6, 0xFDA4, 0x062A, 0x0645, 0x0649, 0,
- 6, 0xFDA5, 0x062C, 0x0645, 0x064A, 0,
- 6, 0xFDA6, 0x062C, 0x062D, 0x0649, 0,
- 6, 0xFDA7, 0x062C, 0x0645, 0x0649, 0,
- 6, 0xFDA8, 0x0633, 0x062E, 0x0649, 0,
- 6, 0xFDA9, 0x0635, 0x062D, 0x064A, 0,
- 6, 0xFDAA, 0x0634, 0x062D, 0x064A, 0,
- 6, 0xFDAB, 0x0636, 0x062D, 0x064A, 0,
- 6, 0xFDAC, 0x0644, 0x062C, 0x064A, 0,
- 6, 0xFDAD, 0x0644, 0x0645, 0x064A, 0,
- 6, 0xFDAE, 0x064A, 0x062D, 0x064A, 0,
- 6, 0xFDAF, 0x064A, 0x062C, 0x064A, 0,
- 6, 0xFDB0, 0x064A, 0x0645, 0x064A, 0,
- 6, 0xFDB1, 0x0645, 0x0645, 0x064A, 0,
- 6, 0xFDB2, 0x0642, 0x0645, 0x064A, 0,
- 6, 0xFDB3, 0x0646, 0x062D, 0x064A, 0,
- 4, 0xFDB4, 0x0642, 0x0645, 0x062D, 0,
- 4, 0xFDB5, 0x0644, 0x062D, 0x0645, 0,
- 6, 0xFDB6, 0x0639, 0x0645, 0x064A, 0,
- 6, 0xFDB7, 0x0643, 0x0645, 0x064A, 0,
- 4, 0xFDB8, 0x0646, 0x062C, 0x062D, 0,
- 6, 0xFDB9, 0x0645, 0x062E, 0x064A, 0,
- 4, 0xFDBA, 0x0644, 0x062C, 0x0645, 0,
- 6, 0xFDBB, 0x0643, 0x0645, 0x0645, 0,
- 6, 0xFDBC, 0x0644, 0x062C, 0x0645, 0,
- 6, 0xFDBD, 0x0646, 0x062C, 0x062D, 0,
- 6, 0xFDBE, 0x062C, 0x062D, 0x064A, 0,
- 6, 0xFDBF, 0x062D, 0x062C, 0x064A, 0,
- 6, 0xFDC0, 0x0645, 0x062C, 0x064A, 0,
- 6, 0xFDC1, 0x0641, 0x0645, 0x064A, 0,
- 6, 0xFDC2, 0x0628, 0x062D, 0x064A, 0,
- 4, 0xFDC3, 0x0643, 0x0645, 0x0645, 0,
- 4, 0xFDC4, 0x0639, 0x062C, 0x0645, 0,
- 4, 0xFDC5, 0x0635, 0x0645, 0x0645, 0,
- 6, 0xFDC6, 0x0633, 0x062E, 0x064A, 0,
- 6, 0xFDC7, 0x0646, 0x062C, 0x064A, 0,
- 7, 0xFDF0, 0x0635, 0x0644, 0x06D2, 0,
- 7, 0xFDF1, 0x0642, 0x0644, 0x06D2, 0,
- 7, 0xFDF2, 0x0627, 0x0644, 0x0644, 0x0647, 0,
- 7, 0xFDF3, 0x0627, 0x0643, 0x0628, 0x0631, 0,
- 7, 0xFDF4, 0x0645, 0x062D, 0x0645, 0x062F, 0,
- 7, 0xFDF5, 0x0635, 0x0644, 0x0639, 0x0645, 0,
- 7, 0xFDF6, 0x0631, 0x0633, 0x0648, 0x0644, 0,
- 7, 0xFDF7, 0x0639, 0x0644, 0x064A, 0x0647, 0,
- 7, 0xFDF8, 0x0648, 0x0633, 0x0644, 0x0645, 0,
- 7, 0xFDF9, 0x0635, 0x0644, 0x0649, 0,
- 7, 0xFDFA, 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645, 0,
- 7, 0xFDFB, 0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647, 0,
- 11, 0xFE30, 0x2025, 0,
- 11, 0xFE31, 0x2014, 0,
- 11, 0xFE32, 0x2013, 0,
- 11, 0xFE33, 0x005F, 0,
- 11, 0xFE34, 0x005F, 0,
- 11, 0xFE35, 0x0028, 0,
- 11, 0xFE36, 0x0029, 0,
- 11, 0xFE37, 0x007B, 0,
- 11, 0xFE38, 0x007D, 0,
- 11, 0xFE39, 0x3014, 0,
- 11, 0xFE3A, 0x3015, 0,
- 11, 0xFE3B, 0x3010, 0,
- 11, 0xFE3C, 0x3011, 0,
- 11, 0xFE3D, 0x300A, 0,
- 11, 0xFE3E, 0x300B, 0,
- 11, 0xFE3F, 0x3008, 0,
- 11, 0xFE40, 0x3009, 0,
- 11, 0xFE41, 0x300C, 0,
- 11, 0xFE42, 0x300D, 0,
- 11, 0xFE43, 0x300E, 0,
- 11, 0xFE44, 0x300F, 0,
- 16, 0xFE49, 0x203E, 0,
- 16, 0xFE4A, 0x203E, 0,
- 16, 0xFE4B, 0x203E, 0,
- 16, 0xFE4C, 0x203E, 0,
- 16, 0xFE4D, 0x005F, 0,
- 16, 0xFE4E, 0x005F, 0,
- 16, 0xFE4F, 0x005F, 0,
- 14, 0xFE50, 0x002C, 0,
- 14, 0xFE51, 0x3001, 0,
- 14, 0xFE52, 0x002E, 0,
- 14, 0xFE54, 0x003B, 0,
- 14, 0xFE55, 0x003A, 0,
- 14, 0xFE56, 0x003F, 0,
- 14, 0xFE57, 0x0021, 0,
- 14, 0xFE58, 0x2014, 0,
- 14, 0xFE59, 0x0028, 0,
- 14, 0xFE5A, 0x0029, 0,
- 14, 0xFE5B, 0x007B, 0,
- 14, 0xFE5C, 0x007D, 0,
- 14, 0xFE5D, 0x3014, 0,
- 14, 0xFE5E, 0x3015, 0,
- 14, 0xFE5F, 0x0023, 0,
- 14, 0xFE60, 0x0026, 0,
- 14, 0xFE61, 0x002A, 0,
- 14, 0xFE62, 0x002B, 0,
- 14, 0xFE63, 0x002D, 0,
- 14, 0xFE64, 0x003C, 0,
- 14, 0xFE65, 0x003E, 0,
- 14, 0xFE66, 0x003D, 0,
- 14, 0xFE68, 0x005C, 0,
- 14, 0xFE69, 0x0024, 0,
- 14, 0xFE6A, 0x0025, 0,
- 14, 0xFE6B, 0x0040, 0,
- 7, 0xFE70, 0x0020, 0x064B, 0,
- 5, 0xFE71, 0x0640, 0x064B, 0,
- 7, 0xFE72, 0x0020, 0x064C, 0,
- 7, 0xFE74, 0x0020, 0x064D, 0,
- 7, 0xFE76, 0x0020, 0x064E, 0,
- 5, 0xFE77, 0x0640, 0x064E, 0,
- 7, 0xFE78, 0x0020, 0x064F, 0,
- 5, 0xFE79, 0x0640, 0x064F, 0,
- 7, 0xFE7A, 0x0020, 0x0650, 0,
- 5, 0xFE7B, 0x0640, 0x0650, 0,
- 7, 0xFE7C, 0x0020, 0x0651, 0,
- 5, 0xFE7D, 0x0640, 0x0651, 0,
- 7, 0xFE7E, 0x0020, 0x0652, 0,
- 5, 0xFE7F, 0x0640, 0x0652, 0,
- 7, 0xFE80, 0x0621, 0,
- 7, 0xFE81, 0x0622, 0,
- 6, 0xFE82, 0x0622, 0,
- 7, 0xFE83, 0x0623, 0,
- 6, 0xFE84, 0x0623, 0,
- 7, 0xFE85, 0x0624, 0,
- 6, 0xFE86, 0x0624, 0,
- 7, 0xFE87, 0x0625, 0,
- 6, 0xFE88, 0x0625, 0,
- 7, 0xFE89, 0x0626, 0,
- 6, 0xFE8A, 0x0626, 0,
- 4, 0xFE8B, 0x0626, 0,
- 5, 0xFE8C, 0x0626, 0,
- 7, 0xFE8D, 0x0627, 0,
- 6, 0xFE8E, 0x0627, 0,
- 7, 0xFE8F, 0x0628, 0,
- 6, 0xFE90, 0x0628, 0,
- 4, 0xFE91, 0x0628, 0,
- 5, 0xFE92, 0x0628, 0,
- 7, 0xFE93, 0x0629, 0,
- 6, 0xFE94, 0x0629, 0,
- 7, 0xFE95, 0x062A, 0,
- 6, 0xFE96, 0x062A, 0,
- 4, 0xFE97, 0x062A, 0,
- 5, 0xFE98, 0x062A, 0,
- 7, 0xFE99, 0x062B, 0,
- 6, 0xFE9A, 0x062B, 0,
- 4, 0xFE9B, 0x062B, 0,
- 5, 0xFE9C, 0x062B, 0,
- 7, 0xFE9D, 0x062C, 0,
- 6, 0xFE9E, 0x062C, 0,
- 4, 0xFE9F, 0x062C, 0,
- 5, 0xFEA0, 0x062C, 0,
- 7, 0xFEA1, 0x062D, 0,
- 6, 0xFEA2, 0x062D, 0,
- 4, 0xFEA3, 0x062D, 0,
- 5, 0xFEA4, 0x062D, 0,
- 7, 0xFEA5, 0x062E, 0,
- 6, 0xFEA6, 0x062E, 0,
- 4, 0xFEA7, 0x062E, 0,
- 5, 0xFEA8, 0x062E, 0,
- 7, 0xFEA9, 0x062F, 0,
- 6, 0xFEAA, 0x062F, 0,
- 7, 0xFEAB, 0x0630, 0,
- 6, 0xFEAC, 0x0630, 0,
- 7, 0xFEAD, 0x0631, 0,
- 6, 0xFEAE, 0x0631, 0,
- 7, 0xFEAF, 0x0632, 0,
- 6, 0xFEB0, 0x0632, 0,
- 7, 0xFEB1, 0x0633, 0,
- 6, 0xFEB2, 0x0633, 0,
- 4, 0xFEB3, 0x0633, 0,
- 5, 0xFEB4, 0x0633, 0,
- 7, 0xFEB5, 0x0634, 0,
- 6, 0xFEB6, 0x0634, 0,
- 4, 0xFEB7, 0x0634, 0,
- 5, 0xFEB8, 0x0634, 0,
- 7, 0xFEB9, 0x0635, 0,
- 6, 0xFEBA, 0x0635, 0,
- 4, 0xFEBB, 0x0635, 0,
- 5, 0xFEBC, 0x0635, 0,
- 7, 0xFEBD, 0x0636, 0,
- 6, 0xFEBE, 0x0636, 0,
- 4, 0xFEBF, 0x0636, 0,
- 5, 0xFEC0, 0x0636, 0,
- 7, 0xFEC1, 0x0637, 0,
- 6, 0xFEC2, 0x0637, 0,
- 4, 0xFEC3, 0x0637, 0,
- 5, 0xFEC4, 0x0637, 0,
- 7, 0xFEC5, 0x0638, 0,
- 6, 0xFEC6, 0x0638, 0,
- 4, 0xFEC7, 0x0638, 0,
- 5, 0xFEC8, 0x0638, 0,
- 7, 0xFEC9, 0x0639, 0,
- 6, 0xFECA, 0x0639, 0,
- 4, 0xFECB, 0x0639, 0,
- 5, 0xFECC, 0x0639, 0,
- 7, 0xFECD, 0x063A, 0,
- 6, 0xFECE, 0x063A, 0,
- 4, 0xFECF, 0x063A, 0,
- 5, 0xFED0, 0x063A, 0,
- 7, 0xFED1, 0x0641, 0,
- 6, 0xFED2, 0x0641, 0,
- 4, 0xFED3, 0x0641, 0,
- 5, 0xFED4, 0x0641, 0,
- 7, 0xFED5, 0x0642, 0,
- 6, 0xFED6, 0x0642, 0,
- 4, 0xFED7, 0x0642, 0,
- 5, 0xFED8, 0x0642, 0,
- 7, 0xFED9, 0x0643, 0,
- 6, 0xFEDA, 0x0643, 0,
- 4, 0xFEDB, 0x0643, 0,
- 5, 0xFEDC, 0x0643, 0,
- 7, 0xFEDD, 0x0644, 0,
- 6, 0xFEDE, 0x0644, 0,
- 4, 0xFEDF, 0x0644, 0,
- 5, 0xFEE0, 0x0644, 0,
- 7, 0xFEE1, 0x0645, 0,
- 6, 0xFEE2, 0x0645, 0,
- 4, 0xFEE3, 0x0645, 0,
- 5, 0xFEE4, 0x0645, 0,
- 7, 0xFEE5, 0x0646, 0,
- 6, 0xFEE6, 0x0646, 0,
- 4, 0xFEE7, 0x0646, 0,
- 5, 0xFEE8, 0x0646, 0,
- 7, 0xFEE9, 0x0647, 0,
- 6, 0xFEEA, 0x0647, 0,
- 4, 0xFEEB, 0x0647, 0,
- 5, 0xFEEC, 0x0647, 0,
- 7, 0xFEED, 0x0648, 0,
- 6, 0xFEEE, 0x0648, 0,
- 7, 0xFEEF, 0x0649, 0,
- 6, 0xFEF0, 0x0649, 0,
- 7, 0xFEF1, 0x064A, 0,
- 6, 0xFEF2, 0x064A, 0,
- 4, 0xFEF3, 0x064A, 0,
- 5, 0xFEF4, 0x064A, 0,
- 7, 0xFEF5, 0x0644, 0x0622, 0,
- 6, 0xFEF6, 0x0644, 0x0622, 0,
- 7, 0xFEF7, 0x0644, 0x0623, 0,
- 6, 0xFEF8, 0x0644, 0x0623, 0,
- 7, 0xFEF9, 0x0644, 0x0625, 0,
- 6, 0xFEFA, 0x0644, 0x0625, 0,
- 7, 0xFEFB, 0x0644, 0x0627, 0,
- 6, 0xFEFC, 0x0644, 0x0627, 0,
- 12, 0xFF01, 0x0021, 0,
- 12, 0xFF02, 0x0022, 0,
- 12, 0xFF03, 0x0023, 0,
- 12, 0xFF04, 0x0024, 0,
- 12, 0xFF05, 0x0025, 0,
- 12, 0xFF06, 0x0026, 0,
- 12, 0xFF07, 0x0027, 0,
- 12, 0xFF08, 0x0028, 0,
- 12, 0xFF09, 0x0029, 0,
- 12, 0xFF0A, 0x002A, 0,
- 12, 0xFF0B, 0x002B, 0,
- 12, 0xFF0C, 0x002C, 0,
- 12, 0xFF0D, 0x002D, 0,
- 12, 0xFF0E, 0x002E, 0,
- 12, 0xFF0F, 0x002F, 0,
- 12, 0xFF10, 0x0030, 0,
- 12, 0xFF11, 0x0031, 0,
- 12, 0xFF12, 0x0032, 0,
- 12, 0xFF13, 0x0033, 0,
- 12, 0xFF14, 0x0034, 0,
- 12, 0xFF15, 0x0035, 0,
- 12, 0xFF16, 0x0036, 0,
- 12, 0xFF17, 0x0037, 0,
- 12, 0xFF18, 0x0038, 0,
- 12, 0xFF19, 0x0039, 0,
- 12, 0xFF1A, 0x003A, 0,
- 12, 0xFF1B, 0x003B, 0,
- 12, 0xFF1C, 0x003C, 0,
- 12, 0xFF1D, 0x003D, 0,
- 12, 0xFF1E, 0x003E, 0,
- 12, 0xFF1F, 0x003F, 0,
- 12, 0xFF20, 0x0040, 0,
- 12, 0xFF21, 0x0041, 0,
- 12, 0xFF22, 0x0042, 0,
- 12, 0xFF23, 0x0043, 0,
- 12, 0xFF24, 0x0044, 0,
- 12, 0xFF25, 0x0045, 0,
- 12, 0xFF26, 0x0046, 0,
- 12, 0xFF27, 0x0047, 0,
- 12, 0xFF28, 0x0048, 0,
- 12, 0xFF29, 0x0049, 0,
- 12, 0xFF2A, 0x004A, 0,
- 12, 0xFF2B, 0x004B, 0,
- 12, 0xFF2C, 0x004C, 0,
- 12, 0xFF2D, 0x004D, 0,
- 12, 0xFF2E, 0x004E, 0,
- 12, 0xFF2F, 0x004F, 0,
- 12, 0xFF30, 0x0050, 0,
- 12, 0xFF31, 0x0051, 0,
- 12, 0xFF32, 0x0052, 0,
- 12, 0xFF33, 0x0053, 0,
- 12, 0xFF34, 0x0054, 0,
- 12, 0xFF35, 0x0055, 0,
- 12, 0xFF36, 0x0056, 0,
- 12, 0xFF37, 0x0057, 0,
- 12, 0xFF38, 0x0058, 0,
- 12, 0xFF39, 0x0059, 0,
- 12, 0xFF3A, 0x005A, 0,
- 12, 0xFF3B, 0x005B, 0,
- 12, 0xFF3C, 0x005C, 0,
- 12, 0xFF3D, 0x005D, 0,
- 12, 0xFF3E, 0x005E, 0,
- 12, 0xFF3F, 0x005F, 0,
- 12, 0xFF40, 0x0060, 0,
- 12, 0xFF41, 0x0061, 0,
- 12, 0xFF42, 0x0062, 0,
- 12, 0xFF43, 0x0063, 0,
- 12, 0xFF44, 0x0064, 0,
- 12, 0xFF45, 0x0065, 0,
- 12, 0xFF46, 0x0066, 0,
- 12, 0xFF47, 0x0067, 0,
- 12, 0xFF48, 0x0068, 0,
- 12, 0xFF49, 0x0069, 0,
- 12, 0xFF4A, 0x006A, 0,
- 12, 0xFF4B, 0x006B, 0,
- 12, 0xFF4C, 0x006C, 0,
- 12, 0xFF4D, 0x006D, 0,
- 12, 0xFF4E, 0x006E, 0,
- 12, 0xFF4F, 0x006F, 0,
- 12, 0xFF50, 0x0070, 0,
- 12, 0xFF51, 0x0071, 0,
- 12, 0xFF52, 0x0072, 0,
- 12, 0xFF53, 0x0073, 0,
- 12, 0xFF54, 0x0074, 0,
- 12, 0xFF55, 0x0075, 0,
- 12, 0xFF56, 0x0076, 0,
- 12, 0xFF57, 0x0077, 0,
- 12, 0xFF58, 0x0078, 0,
- 12, 0xFF59, 0x0079, 0,
- 12, 0xFF5A, 0x007A, 0,
- 12, 0xFF5B, 0x007B, 0,
- 12, 0xFF5C, 0x007C, 0,
- 12, 0xFF5D, 0x007D, 0,
- 12, 0xFF5E, 0x007E, 0,
- 13, 0xFF61, 0x3002, 0,
- 13, 0xFF62, 0x300C, 0,
- 13, 0xFF63, 0x300D, 0,
- 13, 0xFF64, 0x3001, 0,
- 13, 0xFF65, 0x30FB, 0,
- 13, 0xFF66, 0x30F2, 0,
- 13, 0xFF67, 0x30A1, 0,
- 13, 0xFF68, 0x30A3, 0,
- 13, 0xFF69, 0x30A5, 0,
- 13, 0xFF6A, 0x30A7, 0,
- 13, 0xFF6B, 0x30A9, 0,
- 13, 0xFF6C, 0x30E3, 0,
- 13, 0xFF6D, 0x30E5, 0,
- 13, 0xFF6E, 0x30E7, 0,
- 13, 0xFF6F, 0x30C3, 0,
- 13, 0xFF70, 0x30FC, 0,
- 13, 0xFF71, 0x30A2, 0,
- 13, 0xFF72, 0x30A4, 0,
- 13, 0xFF73, 0x30A6, 0,
- 13, 0xFF74, 0x30A8, 0,
- 13, 0xFF75, 0x30AA, 0,
- 13, 0xFF76, 0x30AB, 0,
- 13, 0xFF77, 0x30AD, 0,
- 13, 0xFF78, 0x30AF, 0,
- 13, 0xFF79, 0x30B1, 0,
- 13, 0xFF7A, 0x30B3, 0,
- 13, 0xFF7B, 0x30B5, 0,
- 13, 0xFF7C, 0x30B7, 0,
- 13, 0xFF7D, 0x30B9, 0,
- 13, 0xFF7E, 0x30BB, 0,
- 13, 0xFF7F, 0x30BD, 0,
- 13, 0xFF80, 0x30BF, 0,
- 13, 0xFF81, 0x30C1, 0,
- 13, 0xFF82, 0x30C4, 0,
- 13, 0xFF83, 0x30C6, 0,
- 13, 0xFF84, 0x30C8, 0,
- 13, 0xFF85, 0x30CA, 0,
- 13, 0xFF86, 0x30CB, 0,
- 13, 0xFF87, 0x30CC, 0,
- 13, 0xFF88, 0x30CD, 0,
- 13, 0xFF89, 0x30CE, 0,
- 13, 0xFF8A, 0x30CF, 0,
- 13, 0xFF8B, 0x30D2, 0,
- 13, 0xFF8C, 0x30D5, 0,
- 13, 0xFF8D, 0x30D8, 0,
- 13, 0xFF8E, 0x30DB, 0,
- 13, 0xFF8F, 0x30DE, 0,
- 13, 0xFF90, 0x30DF, 0,
- 13, 0xFF91, 0x30E0, 0,
- 13, 0xFF92, 0x30E1, 0,
- 13, 0xFF93, 0x30E2, 0,
- 13, 0xFF94, 0x30E4, 0,
- 13, 0xFF95, 0x30E6, 0,
- 13, 0xFF96, 0x30E8, 0,
- 13, 0xFF97, 0x30E9, 0,
- 13, 0xFF98, 0x30EA, 0,
- 13, 0xFF99, 0x30EB, 0,
- 13, 0xFF9A, 0x30EC, 0,
- 13, 0xFF9B, 0x30ED, 0,
- 13, 0xFF9C, 0x30EF, 0,
- 13, 0xFF9D, 0x30F3, 0,
- 13, 0xFF9E, 0x3099, 0,
- 13, 0xFF9F, 0x309A, 0,
- 13, 0xFFA0, 0x3164, 0,
- 13, 0xFFA1, 0x3131, 0,
- 13, 0xFFA2, 0x3132, 0,
- 13, 0xFFA3, 0x3133, 0,
- 13, 0xFFA4, 0x3134, 0,
- 13, 0xFFA5, 0x3135, 0,
- 13, 0xFFA6, 0x3136, 0,
- 13, 0xFFA7, 0x3137, 0,
- 13, 0xFFA8, 0x3138, 0,
- 13, 0xFFA9, 0x3139, 0,
- 13, 0xFFAA, 0x313A, 0,
- 13, 0xFFAB, 0x313B, 0,
- 13, 0xFFAC, 0x313C, 0,
- 13, 0xFFAD, 0x313D, 0,
- 13, 0xFFAE, 0x313E, 0,
- 13, 0xFFAF, 0x313F, 0,
- 13, 0xFFB0, 0x3140, 0,
- 13, 0xFFB1, 0x3141, 0,
- 13, 0xFFB2, 0x3142, 0,
- 13, 0xFFB3, 0x3143, 0,
- 13, 0xFFB4, 0x3144, 0,
- 13, 0xFFB5, 0x3145, 0,
- 13, 0xFFB6, 0x3146, 0,
- 13, 0xFFB7, 0x3147, 0,
- 13, 0xFFB8, 0x3148, 0,
- 13, 0xFFB9, 0x3149, 0,
- 13, 0xFFBA, 0x314A, 0,
- 13, 0xFFBB, 0x314B, 0,
- 13, 0xFFBC, 0x314C, 0,
- 13, 0xFFBD, 0x314D, 0,
- 13, 0xFFBE, 0x314E, 0,
- 13, 0xFFC2, 0x314F, 0,
- 13, 0xFFC3, 0x3150, 0,
- 13, 0xFFC4, 0x3151, 0,
- 13, 0xFFC5, 0x3152, 0,
- 13, 0xFFC6, 0x3153, 0,
- 13, 0xFFC7, 0x3154, 0,
- 13, 0xFFCA, 0x3155, 0,
- 13, 0xFFCB, 0x3156, 0,
- 13, 0xFFCC, 0x3157, 0,
- 13, 0xFFCD, 0x3158, 0,
- 13, 0xFFCE, 0x3159, 0,
- 13, 0xFFCF, 0x315A, 0,
- 13, 0xFFD2, 0x315B, 0,
- 13, 0xFFD3, 0x315C, 0,
- 13, 0xFFD4, 0x315D, 0,
- 13, 0xFFD5, 0x315E, 0,
- 13, 0xFFD6, 0x315F, 0,
- 13, 0xFFD7, 0x3160, 0,
- 13, 0xFFDA, 0x3161, 0,
- 13, 0xFFDB, 0x3162, 0,
- 13, 0xFFDC, 0x3163, 0,
- 12, 0xFFE0, 0x00A2, 0,
- 12, 0xFFE1, 0x00A3, 0,
- 12, 0xFFE2, 0x00AC, 0,
- 12, 0xFFE3, 0x00AF, 0,
- 12, 0xFFE4, 0x00A6, 0,
- 12, 0xFFE5, 0x00A5, 0,
- 12, 0xFFE6, 0x20A9, 0,
- 13, 0xFFE8, 0x2502, 0,
- 13, 0xFFE9, 0x2190, 0,
- 13, 0xFFEA, 0x2191, 0,
- 13, 0xFFEB, 0x2192, 0,
- 13, 0xFFEC, 0x2193, 0,
- 13, 0xFFED, 0x25A0, 0,
- 13, 0xFFEE, 0x25CB, 0,
-
-};
-
-static const Q_UINT16 di_00[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 10, 0, 0, 0, 0, 14,
- 0, 0, 19, 23, 27, 32, 0, 0,
- 36, 41, 45, 0, 49, 55, 61, 0,
- 67, 72, 77, 82, 87, 92, 0, 97,
- 102, 107, 112, 117, 122, 127, 132, 137,
- 0, 142, 147, 152, 157, 162, 167, 0,
- 0, 172, 177, 182, 187, 192, 0, 0,
- 197, 202, 207, 212, 217, 222, 0, 227,
- 232, 237, 242, 247, 252, 257, 262, 267,
- 0, 272, 277, 282, 287, 292, 297, 0,
- 0, 302, 307, 312, 317, 322, 0, 327,
-};
-
-static const Q_UINT16 di_01[] = {
- 332, 337, 342, 347, 352, 357, 362, 367,
- 372, 377, 382, 387, 392, 397, 402, 407,
- 0, 0, 412, 417, 422, 427, 432, 437,
- 442, 447, 452, 457, 462, 467, 472, 477,
- 482, 487, 492, 497, 502, 507, 0, 0,
- 512, 517, 522, 527, 532, 537, 542, 547,
- 552, 0, 557, 562, 567, 572, 577, 582,
- 0, 587, 592, 597, 602, 607, 612, 617,
- 622, 0, 0, 627, 632, 637, 642, 647,
- 652, 657, 0, 0, 662, 667, 672, 677,
- 682, 687, 0, 0, 692, 697, 702, 707,
- 712, 717, 722, 727, 732, 737, 742, 747,
- 752, 757, 762, 767, 772, 777, 0, 0,
- 782, 787, 792, 797, 802, 807, 812, 817,
- 822, 827, 832, 837, 842, 847, 852, 857,
- 862, 867, 872, 877, 882, 887, 892, 897,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 901, 906, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 911,
- 916, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 921, 926, 931, 936,
- 941, 946, 951, 956, 961, 966, 971, 976,
- 981, 986, 991, 996, 1001, 1006, 1011, 1016,
- 1021, 1026, 1031, 1036, 1041, 0, 1046, 1051,
- 1056, 1061, 1066, 1071, 0, 0, 1076, 1081,
- 1086, 1091, 1096, 1101, 1106, 1111, 1116, 1121,
- 1126, 1131, 1136, 1141, 1146, 1151, 0, 0,
- 1156, 1161, 1166, 1171, 1176, 1181, 1186, 1191,
-};
-
-static const Q_UINT16 di_02[] = {
- 1196, 1201, 1206, 1211, 1216, 1221, 1226, 1231,
- 1236, 1241, 1246, 1251, 1256, 1261, 1266, 1271,
- 1276, 1281, 1286, 1291, 1296, 1301, 1306, 1311,
- 1316, 1321, 1326, 1331, 0, 0, 1336, 1341,
- 0, 0, 0, 0, 0, 0, 1346, 1351,
- 1356, 1361, 1366, 1371, 1376, 1381, 1386, 1391,
- 1396, 1401, 1406, 1411, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1416, 1420, 1424, 1428, 1432, 1436, 1440, 1444,
- 1448, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1452, 1457, 1462, 1467, 1472, 1477, 0, 0,
- 1482, 1486, 1490, 1494, 1498, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_03[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1502, 1506, 0, 1510, 1514, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1519, 0, 0, 0,
- 0, 0, 1523, 0, 0, 0, 1528, 0,
- 0, 0, 0, 0, 1532, 1537, 1542, 1547,
- 1551, 1556, 1561, 0, 1566, 0, 1571, 1576,
- 1581, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1586, 1591, 1596, 1601, 1606, 1611,
- 1616, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1621, 1626, 1631, 1636, 1641, 0,
- 1646, 1650, 1654, 1658, 1663, 1668, 1672, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1676, 1680, 1684, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_04[] = {
- 1688, 1693, 0, 1698, 0, 0, 0, 1703,
- 0, 0, 0, 0, 1708, 1713, 1718, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1723, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1728, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1733, 1738, 0, 1743, 0, 0, 0, 1748,
- 0, 0, 0, 0, 1753, 1758, 1763, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1768, 1773,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1778, 1783, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1788, 1793, 1798, 1803, 0, 0, 1808, 1813,
- 0, 0, 1818, 1823, 1828, 1833, 1838, 1843,
- 0, 0, 1848, 1853, 1858, 1863, 1868, 1873,
- 0, 0, 1878, 1883, 1888, 1893, 1898, 1903,
- 1908, 1913, 1918, 1923, 1928, 1933, 0, 0,
- 1938, 1943, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_05[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1948,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_06[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1953, 1958, 1963, 1968, 1973, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1978, 1983, 1988,
- 1993, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1998, 0, 2003, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2008, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_07[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_09[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2013, 0, 0, 0, 0, 0, 0,
- 0, 2018, 0, 0, 2023, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2028, 2033, 2038, 2043, 2048, 2053, 2058, 2063,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2068, 2073, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2078, 2083, 0, 2088,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_0A[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2093, 0, 0, 2098, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2103, 2108, 2113, 0, 0, 2118, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_0B[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2123, 0, 0, 2128, 2133, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2138, 2143, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2148, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2153, 2158, 2163, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_0C[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2168, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2173, 0, 0, 0, 0, 0, 0, 2178,
- 2183, 0, 2188, 2193, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_0D[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2198, 2203, 2208, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2213, 0, 2218, 2223, 2228, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_0E[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2233, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2238, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2243, 2248, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_0F[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2253, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2257, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2262, 0, 0,
- 0, 0, 2267, 0, 0, 0, 0, 2272,
- 0, 0, 0, 0, 2277, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2282, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2287, 0, 2292, 2297, 2302,
- 2307, 2312, 0, 0, 0, 0, 0, 0,
- 0, 2317, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2322, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2327, 0, 0,
- 0, 0, 2332, 0, 0, 0, 0, 2337,
- 0, 0, 0, 0, 2342, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2347, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_10[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2352, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_1E[] = {
- 2357, 2362, 2367, 2372, 2377, 2382, 2387, 2392,
- 2397, 2402, 2407, 2412, 2417, 2422, 2427, 2432,
- 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472,
- 2477, 2482, 2487, 2492, 2497, 2502, 2507, 2512,
- 2517, 2522, 2527, 2532, 2537, 2542, 2547, 2552,
- 2557, 2562, 2567, 2572, 2577, 2582, 2587, 2592,
- 2597, 2602, 2607, 2612, 2617, 2622, 2627, 2632,
- 2637, 2642, 2647, 2652, 2657, 2662, 2667, 2672,
- 2677, 2682, 2687, 2692, 2697, 2702, 2707, 2712,
- 2717, 2722, 2727, 2732, 2737, 2742, 2747, 2752,
- 2757, 2762, 2767, 2772, 2777, 2782, 2787, 2792,
- 2797, 2802, 2807, 2812, 2817, 2822, 2827, 2832,
- 2837, 2842, 2847, 2852, 2857, 2862, 2867, 2872,
- 2877, 2882, 2887, 2892, 2897, 2902, 2907, 2912,
- 2917, 2922, 2927, 2932, 2937, 2942, 2947, 2952,
- 2957, 2962, 2967, 2972, 2977, 2982, 2987, 2992,
- 2997, 3002, 3007, 3012, 3017, 3022, 3027, 3032,
- 3037, 3042, 3047, 3052, 3057, 3062, 3067, 3072,
- 3077, 3082, 3087, 3092, 3097, 3102, 3107, 3112,
- 3117, 3122, 3127, 3132, 0, 0, 0, 0,
- 3137, 3142, 3147, 3152, 3157, 3162, 3167, 3172,
- 3177, 3182, 3187, 3192, 3197, 3202, 3207, 3212,
- 3217, 3222, 3227, 3232, 3237, 3242, 3247, 3252,
- 3257, 3262, 3267, 3272, 3277, 3282, 3287, 3292,
- 3297, 3302, 3307, 3312, 3317, 3322, 3327, 3332,
- 3337, 3342, 3347, 3352, 3357, 3362, 3367, 3372,
- 3377, 3382, 3387, 3392, 3397, 3402, 3407, 3412,
- 3417, 3422, 3427, 3432, 3437, 3442, 3447, 3452,
- 3457, 3462, 3467, 3472, 3477, 3482, 3487, 3492,
- 3497, 3502, 3507, 3512, 3517, 3522, 3527, 3532,
- 3537, 3542, 3547, 3552, 3557, 3562, 3567, 3572,
- 3577, 3582, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_1F[] = {
- 3587, 3592, 3597, 3602, 3607, 3612, 3617, 3622,
- 3627, 3632, 3637, 3642, 3647, 3652, 3657, 3662,
- 3667, 3672, 3677, 3682, 3687, 3692, 0, 0,
- 3697, 3702, 3707, 3712, 3717, 3722, 0, 0,
- 3727, 3732, 3737, 3742, 3747, 3752, 3757, 3762,
- 3767, 3772, 3777, 3782, 3787, 3792, 3797, 3802,
- 3807, 3812, 3817, 3822, 3827, 3832, 3837, 3842,
- 3847, 3852, 3857, 3862, 3867, 3872, 3877, 3882,
- 3887, 3892, 3897, 3902, 3907, 3912, 0, 0,
- 3917, 3922, 3927, 3932, 3937, 3942, 0, 0,
- 3947, 3952, 3957, 3962, 3967, 3972, 3977, 3982,
- 0, 3987, 0, 3992, 0, 3997, 0, 4002,
- 4007, 4012, 4017, 4022, 4027, 4032, 4037, 4042,
- 4047, 4052, 4057, 4062, 4067, 4072, 4077, 4082,
- 4087, 4092, 4096, 4101, 4105, 4110, 4114, 4119,
- 4123, 4128, 4132, 4137, 4141, 4146, 0, 0,
- 4150, 4155, 4160, 4165, 4170, 4175, 4180, 4185,
- 4190, 4195, 4200, 4205, 4210, 4215, 4220, 4225,
- 4230, 4235, 4240, 4245, 4250, 4255, 4260, 4265,
- 4270, 4275, 4280, 4285, 4290, 4295, 4300, 4305,
- 4310, 4315, 4320, 4325, 4330, 4335, 4340, 4345,
- 4350, 4355, 4360, 4365, 4370, 4375, 4380, 4385,
- 4390, 4395, 4400, 4405, 4410, 0, 4415, 4420,
- 4425, 4430, 4435, 4440, 4444, 4449, 4454, 4458,
- 4463, 4468, 4473, 4478, 4483, 0, 4488, 4493,
- 4498, 4503, 4507, 4512, 4516, 4521, 4526, 4531,
- 4536, 4541, 4546, 4551, 0, 0, 4555, 4560,
- 4565, 4570, 4575, 4580, 0, 4584, 4589, 4594,
- 4599, 4604, 4609, 4614, 4618, 4623, 4628, 4633,
- 4638, 4643, 4648, 4653, 4657, 4662, 4667, 4671,
- 0, 0, 4675, 4680, 4685, 0, 4690, 4695,
- 4700, 4705, 4709, 4714, 4718, 4723, 4727, 0,
-};
-
-static const Q_UINT16 di_20[] = {
- 4732, 4736, 4740, 4744, 4748, 4752, 4756, 4760,
- 4764, 4768, 4772, 0, 0, 0, 0, 0,
- 0, 4776, 0, 0, 0, 0, 0, 4780,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4785, 4789, 4794, 0,
- 0, 0, 0, 0, 0, 0, 0, 4800,
- 0, 0, 0, 4804, 4809, 0, 4815, 4820,
- 0, 0, 0, 0, 4826, 0, 4831, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4836, 4841, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4846, 0, 0, 0, 4850, 4854, 4858, 4862,
- 4866, 4870, 4874, 4878, 4882, 4886, 4890, 4894,
- 4898, 4902, 4906, 4910, 4914, 4918, 4922, 4926,
- 4930, 4934, 4938, 4942, 4946, 4950, 4954, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4958, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_21[] = {
- 4963, 4969, 4975, 4979, 0, 4984, 4990, 4996,
- 0, 5000, 5005, 5009, 5013, 5017, 5021, 5025,
- 5029, 5033, 5037, 5041, 0, 5045, 5049, 0,
- 0, 5054, 5058, 5062, 5066, 5070, 0, 0,
- 5074, 5079, 5085, 0, 5090, 0, 5094, 0,
- 5098, 0, 5102, 5106, 5110, 5114, 0, 5118,
- 5122, 5126, 0, 5130, 5134, 5138, 5142, 5146,
- 5150, 5154, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 5158, 5164, 5170, 5176, 5182,
- 5188, 5194, 5200, 5206, 5212, 5218, 5224, 5230,
- 5235, 5239, 5244, 5250, 5255, 5259, 5264, 5270,
- 5277, 5282, 5286, 5291, 5297, 5301, 5305, 5309,
- 5313, 5317, 5322, 5328, 5333, 5337, 5342, 5348,
- 5355, 5360, 5364, 5369, 5375, 5379, 5383, 5387,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5391, 5396, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5401, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5406, 5411, 5416,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_22[] = {
- 0, 0, 0, 0, 5421, 0, 0, 0,
- 0, 5426, 0, 0, 5431, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5436, 0, 5441, 0,
- 0, 0, 0, 0, 5446, 5451, 0, 5457,
- 5462, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5468, 0, 0, 5473, 0, 0, 5478,
- 0, 5483, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 5488, 0, 5493, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5498, 5503, 5508,
- 5513, 5518, 0, 0, 5523, 5528, 0, 0,
- 5533, 5538, 0, 0, 0, 0, 0, 0,
- 5543, 5548, 0, 0, 5553, 5558, 0, 0,
- 5563, 5568, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5573, 5578, 5583, 5588,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 5593, 5598, 5603, 5608, 0, 0, 0, 0,
- 0, 0, 5613, 5618, 5623, 5628, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_23[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5633, 5637, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_24[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 5641, 5645, 5649, 5653, 5657, 5661, 5665, 5669,
- 5673, 5677, 5682, 5687, 5692, 5697, 5702, 5707,
- 5712, 5717, 5722, 5727, 5732, 5738, 5744, 5750,
- 5756, 5762, 5768, 5774, 5780, 5786, 5793, 5800,
- 5807, 5814, 5821, 5828, 5835, 5842, 5849, 5856,
- 5863, 5868, 5873, 5878, 5883, 5888, 5893, 5898,
- 5903, 5908, 5914, 5920, 5926, 5932, 5938, 5944,
- 5950, 5956, 5962, 5968, 5974, 5980, 5986, 5992,
- 5998, 6004, 6010, 6016, 6022, 6028, 6034, 6040,
- 6046, 6052, 6058, 6064, 6070, 6076, 6082, 6088,
- 6094, 6100, 6106, 6112, 6118, 6124, 6130, 6134,
- 6138, 6142, 6146, 6150, 6154, 6158, 6162, 6166,
- 6170, 6174, 6178, 6182, 6186, 6190, 6194, 6198,
- 6202, 6206, 6210, 6214, 6218, 6222, 6226, 6230,
- 6234, 6238, 6242, 6246, 6250, 6254, 6258, 6262,
- 6266, 6270, 6274, 6278, 6282, 6286, 6290, 6294,
- 6298, 6302, 6306, 6310, 6314, 6318, 6322, 6326,
- 6330, 6334, 6338, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_2E[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 6342,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6346, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_2F[] = {
- 6350, 6354, 6358, 6362, 6366, 6370, 6374, 6378,
- 6382, 6386, 6390, 6394, 6398, 6402, 6406, 6410,
- 6414, 6418, 6422, 6426, 6430, 6434, 6438, 6442,
- 6446, 6450, 6454, 6458, 6462, 6466, 6470, 6474,
- 6478, 6482, 6486, 6490, 6494, 6498, 6502, 6506,
- 6510, 6514, 6518, 6522, 6526, 6530, 6534, 6538,
- 6542, 6546, 6550, 6554, 6558, 6562, 6566, 6570,
- 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602,
- 6606, 6610, 6614, 6618, 6622, 6626, 6630, 6634,
- 6638, 6642, 6646, 6650, 6654, 6658, 6662, 6666,
- 6670, 6674, 6678, 6682, 6686, 6690, 6694, 6698,
- 6702, 6706, 6710, 6714, 6718, 6722, 6726, 6730,
- 6734, 6738, 6742, 6746, 6750, 6754, 6758, 6762,
- 6766, 6770, 6774, 6778, 6782, 6786, 6790, 6794,
- 6798, 6802, 6806, 6810, 6814, 6818, 6822, 6826,
- 6830, 6834, 6838, 6842, 6846, 6850, 6854, 6858,
- 6862, 6866, 6870, 6874, 6878, 6882, 6886, 6890,
- 6894, 6898, 6902, 6906, 6910, 6914, 6918, 6922,
- 6926, 6930, 6934, 6938, 6942, 6946, 6950, 6954,
- 6958, 6962, 6966, 6970, 6974, 6978, 6982, 6986,
- 6990, 6994, 6998, 7002, 7006, 7010, 7014, 7018,
- 7022, 7026, 7030, 7034, 7038, 7042, 7046, 7050,
- 7054, 7058, 7062, 7066, 7070, 7074, 7078, 7082,
- 7086, 7090, 7094, 7098, 7102, 7106, 7110, 7114,
- 7118, 7122, 7126, 7130, 7134, 7138, 7142, 7146,
- 7150, 7154, 7158, 7162, 7166, 7170, 7174, 7178,
- 7182, 7186, 7190, 7194, 7198, 7202, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_30[] = {
- 7206, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7210, 0,
- 7214, 7218, 7222, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7226, 0, 7231, 0,
- 7236, 0, 7241, 0, 7246, 0, 7251, 0,
- 7256, 0, 7261, 0, 7266, 0, 7271, 0,
- 7276, 0, 7281, 0, 0, 7286, 0, 7291,
- 0, 7296, 0, 0, 0, 0, 0, 0,
- 7301, 7306, 0, 7311, 7316, 0, 7321, 7326,
- 0, 7331, 7336, 0, 7341, 7346, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7351, 0, 0, 0,
- 0, 0, 0, 7356, 7361, 0, 7366, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7371, 0, 7376, 0,
- 7381, 0, 7386, 0, 7391, 0, 7396, 0,
- 7401, 0, 7406, 0, 7411, 0, 7416, 0,
- 7421, 0, 7426, 0, 0, 7431, 0, 7436,
- 0, 7441, 0, 0, 0, 0, 0, 0,
- 7446, 7451, 0, 7456, 7461, 0, 7466, 7471,
- 0, 7476, 7481, 0, 7486, 7491, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7496, 0, 0, 7501,
- 7506, 7511, 7516, 0, 0, 0, 7521, 0,
-};
-
-static const Q_UINT16 di_31[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 7526, 7530, 7534, 7538, 7542, 7546, 7550,
- 7554, 7558, 7562, 7566, 7570, 7574, 7578, 7582,
- 7586, 7590, 7594, 7598, 7602, 7606, 7610, 7614,
- 7618, 7622, 7626, 7630, 7634, 7638, 7642, 7646,
- 7650, 7654, 7658, 7662, 7666, 7670, 7674, 7678,
- 7682, 7686, 7690, 7694, 7698, 7702, 7706, 7710,
- 7714, 7718, 7722, 7726, 7730, 7734, 7738, 7742,
- 7746, 7750, 7754, 7758, 7762, 7766, 7770, 7774,
- 7778, 7782, 7786, 7790, 7794, 7798, 7802, 7806,
- 7810, 7814, 7818, 7822, 7826, 7830, 7834, 7838,
- 7842, 7846, 7850, 7854, 7858, 7862, 7866, 7870,
- 7874, 7878, 7882, 7886, 7890, 7894, 7898, 0,
- 0, 0, 7902, 7906, 7910, 7914, 7918, 7922,
- 7926, 7930, 7934, 7938, 7942, 7946, 7950, 7954,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_32[] = {
- 7958, 7964, 7970, 7976, 7982, 7988, 7994, 8000,
- 8006, 8012, 8018, 8024, 8030, 8036, 8042, 8049,
- 8056, 8063, 8070, 8077, 8084, 8091, 8098, 8105,
- 8112, 8119, 8126, 8133, 8140, 0, 0, 0,
- 8147, 8153, 8159, 8165, 8171, 8177, 8183, 8189,
- 8195, 8201, 8207, 8213, 8219, 8225, 8231, 8237,
- 8243, 8249, 8255, 8261, 8267, 8273, 8279, 8285,
- 8291, 8297, 8303, 8309, 8315, 8321, 8327, 8333,
- 8339, 8345, 8351, 8357, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 8363, 8367, 8371, 8375, 8379, 8383, 8387, 8391,
- 8395, 8399, 8403, 8407, 8411, 8415, 8419, 8424,
- 8429, 8434, 8439, 8444, 8449, 8454, 8459, 8464,
- 8469, 8474, 8479, 8484, 0, 0, 0, 0,
- 8489, 8493, 8497, 8501, 8505, 8509, 8513, 8517,
- 8521, 8525, 8529, 8533, 8537, 8541, 8545, 8549,
- 8553, 8557, 8561, 8565, 8569, 8573, 8577, 8581,
- 8585, 8589, 8593, 8597, 8601, 8605, 8609, 8613,
- 8617, 8621, 8625, 8629, 8633, 8637, 8641, 8645,
- 8649, 8653, 8657, 8661, 8665, 8669, 8673, 8677,
- 8681, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 8685, 8690, 8695, 8700, 8705, 8710, 8715, 8720,
- 8725, 8730, 8736, 8742, 0, 0, 0, 0,
- 8748, 8752, 8756, 8760, 8764, 8768, 8772, 8776,
- 8780, 8784, 8788, 8792, 8796, 8800, 8804, 8808,
- 8812, 8816, 8820, 8824, 8828, 8832, 8836, 8840,
- 8844, 8848, 8852, 8856, 8860, 8864, 8868, 8872,
- 8876, 8880, 8884, 8888, 8892, 8896, 8900, 8904,
- 8908, 8912, 8916, 8920, 8924, 8928, 8932, 0,
-};
-
-static const Q_UINT16 di_33[] = {
- 8936, 8943, 8950, 8957, 8963, 8970, 8976, 8982,
- 8990, 8997, 9003, 9009, 9015, 9022, 9029, 9035,
- 9041, 9046, 9052, 9059, 9066, 9071, 9079, 9088,
- 9096, 9102, 9110, 9118, 9125, 9131, 9137, 9143,
- 9150, 9158, 9165, 9171, 9177, 9183, 9188, 9193,
- 9198, 9203, 9209, 9215, 9223, 9229, 9236, 9244,
- 9250, 9255, 9260, 9268, 9275, 9283, 9289, 9297,
- 9302, 9308, 9314, 9320, 9326, 9332, 9339, 9345,
- 9350, 9356, 9362, 9368, 9375, 9381, 9387, 9393,
- 9401, 9408, 9413, 9421, 9426, 9433, 9440, 9446,
- 9452, 9458, 9465, 9470, 9476, 9483, 9488, 9496,
- 9502, 9507, 9512, 9517, 9522, 9527, 9532, 9537,
- 9542, 9547, 9552, 9558, 9564, 9570, 9576, 9582,
- 9588, 9594, 9600, 9606, 9612, 9618, 9624, 9630,
- 9636, 9642, 9648, 9653, 9658, 9664, 9669, 0,
- 0, 0, 0, 9674, 9679, 9684, 9689, 9694,
- 9701, 9706, 9711, 9716, 9721, 9726, 9731, 9736,
- 9741, 9747, 9754, 9759, 9764, 9769, 9774, 9779,
- 9784, 9789, 9795, 9801, 9807, 9813, 9818, 9823,
- 9828, 9833, 9838, 9843, 9848, 9853, 9858, 9863,
- 9869, 9875, 9880, 9886, 9892, 9898, 9903, 9909,
- 9915, 9922, 9927, 9933, 9939, 9945, 9951, 9959,
- 9968, 9973, 9978, 9983, 9988, 9993, 9998, 10003,
- 10008, 10013, 10018, 10023, 10028, 10033, 10038, 10043,
- 10048, 10053, 10058, 10065, 10070, 10075, 10080, 10087,
- 10093, 10098, 10103, 10108, 10113, 10118, 10123, 10128,
- 10133, 10138, 10143, 10149, 10154, 10159, 10165, 10171,
- 10176, 10183, 10189, 10194, 10199, 10204, 0, 0,
- 10209, 10214, 10219, 10224, 10229, 10234, 10239, 10244,
- 10249, 10254, 10260, 10266, 10272, 10278, 10284, 10290,
- 10296, 10302, 10308, 10314, 10320, 10326, 10332, 10338,
- 10344, 10350, 10356, 10362, 10368, 10374, 10380, 0,
-};
-
-static const Q_UINT16 di_F9[] = {
- 10386, 10390, 10394, 10398, 10402, 10406, 10410, 10414,
- 10418, 10422, 10426, 10430, 10434, 10438, 10442, 10446,
- 10450, 10454, 10458, 10462, 10466, 10470, 10474, 10478,
- 10482, 10486, 10490, 10494, 10498, 10502, 10506, 10510,
- 10514, 10518, 10522, 10526, 10530, 10534, 10538, 10542,
- 10546, 10550, 10554, 10558, 10562, 10566, 10570, 10574,
- 10578, 10582, 10586, 10590, 10594, 10598, 10602, 10606,
- 10610, 10614, 10618, 10622, 10626, 10630, 10634, 10638,
- 10642, 10646, 10650, 10654, 10658, 10662, 10666, 10670,
- 10674, 10678, 10682, 10686, 10690, 10694, 10698, 10702,
- 10706, 10710, 10714, 10718, 10722, 10726, 10730, 10734,
- 10738, 10742, 10746, 10750, 10754, 10758, 10762, 10766,
- 10770, 10774, 10778, 10782, 10786, 10790, 10794, 10798,
- 10802, 10806, 10810, 10814, 10818, 10822, 10826, 10830,
- 10834, 10838, 10842, 10846, 10850, 10854, 10858, 10862,
- 10866, 10870, 10874, 10878, 10882, 10886, 10890, 10894,
- 10898, 10902, 10906, 10910, 10914, 10918, 10922, 10926,
- 10930, 10934, 10938, 10942, 10946, 10950, 10954, 10958,
- 10962, 10966, 10970, 10974, 10978, 10982, 10986, 10990,
- 10994, 10998, 11002, 11006, 11010, 11014, 11018, 11022,
- 11026, 11030, 11034, 11038, 11042, 11046, 11050, 11054,
- 11058, 11062, 11066, 11070, 11074, 11078, 11082, 11086,
- 11090, 11094, 11098, 11102, 11106, 11110, 11114, 11118,
- 11122, 11126, 11130, 11134, 11138, 11142, 11146, 11150,
- 11154, 11158, 11162, 11166, 11170, 11174, 11178, 11182,
- 11186, 11190, 11194, 11198, 11202, 11206, 11210, 11214,
- 11218, 11222, 11226, 11230, 11234, 11238, 11242, 11246,
- 11250, 11254, 11258, 11262, 11266, 11270, 11274, 11278,
- 11282, 11286, 11290, 11294, 11298, 11302, 11306, 11310,
- 11314, 11318, 11322, 11326, 11330, 11334, 11338, 11342,
- 11346, 11350, 11354, 11358, 11362, 11366, 11370, 11374,
- 11378, 11382, 11386, 11390, 11394, 11398, 11402, 11406,
-};
-
-static const Q_UINT16 di_FA[] = {
- 11410, 11414, 11418, 11422, 11426, 11430, 11434, 11438,
- 11442, 11446, 11450, 11454, 11458, 11462, 0, 0,
- 11466, 0, 11470, 0, 0, 11474, 11478, 11482,
- 11486, 11490, 11494, 11498, 11502, 11506, 11510, 0,
- 11514, 0, 11518, 0, 0, 11522, 11526, 0,
- 0, 0, 11530, 11534, 11538, 11542, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_FB[] = {
- 11546, 11551, 11556, 11561, 11567, 11573, 11578, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 11583, 11588, 11593, 11598, 11603,
- 0, 0, 0, 0, 0, 11608, 0, 11613,
- 11618, 11622, 11626, 11630, 11634, 11638, 11642, 11646,
- 11650, 11654, 11658, 11663, 11668, 11673, 11678, 11683,
- 11688, 11693, 11698, 11703, 11708, 11713, 11718, 0,
- 11723, 11728, 11733, 11738, 11743, 0, 11748, 0,
- 11753, 11758, 0, 11763, 11768, 0, 11773, 11778,
- 11783, 11788, 11793, 11798, 11803, 11808, 11813, 11818,
- 11823, 11827, 11831, 11835, 11839, 11843, 11847, 11851,
- 11855, 11859, 11863, 11867, 11871, 11875, 11879, 11883,
- 11887, 11891, 11895, 11899, 11903, 11907, 11911, 11915,
- 11919, 11923, 11927, 11931, 11935, 11939, 11943, 11947,
- 11951, 11955, 11959, 11963, 11967, 11971, 11975, 11979,
- 11983, 11987, 11991, 11995, 11999, 12003, 12007, 12011,
- 12015, 12019, 12023, 12027, 12031, 12035, 12039, 12043,
- 12047, 12051, 12055, 12059, 12063, 12067, 12071, 12075,
- 12079, 12083, 12087, 12091, 12095, 12099, 12103, 12107,
- 12111, 12115, 12119, 12123, 12127, 12131, 12135, 12139,
- 12143, 12147, 12151, 12155, 12159, 12163, 12167, 12171,
- 12175, 12179, 12183, 12187, 12191, 12195, 12199, 12203,
- 12207, 12211, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 12215, 12219, 12223, 12227, 12231,
- 12235, 12239, 12243, 12247, 12251, 12255, 12259, 12263,
- 12267, 12271, 12275, 12279, 12283, 12287, 12291, 12295,
- 12299, 12303, 12307, 12312, 12317, 12322, 12327, 12332,
- 12337, 12342, 12347, 12352, 12357, 12362, 12367, 12372,
- 12377, 12382, 12387, 12392, 12397, 12401, 12405, 12409,
-};
-
-static const Q_UINT16 di_FC[] = {
- 12413, 12418, 12423, 12428, 12433, 12438, 12443, 12448,
- 12453, 12458, 12463, 12468, 12473, 12478, 12483, 12488,
- 12493, 12498, 12503, 12508, 12513, 12518, 12523, 12528,
- 12533, 12538, 12543, 12548, 12553, 12558, 12563, 12568,
- 12573, 12578, 12583, 12588, 12593, 12598, 12603, 12608,
- 12613, 12618, 12623, 12628, 12633, 12638, 12643, 12648,
- 12653, 12658, 12663, 12668, 12673, 12678, 12683, 12688,
- 12693, 12698, 12703, 12708, 12713, 12718, 12723, 12728,
- 12733, 12738, 12743, 12748, 12753, 12758, 12763, 12768,
- 12773, 12778, 12783, 12788, 12793, 12798, 12803, 12808,
- 12813, 12818, 12823, 12828, 12833, 12838, 12843, 12848,
- 12853, 12858, 12863, 12868, 12873, 12878, 12883, 12889,
- 12895, 12901, 12907, 12913, 12919, 12924, 12929, 12934,
- 12939, 12944, 12949, 12954, 12959, 12964, 12969, 12974,
- 12979, 12984, 12989, 12994, 12999, 13004, 13009, 13014,
- 13019, 13024, 13029, 13034, 13039, 13044, 13049, 13054,
- 13059, 13064, 13069, 13074, 13079, 13084, 13089, 13094,
- 13099, 13104, 13109, 13114, 13119, 13124, 13129, 13134,
- 13139, 13144, 13149, 13154, 13159, 13164, 13169, 13174,
- 13179, 13184, 13189, 13194, 13199, 13204, 13209, 13214,
- 13219, 13224, 13229, 13234, 13239, 13244, 13249, 13254,
- 13259, 13264, 13269, 13274, 13279, 13284, 13289, 13294,
- 13299, 13304, 13309, 13314, 13319, 13324, 13329, 13334,
- 13339, 13344, 13349, 13354, 13359, 13364, 13369, 13374,
- 13379, 13384, 13389, 13394, 13399, 13404, 13409, 13414,
- 13419, 13424, 13429, 13434, 13439, 13444, 13449, 13454,
- 13459, 13464, 13469, 13474, 13479, 13484, 13489, 13494,
- 13499, 13504, 13509, 13514, 13519, 13524, 13529, 13534,
- 13539, 13544, 13549, 13554, 13559, 13564, 13569, 13574,
- 13579, 13584, 13589, 13594, 13599, 13604, 13609, 13614,
- 13619, 13624, 13629, 13635, 13641, 13647, 13652, 13657,
- 13662, 13667, 13672, 13677, 13682, 13687, 13692, 13697,
-};
-
-static const Q_UINT16 di_FD[] = {
- 13702, 13707, 13712, 13717, 13722, 13727, 13732, 13737,
- 13742, 13747, 13752, 13757, 13762, 13767, 13772, 13777,
- 13782, 13787, 13792, 13797, 13802, 13807, 13812, 13817,
- 13822, 13827, 13832, 13837, 13842, 13847, 13852, 13857,
- 13862, 13867, 13872, 13877, 13882, 13887, 13892, 13897,
- 13902, 13907, 13912, 13917, 13922, 13927, 13932, 13937,
- 13942, 13947, 13952, 13957, 13962, 13967, 13972, 13977,
- 13982, 13987, 13992, 13997, 14002, 14007, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 14012, 14018, 14024, 14030, 14036, 14042, 14048, 14054,
- 14060, 14066, 14072, 14078, 14084, 14090, 14096, 14102,
- 14108, 14114, 14120, 14126, 14132, 14138, 14144, 14150,
- 14156, 14162, 14168, 14174, 14180, 14186, 14192, 14198,
- 14204, 14210, 14216, 14222, 14228, 14234, 14240, 14246,
- 14252, 14258, 14264, 14270, 14276, 14282, 14288, 14294,
- 14300, 14306, 14312, 14318, 14324, 14330, 14336, 14342,
- 14348, 14354, 14360, 14366, 14372, 14378, 14384, 14390,
- 0, 0, 14396, 14402, 14408, 14414, 14420, 14426,
- 14432, 14438, 14444, 14450, 14456, 14462, 14468, 14474,
- 14480, 14486, 14492, 14498, 14504, 14510, 14516, 14522,
- 14528, 14534, 14540, 14546, 14552, 14558, 14564, 14570,
- 14576, 14582, 14588, 14594, 14600, 14606, 14612, 14618,
- 14624, 14630, 14636, 14642, 14648, 14654, 14660, 14666,
- 14672, 14678, 14684, 14690, 14696, 14702, 14708, 14714,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 14720, 14726, 14732, 14739, 14746, 14753, 14760, 14767,
- 14774, 14781, 14787, 14808, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 di_FE[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 14819, 14823, 14827, 14831, 14835, 14839, 14843, 14847,
- 14851, 14855, 14859, 14863, 14867, 14871, 14875, 14879,
- 14883, 14887, 14891, 14895, 14899, 0, 0, 0,
- 0, 14903, 14907, 14911, 14915, 14919, 14923, 14927,
- 14931, 14935, 14939, 0, 14943, 14947, 14951, 14955,
- 14959, 14963, 14967, 14971, 14975, 14979, 14983, 14987,
- 14991, 14995, 14999, 15003, 15007, 15011, 15015, 0,
- 15019, 15023, 15027, 15031, 0, 0, 0, 0,
- 15035, 15040, 15045, 0, 15050, 0, 15055, 15060,
- 15065, 15070, 15075, 15080, 15085, 15090, 15095, 15100,
- 15105, 15109, 15113, 15117, 15121, 15125, 15129, 15133,
- 15137, 15141, 15145, 15149, 15153, 15157, 15161, 15165,
- 15169, 15173, 15177, 15181, 15185, 15189, 15193, 15197,
- 15201, 15205, 15209, 15213, 15217, 15221, 15225, 15229,
- 15233, 15237, 15241, 15245, 15249, 15253, 15257, 15261,
- 15265, 15269, 15273, 15277, 15281, 15285, 15289, 15293,
- 15297, 15301, 15305, 15309, 15313, 15317, 15321, 15325,
- 15329, 15333, 15337, 15341, 15345, 15349, 15353, 15357,
- 15361, 15365, 15369, 15373, 15377, 15381, 15385, 15389,
- 15393, 15397, 15401, 15405, 15409, 15413, 15417, 15421,
- 15425, 15429, 15433, 15437, 15441, 15445, 15449, 15453,
- 15457, 15461, 15465, 15469, 15473, 15477, 15481, 15485,
- 15489, 15493, 15497, 15501, 15505, 15509, 15513, 15517,
- 15521, 15525, 15529, 15533, 15537, 15541, 15545, 15549,
- 15553, 15557, 15561, 15565, 15569, 15573, 15578, 15583,
- 15588, 15593, 15598, 15603, 15608, 0, 0, 0,
-};
-
-static const Q_UINT16 di_FF[] = {
- 0, 15613, 15617, 15621, 15625, 15629, 15633, 15637,
- 15641, 15645, 15649, 15653, 15657, 15661, 15665, 15669,
- 15673, 15677, 15681, 15685, 15689, 15693, 15697, 15701,
- 15705, 15709, 15713, 15717, 15721, 15725, 15729, 15733,
- 15737, 15741, 15745, 15749, 15753, 15757, 15761, 15765,
- 15769, 15773, 15777, 15781, 15785, 15789, 15793, 15797,
- 15801, 15805, 15809, 15813, 15817, 15821, 15825, 15829,
- 15833, 15837, 15841, 15845, 15849, 15853, 15857, 15861,
- 15865, 15869, 15873, 15877, 15881, 15885, 15889, 15893,
- 15897, 15901, 15905, 15909, 15913, 15917, 15921, 15925,
- 15929, 15933, 15937, 15941, 15945, 15949, 15953, 15957,
- 15961, 15965, 15969, 15973, 15977, 15981, 15985, 0,
- 0, 15989, 15993, 15997, 16001, 16005, 16009, 16013,
- 16017, 16021, 16025, 16029, 16033, 16037, 16041, 16045,
- 16049, 16053, 16057, 16061, 16065, 16069, 16073, 16077,
- 16081, 16085, 16089, 16093, 16097, 16101, 16105, 16109,
- 16113, 16117, 16121, 16125, 16129, 16133, 16137, 16141,
- 16145, 16149, 16153, 16157, 16161, 16165, 16169, 16173,
- 16177, 16181, 16185, 16189, 16193, 16197, 16201, 16205,
- 16209, 16213, 16217, 16221, 16225, 16229, 16233, 16237,
- 16241, 16245, 16249, 16253, 16257, 16261, 16265, 16269,
- 16273, 16277, 16281, 16285, 16289, 16293, 16297, 16301,
- 16305, 16309, 16313, 16317, 16321, 16325, 16329, 16333,
- 16337, 16341, 16345, 16349, 16353, 16357, 16361, 0,
- 0, 0, 16365, 16369, 16373, 16377, 16381, 16385,
- 0, 0, 16389, 16393, 16397, 16401, 16405, 16409,
- 0, 0, 16413, 16417, 16421, 16425, 16429, 16433,
- 0, 0, 16437, 16441, 16445, 0, 0, 0,
- 16449, 16453, 16457, 16461, 16465, 16469, 16473, 0,
- 16477, 16481, 16485, 16489, 16493, 16497, 16501, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 * const decomposition_info[256] = {
- di_00, di_01, di_02, di_03, di_04, di_05, di_06, di_07,
- di_07, di_09, di_0A, di_0B, di_0C, di_0D, di_0E, di_0F,
- di_10, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_1E, di_1F,
- di_20, di_21, di_22, di_23, di_24, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_2E, di_2F,
- di_30, di_31, di_32, di_33, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_07, di_07, di_07, di_07, di_07, di_07, di_07,
- di_07, di_F9, di_FA, di_FB, di_FC, di_FD, di_FE, di_FF,
-};
-// 68080 bytes
-
-static const Q_UINT16 ligature_map [] = {
- 0,
- 12883, 12889, 12895, 12901, 12907, 12913, 15035, 15045, 15050, 15055, 15065, 15075, 15085, 15095, 0,
- 5503, 0,
- 5488, 0,
- 5508, 0,
- 67, 72, 77, 82, 87, 92, 332, 342, 352, 966, 1196, 1206, 1346, 2357, 3137, 3147, 0,
- 2367, 2377, 2387, 0,
- 97, 362, 372, 382, 392, 0,
- 402, 2407, 2417, 2427, 2437, 2447, 0,
- 102, 107, 112, 117, 412, 422, 432, 442, 452, 1216, 1226, 1356, 2477, 2487, 3257, 3267, 3277, 0,
- 2507, 0,
- 462, 472, 482, 492, 1076, 1146, 2517, 0,
- 502, 1336, 2527, 2537, 2547, 2557, 2567, 0,
- 122, 127, 132, 137, 512, 522, 532, 542, 552, 976, 1236, 1246, 2577, 3337, 3347, 0,
- 567, 0,
- 577, 1086, 2597, 2607, 2617, 0,
- 587, 597, 607, 2627, 2647, 2657, 0,
- 2667, 2677, 2687, 0,
- 142, 627, 637, 647, 1156, 2697, 2707, 2717, 2727, 0,
- 147, 152, 157, 162, 167, 662, 672, 682, 901, 986, 1096, 1256, 1266, 1386, 3357, 3367, 0,
- 2777, 2787, 0,
- 692, 702, 712, 1276, 1286, 2797, 2807, 2827, 0,
- 722, 732, 742, 752, 1316, 2837, 2847, 0,
- 762, 772, 1326, 2887, 2897, 2907, 2917, 0,
- 172, 177, 182, 187, 782, 792, 802, 812, 822, 832, 911, 996, 1296, 1306, 2927, 2937, 2947, 3477, 3487, 0,
- 2977, 2987, 0,
- 842, 2997, 3007, 3017, 3027, 3037, 0,
- 3047, 3057, 0,
- 192, 852, 862, 1406, 3067, 3547, 3557, 3567, 3577, 0,
- 867, 877, 887, 3077, 3087, 3097, 0,
- 197, 202, 207, 212, 217, 222, 337, 347, 357, 971, 1201, 1211, 1351, 2362, 3142, 3152, 0,
- 2372, 2382, 2392, 0,
- 227, 367, 377, 387, 397, 0,
- 407, 2412, 2422, 2432, 2442, 2452, 0,
- 232, 237, 242, 247, 417, 427, 437, 447, 457, 1221, 1231, 1361, 2482, 2492, 3262, 3272, 3282, 0,
- 2512, 0,
- 467, 477, 487, 497, 1081, 1151, 2522, 0,
- 507, 1341, 2532, 2542, 2552, 2562, 2572, 3107, 0,
- 252, 257, 262, 267, 517, 527, 537, 547, 981, 1241, 1251, 2582, 3342, 3352, 0,
- 572, 1126, 0,
- 582, 1091, 2602, 2612, 2622, 0,
- 592, 602, 612, 2632, 2652, 2662, 0,
- 2672, 2682, 2692, 0,
- 272, 632, 642, 652, 1161, 2702, 2712, 2722, 2732, 0,
- 277, 282, 287, 292, 297, 667, 677, 687, 906, 991, 1101, 1261, 1271, 1391, 3362, 3372, 0,
- 2782, 2792, 0,
- 697, 707, 717, 1281, 1291, 2802, 2812, 2832, 0,
- 727, 737, 747, 757, 1321, 2842, 2852, 0,
- 767, 777, 1331, 2892, 2902, 2912, 2922, 3112, 0,
- 302, 307, 312, 317, 787, 797, 807, 817, 827, 837, 916, 1001, 1301, 1311, 2932, 2942, 2952, 3482, 3492, 0,
- 2982, 2992, 0,
- 847, 3002, 3012, 3022, 3032, 3042, 3117, 0,
- 3052, 3062, 0,
- 322, 327, 857, 1411, 3072, 3122, 3552, 3562, 3572, 3582, 0,
- 872, 882, 892, 3082, 3092, 3102, 0,
- 1537, 4468, 4662, 0,
- 3157, 3167, 3177, 3187, 0,
- 1046, 0,
- 1166, 0,
- 1066, 1176, 0,
- 2397, 0,
- 3287, 3297, 3307, 3317, 0,
- 2587, 0,
- 3377, 3387, 3397, 3407, 0,
- 1376, 2737, 2747, 0,
- 1366, 0,
- 1186, 0,
- 1006, 1016, 1026, 1036, 0,
- 3162, 3172, 3182, 3192, 0,
- 1051, 0,
- 1171, 0,
- 1071, 1181, 0,
- 2402, 0,
- 3292, 3302, 3312, 3322, 0,
- 2592, 0,
- 3382, 3392, 3402, 3412, 0,
- 1381, 2742, 2752, 0,
- 1371, 0,
- 1191, 0,
- 1011, 1021, 1031, 1041, 0,
- 3207, 3217, 3227, 3237, 0,
- 3212, 3222, 3232, 3242, 0,
- 2457, 2467, 0,
- 2462, 2472, 0,
- 2757, 2767, 0,
- 2762, 2772, 0,
- 2857, 0,
- 2862, 0,
- 2867, 0,
- 2872, 0,
- 2957, 0,
- 2962, 0,
- 2967, 0,
- 2972, 0,
- 3132, 0,
- 3427, 3437, 3447, 3457, 3467, 0,
- 3432, 3442, 3452, 3462, 3472, 0,
- 3497, 3507, 3517, 3527, 3537, 0,
- 3502, 3512, 3522, 3532, 3542, 0,
- 1116, 0,
- 1106, 0,
- 1111, 0,
- 1056, 0,
- 1061, 0,
- 2497, 0,
- 2502, 0,
- 1396, 0,
- 1401, 0,
- 1121, 0,
- 1514, 0,
- 1542, 3627, 3632, 4425, 4430, 4435, 4444, 0,
- 1551, 3697, 3702, 4498, 0,
- 1556, 3767, 3772, 4507, 4516, 0,
- 1561, 1586, 3847, 3852, 4565, 4570, 4575, 0,
- 1566, 3917, 3922, 4700, 0,
- 4657, 0,
- 1571, 1591, 3987, 4638, 4643, 4648, 0,
- 1576, 4047, 4052, 4709, 4718, 0,
- 4410, 0,
- 4483, 0,
- 1596, 3587, 3592, 4087, 4390, 4395, 4405, 4415, 0,
- 1601, 3667, 3672, 4096, 0,
- 1606, 3727, 3732, 4105, 4478, 4488, 0,
- 1611, 1621, 3807, 3812, 4114, 4536, 4541, 4555, 0,
- 1631, 3887, 3892, 4123, 0,
- 4618, 4623, 0,
- 1626, 1636, 3947, 3952, 4132, 4599, 4604, 4628, 0,
- 1641, 4007, 4012, 4141, 4680, 4690, 0,
- 1581, 4546, 4560, 0,
- 1616, 4609, 4633, 0,
- 4685, 0,
- 1658, 1663, 0,
- 1703, 0,
- 1788, 1798, 0,
- 1698, 0,
- 1688, 1693, 1808, 0,
- 1778, 1828, 0,
- 1838, 0,
- 1713, 1723, 1848, 1858, 0,
- 1708, 0,
- 1868, 0,
- 1718, 1898, 1908, 1918, 0,
- 1928, 0,
- 1938, 0,
- 1888, 0,
- 1793, 1803, 0,
- 1743, 0,
- 1733, 1738, 1813, 0,
- 1783, 1833, 0,
- 1843, 0,
- 1728, 1758, 1853, 1863, 0,
- 1753, 0,
- 1873, 0,
- 1763, 1903, 1913, 1923, 0,
- 1933, 0,
- 1943, 0,
- 1893, 0,
- 1748, 0,
- 1768, 0,
- 1773, 0,
- 1818, 0,
- 1823, 0,
- 1878, 0,
- 1883, 0,
- 11678, 11683, 11688, 0,
- 11693, 11803, 0,
- 11698, 0,
- 11703, 0,
- 11708, 0,
- 11713, 11798, 0,
- 11718, 0,
- 11723, 0,
- 11608, 11728, 0,
- 11733, 0,
- 11738, 11808, 0,
- 11743, 0,
- 11748, 0,
- 11753, 0,
- 11758, 0,
- 11763, 0,
- 11768, 11813, 0,
- 11773, 0,
- 11778, 0,
- 11783, 0,
- 11658, 11663, 11788, 0,
- 11793, 0,
- 11613, 0,
- 15105, 0,
- 15109, 15113, 0,
- 15117, 15121, 0,
- 15125, 15129, 0,
- 15133, 15137, 0,
- 12307, 12312, 12317, 12322, 12327, 12332, 12337, 12342, 12347, 12352, 12357, 12362, 12367, 12372, 12377, 12382, 12387, 12392, 12413, 12418, 12423, 12428, 12433, 12919, 12924, 12929, 12934, 12939, 12944, 13174, 13179, 13184, 13189, 13194, 13534, 13539, 15141, 15145, 15149, 15153, 0,
- 14732, 14739, 1958, 1968, 14007, 14002, 1953, 15157, 15161, 0,
- 14468, 14684, 12448, 12453, 12458, 12463, 12949, 12954, 12959, 12964, 12969, 12974, 13199, 13204, 13209, 13214, 13219, 13544, 13549, 12438, 12443, 15165, 15169, 15173, 15177, 0,
- 15181, 15185, 0,
- 14012, 14018, 14024, 14030, 14036, 14042, 14048, 14054, 14474, 14480, 14486, 14492, 14498, 14504, 13229, 13234, 13239, 13244, 13559, 13554, 12468, 12473, 12478, 12483, 12488, 12493, 12979, 12984, 12989, 12994, 12999, 13004, 13224, 15189, 15193, 15197, 15201, 0,
- 12498, 12503, 12508, 12513, 13009, 13014, 13019, 13024, 13029, 13034, 13249, 13564, 13569, 15205, 15209, 15213, 15217, 0,
- 14808, 14660, 14060, 14066, 14510, 14516, 14522, 12518, 12523, 13254, 13259, 13707, 13712, 13847, 13852, 15221, 15225, 15229, 15233, 0,
- 14072, 14078, 14666, 13264, 13269, 13697, 13702, 13842, 13837, 12528, 12533, 15237, 15241, 15245, 15249, 0,
- 12538, 12543, 12548, 13274, 13279, 13717, 13722, 13857, 13862, 15253, 15257, 15261, 15265, 0,
- 15269, 15273, 0,
- 12868, 15277, 15281, 0,
- 14760, 12873, 15285, 15289, 0,
- 15293, 15297, 0,
- 14084, 14090, 14096, 14102, 14108, 14114, 14120, 14126, 14528, 14708, 13677, 13682, 13772, 13817, 13822, 13912, 13947, 13962, 13967, 13972, 12553, 12558, 12563, 12568, 13284, 13289, 13294, 13299, 13574, 13579, 15301, 15305, 15309, 15313, 0,
- 14150, 14156, 14162, 14168, 14174, 14180, 14186, 14540, 13767, 13827, 13832, 13887, 13892, 13897, 13902, 13907, 13927, 13932, 13937, 13942, 13952, 13977, 13982, 13987, 13584, 13589, 13687, 13692, 13747, 13752, 13757, 13762, 15317, 15321, 15325, 15329, 0,
- 14787, 14753, 14781, 14138, 14132, 14144, 14534, 14702, 14720, 12573, 12578, 13304, 13309, 13314, 13727, 13732, 13777, 13872, 13917, 13867, 15333, 15337, 15341, 15345, 0,
- 14192, 14198, 14204, 14546, 13319, 13324, 13329, 13334, 13737, 13742, 13782, 13877, 13882, 13922, 12583, 12588, 12593, 12598, 15349, 15353, 15357, 15361, 0,
- 14210, 14216, 14222, 14228, 13647, 13652, 13787, 13792, 13992, 13957, 12603, 12608, 13339, 15365, 15369, 15373, 15377, 0,
- 12613, 13344, 13997, 15381, 15385, 15389, 15393, 0,
- 14767, 14696, 14234, 14240, 14246, 14252, 14612, 12618, 12623, 13349, 13354, 13657, 13662, 13797, 13802, 15397, 15401, 15405, 15409, 0,
- 14258, 14264, 14270, 13359, 13364, 13667, 13672, 13812, 13807, 12628, 12633, 15413, 15417, 15421, 15425, 0,
- 13629, 13635, 13641, 15040, 15060, 15070, 15080, 15090, 15100, 0,
- 14276, 14282, 14678, 12653, 12658, 12663, 13039, 13044, 13369, 13374, 13379, 13384, 12638, 12643, 12648, 15429, 15433, 15437, 15441, 0,
- 14600, 14726, 14294, 14288, 14588, 12668, 12673, 12678, 12683, 13049, 13054, 13389, 13394, 15445, 15449, 15453, 15457, 0,
- 14618, 14642, 14690, 12703, 12708, 12713, 12718, 12723, 13059, 13064, 13069, 13074, 13079, 13399, 13404, 13409, 13414, 13419, 13594, 13599, 12688, 12693, 12698, 15461, 15465, 15469, 15473, 0,
- 14648, 14300, 14306, 14312, 14318, 14324, 14330, 14336, 14342, 14348, 14552, 14558, 14606, 14636, 12728, 12733, 12738, 12743, 12748, 12753, 13084, 13089, 13094, 13424, 13429, 13434, 13439, 13444, 13604, 15573, 15578, 15583, 15588, 15593, 15598, 15603, 15608, 15477, 15481, 15485, 15489, 0,
- 14746, 14354, 14360, 14366, 14372, 14378, 14384, 14390, 14396, 14582, 14630, 14672, 12758, 12763, 12768, 12773, 12778, 12783, 13099, 13104, 13449, 13454, 13459, 13464, 15493, 15497, 15501, 15505, 0,
- 14414, 14420, 14426, 14432, 14438, 14444, 14450, 14594, 14624, 14654, 14714, 13134, 13469, 13474, 13479, 13484, 13489, 13609, 13614, 12788, 12793, 12798, 12803, 12808, 12813, 13109, 13114, 13119, 13124, 13129, 15509, 15513, 15517, 15521, 0,
- 14402, 14408, 12823, 12828, 12833, 13494, 13504, 13499, 12818, 15525, 15529, 15533, 15537, 0,
- 14774, 1963, 15541, 15545, 0,
- 12878, 13139, 12299, 12303, 15549, 15553, 0,
- 14456, 14462, 14564, 14570, 14576, 12858, 12863, 13144, 13149, 13154, 13159, 13164, 13169, 13509, 13514, 13519, 13524, 13529, 13619, 13624, 1973, 12838, 12843, 12848, 12853, 15557, 15561, 15565, 15569, 0,
- 11823, 11827, 0,
- 12255, 0,
- 11911, 11915, 11919, 11923, 0,
- 11879, 11883, 11887, 11891, 0,
- 11831, 11835, 11839, 11843, 0,
- 11847, 11851, 11855, 11859, 0,
- 11895, 11899, 11903, 11907, 0,
- 11863, 11867, 11871, 11875, 0,
- 11975, 11979, 11983, 11987, 0,
- 11959, 11963, 11967, 11971, 0,
- 11991, 11995, 11999, 12003, 0,
- 12007, 12011, 12015, 12019, 0,
- 12047, 12051, 0,
- 12031, 12035, 0,
- 12023, 12027, 0,
- 12039, 12043, 0,
- 12063, 12067, 0,
- 12055, 12059, 0,
- 11927, 11931, 11935, 11939, 0,
- 11943, 11947, 11951, 11955, 0,
- 12071, 12075, 12079, 12083, 0,
- 12215, 12219, 12223, 12227, 0,
- 12087, 12091, 12095, 12099, 0,
- 12119, 12123, 12127, 12131, 0,
- 12103, 12107, 12111, 12115, 0,
- 12135, 12139, 0,
- 12143, 12147, 12151, 12155, 0,
- 12183, 12187, 12191, 12195, 0,
- 12159, 12163, 0,
- 2003, 12167, 12171, 12175, 12179, 0,
- 12267, 12271, 0,
- 12239, 12243, 0,
- 12231, 12235, 0,
- 12247, 12251, 0,
- 12275, 12279, 0,
- 12259, 12263, 0,
- 12397, 12401, 12405, 12409, 0,
- 12283, 12287, 12291, 12295, 0,
- 2008, 12199, 12203, 0,
- 12207, 12211, 0,
- 1998, 0,
- 2028, 0,
- 2033, 0,
- 2038, 0,
- 2043, 0,
- 2048, 0,
- 2053, 0,
- 2013, 0,
- 2058, 0,
- 2063, 0,
- 2018, 0,
- 2023, 0,
- 2078, 0,
- 2083, 0,
- 2088, 0,
- 2068, 2073, 0,
- 2103, 0,
- 2108, 0,
- 2113, 0,
- 2118, 0,
- 2093, 0,
- 2098, 0,
- 2138, 0,
- 2143, 0,
- 2123, 2128, 2133, 0,
- 2148, 0,
- 2153, 2163, 0,
- 2158, 0,
- 2168, 0,
- 2173, 0,
- 2178, 2183, 2188, 0,
- 2193, 0,
- 2198, 2208, 0,
- 2203, 0,
- 2213, 2218, 2228, 0,
- 2223, 0,
- 2282, 0,
- 2257, 0,
- 2262, 0,
- 2267, 0,
- 2272, 0,
- 2277, 0,
- 2287, 2292, 2317, 0,
- 2347, 0,
- 2322, 0,
- 2327, 0,
- 2332, 0,
- 2337, 0,
- 2342, 0,
- 2297, 0,
- 2307, 0,
- 2352, 0,
- 2637, 0,
- 2642, 0,
- 2817, 0,
- 2822, 0,
- 2877, 0,
- 2882, 0,
- 3197, 3247, 0,
- 3202, 3252, 0,
- 3327, 0,
- 3332, 0,
- 3417, 0,
- 3422, 0,
- 3597, 3607, 3617, 4150, 0,
- 3602, 3612, 3622, 4155, 0,
- 4160, 0,
- 4165, 0,
- 4170, 0,
- 4175, 0,
- 4180, 0,
- 4185, 0,
- 3637, 3647, 3657, 4190, 0,
- 3642, 3652, 3662, 4195, 0,
- 4200, 0,
- 4205, 0,
- 4210, 0,
- 4215, 0,
- 4220, 0,
- 4225, 0,
- 3677, 3687, 0,
- 3682, 3692, 0,
- 3707, 3717, 0,
- 3712, 3722, 0,
- 3737, 3747, 3757, 4230, 0,
- 3742, 3752, 3762, 4235, 0,
- 4240, 0,
- 4245, 0,
- 4250, 0,
- 4255, 0,
- 4260, 0,
- 4265, 0,
- 3777, 3787, 3797, 4270, 0,
- 3782, 3792, 3802, 4275, 0,
- 4280, 0,
- 4285, 0,
- 4290, 0,
- 4295, 0,
- 4300, 0,
- 4305, 0,
- 3817, 3827, 3837, 0,
- 3822, 3832, 3842, 0,
- 3857, 3867, 3877, 0,
- 3862, 3872, 3882, 0,
- 3897, 3907, 0,
- 3902, 3912, 0,
- 3927, 3937, 0,
- 3932, 3942, 0,
- 3957, 3967, 3977, 0,
- 3962, 3972, 3982, 0,
- 3992, 3997, 4002, 0,
- 4017, 4027, 4037, 4310, 0,
- 4022, 4032, 4042, 4315, 0,
- 4320, 0,
- 4325, 0,
- 4330, 0,
- 4335, 0,
- 4340, 0,
- 4345, 0,
- 4057, 4067, 4077, 4350, 0,
- 4062, 4072, 4082, 4355, 0,
- 4360, 0,
- 4365, 0,
- 4370, 0,
- 4375, 0,
- 4380, 0,
- 4385, 0,
- 4400, 0,
- 4473, 0,
- 4675, 0,
- 4420, 0,
- 4521, 4526, 4531, 0,
- 4493, 0,
- 4695, 0,
- 4584, 4589, 4594, 0,
- 5391, 0,
- 5396, 0,
- 5401, 0,
- 5406, 0,
- 5416, 0,
- 5411, 0,
- 5421, 0,
- 5426, 0,
- 5431, 0,
- 5436, 0,
- 5441, 0,
- 5468, 0,
- 5473, 0,
- 5478, 0,
- 5483, 0,
- 5498, 0,
- 5493, 0,
- 5513, 0,
- 5518, 0,
- 5523, 0,
- 5528, 0,
- 5533, 0,
- 5538, 0,
- 5543, 0,
- 5548, 0,
- 5593, 0,
- 5598, 0,
- 5553, 0,
- 5558, 0,
- 5563, 0,
- 5568, 0,
- 5603, 0,
- 5608, 0,
- 5573, 0,
- 5578, 0,
- 5583, 0,
- 5588, 0,
- 5613, 0,
- 5618, 0,
- 5623, 0,
- 5628, 0,
- 7351, 0,
- 7226, 0,
- 7231, 0,
- 7236, 0,
- 7241, 0,
- 7246, 0,
- 7251, 0,
- 7256, 0,
- 7261, 0,
- 7266, 0,
- 7271, 0,
- 7276, 0,
- 7281, 0,
- 7286, 0,
- 7291, 0,
- 7296, 0,
- 7301, 7306, 0,
- 7311, 7316, 0,
- 7321, 7326, 0,
- 7331, 7336, 0,
- 7341, 7346, 0,
- 7366, 0,
- 7496, 0,
- 7371, 0,
- 7376, 0,
- 7381, 0,
- 7386, 0,
- 7391, 0,
- 7396, 0,
- 7401, 0,
- 7406, 0,
- 7411, 0,
- 7416, 0,
- 7421, 0,
- 7426, 0,
- 7431, 0,
- 7436, 0,
- 7441, 0,
- 7446, 7451, 0,
- 7456, 7461, 0,
- 7466, 7471, 0,
- 7476, 7481, 0,
- 7486, 7491, 0,
- 7501, 0,
- 7506, 0,
- 7511, 0,
- 7516, 0,
- 7521, 0,
- 11668, 11673, 0,
-
-};
-
-static const Q_UINT16 li_00[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 16, 18, 20, 0,
- 0, 22, 39, 43, 49, 56, 74, 76,
- 84, 92, 108, 110, 116, 123, 127, 137,
- 154, 0, 157, 166, 174, 182, 202, 205,
- 212, 215, 225, 0, 0, 0, 0, 0,
- 0, 232, 249, 253, 259, 266, 284, 286,
- 294, 303, 318, 321, 327, 334, 338, 348,
- 365, 0, 368, 377, 385, 394, 414, 417,
- 425, 428, 439, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 446, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 450, 0, 455, 457, 459, 462,
- 0, 0, 464, 0, 0, 0, 0, 469,
- 0, 0, 0, 0, 471, 476, 480, 0,
- 482, 0, 0, 0, 484, 0, 0, 0,
- 0, 0, 489, 0, 494, 496, 498, 501,
- 0, 0, 503, 0, 0, 0, 0, 508,
- 0, 0, 0, 0, 510, 515, 519, 0,
- 521, 0, 0, 0, 523, 0, 0, 0,
-};
-
-static const Q_UINT16 li_01[] = {
- 0, 0, 528, 533, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 538, 541, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 544, 547, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 550, 552, 0, 0, 0, 0,
- 554, 556, 0, 0, 0, 0, 0, 0,
- 558, 560, 562, 564, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 566,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 568, 574, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 580,
- 586, 0, 0, 0, 0, 0, 0, 592,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 594, 596, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_02[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 598, 600,
- 602, 604, 0, 0, 0, 0, 606, 608,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 610, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_03[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 612, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 614, 0, 0, 0, 622, 0, 627,
- 0, 633, 0, 0, 0, 0, 0, 641,
- 0, 646, 0, 0, 0, 648, 0, 0,
- 0, 655, 0, 0, 661, 0, 663, 0,
- 0, 665, 0, 0, 0, 674, 0, 679,
- 0, 686, 0, 0, 0, 0, 0, 695,
- 0, 700, 0, 0, 0, 703, 0, 0,
- 0, 712, 719, 723, 0, 0, 727, 0,
- 0, 0, 729, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_04[] = {
- 0, 0, 0, 0, 0, 0, 732, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 734, 0, 0, 737, 0, 739, 743, 746,
- 748, 0, 753, 0, 0, 0, 755, 0,
- 0, 0, 0, 757, 0, 0, 0, 762,
- 0, 0, 0, 764, 0, 766, 0, 0,
- 768, 0, 0, 771, 0, 773, 777, 780,
- 782, 0, 787, 0, 0, 0, 789, 0,
- 0, 0, 0, 791, 0, 0, 0, 796,
- 0, 0, 0, 798, 0, 800, 0, 0,
- 0, 0, 0, 0, 0, 0, 802, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 804, 806, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 808, 810, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 812, 814, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_05[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 816, 820, 823, 825, 827, 829, 832, 0,
- 834, 836, 839, 841, 844, 0, 846, 0,
- 848, 850, 0, 852, 854, 0, 857, 859,
- 861, 863, 867, 0, 0, 0, 0, 0,
- 0, 0, 869, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_06[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 871, 873, 876, 879, 882, 885, 926,
- 936, 962, 965, 1003, 1021, 1041, 1057, 1071,
- 1074, 1078, 1083, 1086, 1121, 1158, 1183, 1206,
- 1224, 1232, 1252, 0, 0, 0, 0, 0,
- 1268, 1278, 1298, 1316, 1344, 1386, 1415, 1450,
- 1464, 1469, 1476, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1506, 0, 0, 0, 0, 0, 1509,
- 0, 1511, 1516, 1521, 0, 0, 1526, 1531,
- 1536, 0, 0, 1541, 1546, 0, 1551, 1556,
- 1561, 0, 0, 0, 1564, 1567, 1570, 0,
- 0, 1573, 0, 0, 0, 0, 0, 0,
- 1576, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1579, 0, 1584, 0,
- 0, 1589, 0, 0, 0, 1594, 0, 1599,
- 0, 1604, 0, 1609, 0, 0, 0, 0,
- 0, 0, 1614, 1617, 0, 0, 1622, 0,
- 1627, 1630, 0, 0, 0, 1636, 1639, 1642,
- 1645, 1648, 0, 1651, 1654, 0, 0, 0,
- 1659, 0, 1664, 1668, 0, 1671, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_07[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_09[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1673, 1675, 1677,
- 0, 0, 0, 0, 1679, 0, 0, 0,
- 0, 1681, 1683, 0, 0, 0, 0, 0,
- 1685, 0, 0, 1687, 0, 0, 0, 1689,
- 1691, 0, 0, 1693, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1695, 1697, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1699,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1701,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_0A[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1704, 1706,
- 0, 0, 0, 0, 1708, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1710, 0, 0, 0, 0,
- 0, 0, 1712, 0, 0, 0, 0, 0,
- 1714, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_0B[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1716, 1718, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1720,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1724, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1726, 1729,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_0C[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1731, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1733,
- 0, 0, 0, 0, 0, 0, 1735, 0,
- 0, 0, 1739, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_0D[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1741, 1744,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1746, 0, 0, 1750, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_0F[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1752, 0, 1754, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1756, 0, 0, 0,
- 0, 1758, 0, 0, 0, 0, 1760, 0,
- 0, 0, 0, 1762, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1764, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1768, 0, 1770, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1772, 0, 0, 0,
- 0, 1774, 0, 0, 0, 0, 1776, 0,
- 0, 0, 0, 1778, 0, 0, 0, 0,
- 0, 0, 1780, 1782, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_10[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1784, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_1E[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1786, 1788,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1790, 1792, 0, 0, 0, 0,
- 0, 0, 1794, 1796, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1798, 1801, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1804, 1806, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1808, 1810, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_1F[] = {
- 1812, 1817, 1822, 1824, 1826, 1828, 1830, 1832,
- 1834, 1839, 1844, 1846, 1848, 1850, 1852, 1854,
- 1856, 1859, 0, 0, 0, 0, 0, 0,
- 1862, 1865, 0, 0, 0, 0, 0, 0,
- 1868, 1873, 1878, 1880, 1882, 1884, 1886, 1888,
- 1890, 1895, 1900, 1902, 1904, 1906, 1908, 1910,
- 1912, 1916, 0, 0, 0, 0, 0, 0,
- 1920, 1924, 0, 0, 0, 0, 0, 0,
- 1928, 1931, 0, 0, 0, 0, 0, 0,
- 1934, 1937, 0, 0, 0, 0, 0, 0,
- 1940, 1944, 0, 0, 0, 0, 0, 0,
- 0, 1948, 0, 0, 0, 0, 0, 0,
- 1952, 1957, 1962, 1964, 1966, 1968, 1970, 1972,
- 1974, 1979, 1984, 1986, 1988, 1990, 1992, 1994,
- 1996, 0, 0, 0, 1998, 0, 0, 0,
- 0, 0, 0, 0, 2000, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2002, 0,
- 0, 0, 0, 0, 0, 0, 0, 2004,
- 0, 0, 0, 0, 0, 0, 2008, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2010, 0,
- 0, 0, 0, 0, 0, 0, 2012, 0,
-};
-
-static const Q_UINT16 li_21[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2016, 0, 2018, 0, 2020, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2022, 0, 2024, 0, 2026, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_22[] = {
- 0, 0, 0, 2028, 0, 0, 0, 0,
- 2030, 0, 0, 2032, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2034, 0, 2036, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2038, 0, 0, 0,
- 0, 0, 0, 2040, 0, 2042, 0, 0,
- 2044, 0, 0, 0, 0, 2046, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2048, 0, 0, 2050, 2052, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2054, 2056, 0, 0, 2058, 2060,
- 0, 0, 2062, 2064, 2066, 2068, 0, 0,
- 0, 0, 2070, 2072, 0, 0, 2074, 2076,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2078, 2080, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2082, 0, 0, 0, 0, 0,
- 2084, 2086, 0, 2088, 0, 0, 0, 0,
- 0, 0, 2090, 2092, 2094, 2096, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 li_30[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2098, 0,
- 0, 0, 0, 2100, 0, 2102, 0, 2104,
- 0, 2106, 0, 2108, 0, 2110, 0, 2112,
- 0, 2114, 0, 2116, 0, 2118, 0, 2120,
- 0, 2122, 0, 0, 2124, 0, 2126, 0,
- 2128, 0, 0, 0, 0, 0, 0, 2130,
- 0, 0, 2133, 0, 0, 2136, 0, 0,
- 2139, 0, 0, 2142, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2145, 0, 0,
- 0, 0, 0, 0, 0, 0, 2147, 0,
- 0, 0, 0, 2149, 0, 2151, 0, 2153,
- 0, 2155, 0, 2157, 0, 2159, 0, 2161,
- 0, 2163, 0, 2165, 0, 2167, 0, 2169,
- 0, 2171, 0, 0, 2173, 0, 2175, 0,
- 2177, 0, 0, 0, 0, 0, 0, 2179,
- 0, 0, 2182, 0, 0, 2185, 0, 0,
- 2188, 0, 0, 2191, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2194,
- 2196, 2198, 2200, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2202, 0, 0,
-};
-
-static const Q_UINT16 li_FB[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2204, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 * const ligature_info[256] = {
- li_00, li_01, li_02, li_03, li_04, li_05, li_06, li_07,
- li_07, li_09, li_0A, li_0B, li_0C, li_0D, li_07, li_0F,
- li_10, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_1E, li_1F,
- li_07, li_21, li_22, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_30, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_07, li_07, li_07, li_07, li_07,
- li_07, li_07, li_07, li_FB, li_07, li_07, li_07, li_07,
-};
-// 16188 bytes
-
-static const Q_UINT8 dir_00[] = {
- 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 8, 7, 8, 9, 7, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 7, 7, 7, 8,
- 9, 10, 10, 4, 4, 4, 10, 10,
- 138, 138, 10, 4, 6, 4, 6, 3,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 6, 10, 138, 10, 138, 10,
- 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 138, 10, 138, 10, 10,
- 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 138, 10, 138, 10, 18,
- 18, 18, 18, 18, 18, 7, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18,
- 6, 10, 4, 4, 4, 4, 10, 10,
- 10, 10, 0, 138, 10, 10, 10, 10,
- 4, 4, 2, 2, 10, 0, 10, 10,
- 10, 2, 0, 138, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_01[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_02[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 10, 10, 0, 0, 0, 0, 0,
- 0, 0, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_03[] = {
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 10, 0,
- 0, 0, 0, 0, 10, 10, 0, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_04[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 17, 17, 17, 17, 0,
- 17, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_05[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 10, 0, 0, 0, 0, 0,
- 0, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 0, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 0, 17, 17, 17, 1, 17,
- 1, 17, 17, 1, 17, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_06[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 13, 0, 0, 0, 13,
- 0, 13, 77, 77, 77, 77, 45, 77,
- 45, 77, 45, 45, 45, 45, 45, 77,
- 77, 77, 77, 45, 45, 45, 45, 45,
- 45, 45, 45, 0, 0, 0, 0, 0,
- 109, 45, 45, 45, 45, 45, 45, 45,
- 77, 77, 45, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 4, 5, 5, 13, 0, 0,
- 17, 13, 77, 77, 13, 77, 77, 77,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77,
- 77, 77, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 77, 45, 77, 77, 77, 77, 77, 77,
- 77, 77, 77, 77, 45, 77, 45, 77,
- 45, 45, 77, 77, 13, 13, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 13, 13, 17,
- 17, 10, 17, 17, 17, 17, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 45, 45, 45, 13, 13, 0,
-};
-
-static const Q_UINT8 dir_07[] = {
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 0, 18,
- 77, 17, 45, 45, 45, 77, 77, 77,
- 77, 77, 45, 45, 45, 45, 77, 45,
- 45, 45, 45, 45, 45, 45, 45, 45,
- 77, 45, 77, 45, 77, 0, 0, 0,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_09[] = {
- 0, 17, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 17, 17, 17, 17, 17, 17, 17,
- 17, 0, 0, 0, 0, 17, 0, 0,
- 0, 17, 17, 17, 17, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 17, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 17, 17, 17, 17, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 17, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_0A[] = {
- 0, 0, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 17, 17, 0, 0, 0, 0, 17,
- 17, 0, 0, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 0,
- 0, 17, 17, 17, 17, 17, 0, 17,
- 17, 0, 0, 0, 0, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_0B[] = {
- 0, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 0, 17,
- 0, 17, 17, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_0C[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 17,
- 17, 0, 0, 0, 0, 0, 17, 17,
- 17, 0, 17, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 17, 17, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 17,
- 0, 0, 0, 0, 0, 0, 17, 0,
- 0, 0, 0, 0, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_0D[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 17, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 17, 0, 0, 0, 0, 0,
- 0, 0, 17, 17, 17, 0, 17, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_0E[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 0, 0, 17, 17, 17, 17,
- 17, 17, 17, 0, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 17,
- 17, 17, 17, 17, 17, 17, 17, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 0, 0, 17, 17, 17, 17,
- 17, 17, 0, 17, 17, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 17, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_0F[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 17,
- 0, 17, 10, 10, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 0,
- 17, 17, 17, 17, 17, 0, 17, 17,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 0, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_10[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 17, 17,
- 17, 0, 17, 0, 0, 0, 17, 17,
- 0, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_16[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 10, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_17[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 17,
- 17, 17, 17, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 0,
- 0, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_18[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 18, 18, 18, 18, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_1F[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10, 0, 10,
- 10, 10, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 10, 10, 0,
-};
-
-static const Q_UINT8 dir_20[] = {
- 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 18, 18, 18, 0, 1,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 9, 7, 11, 14, 16, 12, 15, 9,
- 4, 4, 4, 4, 4, 10, 10, 10,
- 10, 138, 138, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 138, 138, 0,
- 10, 10, 10, 10, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 18, 18, 18, 18, 18,
- 2, 0, 0, 0, 2, 2, 2, 2,
- 2, 2, 4, 4, 10, 138, 138, 0,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 4, 4, 10, 138, 138, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_21[] = {
- 10, 10, 0, 10, 10, 10, 10, 0,
- 10, 10, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 10, 0, 10, 10,
- 10, 0, 0, 0, 0, 0, 10, 10,
- 10, 10, 10, 10, 0, 10, 0, 10,
- 0, 10, 0, 0, 0, 0, 4, 0,
- 0, 0, 10, 0, 0, 0, 0, 0,
- 0, 0, 10, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_22[] = {
- 10, 138, 138, 138, 138, 10, 10, 10,
- 138, 138, 138, 138, 138, 138, 10, 10,
- 10, 138, 4, 4, 10, 138, 138, 10,
- 10, 10, 138, 138, 138, 138, 10, 138,
- 138, 138, 138, 10, 138, 10, 138, 10,
- 10, 10, 10, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 10, 10, 10, 10,
- 10, 138, 10, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 10, 10, 10,
- 10, 10, 138, 138, 138, 138, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 138,
- 138, 10, 138, 10, 138, 138, 138, 138,
- 138, 138, 138, 138, 10, 10, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 10, 10, 138,
- 138, 138, 138, 10, 10, 10, 10, 10,
- 138, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 138, 138, 10, 10, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 10, 10, 10, 10, 10, 138, 138,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 138, 138, 138, 138, 138, 10, 10,
- 138, 138, 10, 10, 10, 10, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 138, 10, 10,
- 138, 138, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_23[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 138, 138, 138, 138, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 138, 138, 10, 10, 10, 10, 10, 10,
- 10, 138, 138, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 0, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 0, 10, 10,
- 10, 10, 10, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_24[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_25[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_26[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 0, 0,
- 0, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_27[] = {
- 0, 10, 10, 10, 10, 0, 10, 10,
- 10, 10, 0, 0, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 10, 0, 10,
- 10, 10, 10, 0, 0, 0, 10, 0,
- 10, 10, 10, 10, 10, 10, 10, 0,
- 0, 10, 10, 10, 10, 10, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 0, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_28[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
-};
-
-static const Q_UINT8 dir_2E[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 0, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_2F[] = {
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_30[] = {
- 9, 10, 10, 10, 10, 0, 0, 0,
- 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 10, 10, 138, 138, 138, 138,
- 138, 138, 138, 138, 10, 10, 10, 10,
- 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 17, 17, 17, 17, 17, 17,
- 10, 0, 0, 0, 0, 0, 10, 10,
- 0, 0, 0, 0, 0, 0, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 17, 10, 10, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_A4[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 0, 0, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 0, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 0, 10, 10, 10, 0, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_FB[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 17, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 4, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
-};
-
-static const Q_UINT8 dir_FC[] = {
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
-};
-
-static const Q_UINT8 dir_FD[] = {
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 10, 10,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 0, 0, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 0, 0, 0, 0,
-};
-
-static const Q_UINT8 dir_FE[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 17, 17, 17, 17, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 0, 0, 0,
- 0, 10, 10, 10, 10, 10, 10, 10,
- 6, 10, 6, 0, 10, 6, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 4,
- 10, 10, 4, 4, 10, 10, 10, 0,
- 10, 4, 4, 10, 0, 0, 0, 0,
- 13, 13, 13, 0, 13, 0, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 0, 0, 18,
-};
-
-static const Q_UINT8 dir_FF[] = {
- 0, 10, 10, 4, 4, 4, 10, 10,
- 10, 10, 10, 4, 6, 4, 6, 3,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 6, 10, 10, 10, 10, 10,
- 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 10, 10, 10, 10,
- 10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 10, 10, 10, 0,
- 0, 10, 10, 10, 10, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 4, 10, 10, 10, 4, 4, 0,
- 10, 10, 10, 10, 10, 10, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 18, 18, 18, 10, 10, 0, 0,
-};
-
-static const Q_UINT8 * const direction_info[256] = {
- dir_00, dir_01, dir_02, dir_03, dir_04, dir_05, dir_06, dir_07,
- dir_01, dir_09, dir_0A, dir_0B, dir_0C, dir_0D, dir_0E, dir_0F,
- dir_10, dir_01, dir_01, dir_01, dir_01, dir_01, dir_16, dir_17,
- dir_18, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_1F,
- dir_20, dir_21, dir_22, dir_23, dir_24, dir_25, dir_26, dir_27,
- dir_28, dir_01, dir_01, dir_01, dir_01, dir_01, dir_2E, dir_2F,
- dir_30, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_A4, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01, dir_01,
- dir_01, dir_01, dir_01, dir_FB, dir_FC, dir_FD, dir_FE, dir_FF,
-};
-// 26940 bytes
-
-#endif
-
-// END OF GENERATED DATA
-
-// This is generated too. Script?
-
-#ifndef QT_NO_UNICODETABLES
-
-static const Q_UINT16 case_0 [] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
- 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
- 0x78, 0x79, 0x7a, 0, 0, 0, 0, 0,
- 0, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
- 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
- 0x58, 0x59, 0x5a, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0x0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0x0, 0, 0,
- 0, 0, 0x0, 0, 0, 0, 0, 0,
- 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
- 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
- 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x0,
- 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
- 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
- 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0,
- 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178,
-};
-
-static const Q_UINT16 case_1 [] = {
- 0x101, 0x100, 0x103, 0x102, 0x105, 0x104, 0x107, 0x106,
- 0x109, 0x108, 0x10b, 0x10a, 0x10d, 0x10c, 0x10f, 0x10e,
- 0x111, 0x110, 0x113, 0x112, 0x115, 0x114, 0x117, 0x116,
- 0x119, 0x118, 0x11b, 0x11a, 0x11d, 0x11c, 0x11f, 0x11e,
- 0x121, 0x120, 0x123, 0x122, 0x125, 0x124, 0x127, 0x126,
- 0x129, 0x128, 0x12b, 0x12a, 0x12d, 0x12c, 0x12f, 0x12e,
- 0x69, 0x49, 0x133, 0x132, 0x135, 0x134, 0x137, 0x136,
- 0x0, 0x13a, 0x139, 0x13c, 0x13b, 0x13e, 0x13d, 0x140,
- 0x13f, 0x142, 0x141, 0x144, 0x143, 0x146, 0x145, 0x148,
- 0x147, 0x0, 0x14b, 0x14a, 0x14d, 0x14c, 0x14f, 0x14e,
- 0x151, 0x150, 0x153, 0x152, 0x155, 0x154, 0x157, 0x156,
- 0x159, 0x158, 0x15b, 0x15a, 0x15d, 0x15c, 0x15f, 0x15e,
- 0x161, 0x160, 0x163, 0x162, 0x165, 0x164, 0x167, 0x166,
- 0x169, 0x168, 0x16b, 0x16a, 0x16d, 0x16c, 0x16f, 0x16e,
- 0x171, 0x170, 0x173, 0x172, 0x175, 0x174, 0x177, 0x176,
- 0xff, 0x17a, 0x179, 0x17c, 0x17b, 0x17e, 0x17d, 0x53,
- 0x0, 0x253, 0x183, 0x182, 0x185, 0x184, 0x254, 0x188,
- 0x187, 0x256, 0x257, 0x18c, 0x18b, 0x0, 0x1dd, 0x259,
- 0x25b, 0x192, 0x191, 0x260, 0x263, 0x3d9, 0x269, 0x268,
- 0x199, 0x198, 0x51, 0x0, 0x26f, 0x272, 0x0, 0x275,
- 0x1a1, 0x1a0, 0x1a3, 0x1a2, 0x1a5, 0x1a4, 0x280, 0x1a8,
- 0x1a7, 0x283, 0, 0x0, 0x1ad, 0x1ac, 0x288, 0x1b0,
- 0x1af, 0x28a, 0x28b, 0x1b4, 0x1b3, 0x1b6, 0x1b5, 0x292,
- 0x1b9, 0x1b8, 0x0, 0, 0x1bd, 0x1bc, 0, 0,
- 0, 0, 0, 0, 0x1c6, 0, 0x1c4, 0x1c9,
- 0, 0x1c7, 0x1cc, 0, 0x1ca, 0x1ce, 0x1cd, 0x1d0,
- 0x1cf, 0x1d2, 0x1d1, 0x1d4, 0x1d3, 0x1d6, 0x1d5, 0x1d8,
- 0x1d7, 0x1da, 0x1d9, 0x1dc, 0x1db, 0x18e, 0x1df, 0x1de,
- 0x1e1, 0x1e0, 0x1e3, 0x1e2, 0x1e5, 0x1e4, 0x1e7, 0x1e6,
- 0x1e9, 0x1e8, 0x1eb, 0x1ea, 0x1ed, 0x1ec, 0x1ef, 0x1ee,
- 0x0, 0x1f3, 0, 0x1f1, 0x1f5, 0x1f4, 0, 0,
- 0, 0, 0x1fb, 0x1fa, 0x1fd, 0x1fc, 0x1ff, 0x1fe,
-};
-
-static const Q_UINT16 case_2 [] = {
- 0x201, 0x200, 0x203, 0x202, 0x205, 0x204, 0x207, 0x206,
- 0x209, 0x208, 0x20b, 0x20a, 0x20d, 0x20c, 0x20f, 0x20e,
- 0x211, 0x210, 0x213, 0x212, 0x215, 0x214, 0x217, 0x216,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0x0, 0x0, 0x0, 0x181, 0x186, 0x0, 0x189, 0x18a,
- 0x0, 0x18f, 0x0, 0x190, 0x0, 0x0, 0x0, 0x0,
- 0x193, 0x0, 0x0, 0x194, 0x0, 0x0, 0x631, 0x579,
- 0x197, 0x196, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19c,
- 0x0, 0x0, 0x19d, 0x0, 0x0, 0x19f, 0x0, 0x0,
- 0x0, 0x0, 0x7e1, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1a6, 0x0, 0x0, 0x1a9, 0x0, 0x0, 0x0, 0x0,
- 0x1ae, 0x0, 0x1b1, 0x1b2, 0x0, 0xa21, 0x971, 0x0,
- 0x0, 0x0, 0x1b7, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_3 [] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0x3ac, 0,
- 0x3ad, 0x3ae, 0x3af, 0, 0x3cc, 0, 0x3cd, 0x3ce,
- 0x0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7,
- 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf,
- 0x3c0, 0x3c1, 0, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7,
- 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x386, 0x388, 0x389, 0x38a,
- 0x0, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397,
- 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f,
- 0x3a0, 0x3a1, 0x3a3, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7,
- 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x38c, 0x38e, 0x38f, 0,
- 0x392, 0x398, 0x0, 0x0, 0x0, 0x3a6, 0x3a0, 0,
- 0, 0, 0x0, 0, 0x0, 0, 0x0, 0,
- 0x0, 0, 0x3e3, 0x3e2, 0x3e5, 0x3e4, 0x3e7, 0x3e6,
- 0x3e9, 0x3e8, 0x3eb, 0x3ea, 0x3ed, 0x3ec, 0x3ef, 0x3ee,
- 0x39a, 0x3a1, 0x3a3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_4 [] = {
- 0, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457,
- 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0, 0x45e, 0x45f,
- 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437,
- 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f,
- 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447,
- 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f,
- 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417,
- 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f,
- 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427,
- 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f,
- 0, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407,
- 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0, 0x40e, 0x40f,
- 0x461, 0x460, 0x463, 0x462, 0x465, 0x464, 0x467, 0x466,
- 0x469, 0x468, 0x46b, 0x46a, 0x46d, 0x46c, 0x46f, 0x46e,
- 0x471, 0x470, 0x473, 0x472, 0x475, 0x474, 0x477, 0x476,
- 0x479, 0x478, 0x47b, 0x47a, 0x47d, 0x47c, 0x47f, 0x47e,
- 0x481, 0x480, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0x491, 0x490, 0x493, 0x492, 0x495, 0x494, 0x497, 0x496,
- 0x499, 0x498, 0x49b, 0x49a, 0x49d, 0x49c, 0x49f, 0x49e,
- 0x4a1, 0x4a0, 0x4a3, 0x4a2, 0x4a5, 0x4a4, 0x4a7, 0x4a6,
- 0x4a9, 0x4a8, 0x4ab, 0x4aa, 0x4ad, 0x4ac, 0x4af, 0x4ae,
- 0x4b1, 0x4b0, 0x4b3, 0x4b2, 0x4b5, 0x4b4, 0x4b7, 0x4b6,
- 0x4b9, 0x4b8, 0x4bb, 0x4ba, 0x4bd, 0x4bc, 0x4bf, 0x4be,
- 0, 0x4c2, 0x4c1, 0x4c4, 0x4c3, 0, 0, 0x4c8,
- 0x4c7, 0, 0, 0x4cc, 0x4cb, 0, 0, 0,
- 0x4d1, 0x4d0, 0x4d3, 0x4d2, 0x4d5, 0x4d4, 0x4d7, 0x4d6,
- 0x4d9, 0x4d8, 0x4db, 0x4da, 0x4dd, 0x4dc, 0x4df, 0x4de,
- 0x4e1, 0x4e0, 0x4e3, 0x4e2, 0x4e5, 0x4e4, 0x4e7, 0x4e6,
- 0x4e9, 0x4e8, 0x4eb, 0x4ea, 0, 0, 0x4ef, 0x4ee,
- 0x4f1, 0x4f0, 0x4f3, 0x4f2, 0x4f5, 0x4f4, 0, 0,
- 0x4f9, 0x4f8, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_5 [] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567,
- 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f,
- 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577,
- 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f,
- 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537,
- 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f,
- 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547,
- 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f,
- 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_10 [] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7,
- 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df,
- 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7,
- 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef,
- 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_1e [] = {
- 0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06,
- 0x1e09, 0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e,
- 0x1e11, 0x1e10, 0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16,
- 0x1e19, 0x1e18, 0x1e1b, 0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e,
- 0x1e21, 0x1e20, 0x1e23, 0x1e22, 0x1e25, 0x1e24, 0x1e27, 0x1e26,
- 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d, 0x1e2c, 0x1e2f, 0x1e2e,
- 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34, 0x1e37, 0x1e36,
- 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f, 0x1e3e,
- 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46,
- 0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e,
- 0x1e51, 0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56,
- 0x1e59, 0x1e58, 0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e,
- 0x1e61, 0x1e60, 0x1e63, 0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66,
- 0x1e69, 0x1e68, 0x1e6b, 0x1e6a, 0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e,
- 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75, 0x1e74, 0x1e77, 0x1e76,
- 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c, 0x1e7f, 0x1e7e,
- 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87, 0x1e86,
- 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e,
- 0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x1e60, 0, 0, 0, 0,
- 0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6,
- 0x1ea9, 0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae,
- 0x1eb1, 0x1eb0, 0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6,
- 0x1eb9, 0x1eb8, 0x1ebb, 0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe,
- 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2, 0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6,
- 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd, 0x1ecc, 0x1ecf, 0x1ece,
- 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4, 0x1ed7, 0x1ed6,
- 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf, 0x1ede,
- 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6,
- 0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee,
- 0x1ef1, 0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6,
- 0x1ef9, 0x1ef8, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_1f [] = {
- 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f,
- 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07,
- 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0, 0,
- 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0, 0,
- 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f,
- 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27,
- 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f,
- 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37,
- 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0, 0,
- 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0, 0,
- 0x0, 0x1f59, 0x0, 0x1f5b, 0x0, 0x1f5d, 0x0, 0x1f5f,
- 0, 0x1f51, 0, 0x1f53, 0, 0x1f55, 0, 0x1f57,
- 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f,
- 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67,
- 0x1fba, 0x1fbb, 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb,
- 0x1ff8, 0x1ff9, 0x1fea, 0x1feb, 0x1ffa, 0x1ffb, 0, 0,
- 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f,
- 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87,
- 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f,
- 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97,
- 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf,
- 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7,
- 0x1fb8, 0x1fb9, 0x0, 0x1fbc, 0x0, 0, 0x0, 0x0,
- 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0, 0x399, 0,
- 0, 0, 0x0, 0x1fcc, 0x0, 0, 0x0, 0x0,
- 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1fc3, 0, 0, 0,
- 0x1fd8, 0x1fd9, 0x0, 0x0, 0, 0, 0x0, 0x0,
- 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0, 0, 0, 0,
- 0x1fe8, 0x1fe9, 0x0, 0x0, 0x0, 0x1fec, 0x0, 0x0,
- 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0, 0, 0,
- 0, 0, 0x0, 0x1ffc, 0x0, 0, 0x0, 0x0,
- 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0, 0, 0,
-};
-
-static const Q_UINT16 case_20 [] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0x0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_21 [] = {
- 0, 0, 0x0, 0, 0, 0, 0, 0x0,
- 0, 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0, 0x0, 0, 0,
- 0x761, 0x0, 0x0, 0x0, 0x0, 0x0, 0, 0,
- 0, 0, 0, 0, 0x0, 0, 0x0, 0,
- 0x0, 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0, 0x0, 0x0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_fb [] = {
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 case_ff [] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47,
- 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f,
- 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57,
- 0xff58, 0xff59, 0xff5a, 0, 0, 0, 0, 0,
- 0, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27,
- 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f,
- 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37,
- 0xff38, 0xff39, 0xff3a, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const Q_UINT16 * const case_info[256] = {
-
- case_0, case_1, case_2, case_3, case_4, case_5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- case_10, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, case_1e, case_1f,
- case_20, case_21, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, case_fb, 0, 0, 0, case_ff,
-};
-
-static const Q_INT8 num_0 [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 2, 3, -1, -1, -1, -1,
- -1, 1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_6 [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_9 [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, 1,
- 2, 3, 4, 5, 6, 7, 8, 9,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, 1,
- 2, 3, 4, 5, 6, 7, 8, 9,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_b [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, 1,
- 2, 3, 4, 5, 6, 7, 8, 9,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 1,
- 2, 3, 4, 5, 6, 7, 8, 9,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_d [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, 1,
- 2, 3, 4, 5, 6, 7, 8, 9,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_e [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_f [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_20 [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 num_ff [] = {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
-};
-
-static const Q_INT8 * const decimal_info[256] = {
- num_0, 0, 0, 0, 0, 0, num_6, 0,
- 0, num_9, num_9, num_b, num_9, num_d, num_e, num_f,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- num_20, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, num_ff,
-};
-
-static const Q_UINT16 symmetricPairs[] = {
- 0x0028, 0x0029, 0x0029, 0x0028, 0x003C, 0x003E, 0x003E, 0x003C,
- 0x005B, 0x005D, 0x005D, 0x005B, 0x007B, 0x007D, 0x007D, 0x007B,
- 0x2045, 0x2046, 0x2046, 0x2045, 0x207D, 0x207E, 0x207E, 0x207D,
- 0x208D, 0x208E, 0x208E, 0x208D, 0x3008, 0x3009, 0x3009, 0x3008,
- 0x300A, 0x300B, 0x300B, 0x300A, 0x300C, 0x300D, 0x300D, 0x300C,
- 0x300E, 0x300F, 0x300F, 0x300E, 0x3010, 0x3011, 0x3011, 0x3010,
- 0x3014, 0x3015, 0x3015, 0x3014, 0x3016, 0x3017, 0x3017, 0x3016,
- 0x3018, 0x3019, 0x3019, 0x3018, 0x301A, 0x301B, 0x301B, 0x301A,
- 0xFD3E, 0xFD3F, 0xFD3F, 0xFD3E, 0xFE59, 0xFE5A, 0xFE5A, 0xFE59,
- 0xFE5B, 0xFE5C, 0xFE5C, 0xFE5B, 0xFE5D, 0xFE5E, 0xFE5E, 0xFE5D,
- 0xFF08, 0xFF09, 0xFF09, 0xFF08, 0xFF3B, 0xFF3D, 0xFF3D, 0xFF3B,
- 0xFF5B, 0xFF5D, 0xFF5D, 0xFF5B, 0xFF62, 0xFF63, 0xFF63, 0xFF62,
-};
-
-static int symmetricPairsSize =
- sizeof(symmetricPairs)/sizeof(symmetricPairs[0]);
-
-/*
- * ----------------------------------------------------------------------
- * End of unicode tables
- * ----------------------------------------------------------------------
- */
-
-#endif
-
-
-static int ucstrcmp( const QString &as, const QString &bs )
-{
- const QChar *a = as.unicode();
- const QChar *b = bs.unicode();
- if ( a == b )
- return 0;
- if ( a == 0 )
- return 1;
- if ( b == 0 )
- return -1;
- int l=QMIN(as.length(),bs.length());
- while ( l-- && *a == *b )
- a++,b++;
- if ( l==-1 )
- return ( as.length()-bs.length() );
- return a->unicode() - b->unicode();
-}
-
-static int ucstrncmp( const QChar *a, const QChar *b, int l )
-{
- while ( l-- && *a == *b )
- a++,b++;
- if ( l==-1 )
- return 0;
- return a->unicode() - b->unicode();
-}
-
-static int ucstrnicmp( const QChar *a, const QChar *b, int l )
-{
- while ( l-- && a->lower() == b->lower() )
- a++,b++;
- if ( l==-1 )
- return 0;
- QChar al = a->lower();
- QChar bl = b->lower();
- return al.unicode() - bl.unicode();
-}
-
-// NOT REVISED
-/*! \class QCharRef qstring.h
- \brief The QCharRef class is a helper class for QString.
-
- It provides the ability to work on characters in a QString in a natural
- fashion.
-
- When you get an object of type QCharRef, you can assign to it, which
- will operate on the string from which you got it. That is its whole
- purpose in life. It becomes invalid once further modifications are
- made to the string: If you want to keep it, copy it into a QChar.
-
- Most of the QChar member functions also exist in QCharRef. However,
- they are not explicitly documented here.
-
- \sa QString::operator[]() QString::at() QChar
-*/
-
-/*! \class QChar qstring.h
-
-\brief The QChar class provides a light-weight Unicode character.
-
-Unicode characters are (so far) 16-bit entities without any markup or
-structure. This class represents such an entity. It is rather
-light-weight, so it can be used everywhere. Most compilers treat it
-approximately like "short int". (In a few years, it may be necessary
-to make QChar 32-bit, once more than 65536 Unicode code points have
-been defined and come into use.)
-
-QChar provides a full complement of testing/classification functions,
-conversion to and from other formats, from composed to decomposed
-unicode, and will try to compare and case-convert if you ask it to.
-
-The classification functions include functions like those in ctype.h,
-but operating on the full range of unicode characters. They all
-return TRUE if the character is a certain type of character, and FALSE
-otherwise.
-
-These functions are: isNull() (returns TRUE if the character is
-U+0000), isPrint() (TRUE if the character is any sort of printable
-character, including whitespace), isPunct() (any sort of punctuation),
-isMark() (Unicode Marks), isLetter (letters), isNumber() (any sort of
-numeric characters), isLetterOrNumber(), and isDigit() (decimal digits).
-All of these are wrappers around category(), which returns the
-unicode-defined category of each character.
-
-QChar further provides direction(), which indicates the "natural"
-writing direction of this character, joining(), which indicates how
-this character joins with its neighbors (needed mostly for Arabic)
-and finally mirrored(), which indicates whether this character needs
-to be mirrored when it is printed in its unnatural writing
-direction.
-
-Composed Unicode characters (like &aring;) can be converted to
-decomposed Unicode ("a" followed by "ring above") using
-decomposition().
-
-In Unicode, comparison is not necessarily possible, and case
-conversion is at best very hard. Unicode, covering the "entire"
-globe, also includes a globe-sized collection of case and sorting
-problems. Qt tries, but not very hard: operator== and friends will do
-comparison based purely on the numeric Unicode value (code point) of
-the characters, and upper() and lower() will do case changes when the
-character has a well-defined upper/lower-case equivalent. There is no
-provision for locale-dependent case folding rules or comparison: These
-functions are meant to be fast, so they can be used unambiguously in
-data structures.
-
-The conversion functions include unicode() (to a scalar), latin1() (to
-scalar, but converts all non-Latin1 characters to 0), row() (gives the
-Unicode row), cell() (gives the unicode cell), digitValue() (gives the
-integer value of any of the numerous digit characters), and a host of
-constructors.
-
-\sa QString QCharRef \link unicode.html About Unicode \endlink
-*/
-
-/*! \enum QChar::Category
-
-This enum maps the Unicode character categories. The currently known
-categories are: <ul>
-
-<li> \c NoCategory - used when Qt is dazed and confused and cannot
-make sense of anything.
-
-<li> \c Mark_NonSpacing - (Mn) -
-
-<li> \c Mark_SpacingCombining - (Mc) -
-
-<li> \c Mark_Enclosing - (Me) -
-
-<li> \c Number_DecimalDigit - (Nd) -
-
-<li> \c Number_Letter - (Nl) -
-
-<li> \c Number_Other - (No) -
-
-<li> \c Separator_Space - (Zs) -
-
-<li> \c Separator_Line - (Zl) -
-
-<li> \c Separator_Paragraph - (Zp) -
-
-<li> \c Other_Control - (Cc) -
-
-<li> \c Other_Format - (Cf) -
-
-<li> \c Other_Surrogate - (Cs) -
-
-<li> \c Other_PrivateUse - (Co) -
-
-<li> \c Other_NotAssigned - (Cn) -
-
-<li> \c Letter_Uppercase - (Lu) -
-
-<li> \c Letter_Lowercase - (Ll) -
-
-<li> \c Letter_Titlecase - (Lt) -
-
-<li> \c Letter_Modifier - (Lm) -
-
-<li> \c Letter_Other - (Lo) -
-
-<li> \c Punctuation_Connector - (Pc) -
-
-<li> \c Punctuation_Dask - (Pd) -
-
-<li> \c Punctuation_Open - (Ps) -
-
-<li> \c Punctuation_Close - (Pe) -
-
-<li> \c Punctuation_InitialQuote - (Pi) -
-
-<li> \c Punctuation_FinalQuote - (Pf) -
-
-<li> \c Punctuation_Other - (Po) -
-
-<li> \c Symbol_Math - (Sm) -
-
-<li> \c Symbol_Currency - (Sc) -
-
-<li> \c Symbol_Modifier - (Sk) -
-
-<li> \c Symbol_Other - (So) -
-
-</ul>
-*/
-
-/*! \enum QChar::Direction
-
- This enum type defines the Unicode direction attributes.
- See <a href="http://www.unicode.org">the Unicode Standard</a>
- for a description of the values.
-
- In order to conform to C/C++ naming conventions "Dir" is
- prepended to the codes used in The Unicode Standard.
-*/
-
-/*! \enum QChar::Decomposition
-
- This enum type defines the Unicode decomposition attributes.
- See <a href="http://www.unicode.org">the Unicode Standard</a>
- for a description of the values.
-*/
-
-/*! \enum QChar::Joining
-
- This enum type defines the Unicode decomposition attributes.
- See <a href="http://www.unicode.org">the Unicode Standard</a>
- for a description of the values.
-*/
-
-
-
-/*! \fn QChar::QChar()
-
-Constructs a null QChar (one that isNull()).
-*/
-
-
-/*! \fn QChar::QChar( char c )
-
-Constructs a QChar corresponding to ASCII/Latin1 character \a c.
-*/
-
-
-/*! \fn QChar::QChar( uchar c )
-
-Constructs a QChar corresponding to ASCII/Latin1 character \a c.
-*/
-
-
-/*! \fn QChar::QChar( uchar c, uchar r )
-
-Constructs a QChar for Unicode cell \a c in row \a r.
-*/
-
-
-/*! \fn QChar::QChar( const QChar& c )
-
-Constructs a copy of \a c. This is a deep copy, if such a
-light-weight object can be said to have deep copies.
-*/
-
-
-/*! \fn QChar::QChar( ushort rc )
-
-Constructs a QChar for the character with Unicode code point \a rc.
-*/
-
-
-/*! \fn QChar::QChar( short rc )
-
-Constructs a QChar for the character with Unicode code point \a rc.
-*/
-
-
-/*! \fn QChar::QChar( uint rc )
-
-Constructs a QChar for the character with Unicode code point \a rc.
-*/
-
-
-/*! \fn QChar::QChar( int rc )
-
-Constructs a QChar for the character with Unicode code point \a rc.
-*/
-
-
-/*! \fn bool QChar::networkOrdered ()
-
- Returns TRUE if this character is in network byte order (MSB first),
- and FALSE if it is not. This is a platform-dependent property, so
- we strongly advise against using this function in portable code.
-*/
-
-
-/*!
- \fn bool QChar::isNull() const
- Returns TRUE if the characters is the unicode character 0x0000,
- ie. ASCII NUL.
-*/
-
-/*!
- \fn uchar QChar::cell () const
- Returns the cell (least significant byte) of the Unicode character.
-*/
-/*!
- \fn uchar QChar::row () const
- Returns the row (most significant byte) of the Unicode character.
-*/
-/*!
- \fn uchar& QChar::cell ()
- Returns a reference to the cell (least significant byte) of the Unicode character.
-*/
-/*!
- \fn uchar& QChar::row ()
- Returns a reference to the row (most significant byte) of the Unicode character.
-*/
-
-/*!
- Returns whether the character is a printable character. This is
- any character not of category Cc or Cn. Note that this gives no indication
- of whether the character is available in some font.
-*/
-bool QChar::isPrint() const
-{
- Category c = category();
- return !(c == Other_Control || c == Other_NotAssigned);
-}
-
-/*!
- Returns whether the character is a separator
- character (Separator_* categories).
-*/
-bool QChar::isSpace() const
-{
- if( !row() )
- if( cell() >= 9 && cell() <=13 ) return TRUE;
- Category c = category();
- return c >= Separator_Space && c <= Separator_Paragraph;
-}
-
-/*!
- Returns whether the character is a mark (Mark_* categories).
-*/
-bool QChar::isMark() const
-{
- Category c = category();
- return c >= Mark_NonSpacing && c <= Mark_Enclosing;
-}
-
-/*!
- Returns whether the character is punctuation (Punctuation_* categories).
-*/
-bool QChar::isPunct() const
-{
- Category c = category();
- return (c >= Punctuation_Connector && c <= Punctuation_Other);
-}
-
-/*!
- Returns whether the character is a letter (Letter_* categories).
-*/
-bool QChar::isLetter() const
-{
- Category c = category();
- return (c >= Letter_Uppercase && c <= Letter_Other);
-}
-
-/*!
- Returns whether the character is a number (of any sort - Number_* categories).
-
- \sa isDigit()
-*/
-bool QChar::isNumber() const
-{
- Category c = category();
- return c >= Number_DecimalDigit && c <= Number_Other;
-}
-
-/*!
- Returns whether the character is a letter or number (Letter_* or Number_* categories).
-*/
-bool QChar::isLetterOrNumber() const
-{
- Category c = category();
- return (c >= Letter_Uppercase && c <= Letter_Other)
- || (c >= Number_DecimalDigit && c <= Number_Other);
-}
-
-
-/*!
- Returns whether the character is a decimal digit (Number_DecimalDigit).
- */
-bool QChar::isDigit() const
-{
- return (category() == Number_DecimalDigit);
-}
-
-/*!
- Returns the numeric value of the digit, or -1 if the character is not
- a digit.
-*/
-int QChar::digitValue() const
-{
-#ifndef QT_NO_UNICODETABLES
- const Q_INT8 *dec_row = decimal_info[row()];
- if( !dec_row )
- return -1;
- return decimal_info[row()][cell()];
-#else
- // ##### just latin1
- if ( rw != 0 || cl < '0' || cl > '9' )
- return -1;
- else
- return cl - '0';
-#endif
-}
-
-/*!
- Returns the character category.
-
- \sa Category
-*/
-QChar::Category QChar::category() const
-{
-#ifndef QT_NO_UNICODETABLES
- return (Category)(unicode_info[row()][cell()]);
-#else
-// ### just ASCII
- if ( rw == 0 ) {
- return (Category)(ui_00[cell()]);
- }
- return Letter_Uppercase; //#######
-#endif
-}
-
-/*!
- Returns the characters directionality.
-
- \sa Direction
-*/
-QChar::Direction QChar::direction() const
-{
-#ifndef QT_NO_UNICODETABLES
- const Q_UINT8 *rowp = direction_info[row()];
- if(!rowp) return QChar::DirL;
- return (Direction) ( *(rowp+cell()) &0x1f );
-#else
- return DirL;
-#endif
-}
-
-/*!
- This function is not supported (it may change to use Unicode
- character classes).
-
- Returns information about the joining properties of the
- character (needed for arabic).
-*/
-QChar::Joining QChar::joining() const
-{
-#ifndef QT_NO_UNICODETABLES
- const Q_UINT8 *rowp = direction_info[row()];
- if ( !rowp )
- return QChar::OtherJoining;
- return (Joining) ((*(rowp+cell()) >> 5) &0x3);
-#else
- return OtherJoining;
-#endif
-}
-
-
-/*!
- Returns whether the character is a mirrored character (one that
- should be reversed if the text direction is reversed).
-*/
-bool QChar::mirrored() const
-{
-#ifndef QT_NO_UNICODETABLES
- const Q_UINT8 *rowp = direction_info[row()];
- if ( !rowp )
- return FALSE;
- return *(rowp+cell())>128;
-#else
- return FALSE;
-#endif
-}
-
-/*!
- Returns the mirrored char if this character is a mirrored char, the char
- itself otherwise
-*/
-QChar QChar::mirroredChar() const
-{
-#ifndef QT_NO_UNICODETABLES
- if(!mirrored()) return *this;
-
- int i;
- int c = unicode();
- for (i = 0; i < symmetricPairsSize; i += 2) {
- if (symmetricPairs[i] == c)
- return symmetricPairs[i+1];
- }
- return 0;
-#else
- return *this;
-#endif
-}
-
-/*!
- Decomposes a character into its parts. Returns QString::null if
- no decomposition exists.
-*/
-QString QChar::decomposition() const
-{
-#ifndef QT_NO_UNICODETABLES
- const Q_UINT16 *r = decomposition_info[row()];
- if(!r) return QString::null;
-
- Q_UINT16 pos = r[cell()];
- if(!pos) return QString::null;
- pos+=2;
-
- QString s;
- Q_UINT16 c;
- while((c = decomposition_map[pos++]) != 0) s += QChar(c);
-
- return s;
-#else
- return null;
-#endif
-}
-
-/*!
- Returns the tag defining the composition of the character.
- Returns QChar::Single if no decomposition exists.
-*/
-QChar::Decomposition QChar::decompositionTag() const
-{
-#ifndef QT_NO_UNICODETABLES
- const Q_UINT16 *r = decomposition_info[row()];
- if(!r) return QChar::Single;
-
- Q_UINT16 pos = r[cell()];
- if(!pos) return QChar::Single;
-
- return (QChar::Decomposition) decomposition_map[pos];
-#else
- return Single; // ########### FIX eg. just latin1
-#endif
-}
-
-/*!
- Returns the lowercase equivalent if the character is uppercase,
- or the character itself otherwise.
-*/
-QChar QChar::lower() const
-{
-#ifndef QT_NO_UNICODETABLES
- if(category() != Letter_Uppercase) return *this;
- Q_UINT16 lower = *(case_info[row()]+cell());
- if(lower == 0) return *this;
- return lower;
-#else
- if (row())
- return *this;
- else
- return QChar(tolower(latin1()));
-#endif
-}
-
-/*!
- Returns the uppercase equivalent if the character is lowercase,
- or the character itself otherwise.
-*/
-QChar QChar::upper() const
-{
-#ifndef QT_NO_UNICODETABLES
- if(category() != Letter_Lowercase) return *this;
- Q_UINT16 upper = *(case_info[row()]+cell());
- if(upper == 0) return *this;
- return upper;
-#else
- if (row())
- return *this;
- else
- return QChar(toupper(latin1()));
-#endif
-}
-
-/*!
- \fn QChar::operator char() const
-
- Returns the Latin1 character equivalent to the QChar,
- or 0. This is mainly useful for non-internationalized software.
-
- \sa unicode()
-*/
-
-/*!
- \fn ushort QChar::unicode() const
-
- Returns the numeric Unicode value equal to the QChar. Normally, you
- should use QChar objects as they are equivalent, but for some low-level
- tasks (eg. indexing into an array of Unicode information), this function
- is useful.
-*/
-
-/*****************************************************************************
- Documentation of QChar related functions
- *****************************************************************************/
-
-/*!
- \fn int operator==( QChar c1, QChar c2 )
- \relates QChar
-
- Returns TRUE if \a c1 and \a c2 are the same Unicode character.
-*/
-
-/*!
- \fn int operator==( char ch, QChar c )
- \relates QChar
-
- Returns TRUE if \a c is the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator==( QChar c, char ch )
- \relates QChar
-
- Returns TRUE if \a c is the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator!=( QChar c1, QChar c2 )
- \relates QChar
-
- Returns TRUE if \a c1 and \a c2 are not the same Unicode character.
-*/
-
-/*!
- \fn int operator!=( char ch, QChar c )
- \relates QChar
-
- Returns TRUE if \a c is not the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator!=( QChar c, char ch )
- \relates QChar
-
- Returns TRUE if \a c is not the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator<=( QChar c1, QChar c2 )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c1 is less than that
- of \a c2, or they are the same Unicode character.
-*/
-
-/*!
- \fn int operator<=( QChar c, char ch )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c is less than or
- equal to that of the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator<=( char ch, QChar c )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of the ASCII/Latin1
- character \a ch is less than or equal to that of \a c.
-*/
-
-/*!
- \fn int operator>=( QChar c1, QChar c2 )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c1 is greater than that
- of \a c2, or they are the same Unicode character.
-*/
-
-/*!
- \fn int operator>=( QChar c, char ch )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c is greater than or
- equal to that of the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator>=( char ch, QChar c )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of the ASCII/Latin1
- character \a ch is greater than or equal to that of \a c.
-*/
-
-/*!
- \fn int operator<( QChar c1, QChar c2 )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c1 is less than that
- of \a c2.
-*/
-
-/*!
- \fn int operator<( QChar c, char ch )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c is less than that
- of the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator<( char ch, QChar c )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of the ASCII/Latin1
- character \a ch is less than that of \a c.
-*/
-
-/*!
- \fn int operator>( QChar c1, QChar c2 )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c1 is greater than
- that of \a c2.
-*/
-
-/*!
- \fn int operator>( QChar c, char ch )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of \a c is greater than
- that of the ASCII/Latin1 character \a ch.
-*/
-
-/*!
- \fn int operator>( char ch, QChar c )
- \relates QChar
-
- Returns TRUE if the numeric Unicode value of the ASCII/Latin1
- character \a ch is greater than that of \a c.
-*/
-
-#ifndef QT_NO_UNICODETABLES
-
-// small class used internally in QString::Compose()
-class QLigature
-{
-public:
- QLigature( QChar c );
-
- Q_UINT16 first() { cur = ligatures; return cur ? *cur : 0; }
- Q_UINT16 next() { return cur && *cur ? *(cur++) : 0; }
- Q_UINT16 current() { return cur ? *cur : 0; }
-
- int match(QString & str, unsigned int index);
- QChar head();
- QChar::Decomposition tag();
-
-private:
- Q_UINT16 *ligatures;
- Q_UINT16 *cur;
-};
-
-QLigature::QLigature( QChar c )
-{
- const Q_UINT16 *r = ligature_info[c.row()];
- if( !r )
- ligatures = 0;
- else
- {
- const Q_UINT16 pos = r[c.cell()];
- ligatures = (Q_UINT16 *)&(ligature_map[pos]);
- }
- cur = ligatures;
-}
-
-QChar QLigature::head()
-{
- if(current())
- return QChar(decomposition_map[current()+1]);
-
- return QChar::null;
-}
-
-QChar::Decomposition QLigature::tag()
-{
- if(current())
- return (QChar::Decomposition) decomposition_map[current()];
-
- return QChar::Canonical;
-}
-
-int QLigature::match(QString & str, unsigned int index)
-{
- unsigned int i=index;
-
- if(!current()) return 0;
-
- Q_UINT16 lig = current() + 2;
- Q_UINT16 ch;
-
- while ((i < str.length()) && (ch = decomposition_map[lig])) {
- if (str[(int)i] != QChar(ch))
- return 0;
- i++; lig++;
- }
-
- if (!decomposition_map[lig])
- {
- return i-index;
- }
- return 0;
-}
-
-// this function is just used in QString::compose()
-static inline bool format(QChar::Decomposition tag, QString & str,
- int index, int len)
-{
- unsigned int l = index + len;
- unsigned int r = index;
-
- bool right = FALSE;
-
- bool left = ((l < str.length()) &&
- ((str[(int)l].joining() == QChar::Dual) ||
- (str[(int)l].joining() == QChar::Right)));
- if (r > 0) {
- r--;
- //printf("joining(right) = %d\n", str[(int)r].joining());
- right = (str[(int)r].joining() == QChar::Dual);
- }
-
-
- switch (tag) {
- case QChar::Medial:
- return (left && right);
- case QChar::Initial:
- return (left && !right);
- case QChar::Final:
- return (right);// && !left);
- case QChar::Isolated:
- default:
- return (!right && !left);
- }
-} // format()
-#endif
-
-/*
- QString::compose() and visual() were developed by Gordon Tisher
- <tisher@uniserve.ca>, with input from Lars Knoll <knoll@mpi-hd.mpg.de>,
- who developed the unicode data tables.
-*/
-/*!
- Note that this function is not supported in Qt 2.0, and is merely
- for experimental and illustrative purposes. It is mainly of interest
- to those experimenting with Arabic and other composition-rich texts.
-
- Applies possible ligatures to a QString, useful when composition-rich
- text requires rendering with glyph-poor fonts, but also
- makes compositions such as QChar(0x0041) ('A') and QChar(0x0308)
- (Unicode accent diaeresis) giving QChar(0x00c4) (German A Umlaut).
-*/
-void QString::compose()
-{
-#ifndef QT_NO_UNICODETABLES
- unsigned int index=0, len;
- unsigned int cindex = 0;
-
- QChar code, head;
-
- QArray<QChar> dia;
-
- QString composed = *this;
-
- while (index < length()) {
- code = at(index);
- //printf("\n\nligature for 0x%x:\n", code.unicode());
- QLigature ligature(code);
- ligature.first();
- while(ligature.current()) {
- if ((len = ligature.match(*this, index)) != 0) {
- head = ligature.head();
- unsigned short code = head.unicode();
- // we exclude Arabic presentation forms A and a few
- // other ligatures, which are undefined in most fonts
- if(!(code > 0xfb50 && code < 0xfe80) &&
- !(code > 0xfb00 && code < 0xfb2a)) {
- // joining info is only needed for arabic
- if (format(ligature.tag(), *this, index, len)) {
- //printf("using ligature 0x%x, len=%d\n",code,len);
- // replace letter
- composed.replace(cindex, len, QChar(head));
- index += len-1;
- // we continue searching in case we have a final
- // form because medial ones are preferred.
- if ( len != 1 || ligature.tag() !=QChar::Final )
- break;
- }
- }
- }
- ligature.next();
- }
- cindex++;
- index++;
- }
- *this = composed;
-#endif
-}
-
-static QChar LRM ((ushort)0x200e);
-static QChar RLM ((ushort)0x200f);
-static QChar LRE ((ushort)0x202a);
-static QChar RLE ((ushort)0x202b);
-static QChar RLO ((ushort)0x202e);
-static QChar LRO ((ushort)0x202d);
-static QChar PDF ((ushort)0x202c);
-
-#if 0
-static inline bool is_arabic(unsigned short x) {
- return (((x >= 0x0600) && (x <= 0x07bf)) ||
- ((x >= 0xfb50) && (x <= 0xfdff)) ||
- ((x >= 0xfe70) && (x <= 0xfeff)));
-}
-#endif
-
-#ifndef QT_NO_UNICODETABLES
-static inline bool is_neutral(unsigned short dir) {
- return ((dir == QChar::DirB) ||
- (dir == QChar::DirS) ||
- (dir == QChar::DirWS) ||
- (dir == QChar::DirON) ||
- (dir == QChar::DirNSM));
-}
-#endif
-
-/*!
-This function returns the directionality of the string.
-
-\returns a value of DirLTR, DirRTL, DirMixed or DirNeutral that indicates
-if the entire text represented by this text is unidirectional,
-and which direction, or if it is mixed-directional or all characters are neutral.
-*/
-QString::Direction QString::direction() const
-{
-#ifndef QT_NO_UNICODETABLES
- // find direction
- unsigned char resultDir = DirNeutral;
- for (unsigned int pos = 0; pos < length(); pos++)
- {
- if ((at(pos) != RLE) &&
- (at(pos) != LRE) &&
- (at(pos) != RLO) &&
- (at(pos) != LRO) &&
- (at(pos).direction() > 1) &&
- (at(pos).direction() != QChar::DirAL)) // not R and not L
- continue;
-
- if ((at(pos).direction() == QChar::DirR) ||
- (at(pos).direction() == QChar::DirAL) ||
- (at(pos) == RLE) ||
- (at(pos) == RLO))
- resultDir |= DirRTL;
- else
- resultDir |= DirLTR;
- if (resultDir == DirMixed)
- return DirMixed;
- }
- return static_cast<Direction>(resultDir);
-#else
- return DirLTR;
-#endif
-}
-
-/*!
-This function returns the basic directionality of the string. Useful to find the right
-alignment.
-
-The base direction is derived from the first character in the string
-with bidirectional character type L, R, or AL.
-If the first such character has type L, DirLTR is returned.
-If the first such character has type R or AL, DirRTL is returned.
-If the string does not contain any character of these types, then DirNeutral is returned.
-This is a lightweight function for use when only the base direction is needed and
-no further bidi processing of the text is needed.
-
-\returns DirRTL, DirLTR or DirNeutral
-*/
-QString::Direction QString::basicDirection() const
-{
-#ifndef QT_NO_UNICODETABLES
- // find base direction
- unsigned int pos = 0;
- while ((pos < length()) &&
- (at(pos) != RLE) &&
- (at(pos) != LRE) &&
- (at(pos) != RLO) &&
- (at(pos) != LRO) &&
- (at(pos).direction() > 1) &&
- (at(pos).direction() != QChar::DirAL)) // not R and not L
- pos++;
-
- if (pos == length())
- return DirNeutral;
-
- if ((at(pos).direction() == QChar::DirR) ||
- (at(pos).direction() == QChar::DirAL) ||
- (at(pos) == RLE) ||
- (at(pos) == RLO))
- return DirRTL;
- return DirLTR;
-#else
- return DirLTR;
-#endif
-}
-
-#ifndef QT_NO_UNICODETABLES
-// reverses part of the QChar array to get visual ordering
-// called from QString::visual()
-//
-static unsigned int reverse( QString &chars, unsigned char *level,
- unsigned int a, unsigned int b)
-{
- unsigned int c = a;
- unsigned char lev = level[c];
-
- while ((c < b) && (level[c] >= lev)) {
- if (level[c] > lev)
- c = reverse(chars, level, c, b);
- c++;
- }
-
- if (lev > 0) {
- QChar temp;
- unsigned int d = a, e = c-1;
- while (d < e) {
- temp = chars[(int)d];
- chars[(int)d] = chars[(int)e];
- chars[(int)e] = temp;
-
- d++; e--;
- }
- }
-
- return c;
-}
-
-// small class used for the ordering algorithm in QString::visual()
-class QBidiState {
-public:
- unsigned char level;
- signed char override;
-
- QBidiState(unsigned char l, signed char o) : level(l), override(o) {};
-};
-
-// matrix for resolving neutral types
-
-#define NEG1 (QChar::Direction)(-1)
-
-static QChar::Direction resolv[5][5] =
-{
- { NEG1, QChar::DirR, QChar::DirL, QChar::DirEN, QChar::DirAN },
- { QChar::DirR, QChar::DirR, NEG1, QChar::DirR, QChar::DirR },
- { QChar::DirL, NEG1, QChar::DirL, QChar::DirL, NEG1 },
- { QChar::DirEN, QChar::DirR, QChar::DirL, QChar::DirEN, QChar::DirR },
- { QChar::DirAN, QChar::DirR, NEG1, NEG1, QChar::DirAN }
-};
-
-#endif
-
-/*!
- This function returns the QString ordered visually. Useful for
- painting the string or when transforming to a visually ordered
- encoding.
-*/
-QString QString::visual(int index, int len)
-{
-#ifndef QT_NO_UNICODETABLES
- // #### This needs much more optimizing - it is called for
- // #### every text operation.
-
- unsigned char *level;
- QChar::Direction *dir;
- unsigned char base = 0;
-
- unsigned int l = length();
-
- // check bounds
- if (len == -1)
- len = length()-index;
- if ((uint)index > l)
- return QString::null;
-
- // find base direction
- unsigned int pos = 0;
- while ((pos < length()) &&
- (at(pos) != RLE) &&
- (at(pos) != LRE) &&
- (at(pos) != RLO) &&
- (at(pos) != LRO) &&
- (at(pos).direction() > 1) &&
- (at(pos).direction() != QChar::DirAL)
- ) // not R and not L
- pos++;
-
- if ((pos < length()) &&
- ((at(pos).direction() == QChar::DirR) ||
- (at(pos).direction() == QChar::DirAL) ||
- (at(pos) == RLE) ||
- (at(pos) == RLO)))
- base = 1;
-
- // is there any BiDi char at all?
- if ( base == 0 && pos == l ) {
- return mid(index, len);
- }
-
-
- level = new uchar[l];
- dir = new QChar::Direction[l];
-
- // explicit override pass
- //unsigned int code_count = 0;
-
- QStack<QBidiState> stack;
- stack.setAutoDelete(TRUE);
-
- unsigned char clevel = base;
- signed char override = -1;
-
- for (pos = 0; pos < l; pos++) {
-
- if (at(pos) == RLE) {
- //code_count++;
- stack.push(new QBidiState(clevel, override));
- if (clevel < 254)
- clevel += 1 + clevel % 2;
- override = -1;
- }
- else if (at(pos) == LRE) {
- //code_count++;
- stack.push(new QBidiState(clevel, override));
- if (clevel < 254)
- clevel += 2 - clevel % 2;
- override = -1;
- }
- else if (at(pos) == RLO) {
- //code_count++;
- stack.push(new QBidiState(clevel, override));
- if (clevel < 254)
- clevel += 1 + clevel % 2;
- override = QChar::DirR;
- }
- else if (at(pos) == LRO) {
- //code_count++;
- stack.push(new QBidiState(clevel, override));
- if (clevel < 254)
- clevel += 2 - clevel % 2;
- override = QChar::DirL;
- }
- else if (at(pos) == PDF) {
- //code_count++;
- if (!stack.isEmpty()) {
- override = stack.top()->override;
- clevel = stack.top()->level;
- stack.remove();
- }
- }
-
- // TODO: catch block separators (newlines, paras, etc.)
-
- level[pos] = clevel;
- if (override != -1)
- dir[pos] = (QChar::Direction) override;
- else
- dir[pos] = at(pos).direction();
- }
-
- // weak type pass
- for (pos = 0; pos < l; pos++) {
-
- int i;
-
- switch (at(pos).direction()) {
- case QChar::DirEN:
- i = pos-1;
- while ((i >= 0) &&
- !(at(i).direction() == QChar::DirAN) &&
- !(at(i).direction() == QChar::DirAL) &&
- !(at(i).direction() == QChar::DirB))
- i--;
-
- if ((i >= 0) &&
- ((at(i).direction() == QChar::DirAN) ||
- (at(i).direction() == QChar::DirAL)))
- dir[pos] = QChar::DirAN;
-
- break;
- case QChar::DirES:
- case QChar::DirCS:
- if ((pos > 0) && (pos < l-1) &&
- (dir[pos-1] == dir[pos+1]))
- dir[pos] = dir[pos-1];
- else
- dir[pos] = QChar::DirON;
-
- break;
- case QChar::DirET:
- if (((pos > 0) && (dir[pos-1] == QChar::DirEN)) ||
- ((pos < l-1) && (dir[pos+1] == QChar::DirEN)))
- dir[pos] = QChar::DirEN;
- else
- dir[pos] = QChar::DirON;
-
- break;
- case QChar::DirAL:
- dir[pos] = QChar::DirR;
- break;
- default:
- break;
- }
- }
-
- // neutral type pass
- for (pos = 0; pos < l; pos++) {
- QChar::Direction left,right; // declaring l here shadowed previous l
-
- if (is_neutral(dir[pos])) {
- if (pos > 0)
- left = dir[pos-1];
- else
- left = (base == 0 ? QChar::DirL : QChar::DirR);
-
- int i = pos;
-
- while ((i < (int)l-1) && is_neutral(dir[i+1]))
- i++;
-
- if (i < (int)l-1)
- right = dir[i+1];
- else
- right = (base == 0 ? QChar::DirL : QChar::DirR);
-
- for (int j=pos; j <= i; j++) {
- int a = 1, b = 1;
- while ((a < 5) && (left != resolv[0][a]))
- a++;
- while ((b < 5) && (right != resolv[0][b]))
- b++;
- if ((a == 5) || (b == 5))
- dir[j] = (base == 0 ? QChar::DirL : QChar::DirR);
- else
- dir[j] = resolv[a][b];
-
- if (dir[j] == (QChar::Direction)(-1))
- dir[j] = (base == 0 ? QChar::DirL : QChar::DirR);
- }
- }
- }
-
- // implicit level pass
- QChar::Direction prec = (base == 0 ? QChar::DirL : QChar::DirR);
-
- for (pos = 0; pos < l; pos++) {
- if (level[pos] % 2) {
- switch (dir[pos]) {
- case QChar::DirL:
- case QChar::DirAN:
- case QChar::DirEN:
- level[pos] += 1;
- break;
- default:
- break;
- }
- } else {
- switch (dir[pos]) {
- case QChar::DirL:
- // do nothing
- break;
- case QChar::DirR:
- level[pos] += 1;
- break;
- case QChar::DirEN:
- if (prec == QChar::DirL)
- continue;
- // fall through
- case QChar::DirAN:
- level[pos] += 2;
- break;
- default:
- break;
- }
- }
-
- prec = dir[pos];
- }
-
- // now do the work!
- QString ret(*this);
- reverse(ret, level, index, index+len);
-
- delete [] level;
- delete [] dir;
-
- return ret;
-#else
- return mid(index,len);
-#endif
-}
-
-
-
-// These macros are used for efficient allocation of QChar strings.
-// IMPORTANT! If you change these, make sure you also change the
-// "delete unicode" statement in ~QStringData() in qstring.h correspondingly!
-
-#define QT_ALLOC_QCHAR_VEC( N ) (QChar*) new char[ sizeof(QChar)*( N ) ]
-#define QT_DELETE_QCHAR_VEC( P ) delete[] ((char*)( P ))
-
-
-/*!
- This utility function converts the 8-bit string
- \a ba to Unicode, returning the result.
-
- The caller is responsible for deleting the return value with delete[].
-*/
-
-QChar* QString::asciiToUnicode( const QByteArray& ba, uint* len )
-{
- if ( ba.isNull() ) {
- if ( len )
- *len = 0;
- return 0;
- }
- int l = 0;
- while ( l < (int)ba.size() && ba[l] )
- l++;
- const char* str = ba.data();
- QChar *uc = new QChar[ l ]; // Can't use macro, since function is public
- QChar *result = uc;
- if ( len )
- *len = l;
- while (l--)
- *uc++ = *str++;
- return result;
-}
-
-static QChar* internalAsciiToUnicode( const QByteArray& ba, uint* len )
-{
- if ( ba.isNull() ) {
- if ( len )
- *len = 0;
- return 0;
- }
- int l = 0;
- while ( l < (int)ba.size() && ba[l] )
- l++;
- const char* str = ba.data();
- QChar *uc = QT_ALLOC_QCHAR_VEC( l );
- QChar *result = uc;
- if ( len )
- *len = l;
- while (l--)
- *uc++ = *str++;
- return result;
-}
-
-/*!
- This utility function converts the NUL-terminated 8-bit string
- \a str to Unicode, returning the result and setting \a len to
- the length of the Unicode string.
-
- The caller is responsible for deleting the return value with delete[].
-*/
-
-QChar* QString::asciiToUnicode( const char *str, uint* len, uint maxlen )
-{
- QChar* result = 0;
- uint l = 0;
- if ( str ) {
- if ( maxlen != (uint)-1 ) {
- while ( l < maxlen && str[l] )
- l++;
- } else {
- // Faster?
- l = qstrlen(str);
- }
- QChar *uc = new QChar[ l ]; // Can't use macro since function is public
- result = uc;
- uint i = l;
- while ( i-- )
- *uc++ = *str++;
- }
- if ( len )
- *len = l;
- return result;
-}
-
-static QChar* internalAsciiToUnicode( const char *str, uint* len,
- uint maxlen = (uint)-1 )
-{
- QChar* result = 0;
- uint l = 0;
- if ( str ) {
- if ( maxlen != (uint)-1 ) {
- while ( l < maxlen && str[l] )
- l++;
- } else {
- // Faster?
- l = qstrlen(str);
- }
- QChar *uc = QT_ALLOC_QCHAR_VEC( l );
- result = uc;
- uint i = l;
- while ( i-- )
- *uc++ = *str++;
- }
- if ( len )
- *len = l;
- return result;
-}
-
-/*!
- This utility function converts \a l 16-bit characters from
- \a uc to ASCII, returning a NUL-terminated string.
-
- The caller is responsible for deleting the string with delete[].
-*/
-char* QString::unicodeToAscii(const QChar *uc, uint l)
-{
- if (!uc) {
- return 0;
- }
- char *a = new char[l+1];
- char *result = a;
- while (l--)
- *a++ = *uc++;
- *a = '\0';
- return result;
-}
-
-static uint computeNewMax( uint len )
-{
- if (len >= 0x80000000)
- return len;
-
- uint newMax = 4;
- while ( newMax < len )
- newMax *= 2;
- // try to save some memory
- if ( newMax >= 1024 * 1024 && len <= newMax - (newMax >> 2) )
- newMax -= newMax >> 2;
- return newMax;
-}
-
-/*!
- Returns the QString as a zero terminated array of unsigned shorts
- if the string is not null; otherwise returns zero.
-
- The result remains valid so long as one unmodified
- copy of the source string exists.
- */
-const unsigned short *QString::ucs2() const
-{
- if ( ! d->unicode )
- return 0;
- unsigned int len = d->len;
- if ( d->maxl < len + 1 ) {
- // detach, grow or shrink
- uint newMax = computeNewMax( len + 1 );
- QChar* nd = QT_ALLOC_QCHAR_VEC( newMax );
- if ( nd ) {
- if ( d->unicode )
- memcpy( nd, d->unicode, sizeof(QChar)*len );
- ((QString *)this)->deref();
- ((QString *)this)->d = new QStringData( nd, len, newMax );
- }
- }
- d->unicode[len] = 0;
- return (unsigned short *) d->unicode;
-}
-
-/*!
- Constructs a string that is a deep copy of \a str, interpreted as a
- UCS2 encoded, zero terminated, Unicode string.
-
- If \a str is 0, then a null string is created.
- \sa isNull()
- */
-QString QString::fromUcs2( const unsigned short *str )
-{
- if ( !str ) {
- return QString::null;
- } else {
- int length = 0;
- while ( str[length] != 0 )
- length++;
- QChar* uc = QT_ALLOC_QCHAR_VEC( length );
- memcpy( uc, str, length*sizeof(QChar) );
- return QString( new QStringData( uc, length, length ), TRUE );
- }
-}
-
-
-/*****************************************************************************
- QString member functions
- *****************************************************************************/
-
-/*!
- \class QString qstring.h
-
- \brief The QString class provides an abstraction of Unicode text and
- the classic C null-terminated char array (<var>char*</var>).
-
- \ingroup tools
- \ingroup shared
-
- QString uses \link shclass.html implicit sharing\endlink, and so it
- is very efficient and easy to use.
-
- In all QString methods that take <var>const char*</var> parameters,
- the <var>const char*</var> is interpreted as a classic C-style
- 0-terminated ASCII string. It is legal for the <var>const
- char*</var> parameter to be 0. The results are undefined if the
- <var>const char*</var> string is not 0-terminated. Functions that
- copy classic C strings into a QString will not copy the terminating
- 0-character. The QChar array of the QString (as returned by
- unicode()) is not terminated by a null.
-
- A QString that has not been assigned to anything is \a null, i.e. both
- the length and data pointer is 0. A QString that references the empty
- string ("", a single '\0' char) is \a empty. Both null and empty
- QStrings are legal parameters to the methods. Assigning <var>const char
- * 0</var> to QString gives a null QString.
-
- Note that if you find that you are mixing usage of QCString, QString,
- and QByteArray, this causes lots of unnecessary copying and might
- indicate that the true nature of the data you are dealing with is
- uncertain. If the data is NUL-terminated 8-bit data, use QCString;
- if it is unterminated (ie. contains NULs) 8-bit data, use QByteArray;
- if it is text, use QString.
-
- \sa QChar \link shclass.html Shared classes\endlink
-*/
-
-Q_EXPORT QStringData *QString::shared_null = 0;
-//QT_STATIC_CONST_IMPL QString QString::null;
-QT_STATIC_CONST_IMPL QChar QChar::null;
-QT_STATIC_CONST_IMPL QChar QChar::replacement((ushort)0xfffd);
-QT_STATIC_CONST_IMPL QChar QChar::byteOrderMark((ushort)0xfeff);
-QT_STATIC_CONST_IMPL QChar QChar::byteOrderSwapped((ushort)0xfffe);
-QT_STATIC_CONST_IMPL QChar QChar::nbsp((ushort)0x00a0);
-
-#if defined(_CC_MSVC_) && _MSC_VER <= 1300
-const QString::Null QString::null;
-#else
-const QString::Null QString::null = { };
-#endif
-
-
-QStringData* QString::makeSharedNull()
-{
- return shared_null=new QStringData;
-}
-
-// Uncomment this to get some useful statistics.
-// #define Q2HELPER(x) x
-
-#ifdef Q2HELPER
-static int stat_construct_charstar=0;
-static int stat_construct_charstar_size=0;
-static int stat_construct_null=0;
-static int stat_construct_int=0;
-static int stat_construct_int_size=0;
-static int stat_construct_ba=0;
-static int stat_get_ascii=0;
-static int stat_get_ascii_size=0;
-static int stat_copy_on_write=0;
-static int stat_copy_on_write_size=0;
-static int stat_fast_copy=0;
-Q_EXPORT void qt_qstring_stats()
-{
- qDebug("construct_charstar = %d (%d chars)", stat_construct_charstar, stat_construct_charstar_size);
- qDebug("construct_null = %d", stat_construct_null);
- qDebug("construct_int = %d (%d chars)", stat_construct_int, stat_construct_int_size);
- qDebug("construct_ba = %d", stat_construct_ba);
- qDebug("get_ascii = %d (%d chars)", stat_get_ascii, stat_get_ascii_size);
- qDebug("copy_on_write = %d (%d chars)", stat_copy_on_write, stat_copy_on_write_size);
- qDebug("fast_copy = %d", stat_fast_copy);
-}
-#else
-#define Q2HELPER(x)
-#endif
-
-/*!
- \fn QString::QString()
-
- Constructs a null string.
- \sa isNull()
-*/
-
-/*!
- Constructs a string containing the one character \a ch.
-*/
-QString::QString( QChar ch )
-{
- d = new QStringData( QT_ALLOC_QCHAR_VEC( 1 ), 1, 1 );
- d->unicode[0] = ch;
-}
-
-/*!
- Constructs an implicitly-shared copy of \a s.
-*/
-QString::QString( const QString &s ) :
- d(s.d)
-{
- Q2HELPER(stat_fast_copy++)
- d->ref();
-}
-
-/*!
- Private function.
-
- Constructs a string with preallocated space for \a size characters.
-
- The string is empty.
-
- \sa isNull()
-*/
-
-QString::QString( int size, bool /*dummy*/ )
-{
- if ( size ) {
- Q2HELPER(stat_construct_int++)
- int l = size;
- Q2HELPER(stat_construct_int_size+=l)
- QChar* uc = QT_ALLOC_QCHAR_VEC( l );
- d = new QStringData( uc, 0, l );
- } else {
- Q2HELPER(stat_construct_null++)
- d = shared_null ? shared_null : (shared_null=new QStringData);
- d->ref();
- }
-}
-
-/*!
- Constructs a string that is a deep copy of \a ba interpreted as
- a classic C string.
-*/
-
-QString::QString( const QByteArray& ba )
-{
- Q2HELPER(stat_construct_ba++)
- uint l;
- QChar *uc = internalAsciiToUnicode(ba,&l);
- d = new QStringData(uc,l,l);
-}
-
-QString::QString( const QCString& ba )
-{
- //Q2HELPER(stat_construct_ba++)
- //uint l;
- //QChar *uc = internalAsciiToUnicode(ba,&l);
- //d = new QStringData(uc,l,l);
- Q2HELPER(stat_fast_copy++)
- QString s = QString::fromUtf8(ba.data(),ba.length());
- d = s.d;
- d->ref();
-}
-
-/*!
- Constructs a string that is a deep copy of the
- first \a length QChar in the array \a unicode.
-
- If \a unicode and \a length are 0, a null string is created.
-
- If only \a unicode is 0, the string is empty, but has
- \a length characters of space preallocated - QString expands
- automatically anyway, but this may speed some cases up a little.
-
- \sa isNull()
-*/
-
-QString::QString( const QChar* unicode, uint length )
-{
- if ( !unicode && !length ) {
- d = shared_null ? shared_null : makeSharedNull();
- d->ref();
- } else {
- QChar* uc = QT_ALLOC_QCHAR_VEC( length );
- if ( unicode )
- memcpy(uc, unicode, length*sizeof(QChar));
- d = new QStringData(uc,unicode ? length : 0,length);
- }
-}
-
-/*!
- Constructs a string that is a deep copy of \a str, interpreted as a
- classic C string.
-
- If \a str is 0 a null string is created.
-
- This is a cast constructor, but it is perfectly safe: converting a Latin1
- const char* to QString preserves all the information.
- You can disable this constructor by
- defining QT_NO_CAST_ASCII when you compile your applications.
- You can also make QString objects by using setLatin1()/fromLatin1(), or
- fromLocal8Bit(), fromUtf8(), or whatever encoding is appropriate for
- the 8-bit data you have.
-
- \sa isNull()
-*/
-
-QString::QString( const char *str )
-{
- //Q2HELPER(stat_construct_charstar++)
- //uint l;
- //QChar *uc = internalAsciiToUnicode(str,&l);
- //Q2HELPER(stat_construct_charstar_size+=l)
- //d = new QStringData(uc,l,l);
- Q2HELPER(stat_fast_copy++)
- QString s = QString::fromUtf8(str);
- d = s.d;
- d->ref();
-}
-
-
-/*! \fn QString::~QString()
-
-Destroys the string and frees the "real" string, if this was the last
-copy of that string.
-*/
-
-
-/*!
- Deallocates any space reserved solely by this QString.
-*/
-
-void QString::real_detach()
-{
- setLength( length() );
-}
-
-void QString::deref()
-{
- if ( d->deref() ) {
- if ( d == shared_null )
- shared_null = 0;
- delete d;
- d = 0; // helps debugging
- }
-}
-
-void QStringData::deleteSelf()
-{
- delete this;
-}
-
-/*!
- \fn QString& QString::operator=( QChar c )
- Sets the string to contain just the single character \a c.
-*/
-
-/*!
- \fn QString& QString::operator=( char c )
- Sets the string to contain just the single character \a c.
-*/
-
-/*!
- Assigns a shallow copy of \a s to this string and returns a
- reference to this string.
-*/
-QString &QString::operator=( const QString &s )
-{
- Q2HELPER(stat_fast_copy++)
- s.d->ref();
- deref();
- d = s.d;
- return *this;
-}
-
-/*!
- Assigns a deep copy of \a cs, interpreted as a classic C string, to
- this string and returns a reference to this string.
-*/
-QString &QString::operator=( const QCString& cs )
-{
- return setLatin1(cs);
-}
-
-
-/*!
- Assigns a deep copy of \a str, interpreted as a classic C string,
- to this string and returns a reference to this string.
-
- If \a str is 0 a null string is created.
-
- \sa isNull()
-*/
-QString &QString::operator=( const char *str )
-{
- return setLatin1(str);
-}
-
-
-/*!
- \fn bool QString::isNull() const
-
- Returns TRUE if the string is null.
- A null string is also an empty string.
-
- Example:
- \code
- QString a; // a.unicode() == 0, a.length() == 0
- QString b = ""; // b.unicode() == "", b.length() == 0
- a.isNull(); // TRUE, because a.unicode() == 0
- a.isEmpty(); // TRUE, because a.length() == 0
- b.isNull(); // FALSE, because b.unicode() != 0
- b.isEmpty(); // TRUE, because b.length() == 0
- \endcode
-
- \sa isEmpty(), length()
-*/
-
-/*!
- \fn bool QString::isEmpty() const
-
- Returns TRUE if the string is empty, i.e. if length() == 0.
- An empty string is not always a null string.
-
- See example in isNull().
-
- \sa isNull(), length()
-*/
-
-/*!
- \fn uint QString::length() const
-
- Returns the length of the string.
-
- Null strings and empty strings have zero length.
-
- \sa isNull(), isEmpty()
-*/
-
-/*!
- Truncates the string at position \a newLen if newLen is less than the
- current length . Otherwise, nothing happens.
-
- Example:
- \code
- QString s = "truncate this string";
- s.truncate( 5 ); // s == "trunc"
- \endcode
-
- In Qt 1.x, it was possible to "truncate" a string to a longer
- length. This is no longer possible.
-
-*/
-
-void QString::truncate( uint newLen )
-{
- if ( newLen < d->len )
- setLength( newLen );
-}
-
-/*### Make this public in 3.0
- Ensures that at least \a newLen characters are allocated, and
- sets the length to \a newLen. This function always detaches the
- string from other references to the same data. Any new space
- allocated is \e not defined.
-
- If \a newLen is 0, this string becomes empty, unless this string is
- null, in which case it remains null.
-
- \sa truncate(), isNull(), isEmpty()
-*/
-
-void QString::setLength( uint newLen )
-{
- if ( d->count != 1 || newLen > d->maxl || // detach, grow, or
- ( newLen*4 < d->maxl && d->maxl > 4 ) ) { // shrink
- Q2HELPER(stat_copy_on_write++)
- Q2HELPER(stat_copy_on_write_size+=d->len)
- uint newMax = 4;
- while ( newMax < newLen )
- newMax *= 2;
- QChar* nd = QT_ALLOC_QCHAR_VEC( newMax );
- uint len = QMIN( d->len, newLen );
- if ( d->unicode )
- memcpy( nd, d->unicode, sizeof(QChar)*len );
- deref();
- d = new QStringData( nd, newLen, newMax );
- } else {
- d->len = newLen;
- d->dirtyascii = 1;
- }
-}
-
-/*! Returns a string equal to this one, but with the lowest-numbered
- occurrence of \c %i (for a positive integer i) replaced by \a a.
-
- \code
- label.setText( tr("Rename %1 to %2?").arg(oldName).arg(newName) );
- \endcode
-
- \a fieldwidth is the minimum amount of space \a a is padded to. A
- positive value produces right-aligned text, while a negative value
- produces left aligned text.
-
- \warning Using arg() for constructing "real" sentences
- programmatically is likely to lead to translation problems.
- Inserting objects like numbers or file names is fairly safe.
-
- \warning Relying on spaces to create alignment is prone to lead to
- translation problems.
-
- If there is no \c %i pattern, a warning message (qWarning()) is
- printed and the text as appended at the end of the string. This is
- error recovery and should not occur in correct code.
-
- \sa QObject::tr()
-*/
-QString QString::arg(const QString& a, int fieldwidth) const
-{
- int pos, len;
- QString r = *this;
-
- if ( !findArg( pos, len ) ) {
- qWarning( "QString::arg(): Argument missing: %s, %s",
- (const char *)ascii(), (const char *)ascii() );
- // Make sure the text at least appears SOMEWHERE
- r += ' ';
- pos = r.length();
- len = 0;
- }
-
- r.replace( pos, len, a );
- if ( fieldwidth < 0 ) {
- QString s;
- while ( (uint)-fieldwidth > a.length() ) {
- s += ' ';
- fieldwidth++;
- }
- r.insert( pos + a.length(), s );
- } else if ( fieldwidth ) {
- QString s;
- while ( (uint)fieldwidth > a.length() ) {
- s += ' ';
- fieldwidth--;
- }
- r.insert( pos, s );
- }
-
- return r;
-}
-
-
-/*! \overload
-
- \a a is expressed in to \a base notation, which is decimal by
- default and must be in the range 2-36 inclusive.
-*/
-QString QString::arg(long a, int fieldwidth, int base) const
-{
- return arg( QString::number( a, base ), fieldwidth );
-}
-
-/*! \overload
-
- \a a is expressed in to \a base notation, which is decimal by
- default and must be in the range 2-36 inclusive.
-*/
-QString QString::arg(ulong a, int fieldwidth, int base) const
-{
- return arg( QString::number( a, base ), fieldwidth );
-}
-
-/*!
- \overload QString QString::arg(int a, int fieldwidth, int base) const
-
- \a a is expressed in to \a base notation, which is decimal by
- default and must be in the range 2-36 inclusive.
-
-*/
-
-/*!
- \overload QString QString::arg(uint a, int fieldwidth, int base) const
-
- \a a is expressed in to \a base notation, which is decimal by
- default and must be in the range 2-36 inclusive.
-*/
-
-/*!
- \overload QString QString::arg(short a, int fieldwidth, int base) const
-
- \a a is expressed in to \a base notation, which is decimal by
- default and must be in the range 2-36 inclusive.
-*/
-
-/*!
- \overload QString QString::arg(ushort a, int fieldwidth, int base) const
-
- \a a is expressed in to \a base notation, which is decimal by
- default and must be in the range 2-36 inclusive.
-*/
-
-
-/*! \overload
-
- \a a is assumed to be in the Latin1 character set.
-*/
-QString QString::arg(char a, int fieldwidth) const
-{
- QString c;
- c += a;
- return arg( c, fieldwidth );
-}
-
-/*! \overload
-*/
-QString QString::arg(QChar a, int fieldwidth) const
-{
- QString c;
- c += a;
- return arg( c, fieldwidth );
-}
-
-/*! \overload
-
- \a is formatted according to the \a fmt format specified, which is
- 'g' by default and can be any of 'f', 'F', 'e', 'E', 'g' or 'G', all
- of which have the same meaning as for sprintf(). \a prec determines
- the precision, just as for number() and sprintf().
-*/
-QString QString::arg(double a, int fieldwidth, char fmt, int prec) const
-{
- return arg( QString::number( a, fmt, prec ), fieldwidth );
-}
-
-
-/*!
- Just 1-digit arguments.
-*/
-bool QString::findArg(int& pos, int& len) const
-{
- char lowest=0;
- for (uint i=0; i<length(); i++) {
- if ( at(i) == '%' && i+1<length() ) {
- char dig = at(i+1);
- if ( dig >= '0' && dig <= '9' ) {
- if ( !lowest || dig < lowest ) {
- lowest = dig;
- pos = i;
- len = 2;
- }
- }
- }
- }
- return lowest != 0;
-}
-
-/*!
- Safely builds a formatted string from a format string and an
- arbitrary list of arguments. The format string supports all
- the escape sequences of printf() in the standard C library.
-
- The %s escape sequence expects a utf8() encoded string.
- The format string \e cformat is expected to be in latin1. If you need a unicode
- format string, use QString::arg() instead. For typesafe
- string building, with full Unicode support, you can use QTextOStream
- like this:
-
- \code
- QString str;
- QString s = ...;
- int x = ...;
- QTextOStream(&str) << s << " : " << x;
- \endcode
-
- For \link QObject::tr() translations,\endlink especially if the
- strings contains more than one escape sequence, you should consider
- using the arg() function instead. This allows the order of the
- replacements to be controlled by the translator, and has Unicode
- support.
-
- \sa arg()
-*/
-
-QString &QString::sprintf( const char* cformat, ... )
-{
- va_list ap;
- va_start( ap, cformat );
-
- if ( !cformat || !*cformat ) {
- // Qt 1.x compat
- *this = QString::fromLatin1( "" );
- return *this;
- }
- QString format = QString::fromLatin1( cformat );
-
- static QRegExp *escape = 0;
- if (!escape)
- escape = new QRegExp( "%#?0?-? ?\\+?'?[0-9*]*\\.?[0-9*]*h?l?L?q?Z?" );
-
- QString result;
- uint last = 0;
-
- int len = 0;
- int pos;
- while ( 1 ) {
- pos = escape->match( cformat, last, &len );
- // Non-escaped text
- if ( pos > (int)last )
- result += format.mid(last,pos-last);
- if ( pos < 0 ) {
- // The rest
- if ( last < format.length() )
- result += format.mid(last);
- break;
- }
- last = pos + len + 1;
-
- // Escape
- QString f = format.mid( pos, len );
- uint width, decimals;
- int params = 0;
- int wpos = f.find('*');
- if ( wpos >= 0 ) {
- params++;
- width = va_arg( ap, int );
- if ( f.find('*', wpos + 1) >= 0 ) {
- decimals = va_arg( ap, int );
- params++;
- } else {
- decimals = 0;
- }
- } else {
- decimals = width = 0;
- }
- QString replacement;
- if ( format[pos+len] == 's' ||
- format[pos+len] == 'S' ||
- format[pos+len] == 'c' )
- {
- bool rightjust = ( f.find('-') < 0 );
- // Yes, %-5s really means left adjust in sprintf
-
- if ( wpos < 0 ) {
- QRegExp num( "[0-9]+" );
- QRegExp dot( "\\." );
- int nlen;
- int p = num.match( f.data(), 0, &nlen );
- int q = dot.match( f.data(), 0 );
- if ( q < 0 || (p < q && p >= 0) )
- width = f.mid( p, nlen ).toInt();
- if ( q >= 0 ) {
- p = num.match( f.data(), q );
- // "decimals" is used to specify string truncation
- if ( p >= 0 )
- decimals = f.mid( p, nlen ).toInt();
- }
- }
-
- if ( format[pos+len] == 's' ) {
-#ifndef QT_NO_TEXTCODEC
- QString s = QString::fromUtf8(va_arg(ap, char*));
-#else
- QString s = QString::fromLatin1(va_arg(ap, char*));
-#endif
- if ( decimals <= 0 )
- replacement = s;
- else
- replacement = s.left(decimals);
- } else {
- int ch = va_arg(ap, int);
- replacement = QChar((ushort)ch);
- }
- if ( replacement.length() < width ) {
- replacement = rightjust
- ? replacement.rightJustify(width)
- : replacement.leftJustify(width);
- }
- } else if ( format[pos+len] == '%' ) {
- replacement = '%';
- } else if ( format[pos+len] == 'n' ) {
- int* n = va_arg(ap, int*);
- *n = result.length();
- } else {
- char in[64], out[330] = "";
- strncpy(in,f.latin1(),63);
- char fch = format[pos+len].latin1();
- in[f.length()] = fch;
- switch ( fch ) {
- case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': {
- int value = va_arg(ap, int);
- switch (params) {
- case 0: ::sprintf( out, in, value ); break;
- case 1: ::sprintf( out, in, width, value ); break;
- case 2: ::sprintf( out, in, width, decimals, value ); break;
- }
- } break;
- case 'e': case 'E': case 'f': case 'g': case 'G': {
- double value = va_arg(ap, double);
- switch (params) {
- case 0: ::sprintf( out, in, value ); break;
- case 1: ::sprintf( out, in, width, value ); break;
- case 2: ::sprintf( out, in, width, decimals, value ); break;
- }
- } break;
- case 'p': {
- void* value = va_arg(ap, void*);
- switch (params) {
- case 0: ::sprintf( out, in, value ); break;
- case 1: ::sprintf( out, in, width, value ); break;
- case 2: ::sprintf( out, in, width, decimals, value ); break;
- }
- } break;
- }
- replacement = QString::fromLatin1(out);
- }
- result += replacement;
- }
- *this = result;
-
- va_end( ap );
- return *this;
-}
-
-/*!
- Fills the string with \a len characters of value \a c.
-
- If \a len is negative, the current string length is used.
-*/
-
-void QString::fill( QChar c, int len )
-{
- if ( len < 0 )
- len = length();
- if ( len == 0 ) {
- *this = "";
- } else {
- deref();
- QChar * nd = QT_ALLOC_QCHAR_VEC( len );
- d = new QStringData(nd,len,len);
- while (len--) *nd++ = c;
- }
-}
-
-
-/*!
- \fn QString QString::copy() const
-
- \obsolete
-
- Returns a deep copy of this string.
-
- Doing this is redundant in Qt 2.x, since QString is implicitly
- shared, and so will automatically be deeply copied as necessary.
-*/
-
-/*!
- Finds the first occurrence of the character \a c, starting at
- position \a index. If \a index is -1, the search starts at the
- last character; if -2, at the next to last character; etc.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive
- if \a cs is FALSE.
-
- Returns the position of \a c, or -1 if \a c could not be found.
-*/
-
-int QString::find( QChar c, int index, bool cs ) const
-{
- if ( index < 0 )
- index += length();
- if ( (uint)index >= length() ) // index outside string
- return -1;
- const QChar *uc;
- uc = unicode()+index;
- int n = length()-index;
- if ( cs ) {
- while ( n-- && *uc != c )
- uc++;
- } else {
- c = c.lower();
- while ( n-- && uc->lower() != c )
- uc++;
- }
- if ( uint(uc - unicode()) >= length() )
- return -1;
- return (int)(uc - unicode());
-}
-
-/*!
- Finds the first occurrence of the string \a str, starting at position
- \a index. If \a index is -1, the search starts at the last character;
- if -2, at the next to last character; etc.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive if
- \a cs is FALSE.
-
- Returns the position of \a str, or -1 if \a str could not be found.
-*/
-
-int QString::find( const QString& str, int index, bool cs ) const
-{
- /*
- We use some weird hashing for efficiency's sake. Instead of
- comparing strings, we compare the hash value of str with that of
- a part of this QString. Only if that matches, we call ucstrncmp
- or ucstrnicmp.
-
- The hash value of a string is the sum of the cells of its
- QChars.
- */
- if ( index < 0 )
- index += length();
- int lstr = str.length();
- int lthis = length() - index;
- if ( (uint)lthis > length() )
- return -1;
- int delta = lthis - lstr;
- if ( delta < 0 )
- return -1;
-
- const QChar *uthis = unicode() + index;
- const QChar *ustr = str.unicode();
- uint hthis = 0;
- uint hstr = 0;
- int i;
- if ( cs ) {
- for ( i = 0; i < lstr; i++ ) {
- hthis += uthis[i].cell();
- hstr += ustr[i].cell();
- }
- i = 0;
- while ( TRUE ) {
- if ( hthis == hstr && ucstrncmp(uthis + i, ustr, lstr) == 0 )
- return index + i;
- if ( i == delta )
- return -1;
- hthis += uthis[i + lstr].cell();
- hthis -= uthis[i].cell();
- i++;
- }
- } else {
- for ( i = 0; i < lstr; i++ ) {
- hthis += uthis[i].lower().cell();
- hstr += ustr[i].lower().cell();
- }
- i = 0;
- while ( TRUE ) {
- if ( hthis == hstr && ucstrnicmp(uthis + i, ustr, lstr) == 0 )
- return index + i;
- if ( i == delta )
- return -1;
- hthis += uthis[i + lstr].lower().cell();
- hthis -= uthis[i].lower().cell();
- i++;
- }
- }
-#if defined(Q_SPURIOUS_NON_VOID_WARNING)
- return -1;
-#endif
-}
-
-/*!
- \fn int QString::findRev( const char* str, int index ) const
-
- Equivalent to findRev(QString(str), index).
-*/
-
-/*!
- \fn int QString::find( const char* str, int index ) const
-
- Equivalent to find(QString(str), index).
-*/
-
-/*!
- Finds the first occurrence of the character \a c, starting at
- position \a index and searching backwards. If \a index is -1,
- the search starts at the last character; if -2, at the next to
- last character; etc.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive if \a
- cs is FALSE.
-
- Returns the position of \a c, or -1 if \a c could not be found.
-*/
-
-int QString::findRev( QChar c, int index, bool cs ) const
-{
- QString t( c );
- return findRev( t, index, cs );
-}
-
-/*!
- Finds the first occurrence of the string \a str, starting at
- position \a index and searching backwards. If \a index is -1,
- the search starts at the last character; -2, at the next to last
- character; etc.
-
- The search is case sensitive if \a cs is TRUE, or case insensitive if \e
- cs is FALSE.
-
- Returns the position of \a str, or -1 if \a str could not be found.
-*/
-
-int QString::findRev( const QString& str, int index, bool cs ) const
-{
- /*
- See QString::find() for explanations.
- */
- int lthis = length();
- if ( index < 0 )
- index += lthis;
-
- int lstr = str.length();
- int delta = lthis - lstr;
- if ( index < 0 || index > lthis || delta < 0 )
- return -1;
- if ( index > delta )
- index = delta;
-
- const QChar *uthis = unicode();
- const QChar *ustr = str.unicode();
- uint hthis = 0;
- uint hstr = 0;
- int i;
- if ( cs ) {
- for ( i = 0; i < lstr; i++ ) {
- hthis += uthis[index + i].cell();
- hstr += ustr[i].cell();
- }
- i = index;
- while ( TRUE ) {
- if ( hthis == hstr && ucstrncmp(uthis + i, ustr, lstr) == 0 )
- return i;
- if ( i == 0 )
- return -1;
- i--;
- hthis -= uthis[i + lstr].cell();
- hthis += uthis[i].cell();
- }
- } else {
- for ( i = 0; i < lstr; i++ ) {
- hthis += uthis[index + i].lower().cell();
- hstr += ustr[i].lower().cell();
- }
- i = index;
- while ( TRUE ) {
- if ( hthis == hstr && ucstrnicmp(uthis + i, ustr, lstr) == 0 )
- return i;
- if ( i == 0 )
- return -1;
- i--;
- hthis -= uthis[i + lstr].lower().cell();
- hthis += uthis[i].lower().cell();
- }
- }
-#if defined(Q_SPURIOUS_NON_VOID_WARNING)
- return -1;
-#endif
-}
-
-
-/*!
- Returns the number of times the character \a c occurs in the string.
-
- The match is case sensitive if \a cs is TRUE, or case insensitive if \a cs
- is FALSE.
-*/
-
-int QString::contains( QChar c, bool cs ) const
-{
- int count = 0;
- const QChar *uc = unicode();
- if ( !uc )
- return 0;
- int n = length();
- if ( cs ) { // case sensitive
- while ( n-- )
- if ( *uc++ == c )
- count++;
- } else { // case insensitive
- c = c.lower();
- while ( n-- ) {
- if ( uc->lower() == c )
- count++;
- uc++;
- }
- }
- return count;
-}
-
-/*!
- \overload
-*/
-int QString::contains( const char* str, bool cs ) const
-{
- return contains(QString(str),cs);
-}
-
-/*!
- \overload int QString::contains (char c, bool cs) const
-*/
-
-/*!
- \overload int QString::find (char c, int index, bool cs) const
-
-*/
-
-/*!
- \overload int QString::findRev (char c, int index, bool cs) const
-
-*/
-
-/*!
- Returns the number of times \a str occurs in the string.
-
- The match is case sensitive if \a cs is TRUE, or case insensitive if \e
- cs is FALSE.
-
- This function counts overlapping substrings, for example, "banana"
- contains two occurrences of "ana".
-
- \sa findRev()
-*/
-
-int QString::contains( const QString &str, bool cs ) const
-{
- int count = 0;
- const QChar *uc = unicode();
- if ( !uc )
- return 0;
- int len = str.length();
- int n = length();
- while ( n-- ) { // counts overlapping strings
- // ### Doesn't account for length of this - searches over "end"
- if ( cs ) {
- if ( ucstrncmp( uc, str.unicode(), len ) == 0 )
- count++;
- } else {
- if ( ucstrnicmp(uc, str.unicode(), len) == 0 )
- count++;
- }
- uc++;
- }
- return count;
-}
-
-/*!
- Returns a substring that contains the \a len leftmost characters
- of the string.
-
- The whole string is returned if \a len exceeds the length of the
- string.
-
-
- Example:
- \code
- QString s = "Pineapple";
- QString t = s.left( 4 ); // t == "Pine"
- \endcode
-
- \sa right(), mid(), isEmpty()
-*/
-
-QString QString::left( uint len ) const
-{
- if ( isEmpty() ) {
- return QString();
- } else if ( len == 0 ) { // ## just for 1.x compat:
- return QString::fromLatin1("");
- } else if ( len > length() ) {
- return *this;
- } else {
- QString s( len, TRUE );
- memcpy( s.d->unicode, d->unicode, len*sizeof(QChar) );
- s.d->len = len;
- return s;
- }
-}
-
-/*!
- Returns a substring that contains the \a len rightmost characters
- of the string.
-
- The whole string is returned if \a len exceeds the length of the
- string.
-
- Example:
- \code
- QString s = "Pineapple";
- QString t = s.right( 5 ); // t == "apple"
- \endcode
-
- \sa left(), mid(), isEmpty()
-*/
-
-QString QString::right( uint len ) const
-{
- if ( isEmpty() ) {
- return QString();
- } else if ( len == 0 ) { // ## just for 1.x compat:
- return QString::fromLatin1("");
- } else {
- uint l = length();
- if ( len > l )
- len = l;
- QString s( len, TRUE );
- memcpy( s.d->unicode, d->unicode+(l-len), len*sizeof(QChar) );
- s.d->len = len;
- return s;
- }
-}
-
-/*!
- Returns a substring that contains the \a len characters of this
- string, starting at position \a index.
-
- Returns a null string if the string is empty or \a index is out
- of range. Returns the whole string from \a index if \a index+len exceeds
- the length of the string.
-
- Example:
- \code
- QString s = "Five pineapples";
- QString t = s.mid( 5, 4 ); // t == "pine"
- \endcode
-
- \sa left(), right()
-*/
-
-QString QString::mid( uint index, uint len ) const
-{
- uint slen = length();
- if ( isEmpty() || index >= slen ) {
- return QString();
- } else if ( len == 0 ) { // ## just for 1.x compat:
- return QString::fromLatin1("");
- } else {
- if ( len > slen-index )
- len = slen - index;
- if ( index == 0 && len == length() )
- return *this;
- const QChar *p = unicode()+index;
- QString s( len, TRUE );
- memcpy( s.d->unicode, p, len*sizeof(QChar) );
- s.d->len = len;
- return s;
- }
-}
-
-/*!
- Returns a string of length \a width that contains this
- string and padded by the \a fill character.
-
- If the length of the string exceeds \a width and \a truncate is FALSE,
- then the returned string is a copy of the string.
- If the length of the string exceeds \a width and \a truncate is TRUE,
- then the returned string is a left(\a width).
-
- Example:
- \code
- QString s("apple");
- QString t = s.leftJustify(8, '.'); // t == "apple..."
- \endcode
-
- \sa rightJustify()
-*/
-
-QString QString::leftJustify( uint width, QChar fill, bool truncate ) const
-{
- QString result;
- int len = length();
- int padlen = width - len;
- if ( padlen > 0 ) {
- result.setLength(len+padlen);
- if ( len )
- memcpy( result.d->unicode, unicode(), sizeof(QChar)*len );
- QChar* uc = result.d->unicode + len;
- while (padlen--)
- *uc++ = fill;
- } else {
- if ( truncate )
- result = left( width );
- else
- result = *this;
- }
- return result;
-}
-
-/*!
- Returns a string of length \a width that contains pad
- characters followed by the string.
-
- If the length of the string exceeds \a width and \a truncate is FALSE,
- then the returned string is a copy of the string.
- If the length of the string exceeds \a width and \a truncate is TRUE,
- then the returned string is a left(\a width).
-
- Example:
- \code
- QString s("pie");
- QString t = s.rightJustify(8, '.'); // t == ".....pie"
- \endcode
-
- \sa leftJustify()
-*/
-
-QString QString::rightJustify( uint width, QChar fill, bool truncate ) const
-{
- QString result;
- int len = length();
- int padlen = width - len;
- if ( padlen > 0 ) {
- result.setLength( len+padlen );
- QChar* uc = result.d->unicode;
- while (padlen--)
- *uc++ = fill;
- if ( len )
- memcpy( uc, unicode(), sizeof(QChar)*len );
- } else {
- if ( truncate )
- result = left( width );
- else
- result = *this;
- }
- return result;
-}
-
-/*!
- Returns a new string that is the string converted to lower case.
-
- Example:
- \code
- QString s("TeX");
- QString t = s.lower(); // t == "tex"
- \endcode
-
- \sa upper()
-*/
-
-QString QString::lower() const
-{
- QString s(*this);
- int l=length();
- if ( l ) {
- s.real_detach(); // could do this only when we find a change
- QChar *p=s.d->unicode;
- if ( p ) {
- while ( l-- ) {
- *p = p->lower();
- p++;
- }
- }
- }
- return s;
-}
-
-/*!
- Returns a new string that is the string converted to upper case.
-
- Example:
- \code
- QString s("TeX");
- QString t = s.upper(); // t == "TEX"
- \endcode
-
- \sa lower()
-*/
-
-QString QString::upper() const
-{
- QString s(*this);
- int l=length();
- if ( l ) {
- s.real_detach(); // could do this only when we find a change
- QChar *p=s.d->unicode;
- if ( p ) {
- while ( l-- ) {
- *p = p->upper();
- p++;
- }
- }
- }
- return s;
-}
-
-
-/*!
- Returns a new string that has white space removed from the start and the end.
-
- White space means any character for which QChar::isSpace() returns
- TRUE. This includes ASCII characters 9 (TAB), 10 (LF), 11 (VT), 12
- (FF), 13 (CR), and 32 (Space).
-
- Example:
- \code
- QString s = " space ";
- QString t = s.stripWhiteSpace(); // t == "space"
- \endcode
-
- \sa simplifyWhiteSpace()
-*/
-
-QString QString::stripWhiteSpace() const
-{
- if ( isEmpty() ) // nothing to do
- return *this;
- if ( !at(0).isSpace() && !at(length()-1).isSpace() )
- return *this;
-
- const QChar *s = unicode();
- QString result = fromLatin1("");
-
- int start = 0;
- int end = length() - 1;
- while ( start<=end && s[start].isSpace() ) // skip white space from start
- start++;
- if ( start > end ) { // only white space
- return result;
- }
- while ( end && s[end].isSpace() ) // skip white space from end
- end--;
- int l = end - start + 1;
- result.setLength( l );
- if ( l )
- memcpy( result.d->unicode, &s[start], sizeof(QChar)*l );
- return result;
-}
-
-
-/*!
- Returns a new string that has white space removed from the start and the end,
- plus any sequence of internal white space replaced with a single space
- (ASCII 32).
-
- White space means any character for which QChar::isSpace() returns
- TRUE. This includes ASCII characters 9 (TAB), 10 (LF), 11 (VT), 12
- (FF), 13 (CR), and 32 (Space).
-
- \code
- QString s = " lots\t of\nwhite space ";
- QString t = s.simplifyWhiteSpace(); // t == "lots of white space"
- \endcode
-
- \sa stripWhiteSpace()
-*/
-
-QString QString::simplifyWhiteSpace() const
-{
- if ( isEmpty() ) // nothing to do
- return *this;
- QString result;
- result.setLength( length() );
- const QChar *from = unicode();
- const QChar *fromend = from+length();
- int outc=0;
- QChar *to = result.d->unicode;
- while ( TRUE ) {
- while ( from!=fromend && from->isSpace() )
- from++;
- while ( from!=fromend && !from->isSpace() )
- to[outc++] = *from++;
- if ( from!=fromend )
- to[outc++] = ' ';
- else
- break;
- }
- if ( outc > 0 && to[outc-1] == ' ' )
- outc--;
- result.truncate( outc );
- return result;
-}
-
-
-/*!
- Insert \a s into the string before position \a index.
-
- If \a index is beyond the end of the string, the string is extended with
- spaces (ASCII 32) to length \a index and \a s is then appended.
-
- \code
- QString s = "I like fish";
- s.insert( 2, "don't "); // s == "I don't like fish"
- s = "x";
- s.insert( 3, "yz" ); // s == "x yz"
- \endcode
-*/
-
-QString &QString::insert( uint index, const QString &s )
-{
- // the sub function takes care of &s == this case.
- return insert( index, s.unicode(), s.length() );
-}
-
-/*!
- Insert \a len units of QChar data from \a s into the string before
- position \a index.
-*/
-
-QString &QString::insert( uint index, const QChar* s, uint len )
-{
- if ( len == 0 )
- return *this;
- uint olen = length();
- int nlen = olen + len;
-
- int df = (int)(s - d->unicode); // ### pointer subtraction, cast down to int
- if ( df >= 0 && (uint)df < d->maxl ) {
- // Part of me - take a copy.
- QChar *tmp = QT_ALLOC_QCHAR_VEC( len );
- memcpy(tmp,s,len*sizeof(QChar));
- insert(index,tmp,len);
- QT_DELETE_QCHAR_VEC( tmp );
- return *this;
- }
-
- if ( index >= olen ) { // insert after end of string
- setLength( len+index );
- int n = index-olen;
- QChar* uc = d->unicode+olen;
- while (n--)
- *uc++ = ' ';
- memcpy( d->unicode+index, s, sizeof(QChar)*len );
- } else { // normal insert
- setLength( nlen );
- memmove( d->unicode+index+len, unicode()+index,
- sizeof(QChar)*(olen-index) );
- memcpy( d->unicode+index, s, sizeof(QChar)*len );
- }
- return *this;
-}
-
-/*!
- Insert \a c into the string at (before) position \a index and returns
- a reference to the string.
-
- If \a index is beyond the end of the string, the string is extended with
- spaces (ASCII 32) to length \a index and \a c is then appended.
-
- Example:
- \code
- QString s = "Ys";
- s.insert( 1, 'e' ); // s == "Yes"
- s.insert( 3, '!'); // s == "Yes!"
- \endcode
-
- \sa remove(), replace()
-*/
-
-QString &QString::insert( uint index, QChar c ) // insert char
-{
- QString s( c );
- return insert( index, s );
-}
-
-/*!
- \overload QString& QString::insert( uint index, char c )
-*/
-
-/*!
- \fn QString &QString::prepend( const QString &s )
-
- Prepend \a s to the string. Equivalent to insert(0,s).
-
- \sa insert()
-*/
-
-/*!
- \fn QString& QString::prepend( char ch )
- Prepends \a ch to the string and returns a reference to the result.
-
- \sa insert()
- */
-
-/*!
- \fn QString& QString::prepend( QChar ch )
- Prepends \a ch to the string and returns a reference to the result.
-
- \sa insert()
- */
-
-
-/*!
- Removes \a len characters starting at position \a index from the
- string and returns a reference to the string.
-
- If \a index is too big, nothing happens. If \a index is valid, but
- \a len is too large, the rest of the string is removed.
-
- \code
- QString s = "Montreal";
- s.remove( 1, 4 );
- // s == "Meal"
- \endcode
-
- \sa insert(), replace()
-*/
-
-QString &QString::remove( uint index, uint len )
-{
- uint olen = length();
- if ( index + len >= olen ) { // range problems
- if ( index < olen ) { // index ok
- setLength( index );
- }
- } else if ( len != 0 ) {
- real_detach();
- memmove( d->unicode+index, d->unicode+index+len,
- sizeof(QChar)*(olen-index-len) );
- setLength( olen-len );
- }
- return *this;
-}
-
-/*!
- Replaces \a len characters starting at position \a index from the
- string with \a s, and returns a reference to the string.
-
- If \a index is too big, nothing is deleted and \a s is inserted at the
- end of the string. If \a index is valid, but \a len is too large, \e
- str replaces the rest of the string.
-
- \code
- QString s = "Say yes!";
- s.replace( 4, 3, "NO" ); // s == "Say NO!"
- \endcode
-
- \sa insert(), remove()
-*/
-
-QString &QString::replace( uint index, uint len, const QString &s )
-{
- return replace( index, len, s.unicode(), s.length() );
-}
-
-
-/*!
- Replaces \a len characters starting at position \a index by
- \a slen units to QChar data from \a s, and returns a reference to the string.
-
- \sa insert(), remove()
-*/
-
-QString &QString::replace( uint index, uint len, const QChar* s, uint slen )
-{
- if ( len == slen && index + len <= length() ) {
- // Optimized common case: replace without size change
- real_detach();
- memcpy( d->unicode+index, s, len*sizeof(QChar) );
- } else {
- int df = (int)(s - d->unicode); // ### pointer subtraction, cast down to int
- if ( df >= 0 && (uint)df < d->maxl ) {
- // Part of me - take a copy.
- QChar *tmp = QT_ALLOC_QCHAR_VEC( slen );
- memcpy(tmp,s,slen*sizeof(QChar));
- replace(index,len,tmp,slen);
- QT_DELETE_QCHAR_VEC( tmp );
- return *this;
- }
-
- remove( index, len );
- insert( index, s, slen );
- }
- return *this;
-}
-
-
-
-/*!
- Finds the first occurrence of the regular expression \a rx, starting at
- position \a index. If \a index is -1, the search starts at the last
- character; if -2, at the next to last character; etc.
-
- Returns the position of the next match, or -1 if \a rx was not found.
-
- \sa findRev() replace() contains()
-*/
-
-int QString::find( const QRegExp &rx, int index ) const
-{
- if ( index < 0 )
- index += length();
- return rx.match( data(), index );
-}
-
-/*!
- Finds the first occurrence of the regular expression \a rx, starting at
- position \a index and searching backwards. If \a index is -1, the
- search starts at the last character; if -2, at the next to last
- character; etc.
-
- Returns the position of the next match (backwards), or -1 if \a rx was not
- found.
-
- \sa find()
-*/
-
-int QString::findRev( const QRegExp &rx, int index ) const
-{
- if ( index < 0 ) // neg index ==> start from end
- index += length();
- if ( (uint)index > length() ) // bad index
- return -1;
- while( index >= 0 ) {
- if ( rx.match( data(), index ) == index )
- return index;
- index--;
- }
- return -1;
-}
-
-/*!
- Counts the number of overlapping occurrences of \a rx in the string.
-
- Example:
- \code
- QString s = "banana and panama";
- QRegExp r = QRegExp("a[nm]a", TRUE, FALSE);
- s.contains( r ); // 4 matches
- \endcode
-
- \sa find() findRev()
-*/
-
-int QString::contains( const QRegExp &rx ) const
-{
- if ( isEmpty() )
- return rx.match( data() ) < 0 ? 0 : 1;
- int count = 0;
- int index = -1;
- int len = length();
- while ( index < len-1 ) { // count overlapping matches
- index = rx.match( data(), index+1 );
- if ( index < 0 )
- break;
- count++;
- }
- return count;
-}
-
-
-/*!
- Replaces every occurrence of \a rx in the string with \a str.
- Returns a reference to the string.
-
- Examples:
- \code
- QString s = "banana";
- s.replace( QRegExp("a.*a"), "" ); // becomes "b"
-
- QString s = "banana";
- s.replace( QRegExp("^[bn]a"), " " ); // becomes " nana"
-
- QString s = "banana";
- s.replace( QRegExp("^[bn]a"), "" ); // NOTE! becomes ""
- \endcode
-
- \sa find() findRev()
-*/
-
-QString &QString::replace( const QRegExp &rx, const QString &str )
-{
- if ( isEmpty() )
- return *this;
- int index = 0;
- int slen = str.length();
- int len;
- while ( index < (int)length() ) {
- index = rx.match( data(), index, &len, FALSE );
- if ( index >= 0 ) {
- replace( index, len, str );
- index += slen;
- if ( !len )
- break; // Avoid infinite loop on 0-length matches, e.g. [a-z]*
- }
- else
- break;
- }
- return *this;
-}
-
-static bool
-ok_in_base( QChar c, int base )
-{
- if ( base <= 10 )
- return c.isDigit() && c.digitValue() < base;
- else
- return c.isDigit() || (c >= 'a' && c < char('a'+base-10))
- || (c >= 'A' && c < char('A'+base-10));
-}
-
-/*!
- Returns the string converted to a <code>long</code> value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all, or if
- it has trailing garbage.
-*/
-
-long QString::toLong( bool *ok, int base ) const
-{
- const QChar *p = unicode();
- long val=0;
- int l = length();
- const long max_mult = INT_MAX / base;
- bool is_ok = FALSE;
- int neg = 0;
- if ( !p )
- goto bye;
- while ( l && p->isSpace() ) // skip leading space
- l--,p++;
- if ( l && *p == '-' ) {
- l--;
- p++;
- neg = 1;
- } else if ( *p == '+' ) {
- l--;
- p++;
- }
-
- // NOTE: toULong() code is similar
- if ( !l || !ok_in_base(*p,base) )
- goto bye;
- while ( l && ok_in_base(*p,base) ) {
- l--;
- int dv;
- if ( p->isDigit() ) {
- dv = p->digitValue();
- } else {
- if ( *p >= 'a' && *p <= 'z' )
- dv = *p - 'a' + 10;
- else
- dv = *p - 'A' + 10;
- }
- if ( val > max_mult || (val == max_mult && dv > (INT_MAX%base)+neg) )
- goto bye;
- val = base*val + dv;
- p++;
- }
- if ( neg )
- val = -val;
- while ( l && p->isSpace() ) // skip trailing space
- l--,p++;
- if ( !l )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-/*!
- Returns the string converted to an <code>unsigned long</code>
- value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all,
- or if it has trailing garbage.
-*/
-
-ulong QString::toULong( bool *ok, int base ) const
-{
- const QChar *p = unicode();
- ulong val=0;
- int l = length();
- const ulong max_mult = 429496729; // UINT_MAX/10, rounded down
- bool is_ok = FALSE;
- if ( !p )
- goto bye;
- while ( l && p->isSpace() ) // skip leading space
- l--,p++;
- if ( *p == '+' )
- l--,p++;
-
- // NOTE: toLong() code is similar
- if ( !l || !ok_in_base(*p,base) )
- goto bye;
- while ( l && ok_in_base(*p,base) ) {
- l--;
- uint dv;
- if ( p->isDigit() ) {
- dv = p->digitValue();
- } else {
- if ( *p >= 'a' && *p <= 'z' )
- dv = *p - 'a' + 10;
- else
- dv = *p - 'A' + 10;
- }
- if ( val > max_mult || (val == max_mult && dv > (UINT_MAX%base)) )
- goto bye;
- val = base*val + dv;
- p++;
- }
-
- while ( l && p->isSpace() ) // skip trailing space
- l--,p++;
- if ( !l )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-/*!
- Returns the string converted to an <code>unsigned long</code>
- value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all,
- or if it has trailing garbage.
-*/
-
-uint64 QString::toUInt64( bool *ok, int base ) const
-{
- const QChar *p = unicode();
- uint64 val=0;
- int l = length();
- const uint64 max_mult = 1844674407370955161ULL; // ULLONG_MAX/10, rounded down
- bool is_ok = FALSE;
- if ( !p )
- goto bye;
- while ( l && p->isSpace() ) // skip leading space
- l--,p++;
- if ( *p == '+' )
- l--,p++;
-
- // NOTE: toULong() code is similar
- if ( !l || !ok_in_base(*p,base) )
- goto bye;
- while ( l && ok_in_base(*p,base) ) {
- l--;
- uint dv;
- if ( p->isDigit() ) {
- dv = p->digitValue();
- } else {
- if ( *p >= 'a' && *p <= 'z' )
- dv = *p - 'a' + 10;
- else
- dv = *p - 'A' + 10;
- }
- if ( val > max_mult || (val == max_mult && dv > (ULLONG_MAX%base)) )
- goto bye;
- val = base*val + dv;
- p++;
- }
-
- while ( l && p->isSpace() ) // skip trailing space
- l--,p++;
- if ( !l )
- is_ok = TRUE;
-bye:
- if ( ok )
- *ok = is_ok;
- return is_ok ? val : 0;
-}
-
-
-/*!
- Returns the string converted to a <code>short</code> value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all, or if
- it has trailing garbage.
-*/
-
-short QString::toShort( bool *ok, int base ) const
-{
- long v = toLong( ok, base );
- if ( ok && *ok && (v < -32768 || v > 32767) ) {
- *ok = FALSE;
- v = 0;
- }
- return (short)v;
-}
-
-/*!
- Returns the string converted to an <code>unsigned short</code> value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all, or if
- it has trailing garbage.
-*/
-
-ushort QString::toUShort( bool *ok, int base ) const
-{
- ulong v = toULong( ok, base );
- if ( ok && *ok && (v > 65535) ) {
- *ok = FALSE;
- v = 0;
- }
- return (ushort)v;
-}
-
-
-/*!
- Returns the string converted to a <code>int</code> value.
-
- \code
- QString str("FF");
- bool ok;
- int hex = str.toInt( &ok, 16 ); // will return 255, and ok set to TRUE
- int dec = str.toInt( &ok, 10 ); // will return 0, and ok set to FALSE
- \endcode
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all,
- or if it has trailing garbage.
-*/
-
-int QString::toInt( bool *ok, int base ) const
-{
- return (int)toLong( ok, base );
-}
-
-/*!
- Returns the string converted to an <code>unsigned int</code> value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all,
- or if it has trailing garbage.
-*/
-
-uint QString::toUInt( bool *ok, int base ) const
-{
- return (uint)toULong( ok, base );
-}
-
-/*!
- Returns the string converted to a <code>double</code> value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no conceivable
- errors, and FALSE if the string is not a number at all, or if it has
- trailing garbage.
-*/
-
-double QString::toDouble( bool *ok ) const
-{
- char *end;
-
- QCString a = latin1();
- // Just latin1() is not sufficient, since U0131 would look like '1'.
- for (uint i=0; i<d->len; i++)
- if ( d->unicode[i].row() )
- a[(int)i]='z';
-
- double val = strtod( a.data() ? a.data() : "", &end );
- if ( ok )
- *ok = ( a && *a && ( end == 0 || *end == '\0' ) );
- return val;
-}
-
-/*!
- Returns the string converted to a <code>float</code> value.
-
- If \a ok is non-null, \a *ok is set to TRUE if there are no
- conceivable errors, and FALSE if the string is not a number at all,
- or if it has trailing garbage.
-*/
-
-float QString::toFloat( bool *ok ) const
-{
- return (float)toDouble( ok );
-}
-
-
-/*!
- Sets the string to the printed value of \a n and returns a
- reference to the string.
-
- The value is converted to \a base notation (default is decimal).
- The base must be a value from 2 to 36.
-*/
-
-QString &QString::setNum( long n, int base )
-{
-#if defined(CHECK_RANGE)
- if ( base < 2 || base > 36 ) {
- qWarning( "QString::setNum: Invalid base %d", base );
- base = 10;
- }
-#endif
- char charbuf[65*sizeof(QChar)];
- QChar *buf = (QChar*)charbuf;
- QChar *p = &buf[64];
- int len = 0;
- bool neg;
- if ( n < 0 ) {
- neg = TRUE;
- if ( n == INT_MIN ) {
- // Cannot always negate this special case
- QString s1, s2;
- s1.setNum(n/base);
- s2.setNum((-(n+base))%base);
- *this = s1 + s2;
- return *this;
- }
- n = -n;
- } else {
- neg = FALSE;
- }
- do {
- *--p = "0123456789abcdefghijklmnopqrstuvwxyz"[((int)(n%base))];
- n /= base;
- len++;
- } while ( n );
- if ( neg ) {
- *--p = '-';
- len++;
- }
- return setUnicode( p, len );
-}
-
-/*!
- Sets the string to the printed unsigned value of \a n and
- returns a reference to the string.
-
- The value is converted to \a base notation (default is decimal).
- The base must be a value from 2 to 36.
-*/
-
-QString &QString::setNum( ulong n, int base )
-{
-#if defined(CHECK_RANGE)
- if ( base < 2 || base > 36 ) {
- qWarning( "QString::setNum: Invalid base %d", base );
- base = 10;
- }
-#endif
- char charbuf[65*sizeof(QChar)];
- QChar *buf = (QChar*)charbuf;
- QChar *p = &buf[64];
- int len = 0;
- do {
- *--p = "0123456789abcdefghijklmnopqrstuvwxyz"[((int)(n%base))];
- n /= base;
- len++;
- } while ( n );
- return setUnicode(p,len);
-}
-
-/*!
- \fn QString &QString::setNum( int n, int base )
- Sets the string to the printed value of \a n and returns a reference
- to the string.
-*/
-
-/*!
- \fn QString &QString::setNum( uint n, int base )
- Sets the string to the printed unsigned value of \a n and returns a
- reference to the string.
-*/
-
-/*!
- \fn QString &QString::setNum( short n, int base )
- Sets the string to the printed value of \a n and returns a reference
- to the string.
-*/
-
-/*!
- \fn QString &QString::setNum( ushort n, int base )
- Sets the string to the printed unsigned value of \a n and returns a
- reference to the string.
-*/
-
-/*! Sets the string to the printed value of \a n, formatted in the \a f
- format with \a prec precision, and returns a reference to the
- string.
-
- \a f can be 'f', 'F', 'e', 'E', 'g' or 'G', all of which have the
- same meaning as for sprintf().
-*/
-
-QString &QString::setNum( double n, char f, int prec )
-{
-#if defined(CHECK_RANGE)
- if ( !(f=='f' || f=='F' || f=='e' || f=='E' || f=='g' || f=='G') ) {
- qWarning( "QString::setNum: Invalid format char '%c'", f );
- f = 'f';
- }
-#endif
- char format[20];
- char buf[120]; // enough for 99 precision?
- char *fs = format; // generate format string
- *fs++ = '%'; // "%.<prec>l<f>"
- if ( prec >= 0 ) {
- if ( prec > 99 ) // buf big enough for precision?
- prec = 99;
- *fs++ = '.';
- if ( prec >= 10 ) {
- *fs++ = prec / 10 + '0';
- *fs++ = prec % 10 + '0';
- } else {
- *fs++ = prec + '0';
- }
- }
- *fs++ = 'l';
- *fs++ = f;
- *fs = '\0';
- ::sprintf( buf, format, n );
- return setLatin1(buf);
-}
-
-/*!
- \overload QString &QString::setNum( float n, char f, int prec )
-*/
-
-
-/*!
- A convenience factory function that returns a string representation
- of the number \a n.
-
- \sa setNum()
- */
-QString QString::number( long n, int base )
-{
- QString s;
- s.setNum( n, base );
- return s;
-}
-
-/*!
- A convenience factory function that returns a string representation
- of the number \a n.
-
- \sa setNum()
- */
-QString QString::number( ulong n, int base )
-{
- QString s;
- s.setNum( n, base );
- return s;
-}
-
-/*!
- A convenience factory function that returns a string representation
- of the number \a n.
-
- \sa setNum()
- */
-QString QString::number( int n, int base )
-{
- QString s;
- s.setNum( n, base );
- return s;
-}
-
-/*!
- A convenience factory function that returns a string representation
- of the number \a n.
-
- \sa setNum()
- */
-QString QString::number( uint n, int base )
-{
- QString s;
- s.setNum( n, base );
- return s;
-}
-
-/*!
- This static function returns the printed value of \a n, formatted in the
- \a f format with \a prec precision.
-
- \a f can be 'f', 'F', 'e', 'E', 'g' or 'G', all of which have the
- same meaning as for sprintf().
-
- \sa setNum()
- */
-QString QString::number( double n, char f, int prec )
-{
- QString s;
- s.setNum( n, f, prec );
- return s;
-}
-
-
-/*! \obsolete
-
- Sets the character at position \a index to \a c and expands the
- string if necessary, filling with spaces.
-
- This method is redundant in Qt 2.x, because operator[] will expand
- the string as necessary.
-*/
-
-void QString::setExpand( uint index, QChar c )
-{
- int spaces = index - d->len;
- at(index) = c;
- while (spaces-->0)
- d->unicode[--index]=' ';
-}
-
-
-/*!
- \fn const char* QString::data() const
-
- \obsolete
-
- Returns a pointer to a 0-terminated classic C string.
-
- In Qt 1.x, this returned a char* allowing direct manipulation of the
- string as a sequence of bytes. In Qt 2.x where QString is a Unicode
- string, char* conversion constructs a temporary string, and hence
- direct character operations are meaningless.
-*/
-
-/*!
- \fn bool QString::operator!() const
- Returns TRUE if it is a null string, otherwise FALSE. Thus
- you can write:
-
-\code
- QString name = getName();
- if ( !name )
- name = "Rodney";
-\endcode
-
- Note that if you say:
-
-\code
- QString name = getName();
- if ( name )
- doSomethingWith(name);
-\endcode
-
- Then this will call <tt>operator const char*()</tt>, which will do what
- you want, but rather inefficiently - you may wish to define the macro
- QT_NO_ASCII_CAST when writing code which you wish to strictly remain
- Unicode-clean.
-
- When you want the above semantics, use <tt>!isNull()</tt>
- or even <tt>!!</tt>:
-
-\code
- QString name = getName();
- if ( !!name )
- doSomethingWith(name);
-\endcode
-*/
-
-
-/*!
- \fn QString& QString::append( const QString& str )
- Appends \a str to the string and returns a reference to the result.
- Equivalent to operator+=().
- */
-
-/*!
- \fn QString& QString::append( char ch )
- Appends \a ch to the string and returns a reference to the result.
- Equivalent to operator+=().
- */
-
-/*!
- \fn QString& QString::append( QChar ch )
- Appends \a ch to the string and returns a reference to the result.
- Equivalent to operator+=().
- */
-
-/*!
- Appends \a str to the string and returns a reference to the string.
-*/
-QString& QString::operator+=( const QString &str )
-{
- uint len1 = length();
- uint len2 = str.length();
- if ( len2 ) {
- setLength(len1+len2);
- memcpy( d->unicode+len1, str.unicode(), sizeof(QChar)*len2 );
- } else if ( isNull() && !str.isNull() ) { // ## just for 1.x compat:
- *this = fromLatin1("");
- }
- return *this;
-}
-
-/*!
- Appends \a c to the string and returns a reference to the string.
-*/
-
-QString &QString::operator+=( QChar c )
-{
- setLength(length()+1);
- d->unicode[length()-1] = c;
- return *this;
-}
-
-/*!
- Appends \a c to the string and returns a reference to the string.
-*/
-
-QString &QString::operator+=( char c )
-{
- setLength(length()+1);
- d->unicode[length()-1] = c;
- return *this;
-}
-
-
-
-/*! \fn char QChar::latin1() const
-
- Returns a latin-1 copy of this character, if this character is in
- the latin-1 character set. If not, this function returns 0.
-*/
-
-
-/*!
- Returns a Latin-1 representation of the string. Note that the returned
- value is undefined if the string contains non-Latin-1 characters. If you
- want to convert strings into formats other than Unicode, see the
- QTextCodec classes.
-
- This function is mainly useful for boot-strapping legacy code to
- use Unicode.
-
- The result remains valid so long as one unmodified
- copy of the source string exists.
-
- \sa utf8(), local8Bit()
-*/
-const char* QString::latin1() const
-{
- if ( d->ascii ) {
- if ( d->dirtyascii )
- delete [] d->ascii;
- else
- return d->ascii;
- }
- Q2HELPER(stat_get_ascii++)
- Q2HELPER(stat_get_ascii_size+=d->len)
- static QTextCodec* codec = QTextCodec::codecForMib(106);
- if (codec) // we use utf8 coding also for latin1 if possible
- {
- QCString utf8str(codec->fromUnicode(*this));
- d->ascii = new char[utf8str.length()+1];
- if (utf8str.isEmpty())
- {
- d->ascii[0]='\0'; // make empty string
- }
- else // copy string
- {
- qstrcpy(d->ascii,utf8str.data());
- }
- }
- else // fall back to latin1
- {
- d->ascii = unicodeToAscii( d->unicode, d->len );
- }
- QCString utf8str(utf8());
- d->dirtyascii = 0;
- return d->ascii;
-}
-
-/*! \obsolete
-
- This functions simply calls latin1() and returns the result.
-*/
-const char* QString::ascii() const
-{
- return latin1();
-}
-
-#ifndef QT_NO_TEXTCODEC
-/*!
- Returns the string encoded in UTF8 format.
-
- See QTextCodec for more diverse coding/decoding of Unicode strings.
-
- \sa QString::fromUtf8(), local8Bit(), latin1()
-*/
-QCString QString::utf8() const
-{
- static QTextCodec* codec = QTextCodec::codecForMib(106);
- return codec
- ? codec->fromUnicode(*this)
- : QCString(latin1());
-}
-
-/*!
- Returns the unicode string decoded from the
- first \a len bytes of \a utf8. If \a len is -1 (the default), the
- length of \a utf8 is used. If trailing partial characters are in
- \a utf8, they are ignored.
-
- See QTextCodec for more diverse coding/decoding of Unicode strings.
-*/
-QString QString::fromUtf8(const char* utf8, int len)
-{
- static QTextCodec* codec = QTextCodec::codecForMib(106);
- if ( len < 0 ) len = qstrlen(utf8);
- return codec
- ? codec->toUnicode(utf8, len)
- : QString::fromLatin1(utf8, len);
-}
-#endif // QT_NO_TEXTCODEC
-/*!
- Creates a QString from Latin1 text. This is the same as the
- QString(const char*) constructor, but you can make that constructor
- invisible if you compile with the define QT_NO_CAST_ASCII, in which
- case you can explicitly create a QString from Latin-1 text using
- this function.
-*/
-QString QString::fromLatin1(const char* chars, int len)
-{
- uint l;
- QChar *uc;
- if ( len < 0 ) {
- uc = internalAsciiToUnicode(chars,&l);
- } else {
- uc = internalAsciiToUnicode(chars,&l,len);
- }
- return QString(new QStringData(uc,l,l), TRUE);
-}
-
-/*!
- \fn const QChar* QString::unicode() const
-
- Returns the Unicode representation of the string. The result
- remains valid until the string is modified.
-*/
-
-/*!
- Returns the string encoded in a locale-specific format. On X11, this
- is the QTextCodec::codecForLocale(). On Windows, it is a system-defined
- encoding.
-
- See QTextCodec for more diverse coding/decoding of Unicode strings.
-
- \sa QString::fromLocal8Bit(), latin1(), utf8()
-*/
-
-
-QCString QString::local8Bit() const
-{
-#ifdef QT_NO_TEXTCODEC
- return latin1();
-#else
-#ifdef _WS_X11_
- static QTextCodec* codec = QTextCodec::codecForLocale();
- return codec
- ? codec->fromUnicode(*this)
- : QCString(latin1());
-#endif
-#ifdef _WS_MAC_
- static QTextCodec* codec = QTextCodec::codecForLocale();
- return codec
- ? codec->fromUnicode(*this)
- : QCString(latin1());
-#endif
-#ifdef _WS_WIN_
- return qt_winQString2MB( *this );
-#endif
-#ifdef _WS_QWS_
- return utf8(); // ##### if there is ANY 8 bit format supported?
-#endif
-#endif
-}
-
-/*!
- Returns the unicode string decoded from the
- first \a len bytes of \a local8Bit. If \a len is -1 (the default), the
- length of \a local8Bit is used. If trailing partial characters are in
- \a local8Bit, they are ignored.
-
- \a local8Bit is assumed to be encoded in a locale-specific format.
-
- See QTextCodec for more diverse coding/decoding of Unicode strings.
-*/
-QString QString::fromLocal8Bit(const char* local8Bit, int len)
-{
-#ifdef QT_NO_TEXTCODEC
- return fromLatin1( local8Bit, len );
-#else
-
- if ( !local8Bit )
- return QString::null;
-#ifdef _WS_X11_
- static QTextCodec* codec = QTextCodec::codecForLocale();
- if ( len < 0 ) len = qstrlen(local8Bit);
- return codec
- ? codec->toUnicode(local8Bit, len)
- : QString::fromLatin1(local8Bit,len);
-#endif
-#ifdef _WS_MAC_
- static QTextCodec* codec = QTextCodec::codecForLocale();
- if ( len < 0 ) len = qstrlen(local8Bit);
- return codec
- ? codec->toUnicode(local8Bit, len)
- : QString::fromLatin1(local8Bit,len);
-#endif
-// Should this be OS_WIN32?
-#ifdef _WS_WIN_
- if ( len >= 0 ) {
- QCString s(local8Bit,len+1);
- return qt_winMB2QString(s);
- }
- return qt_winMB2QString( local8Bit );
-#endif
-#ifdef _WS_QWS_
- return fromUtf8(local8Bit,len);
-#endif
-#endif // QT_NO_TEXTCODEC
-}
-
-/*!
- \fn QString::operator const char *() const
-
- Returns latin1(). Be sure to see the warnings documented there.
- Note that for new code which you wish to be strictly Unicode-clean,
- you can define the macro QT_NO_ASCII_CAST when compiling your code
- to hide this function so that automatic casts are not done. This
- has the added advantage that you catch the programming error
- described under operator!().
-*/
-
-/*!
- \fn QChar QString::at( uint ) const
-
- Returns the character at \a i, or 0 if \a i is beyond the length
- of the string.
-
- Note: If this QString is not const or const&, the non-const at()
- will be used instead, which will expand the string if \a i is beyond
- the length of the string.
-*/
-
-/*!
- \fn QChar QString::constref(uint i) const
- Equivalent to at(i), this returns the QChar at \a i by value.
-
- \sa ref()
-*/
-
-/*!
- \fn QChar& QString::ref(uint i)
- Returns the QChar at \a i by reference.
-
- \sa constref()
-*/
-
-/*!
- \fn QChar QString::operator[](int) const
-
- Returns the character at \a i, or QChar::null if \a i is beyond the
- length of the string.
-
- Note: If this QString is not const or const&, the non-const operator[]
- will be used instead, which will expand the string if \a i is beyond
- the length of the string.
-*/
-
-/*!
- \fn QCharRef QString::operator[](int)
-
- Returns an object that references the character at \a i.
- This reference
- can then be assigned to, or otherwise used immediately, but
- becomes invalid once further modifications are made to the string.
- The QCharRef internal class can be used much like a constant QChar, but
- if you assign to it, you change the original string (which enlarges
- and detaches itself). You will get compilation errors if you try to
- use the result as anything but a QChar.
-*/
-
-/*!
- \fn QCharRef QString::at( uint i )
- Returns a reference to the character at \a i, expanding
- the string with QChar::null if necessary. The resulting reference
- can then be assigned to, or otherwise used immediately, but
- becomes invalid once further modifications are made to the string.
-*/
-
-/*!
- Internal chunk of code to handle the
- uncommon cases of at() above.
-*/
-void QString::subat( uint i )
-{
- uint olen = d->len;
- if ( i >= olen ) {
- setLength( i+1 ); // i is index; i+1 is needed length
- for ( uint j=olen; j<=i; j++ )
- d->unicode[j] = QChar::null;
- } else {
- // Just be sure to detach
- real_detach();
- }
-}
-
-
-/*!
- Resizes the string to \a len unicode characters and copies \a unicode
- into the string. If \a unicode is null, nothing is copied, but the
- string is resized to \a len anyway. If \a len is zero, the string
- becomes a \link isNull() null\endlink string.
-
- \sa setLatin1(), isNull()
-*/
-
-QString& QString::setUnicode( const QChar *unicode, uint len )
-{
- if ( len == 0 ) { // set to null string
- if ( d != shared_null ) { // beware of nullstring being set to nullstring
- deref();
- d = shared_null ? shared_null : makeSharedNull();
- d->ref();
- }
- } else if ( d->count != 1 || len > d->maxl ||
- ( len*4 < d->maxl && d->maxl > 4 ) ) { // detach, grown or shrink
- Q2HELPER(stat_copy_on_write++)
- Q2HELPER(stat_copy_on_write_size+=d->len)
- uint newMax = 4;
- while ( newMax < len )
- newMax *= 2;
- QChar* nd = QT_ALLOC_QCHAR_VEC( newMax );
- if ( unicode )
- memcpy( nd, unicode, sizeof(QChar)*len );
- deref();
- d = new QStringData( nd, len, newMax );
- } else {
- d->len = len;
- d->dirtyascii = 1;
- if ( unicode )
- memcpy( d->unicode, unicode, sizeof(QChar)*len );
- }
- return *this;
-}
-
-/*!
- Resizes the string to \a len unicode characters and copies
- \a unicode_as_ushorts into the string (on some X11 client
- platforms this will involve a byte-swapping pass).
-
- If \a unicode is null, nothing is copied, but the
- string is resized to \a len anyway. If \a len is zero, the string
- becomes a \link isNull() null\endlink string.
-
- \sa setLatin1(), isNull()
-*/
-QString& QString::setUnicodeCodes( const ushort* unicode_as_ushorts, uint len )
-{
- setUnicode((const QChar*)unicode_as_ushorts, len);
- QChar t(0x1234);
- if ( unicode_as_ushorts && *((ushort*)&t) == 0x3412 ) {
- // Need to byteswap
- char* b = (char*)d->unicode;
- while ( len-- ) {
- char c = b[0];
- b[0] = b[1];
- b[1] = c;
- b += sizeof(QChar);
- }
- }
- return *this;
-}
-
-
-/*!
- Sets this string to \a str, interpreted as a classic Latin 1 C string.
- If the \a len argument is negative (default), it is set to strlen(str).
-
- If \a str is 0 a null string is created. If \a str is "" an empty
- string is created.
-
- \sa isNull(), isEmpty()
-*/
-
-QString &QString::setLatin1( const char *str, int len )
-{
- if ( str == 0 )
- return setUnicode(0,0);
- if ( len < 0 )
- len = qstrlen(str);
- if ( len == 0 ) { // won't make a null string
- deref();
- uint l;
- QChar *uc = internalAsciiToUnicode(str,&l);
- d = new QStringData(uc,l,l);
- } else {
- setUnicode( 0, len ); // resize but not copy
- QChar *p = d->unicode;
- while ( len-- )
- *p++ = *str++;
- }
- return *this;
-}
-
-
-/*!
- \fn int QString::compare (const QString & s1, const QString & s2)
-
- Compare \a s1 to \a s2 returning an integer less than, equal to, or
- greater than zero if s1 is, respectively, lexically less than, equal to,
- or greater than s2.
-*/
-
-/*!
- Compares this string to \a s, returning an integer less than, equal to, or
- greater than zero if it is, respectively, lexically less than, equal to,
- or greater than \a s.
-*/
-int QString::compare( const QString& s ) const
-{
- return ucstrcmp(*this,s);
-}
-
-bool operator==( const QString &s1, const QString &s2 )
-{
- return (s1.length() == s2.length()) && s1.isNull() == s2.isNull() &&
- (memcmp((char*)s1.unicode(),(char*)s2.unicode(),
- s1.length()*sizeof(QChar)) ==0);
-}
-
-bool operator!=( const QString &s1, const QString &s2 )
-{ return !(s1==s2); }
-
-bool operator<( const QString &s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) < 0; }
-
-bool operator<=( const QString &s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) <= 0; }
-
-bool operator>( const QString &s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) > 0; }
-
-bool operator>=( const QString &s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) >= 0; }
-
-
-bool operator==( const QString &s1, const char *s2 )
-{ return s1==QString(s2); }
-
-bool operator==( const char *s1, const QString &s2 )
-{ return QString(s1)==s2; }
-
-bool operator!=( const QString &s1, const char *s2 )
-{ return !(s1==s2); }
-
-bool operator!=( const char *s1, const QString &s2 )
-{ return !(s1==s2); }
-
-bool operator<( const QString &s1, const char *s2 )
-{ return ucstrcmp(s1,s2) < 0; }
-
-bool operator<( const char *s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) < 0; }
-
-bool operator<=( const QString &s1, const char *s2 )
-{ return ucstrcmp(s1,s2) <= 0; }
-
-bool operator<=( const char *s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) <= 0; }
-
-bool operator>( const QString &s1, const char *s2 )
-{ return ucstrcmp(s1,s2) > 0; }
-
-bool operator>( const char *s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) > 0; }
-
-bool operator>=( const QString &s1, const char *s2 )
-{ return ucstrcmp(s1,s2) >= 0; }
-
-bool operator>=( const char *s1, const QString &s2 )
-{ return ucstrcmp(s1,s2) >= 0; }
-
-
-/*****************************************************************************
- Documentation for QString related functions
- *****************************************************************************/
-
-/*!
- \fn bool operator==( const QString &s1, const QString &s2 )
- \relates QString
- Returns TRUE if the two strings are equal, or FALSE if they are different.
- A null string is different from an empty, non-null string.
-
- Equivalent to <code>qstrcmp(s1,s2) == 0</code>.
-*/
-
-/*!
- \fn bool operator==( const QString &s1, const char *s2 )
- \relates QString
- Returns TRUE if the two strings are equal, or FALSE if they are different.
-
- Equivalent to <code>qstrcmp(s1,s2) == 0</code>.
-*/
-
-/*!
- \fn bool operator==( const char *s1, const QString &s2 )
- \relates QString
- Returns TRUE if the two strings are equal, or FALSE if they are different.
-
- Equivalent to <code>qstrcmp(s1,s2) == 0</code>.
-*/
-
-/*!
- \fn bool operator!=( const QString &s1, const QString &s2 )
- \relates QString
- Returns TRUE if the two strings are different, or FALSE if they are equal.
-
- Equivalent to <code>qstrcmp(s1,s2) != 0</code>.
-*/
-
-/*!
- \fn bool operator!=( const QString &s1, const char *s2 )
- \relates QString
- Returns TRUE if the two strings are different, or FALSE if they are equal.
-
- Equivalent to <code>qstrcmp(s1,s2) != 0</code>.
-*/
-
-/*!
- \fn bool operator!=( const char *s1, const QString &s2 )
- \relates QString
- Returns TRUE if the two strings are different, or FALSE if they are equal.
-
- Equivalent to <code>qstrcmp(s1,s2) != 0</code>.
-*/
-
-/*!
- \fn bool operator<( const QString &s1, const char *s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically less than \a s2, otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \< 0</code>.
-*/
-
-/*!
- \fn bool operator<( const char *s1, const QString &s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically less than \a s2, otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \< 0</code>.
-*/
-
-/*!
- \fn bool operator<=( const QString &s1, const char *s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically less than or equal to \a s2,
- otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \<= 0</code>.
-*/
-
-/*!
- \fn bool operator<=( const char *s1, const QString &s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically less than or equal to \a s2,
- otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \<= 0</code>.
-*/
-
-/*!
- \fn bool operator>( const QString &s1, const char *s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically greater than \a s2, otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \> 0</code>.
-*/
-
-/*!
- \fn bool operator>( const char *s1, const QString &s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically greater than \a s2, otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \> 0</code>.
-*/
-
-/*!
- \fn bool operator>=( const QString &s1, const char *s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically greater than or equal to \a s2,
- otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \>= 0</code>.
-*/
-
-/*!
- \fn bool operator>=( const char *s1, const QString &s2 )
- \relates QString
- Returns TRUE if \a s1 is alphabetically greater than or equal to \a s2,
- otherwise FALSE.
-
- Equivalent to <code>qstrcmp(s1,s2) \>= 0</code>.
-*/
-
-/*!
- \fn QString operator+( const QString &s1, const QString &s2 )
- \relates QString
- Returns the concatenated string of s1 and s2.
-*/
-
-/*!
- \fn QString operator+( const QString &s1, const char *s2 )
- \relates QString
- Returns the concatenated string of s1 and s2.
-*/
-
-/*!
- \fn QString operator+( const char *s1, const QString &s2 )
- \relates QString
- Returns the concatenated string of s1 and s2.
-*/
-
-/*!
- \fn QString operator+( const QString &s, char c )
- \relates QString
- Returns the concatenated string of s and c.
-*/
-
-/*!
- \fn QString operator+( char c, const QString &s )
- \relates QString
- Returns the concatenated string of c and s.
-*/
-
-
-/*****************************************************************************
- QString stream functions
- *****************************************************************************/
-#ifndef QT_NO_DATASTREAM
-/*!
- \relates QString
- Writes a string to the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator<<( QDataStream &s, const QString &str )
-{
- if ( s.version() == 1 ) {
- QCString l( str.latin1() );
- s << l;
- }
- else {
- const char* ub = (const char*)str.unicode();
- if ( ub || s.version() < 3 ) {
- if ( QChar::networkOrdered() ==
- (s.byteOrder()==QDataStream::BigEndian) ) {
- s.writeBytes( ub, (int)sizeof(QChar)*str.length() );
- } else {
- static const uint auto_size = 1024;
- char t[auto_size];
- char *b;
- if ( str.length()*sizeof(QChar) > auto_size ) {
- b = new char[str.length()*sizeof(QChar)];
- } else {
- b = t;
- }
- int l = str.length();
- char *c=b;
- while ( l-- ) {
- *c++ = ub[1];
- *c++ = ub[0];
- ub+=sizeof(QChar);
- }
- s.writeBytes( b, (int)sizeof(QChar)*str.length() );
- if ( str.length()*sizeof(QChar) > auto_size )
- delete [] b;
- }
- } else {
- // write null marker
- s << (Q_UINT32)0xffffffff;
- }
- }
- return s;
-}
-
-/*!
- \relates QString
- Reads a string from the stream.
-
- \sa \link datastreamformat.html Format of the QDataStream operators \endlink
-*/
-
-QDataStream &operator>>( QDataStream &s, QString &str )
-{
-#ifdef QT_QSTRING_UCS_4
-#if defined(_CC_GNU_)
-#warning "operator>> not working properly"
-#endif
-#endif
- if ( s.version() == 1 ) {
- QCString l;
- s >> l;
- str = QString( l );
- }
- else {
- Q_UINT32 bytes;
- s >> bytes; // read size of string
- if ( bytes == 0xffffffff ) { // null string
- str = QString::null;
- } else if ( bytes > 0 ) { // not empty
- str.setLength( bytes/2 );
- char* b = (char*)str.d->unicode;
- s.readRawBytes( b, bytes );
- if ( QChar::networkOrdered() !=
- (s.byteOrder()==QDataStream::BigEndian) ) {
- bytes /= 2;
- while ( bytes-- ) {
- char c = b[0];
- b[0] = b[1];
- b[1] = c;
- b += 2;
- }
- }
- } else {
- str = "";
- }
- }
- return s;
-}
-#endif // QT_NO_DATASTREAM
-
-/*****************************************************************************
- QConstString member functions
- *****************************************************************************/
-
-/*!
- \class QConstString qstring.h
- \brief A QString which uses constant Unicode data.
-
- In order to minimize copying, highly optimized applications can use
- QConstString to provide a QString-compatible object from existing
- Unicode data. It is then the user's responsibility to make sure
- that the Unicode data must exist for the entire lifetime of the
- QConstString object.
-*/
-
-/*!
- Constructs a QConstString that uses the first \a length Unicode
- characters in the array \a unicode. Any attempt to modify
- copies of the string will cause it to create a copy of the
- data, thus it remains forever unmodified.
-
- Note that \a unicode is \e not \e copied. The caller \e must be
- able to guarantee that \a unicode will not be deleted or
- modified. Since that is generally not the case with \c const strings
- (they are references), this constructor demands a non-const pointer
- even though it never modifies \a unicode.
-*/
-QConstString::QConstString( QChar* unicode, uint length ) :
- QString(new QStringData(unicode, length, length),TRUE)
-{
-}
-
-/*!
- Destroys the QConstString, creating a copy of the data if
- other strings are still using it.
-*/
-QConstString::~QConstString()
-{
- if ( d->count > 1 ) {
- QChar* cp = QT_ALLOC_QCHAR_VEC( d->len );
- memcpy( cp, d->unicode, d->len*sizeof(QChar) );
- d->unicode = cp;
- } else {
- d->unicode = 0;
- }
-
- // The original d->unicode is now unlinked.
-}
-
-/*!
- \fn const QString& QConstString::string() const
-
- Returns a constant string referencing the data passed during
- construction.
-*/
-
-/*!
- Returns whether the strings starts with \a s, or not.
- */
-bool QString::startsWith( const QString& s ) const
-{
- for ( int i =0; i < (int) s.length(); i++ ) {
- if ( i >= (int) length() || d->unicode[i] != s[i] )
- return FALSE;
- }
- return TRUE;
-}
-
-
-
-#if defined(_OS_WIN32_)
-
-#include <windows.h>
-
-/*!
- Returns a static Windows TCHAR* from a QString, possibly adding NUL.
-
- The lifetime of the return value is until the next call to this function.
-*/
-const void* qt_winTchar(const QString& str_in, bool addnul)
-{
- // So that the return value lives long enough.
- static QString str;
- str = str_in;
-
-#ifdef UNICODE
- static uint buflen = 256;
- static TCHAR *buf = new TCHAR[buflen];
-
- const QChar* uc = str.unicode();
-
-#define EXTEND if (str.length() > buflen) { delete buf; buf = new TCHAR[buflen=str.length()+1]; }
-
-#if defined(_WS_X11_) || defined(_OS_WIN32_BYTESWAP_)
- EXTEND
- for ( int i=str.length(); i--; )
- buf[i] = uc[i].row() << 8 | uc[i].cell();
- if ( addnul )
- buf[str.length()] = 0;
-#else
- // Same endianess of TCHAR
- if ( addnul ) {
- EXTEND
- memcpy(buf,uc,sizeof(TCHAR)*str.length());
- buf[str.length()] = 0;
- } else {
- return uc;
- }
-#endif
- return buf;
-#undef EXTEND
-
-#else
- return str.latin1();
-#endif
-}
-
-/*!
- Makes a new null terminated Windows TCHAR* from a QString.
-*/
-void* qt_winTchar_new(const QString& str)
-{
- TCHAR* result = new TCHAR[str.length()+1];
- memcpy(result, qt_winTchar(str,FALSE), sizeof(TCHAR)*str.length());
- result[str.length()] = 0;
- return result;
-}
-
-/*!
- Makes a QString from a Windows TCHAR*.
-*/
-QString qt_winQString(void* tc)
-{
-#ifdef UNICODE
-
- int len=0;
- while ( ((TCHAR*)tc)[len] )
- len++;
-#if defined(_WS_X11_) || defined(_OS_WIN32_BYTESWAP_)
- QString r;
- for ( int i=0; i<len; i++ )
- r += QChar(((TCHAR*)tc)[i]&0xff,((TCHAR*)tc)[i]>>8);
- return r;
-#else
- // Same endianess of TCHAR
- return QString((QChar*)tc,len);
-#endif
-#undef EXTEND
-#else
- return (TCHAR*)tc;
-#endif
-}
-
-QCString qt_winQString2MB( const QString& s, int uclen )
-{
- if ( uclen < 0 )
- uclen = s.length();
- if ( uclen == 0 )
- return QCString();
- BOOL used_def;
- int bufSize=4096;
- QCString mb(bufSize);
- int len;
- while ( !(len=WideCharToMultiByte(CP_ACP, 0, (const WCHAR*)s.unicode(), uclen,
- mb.rawData(), bufSize-1, 0, &used_def)) )
- {
- int r = GetLastError();
- if ( r == ERROR_INSUFFICIENT_BUFFER ) {
- bufSize=1+WideCharToMultiByte( CP_ACP, 0,
- (const WCHAR*)s.unicode(), uclen,
- 0, 0, 0, &used_def);
- mb.resize(bufSize);
- // and try again...
- } else {
- // Fail.
- qWarning("WideCharToMultiByte cannot convert multibyte text (error %d): %s (UTF8)",
- r, s.utf8().data());
- break;
- }
- }
- mb[len]='\0';
- return mb;
-}
-
-// WATCH OUT: mblen must include the NUL (or just use -1)
-QString qt_winMB2QString( const char* mb, int mblen )
-{
- if ( !mb || !mblen )
- return QString::null;
- const int wclen_auto = 4096;
- WCHAR wc_auto[wclen_auto];
- int wclen = wclen_auto;
- WCHAR *wc = wc_auto;
- int len;
- while ( !(len=MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED,
- mb, mblen, wc, wclen )) )
- {
- int r = GetLastError();
- if ( r == ERROR_INSUFFICIENT_BUFFER ) {
- if ( wc != wc_auto ) {
- qWarning("Size changed in MultiByteToWideChar");
- break;
- } else {
- wclen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED,
- mb, mblen, 0, 0 );
- wc = new WCHAR[wclen];
- // and try again...
- }
- } else {
- // Fail.
- qWarning("MultiByteToWideChar cannot convert multibyte text");
- break;
- }
- }
- if ( len <= 0 )
- return QString::null;
- QString s( (QChar*)wc, len-1 ); // len-1: we don't want terminator
- if ( wc != wc_auto )
- delete [] wc;
- return s;
-}
-
-
-#endif // _OS_WIN32_
diff --git a/qtools/qstring.h b/qtools/qstring.h
deleted file mode 100644
index ed56d7f..0000000
--- a/qtools/qstring.h
+++ /dev/null
@@ -1,879 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of the QString class, and related Unicode
-** functions.
-**
-** Created : 920609
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QSTRING_H
-#define QSTRING_H
-
-#ifndef QT_H
-#include "qcstring.h"
-#endif // QT_H
-
-#define QT_NO_ASCII_CAST
-
-/*****************************************************************************
- QString class
- *****************************************************************************/
-
-class QRegExp;
-class QString;
-class QCharRef;
-
-class Q_EXPORT Q_PACKED QChar {
-public:
- QChar();
- QChar( char c );
- QChar( uchar c );
- QChar( uchar c, uchar r );
- QChar( const QChar& c );
- QChar( ushort rc );
- QChar( short rc );
- QChar( uint rc );
- QChar( int rc );
- QChar &operator=(const QChar &c);
-
- QT_STATIC_CONST QChar null; // 0000
- QT_STATIC_CONST QChar replacement; // FFFD
- QT_STATIC_CONST QChar byteOrderMark; // FEFF
- QT_STATIC_CONST QChar byteOrderSwapped; // FFFE
- QT_STATIC_CONST QChar nbsp; // 00A0
-
- // Unicode information
-
- enum Category
- {
- NoCategory,
-
- Mark_NonSpacing, // Mn
- Mark_SpacingCombining, // Mc
- Mark_Enclosing, // Me
-
- Number_DecimalDigit, // Nd
- Number_Letter, // Nl
- Number_Other, // No
-
- Separator_Space, // Zs
- Separator_Line, // Zl
- Separator_Paragraph, // Zp
-
- Other_Control, // Cc
- Other_Format, // Cf
- Other_Surrogate, // Cs
- Other_PrivateUse, // Co
- Other_NotAssigned, // Cn
-
- Letter_Uppercase, // Lu
- Letter_Lowercase, // Ll
- Letter_Titlecase, // Lt
- Letter_Modifier, // Lm
- Letter_Other, // Lo
-
- Punctuation_Connector, // Pc
- Punctuation_Dask, // Pd
- Punctuation_Open, // Ps
- Punctuation_Close, // Pe
- Punctuation_InitialQuote, // Pi
- Punctuation_FinalQuote, // Pf
- Punctuation_Other, // Po
-
- Symbol_Math, // Sm
- Symbol_Currency, // Sc
- Symbol_Modifier, // Sk
- Symbol_Other // So
- };
-
- enum Direction
- {
- DirL, DirR, DirEN, DirES, DirET, DirAN, DirCS, DirB, DirS, DirWS, DirON,
- DirLRE, DirLRO, DirAL, DirRLE, DirRLO, DirPDF, DirNSM, DirBN
- };
-
- enum Decomposition
- {
- Single, Canonical, Font, NoBreak, Initial, Medial,
- Final, Isolated, Circle, Super, Sub, Vertical,
- Wide, Narrow, Small, Square, Compat, Fraction
- };
-
- enum Joining
- {
- OtherJoining, Dual, Right, Center
- };
-
- // ****** WHEN ADDING FUNCTIONS, CONSIDER ADDING TO QCharRef TOO
-
- int digitValue() const;
- QChar lower() const;
- QChar upper() const;
-
- Category category() const;
- Direction direction() const;
- Joining joining() const;
- bool mirrored() const;
- QChar mirroredChar() const;
- QString decomposition() const;
- Decomposition decompositionTag() const;
-
- char latin1() const { return rw ? 0 : (char)cl; }
- ushort unicode() const { return (ushort)((rw << 8) | cl); }
-#ifndef QT_NO_CAST_ASCII
- // like all ifdef'd code this is undocumented
- operator char() const { return latin1(); }
-#endif
-
- bool isNull() const { return unicode()==0; }
- bool isPrint() const;
- bool isPunct() const;
- bool isSpace() const;
- bool isMark() const;
- bool isLetter() const;
- bool isNumber() const;
- bool isLetterOrNumber() const;
- bool isDigit() const;
-
- uchar& cell() { return cl; }
- uchar& row() { return rw; }
- uchar cell() const { return cl; }
- uchar row() const { return rw; }
-
- static bool networkOrdered() { return (int)net_ordered == 1; }
-
- friend inline int operator==( char ch, QChar c );
- friend inline int operator==( QChar c, char ch );
- friend inline int operator==( QChar c1, QChar c2 );
- friend inline int operator!=( QChar c1, QChar c2 );
- friend inline int operator!=( char ch, QChar c );
- friend inline int operator!=( QChar c, char ch );
- friend inline int operator<=( QChar c, char ch );
- friend inline int operator<=( char ch, QChar c );
- friend inline int operator<=( QChar c1, QChar c2 );
-
-private:
-#if defined(_WS_X11_) || defined(_OS_WIN32_BYTESWAP_) || defined( _WS_QWS_ )
- // XChar2b on X11, ushort on _OS_WIN32_BYTESWAP_
- //### QWS must be defined on a platform by platform basis
- uchar rw;
- uchar cl;
-#if defined(QT_QSTRING_UCS_4)
- ushort grp;
-#endif
- enum { net_ordered = 1 };
-#else
- // ushort on _OS_WIN32_
- uchar cl;
- uchar rw;
-#if defined(QT_QSTRING_UCS_4)
- ushort grp;
-#endif
- enum { net_ordered = 0 };
-#endif
-};
-
-inline QChar::QChar()
-{
- rw = 0; cl = 0;
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( char c )
-{
- rw = 0; cl = (uchar)c;
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( uchar c )
-{
- rw = 0; cl = c;
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( uchar c, uchar r )
-{
- rw = r; cl = c;
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( const QChar& c )
-{
- rw = c.rw; cl = c.cl;
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( ushort rc )
-{
- rw = (uchar)((rc>>8)&0xff); cl = (uchar)(rc&0xff);
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( short rc )
-{
- rw = (uchar)((rc>>8)&0xff); cl = (uchar)(rc&0xff);
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( uint rc )
-{
- rw = (uchar)((rc>>8)&0xff); cl = (uchar)(rc&0xff);
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-inline QChar::QChar( int rc )
-{
- rw = (uchar)((rc>>8)&0xff); cl = (uchar)(rc&0xff);
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
-}
-
-inline QChar &QChar::operator=(const QChar &c)
-{
- rw = c.rw;
- cl = c.cl;
-#ifdef QT_QSTRING_UCS_4
- grp = 0;
-#endif
- return *this;
-}
-
-inline int operator==( char ch, QChar c )
-{
- return ch == c.cl && !c.rw;
-}
-
-inline int operator==( QChar c, char ch )
-{
- return ch == c.cl && !c.rw;
-}
-
-inline int operator==( QChar c1, QChar c2 )
-{
- return c1.cl == c2.cl
- && c1.rw == c2.rw;
-}
-
-inline int operator!=( QChar c1, QChar c2 )
-{
- return c1.cl != c2.cl
- || c1.rw != c2.rw;
-}
-
-inline int operator!=( char ch, QChar c )
-{
- return ch != c.cl || c.rw;
-}
-
-inline int operator!=( QChar c, char ch )
-{
- return ch != c.cl || c.rw;
-}
-
-inline int operator<=( QChar c, char ch )
-{
- return !(ch < c.cl || c.rw);
-}
-
-inline int operator<=( char ch, QChar c )
-{
- return ch <= c.cl || c.rw;
-}
-
-inline int operator<=( QChar c1, QChar c2 )
-{
- return c1.rw > c2.rw
- ? FALSE
- : c1.rw < c2.rw
- ? TRUE
- : c1.cl <= c2.cl;
-}
-
-inline int operator>=( QChar c, char ch ) { return ch <= c; }
-inline int operator>=( char ch, QChar c ) { return c <= ch; }
-inline int operator>=( QChar c1, QChar c2 ) { return c2 <= c1; }
-inline int operator<( QChar c, char ch ) { return !(ch<=c); }
-inline int operator<( char ch, QChar c ) { return !(c<=ch); }
-inline int operator<( QChar c1, QChar c2 ) { return !(c2<=c1); }
-inline int operator>( QChar c, char ch ) { return !(ch>=c); }
-inline int operator>( char ch, QChar c ) { return !(c>=ch); }
-inline int operator>( QChar c1, QChar c2 ) { return !(c2>=c1); }
-
-// internal
-struct Q_EXPORT QStringData : public QShared {
- QStringData() :
- unicode(0), ascii(0), len(0), maxl(0), dirtyascii(0) { ref(); }
- QStringData(QChar *u, uint l, uint m) :
- unicode(u), ascii(0), len(l), maxl(m&0x3FFFFFFF), dirtyascii(0) { }
-
- ~QStringData() { if ( unicode ) delete[] ((char*)unicode);
- if ( ascii ) delete[] ascii; }
-
- void deleteSelf();
- QChar *unicode;
- char *ascii;
- uint len;
- uint maxl:30;
- uint dirtyascii:1;
-};
-
-
-class Q_EXPORT QString
-{
-public:
- QString(); // make null string
- QString( QChar ); // one-char string
- QString( const QString & ); // impl-shared copy
- QString( const QByteArray& ); // deep copy
- QString( const QCString& ); // deep copy
- QString( const QChar* unicode, uint length ); // deep copy
-#ifndef QT_NO_CAST_ASCII
- QString( const char *str ); // deep copy
-#endif
- ~QString();
-
- QString &operator=( const QString & ); // impl-shared copy
-#ifndef QT_NO_CAST_ASCII
- QString &operator=( const char * ); // deep copy
-#endif
- QString &operator=( const QCString& ); // deep copy
- QString &operator=( QChar c );
- QString &operator=( char c );
-
- enum Direction
- {
- /// No strongly directional text.
- /*!
- * As return value for direction() or baseDirection(), it means that the source string
- * is missing or empty, or contains neither left-to-right nor right-to-left characters.
- */
- DirNeutral = 0x0,
- /// Left-to-right text.
- /*!
- * - As return value for direction(), it means that the source string
- * contains no right-to-left characters.
- * - As return value for basicDirection(), it means that the first strong character
- * of the source string has a left-to-right direction.
- */
- DirLTR = 0x1,
- /// Right-to-left text.
- /*!
- * - As return value for direction(), it means that the source string
- * contains no left-to-right characters.
- * - As return value for basicDirection(), it means that the first strong character
- * of the source string has a right-to-left direction.
- */
- DirRTL = 0x2,
- /// Mixed-directional text
- /*!
- * As return value for direction(), it means that the source string
- * contains both left-to-right and right-to-left characters.
- */
- DirMixed = 0x3
- };
-
- //QT_STATIC_CONST QString null;
- //bool isNull() const;
-
- struct Null { };
- static const Null null;
- inline QString(const Null &): d(shared_null) { d->ref(); }
- inline QString &operator=(const Null &) { *this = QString(); return *this; }
- inline bool isNull() const { return d == shared_null; }
-
- bool isEmpty() const;
- uint length() const;
- void truncate( uint pos );
-
-#if QT_VERSION >= 300
-#error "fill() Should return *this, or QChar constructor should take count=1"
-#endif
- void fill( QChar c, int len = -1 );
-
- QString copy() const;
-
- QString arg(long a, int fieldwidth=0, int base=10) const;
- QString arg(ulong a, int fieldwidth=0, int base=10) const;
- QString arg(int a, int fieldwidth=0, int base=10) const;
- QString arg(uint a, int fieldwidth=0, int base=10) const;
- QString arg(short a, int fieldwidth=0, int base=10) const;
- QString arg(ushort a, int fieldwidth=0, int base=10) const;
- QString arg(char a, int fieldwidth=0) const;
- QString arg(QChar a, int fieldwidth=0) const;
- QString arg(const QString& a, int fieldwidth=0) const;
- QString arg(double a, int fieldwidth=0, char fmt='g', int prec=-1) const;
-
- QString &sprintf( const char* format, ... )
-#if defined(_CC_GNU_) && !defined(__INSURE__)
- __attribute__ ((format (printf, 2, 3)))
-#endif
- ;
-
- int find( QChar c, int index=0, bool cs=TRUE ) const;
- int find( char c, int index=0, bool cs=TRUE ) const;
- int find( const QString &str, int index=0, bool cs=TRUE ) const;
- int find( const QRegExp &, int index=0 ) const;
-#ifndef QT_NO_CAST_ASCII
- int find( const char* str, int index=0 ) const;
-#endif
- int findRev( QChar c, int index=-1, bool cs=TRUE) const;
- int findRev( char c, int index=-1, bool cs=TRUE) const;
- int findRev( const QString &str, int index=-1, bool cs=TRUE) const;
- int findRev( const QRegExp &, int index=-1 ) const;
-#ifndef QT_NO_CAST_ASCII
- int findRev( const char* str, int index=-1 ) const;
-#endif
- int contains( QChar c, bool cs=TRUE ) const;
- int contains( char c, bool cs=TRUE ) const
- { return contains(QChar(c), cs); }
-#ifndef QT_NO_CAST_ASCII
- int contains( const char* str, bool cs=TRUE ) const;
-#endif
- int contains( const QString &str, bool cs=TRUE ) const;
- int contains( const QRegExp & ) const;
-
- QString left( uint len ) const;
- QString right( uint len ) const;
- QString mid( uint index, uint len=0xffffffff) const;
-
- QString leftJustify( uint width, QChar fill=' ', bool trunc=FALSE)const;
- QString rightJustify( uint width, QChar fill=' ',bool trunc=FALSE)const;
-
- QString lower() const;
- QString upper() const;
-
- QString stripWhiteSpace() const;
- QString simplifyWhiteSpace() const;
-
- QString &insert( uint index, const QString & );
- QString &insert( uint index, const QChar*, uint len );
- QString &insert( uint index, QChar );
- QString &insert( uint index, char c ) { return insert(index,QChar(c)); }
- QString &append( char );
- QString &append( QChar );
- QString &append( const QString & );
- QString &prepend( char );
- QString &prepend( QChar );
- QString &prepend( const QString & );
- QString &remove( uint index, uint len );
- QString &replace( uint index, uint len, const QString & );
- QString &replace( uint index, uint len, const QChar*, uint clen );
- QString &replace( const QRegExp &, const QString & );
-
- short toShort( bool *ok=0, int base=10 ) const;
- ushort toUShort( bool *ok=0, int base=10 ) const;
- int toInt( bool *ok=0, int base=10 ) const;
- uint toUInt( bool *ok=0, int base=10 ) const;
- long toLong( bool *ok=0, int base=10 ) const;
- ulong toULong( bool *ok=0, int base=10 ) const;
- uint64 toUInt64( bool *ok=0, int base=10 ) const;
- float toFloat( bool *ok=0 ) const;
- double toDouble( bool *ok=0 ) const;
-
- QString &setNum( short, int base=10 );
- QString &setNum( ushort, int base=10 );
- QString &setNum( int, int base=10 );
- QString &setNum( uint, int base=10 );
- QString &setNum( long, int base=10 );
- QString &setNum( ulong, int base=10 );
- QString &setNum( float, char f='g', int prec=6 );
- QString &setNum( double, char f='g', int prec=6 );
-
- static QString number( long, int base=10 );
- static QString number( ulong, int base=10);
- static QString number( int, int base=10 );
- static QString number( uint, int base=10);
- static QString number( double, char f='g', int prec=6 );
-
- void setExpand( uint index, QChar c );
-
- QString &operator+=( const QString &str );
- QString &operator+=( QChar c );
- QString &operator+=( char c );
-
- // Your compiler is smart enough to use the const one if it can.
- QChar at( uint i ) const
- { return i<d->len ? d->unicode[i] : QChar::null; }
- QChar operator[]( int i ) const { return at((uint)i); }
- QCharRef at( uint i );
- QCharRef operator[]( int i );
-
- QChar constref(uint i) const
- { return at(i); }
- QChar& ref(uint i)
- { // Optimized for easy-inlining by simple compilers.
- if (d->count!=1 || i>=d->len)
- subat(i);
- d->dirtyascii=1;
- return d->unicode[i];
- }
-
- const QChar* unicode() const { return d->unicode; }
- const char* ascii() const;
- const char* latin1() const;
- static QString fromLatin1(const char*, int len=-1);
- const unsigned short *ucs2() const;
- static QString fromUcs2( const unsigned short *ucs2 );
-#ifndef QT_NO_TEXTCODEC
- QCString utf8() const;
- static QString fromUtf8(const char*, int len=-1);
-#endif
- QCString local8Bit() const;
- static QString fromLocal8Bit(const char*, int len=-1);
- bool operator!() const;
-#ifndef QT_NO_ASCII_CAST
- operator const char *() const { return latin1(); }
-#endif
-
- QString &setUnicode( const QChar* unicode, uint len );
- QString &setUnicodeCodes( const ushort* unicode_as_ushorts, uint len );
- QString &setLatin1( const char*, int len=-1 );
-
- int compare( const QString& s ) const;
- static int compare( const QString& s1, const QString& s2 )
- { return s1.compare(s2); }
-
-#ifndef QT_NO_DATASTREAM
- friend Q_EXPORT QDataStream &operator>>( QDataStream &, QString & );
-#endif
- // new functions for BiDi
- void compose();
- QString::Direction direction() const;
- QString::Direction basicDirection() const;
- QString visual(int index = 0, int len = -1);
-
-#ifndef QT_NO_COMPAT
- const char* data() const { return latin1(); }
-#endif
-
- bool startsWith( const QString& ) const;
-
-private:
- QString( int size, bool dummy ); // allocate size incl. \0
-
- void deref();
- void real_detach();
- void setLength( uint pos );
- void subat( uint );
- bool findArg(int& pos, int& len) const;
-
- static QChar* asciiToUnicode( const char*, uint * len, uint maxlen=(uint)-1 );
- static QChar* asciiToUnicode( const QByteArray&, uint * len );
- static char* unicodeToAscii( const QChar*, uint len );
-
- QStringData *d;
- static QStringData* shared_null;
- static QStringData* makeSharedNull();
-
- friend class QConstString;
- QString(QStringData* dd, bool /*dummy*/) : d(dd) { }
-};
-
-class Q_EXPORT QCharRef {
- friend class QString;
- QString& s;
- uint p;
- QCharRef(QString* str, uint pos) : s(*str), p(pos) { }
- QCharRef(const QCharRef &ref) : s(ref.s), p(ref.p) { }
-
-public:
- // Most QChar operations repeated here...
-
- // all this is not documented: We just say "like QChar" and let it be.
-#if 1
- ushort unicode() const { return s.constref(p).unicode(); }
- char latin1() const { return s.constref(p).latin1(); }
-
- // An operator= for each QChar cast constructor...
- QCharRef operator=(char c ) { s.ref(p)=c; return *this; }
- QCharRef operator=(uchar c ) { s.ref(p)=c; return *this; }
- QCharRef operator=(QChar c ) { s.ref(p)=c; return *this; }
- QCharRef operator=(const QCharRef& c ) { s.ref(p)=c.unicode(); return *this; }
- QCharRef operator=(ushort rc ) { s.ref(p)=rc; return *this; }
- QCharRef operator=(short rc ) { s.ref(p)=rc; return *this; }
- QCharRef operator=(uint rc ) { s.ref(p)=rc; return *this; }
- QCharRef operator=(int rc ) { s.ref(p)=rc; return *this; }
-
- operator QChar () const { return s.constref(p); }
-
- // each function...
- bool isNull() const { return unicode()==0; }
- bool isPrint() const { return s.constref(p).isPrint(); }
- bool isPunct() const { return s.constref(p).isPunct(); }
- bool isSpace() const { return s.constref(p).isSpace(); }
- bool isMark() const { return s.constref(p).isMark(); }
- bool isLetter() const { return s.constref(p).isLetter(); }
- bool isNumber() const { return s.constref(p).isNumber(); }
- bool isLetterOrNumber() { return s.constref(p).isLetterOrNumber(); }
- bool isDigit() const { return s.constref(p).isDigit(); }
-
- int digitValue() const { return s.constref(p).digitValue(); }
- QChar lower() { return s.constref(p).lower(); }
- QChar upper() { return s.constref(p).upper(); }
-
- QChar::Category category() const { return s.constref(p).category(); }
- QChar::Direction direction() const { return s.constref(p).direction(); }
- QChar::Joining joining() const { return s.constref(p).joining(); }
- bool mirrored() const { return s.constref(p).mirrored(); }
- QChar mirroredChar() const { return s.constref(p).mirroredChar(); }
- QString decomposition() const { return s.constref(p).decomposition(); }
- QChar::Decomposition decompositionTag() const { return s.constref(p).decompositionTag(); }
-
- // Not the non-const ones of these.
- uchar cell() const { return s.constref(p).cell(); }
- uchar row() const { return s.constref(p).row(); }
-#endif
-};
-
-inline QCharRef QString::at( uint i ) { return QCharRef(this,i); }
-inline QCharRef QString::operator[]( int i ) { return at((uint)i); }
-
-
-class Q_EXPORT QConstString : private QString {
-public:
- QConstString( QChar* unicode, uint length );
- ~QConstString();
- const QString& string() const { return *this; }
-};
-
-
-/*****************************************************************************
- QString stream functions
- *****************************************************************************/
-#ifndef QT_NO_DATASTREAM
-Q_EXPORT QDataStream &operator<<( QDataStream &, const QString & );
-Q_EXPORT QDataStream &operator>>( QDataStream &, QString & );
-#endif
-
-/*****************************************************************************
- QString inline functions
- *****************************************************************************/
-
-// These two move code into makeSharedNull() and deletesData()
-// to improve cache-coherence (and reduce code bloat), while
-// keeping the common cases fast.
-//
-// No safe way to pre-init shared_null on ALL compilers/linkers.
-inline QString::QString() :
- d(shared_null ? shared_null : makeSharedNull())
-{
- d->ref();
-}
-//
-inline QString::~QString()
-{
- if ( d->deref() ) {
- if ( d == shared_null )
- shared_null = 0;
- d->deleteSelf();
- }
-}
-
-inline QString &QString::operator=( QChar c )
-{ return *this = QString(c); }
-
-inline QString &QString::operator=( char c )
-{ return *this = QString(QChar(c)); }
-
-//inline bool QString::isNull() const
-//{ return unicode() == 0; }
-
-inline bool QString::operator!() const
-{ return isNull(); }
-
-inline uint QString::length() const
-{ return d->len; }
-
-inline bool QString::isEmpty() const
-{ return length() == 0; }
-
-inline QString QString::copy() const
-{ return QString( *this ); }
-
-inline QString &QString::prepend( const QString & s )
-{ return insert(0,s); }
-
-inline QString &QString::prepend( QChar c )
-{ return insert(0,c); }
-
-inline QString &QString::prepend( char c )
-{ return insert(0,c); }
-
-inline QString &QString::append( const QString & s )
-{ return operator+=(s); }
-
-inline QString &QString::append( QChar c )
-{ return operator+=(c); }
-
-inline QString &QString::append( char c )
-{ return operator+=(c); }
-
-inline QString &QString::setNum( short n, int base )
-{ return setNum((long)n, base); }
-
-inline QString &QString::setNum( ushort n, int base )
-{ return setNum((ulong)n, base); }
-
-inline QString &QString::setNum( int n, int base )
-{ return setNum((long)n, base); }
-
-inline QString &QString::setNum( uint n, int base )
-{ return setNum((ulong)n, base); }
-
-inline QString &QString::setNum( float n, char f, int prec )
-{ return setNum((double)n,f,prec); }
-
-inline QString QString::arg(int a, int fieldwidth, int base) const
-{ return arg((long)a, fieldwidth, base); }
-
-inline QString QString::arg(uint a, int fieldwidth, int base) const
-{ return arg((ulong)a, fieldwidth, base); }
-
-inline QString QString::arg(short a, int fieldwidth, int base) const
-{ return arg((long)a, fieldwidth, base); }
-
-inline QString QString::arg(ushort a, int fieldwidth, int base) const
-{ return arg((ulong)a, fieldwidth, base); }
-
-inline int QString::find( char c, int index, bool cs ) const
-{ return find(QChar(c), index, cs); }
-
-inline int QString::findRev( char c, int index, bool cs) const
-{ return findRev( QChar(c), index, cs ); }
-
-
-#ifndef QT_NO_CAST_ASCII
-inline int QString::find( const char* str, int index ) const
-{ return find(QString::fromLatin1(str), index); }
-
-inline int QString::findRev( const char* str, int index ) const
-{ return findRev(QString::fromLatin1(str), index); }
-#endif
-
-
-/*****************************************************************************
- QString non-member operators
- *****************************************************************************/
-
-Q_EXPORT bool operator!=( const QString &s1, const QString &s2 );
-Q_EXPORT bool operator<( const QString &s1, const QString &s2 );
-Q_EXPORT bool operator<=( const QString &s1, const QString &s2 );
-Q_EXPORT bool operator==( const QString &s1, const QString &s2 );
-Q_EXPORT bool operator>( const QString &s1, const QString &s2 );
-Q_EXPORT bool operator>=( const QString &s1, const QString &s2 );
-#ifndef QT_NO_CAST_ASCII
-Q_EXPORT bool operator!=( const QString &s1, const char *s2 );
-Q_EXPORT bool operator<( const QString &s1, const char *s2 );
-Q_EXPORT bool operator<=( const QString &s1, const char *s2 );
-Q_EXPORT bool operator==( const QString &s1, const char *s2 );
-Q_EXPORT bool operator>( const QString &s1, const char *s2 );
-Q_EXPORT bool operator>=( const QString &s1, const char *s2 );
-Q_EXPORT bool operator!=( const char *s1, const QString &s2 );
-Q_EXPORT bool operator<( const char *s1, const QString &s2 );
-Q_EXPORT bool operator<=( const char *s1, const QString &s2 );
-Q_EXPORT bool operator==( const char *s1, const QString &s2 );
-//Q_EXPORT bool operator>( const char *s1, const QString &s2 ); // MSVC++
-Q_EXPORT bool operator>=( const char *s1, const QString &s2 );
-#endif
-
-Q_EXPORT inline QString operator+( const QString &s1, const QString &s2 )
-{
- QString tmp( s1 );
- tmp += s2;
- return tmp;
-}
-
-#ifndef QT_NO_CAST_ASCII
-Q_EXPORT inline QString operator+( const QString &s1, const char *s2 )
-{
- QString tmp( s1 );
- tmp += QString::fromLatin1(s2);
- return tmp;
-}
-
-Q_EXPORT inline QString operator+( const char *s1, const QString &s2 )
-{
- QString tmp = QString::fromLatin1( s1 );
- tmp += s2;
- return tmp;
-}
-#endif
-
-Q_EXPORT inline QString operator+( const QString &s1, QChar c2 )
-{
- QString tmp( s1 );
- tmp += c2;
- return tmp;
-}
-
-Q_EXPORT inline QString operator+( const QString &s1, char c2 )
-{
- QString tmp( s1 );
- tmp += c2;
- return tmp;
-}
-
-Q_EXPORT inline QString operator+( QChar c1, const QString &s2 )
-{
- QString tmp;
- tmp += c1;
- tmp += s2;
- return tmp;
-}
-
-Q_EXPORT inline QString operator+( char c1, const QString &s2 )
-{
- QString tmp;
- tmp += c1;
- tmp += s2;
- return tmp;
-}
-
-#if defined(_OS_WIN32_)
-extern Q_EXPORT QString qt_winQString(void*);
-extern Q_EXPORT const void* qt_winTchar(const QString& str, bool addnul);
-extern Q_EXPORT void* qt_winTchar_new(const QString& str);
-extern Q_EXPORT QCString qt_winQString2MB( const QString& s, int len=-1 );
-extern Q_EXPORT QString qt_winMB2QString( const char* mb, int len=-1 );
-#endif
-
-#endif // QSTRING_H
diff --git a/qtools/qstringlist.cpp b/qtools/qstringlist.cpp
deleted file mode 100644
index aa7ac16..0000000
--- a/qtools/qstringlist.cpp
+++ /dev/null
@@ -1,307 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QStringList
-**
-** Created : 990406
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qstringlist.h"
-
-#ifndef QT_NO_STRINGLIST
-#include "qstrlist.h"
-#include "qdatastream.h"
-#include "qtl.h"
-
-// NOT REVISED
-/*!
- \class QStringList qstringlist.h
- \brief A list of strings.
-
- \ingroup qtl
- \ingroup tools
- \ingroup shared
-
- QStringList is basically a QValueList of QString objects. As opposed
- to QStrList, that stores pointers to characters, QStringList deals
- with real QString objects. It is the class of choice whenever you
- work with unicode strings.
-
- Like QString itself, QStringList objects are implicit shared.
- Passing them around as value-parameters is both fast and safe.
-
- Example:
- \code
- QStringList list;
-
- // three different ways of appending values:
- list.append( "Torben");
- list += "Warwick";
- list << "Matthias" << "Arnt" << "Paul";
-
- // sort the list, Arnt's now first
- list.sort();
-
- // print it out
- for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
- printf( "%s \n", (*it).latin1() );
- }
- \endcode
-
- Convenience methods such as sort(), split(), join() and grep() make
- working with QStringList easy.
-*/
-
-/*!
- \fn QStringList::QStringList()
- Creates an empty list.
-*/
-
-/*! \fn QStringList::QStringList( const QStringList& l )
- Creates a copy of the list. This function is very fast since
- QStringList is implicit shared. However, for the programmer this
- is the same as a deep copy. If this list or the original one or some
- other list referencing the same shared data is modified, then the
- modifying list makes a copy first.
-*/
-
-/*!
- \fn QStringList::QStringList (const QString & i)
- Constructs a string list consisting of the single string \a i.
- To make longer lists easily, use:
- \code
- QString s1,s2,s3;
- ...
- QStringList mylist = QStringList() << s1 << s2 << s3;
- \endcode
-*/
-
-/*!
- \fn QStringList::QStringList (const char* i)
- Constructs a string list consisting of the single latin-1 string \a i.
-*/
-
-/*! \fn QStringList::QStringList( const QValueList<QString>& l )
-
- Constructs a new string list that is a copy of \a l.
-*/
-
-/*!
- Sorts the list of strings in ascending order.
-
- Sorting is very fast. It uses the Qt Template Library's
- efficient HeapSort implementation that operates in O(n*log n).
-*/
-void QStringList::sort()
-{
- qHeapSort(*this);
-}
-
-/*!
- Splits the string \a str using \a sep as separator. Returns the
- list of strings. If \a allowEmptyEntries is TRUE, also empty
- entries are inserted into the list, else not. So if you have
- a string 'abc..d.e.', a list which contains 'abc', 'd', and 'e'
- would be returned if \a allowEmptyEntries is FALSE, but
- a list containing 'abc', '', 'd', 'e' and '' would be returned if
- \a allowEmptyEntries is TRUE.
- If \a str doesn't contain \a sep, a stringlist
- with one item, which is the same as \a str, is returned.
-
- \sa join()
-*/
-
-QStringList QStringList::split( const QChar &sep, const QString &str, bool allowEmptyEntries )
-{
- return split( QString( sep ), str, allowEmptyEntries );
-}
-
-/*!
- Splits the string \a str using \a sep as separator. Returns the
- list of strings. If \a allowEmptyEntries is TRUE, also empty
- entries are inserted into the list, else not. So if you have
- a string 'abc..d.e.', a list which contains 'abc', 'd', and 'e'
- would be returned if \a allowEmptyEntries is FALSE, but
- a list containing 'abc', '', 'd', 'e' and '' would be returned if
- \a allowEmptyEntries is TRUE.
- If \a str doesn't contain \a sep, a stringlist
- with one item, which is the same as \a str, is returned.
-
- \sa join()
-*/
-
-QStringList QStringList::split( const QString &sep, const QString &str, bool allowEmptyEntries )
-{
- QStringList lst;
-
- int j = 0;
- int i = str.find( sep, j );
-
- while ( i != -1 ) {
- if ( str.mid( j, i - j ).length() > 0 )
- lst << str.mid( j, i - j );
- else if ( allowEmptyEntries )
- lst << QString::null;
- j = i + sep.length();
- i = str.find( sep, j );
- }
-
- int l = str.length() - 1;
- if ( str.mid( j, l - j + 1 ).length() > 0 )
- lst << str.mid( j, l - j + 1 );
- else if ( allowEmptyEntries )
- lst << QString::null;
-
- return lst;
-}
-
-QStringList QStringList::split( const QCString &sep, const QCString &str, bool allowEmptyEntries )
-{
- return split(QString(sep.data()),QString(str.data()),allowEmptyEntries);
-}
-
-/*!
- Splits the string \a str using the regular expression \a sep as separator. Returns the
- list of strings. If \a allowEmptyEntries is TRUE, also empty
- entries are inserted into the list, else not. So if you have
- a string 'abc..d.e.', a list which contains 'abc', 'd', and 'e'
- would be returned if \a allowEmptyEntries is FALSE, but
- a list containing 'abc', '', 'd', 'e' and '' would be returned if
- \a allowEmptyEntries is TRUE.
- If \a str doesn't contain \a sep, a stringlist
- with one item, which is the same as \a str, is returned.
-
- \sa join()
-*/
-
-QStringList QStringList::split( const QRegExp &sep, const QString &str, bool allowEmptyEntries )
-{
- QStringList lst;
-
- int j = 0;
- int len = 0;
- int i = sep.match( str.data(), j, &len );
-
- while ( i != -1 ) {
- if ( str.mid( j, i - j ).length() > 0 )
- lst << str.mid( j, i - j );
- else if ( allowEmptyEntries )
- lst << QString::null;
- j = i + len;
- i = sep.match( str.data(), j, &len );
- }
-
- int l = str.length() - 1;
- if ( str.mid( j, l - j + 1 ).length() > 0 )
- lst << str.mid( j, l - j + 1 );
- else if ( allowEmptyEntries )
- lst << QString::null;
-
- return lst;
-}
-
-/*!
- Returns a list of all strings containing the substring \a str.
-
- If \a cs is TRUE, the grep is done case sensitively, else not.
-*/
-
-QStringList QStringList::grep( const QString &str, bool cs ) const
-{
- QStringList res;
- for ( QStringList::ConstIterator it = begin(); it != end(); ++it )
- if ( (*it).contains( str, cs ) )
- res << *it;
-
- return res;
-}
-
-/*!
- Returns a list of all strings containing a substring that matches
- the regular expression \a expr.
-*/
-
-QStringList QStringList::grep( const QRegExp &expr ) const
-{
- QStringList res;
- for ( QStringList::ConstIterator it = begin(); it != end(); ++it )
- if ( (*it).contains( expr ) )
- res << *it;
-
- return res;
-}
-
-/*!
- Joins the stringlist into a single string with each element
- separated by \a sep.
-
- \sa split()
-*/
-QString QStringList::join( const QString &sep ) const
-{
- QString res;
- bool already = FALSE;
- for ( QStringList::ConstIterator it = begin(); it != end(); ++it ) {
- if ( already )
- res += sep;
- already = TRUE;
- res += *it;
- }
-
- return res;
-}
-
-#ifndef QT_NO_DATASTREAM
-Q_EXPORT QDataStream &operator>>( QDataStream & s, QStringList& l )
-{
- return s >> (QValueList<QString>&)l;
-}
-
-Q_EXPORT QDataStream &operator<<( QDataStream & s, const QStringList& l )
-{
- return s << (const QValueList<QString>&)l;
-}
-#endif
-
-/*!
- Converts from a QStrList (ASCII) to a QStringList (Unicode).
-*/
-QStringList QStringList::fromStrList(const QStrList& ascii)
-{
- QStringList res;
- const char * s;
- for ( QStrListIterator it(ascii); (s=it.current()); ++it )
- res << s;
- return res;
-}
-
-#endif //QT_NO_STRINGLIST
diff --git a/qtools/qstringlist.h b/qtools/qstringlist.h
deleted file mode 100644
index 3f9fbb2..0000000
--- a/qtools/qstringlist.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QStringList class
-**
-** Created : 990406
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QSTRINGLIST_H
-#define QSTRINGLIST_H
-
-#ifndef QT_H
-#include "qvaluelist.h"
-#include "qstring.h"
-#include "qregexp.h"
-#endif // QT_H
-
-#ifndef QT_NO_STRINGLIST
-
-class QStrList;
-
-class Q_EXPORT QStringList : public QValueList<QString>
-{
-public:
- QStringList() { }
- QStringList( const QStringList& l ) : QValueList<QString>(l) { }
- QStringList( const QValueList<QString>& l ) : QValueList<QString>(l) { }
- QStringList( const QString& i ) { append(i); }
-#ifndef QT_NO_CAST_ASCII
- QStringList( const char* i ) { append(i); }
-#endif
-
- static QStringList fromStrList(const QStrList&);
-
- void sort();
-
- static QStringList split( const QString &sep, const QString &str, bool allowEmptyEntries = FALSE );
- static QStringList split( const QCString &sep, const QCString &str, bool allowEmptyEntries = FALSE );
- static QStringList split( const QChar &sep, const QString &str, bool allowEmptyEntries = FALSE );
- static QStringList split( const QRegExp &sep, const QString &str, bool allowEmptyEntries = FALSE );
- QString join( const QString &sep ) const;
-
- QStringList grep( const QString &str, bool cs = TRUE ) const;
- QStringList grep( const QRegExp &expr ) const;
-};
-
-#ifndef QT_NO_DATASTREAM
-class QDataStream;
-extern Q_EXPORT QDataStream &operator>>( QDataStream &, QStringList& );
-extern Q_EXPORT QDataStream &operator<<( QDataStream &, const QStringList& );
-#endif
-#endif // QT_NO_STRINGLIST
-#endif // QSTRINGLIST_H
diff --git a/qtools/qstrlist.doc b/qtools/qstrlist.doc
deleted file mode 100644
index 751c6c2..0000000
--- a/qtools/qstrlist.doc
+++ /dev/null
@@ -1,5 +0,0 @@
-/****************************************************************************
-**
-*****************************************************************************/
-
-//typedef QListIterator<char> QStrListIterator;
diff --git a/qtools/qstrlist.h b/qtools/qstrlist.h
deleted file mode 100644
index ebf97c5..0000000
--- a/qtools/qstrlist.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QStrList, QStrIList and QStrListIterator classes
-**
-** Created : 920730
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QSTRLIST_H
-#define QSTRLIST_H
-
-#ifndef QT_H
-#include "qstring.h"
-#include "qinternallist.h"
-#include "qdatastream.h"
-#endif // QT_H
-
-
-#if defined(Q_TEMPLATEDLL)
-template class Q_EXPORT QInternalList<char>;
-template class Q_EXPORT QInternalListIterator<char>;
-#endif
-
-typedef QInternalList<char> QStrListBase;
-typedef QInternalListIterator<char> QStrListIterator;
-
-
-class Q_EXPORT QStrList : public QStrListBase
-{
-public:
- QStrList( bool deepCopies=TRUE ) { dc = deepCopies; del_item = deepCopies; }
- QStrList( const QStrList & );
- ~QStrList() { clear(); }
- QStrList& operator=( const QStrList & );
-
-private:
- QCollection::Item newItem( QCollection::Item d ) { return dc ? qstrdup( (const char*)d ) : d; }
- void deleteItem( QCollection::Item d ) { if ( del_item ) delete[] (char*)d; }
- int compareItems( QCollection::Item s1, QCollection::Item s2 ) { return qstrcmp((const char*)s1,
- (const char*)s2); }
-#ifndef QT_NO_DATASTREAM
- QDataStream &read( QDataStream &s, QCollection::Item &d )
- { s >> (char *&)d; return s; }
- QDataStream &write( QDataStream &s, QCollection::Item d ) const
- { return s << (const char *)d; }
-#endif
- bool dc;
-};
-
-
-class Q_EXPORT QStrIList : public QStrList // case insensitive string list
-{
-public:
- QStrIList( bool deepCopies=TRUE ) : QStrList( deepCopies ) {}
- ~QStrIList() { clear(); }
-private:
- int compareItems( QCollection::Item s1, QCollection::Item s2 )
- { return qstricmp((const char*)s1,
- (const char*)s2); }
-};
-
-
-inline QStrList & QStrList::operator=( const QStrList &strList )
-{
- clear();
- dc = strList.dc;
- del_item = dc;
- QStrListBase::operator=(strList);
- return *this;
-}
-
-inline QStrList::QStrList( const QStrList &strList )
- : QStrListBase( strList )
-{
- dc = FALSE;
- operator=(strList);
-}
-
-
-#endif // QSTRLIST_H
diff --git a/qtools/qstrvec.h b/qtools/qstrvec.h
deleted file mode 100644
index 15d3abb..0000000
--- a/qtools/qstrvec.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QStrVec and QStrIVec classes
-**
-** Created : 931203
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QSTRVEC_H
-#define QSTRVEC_H
-
-#ifndef QT_H
-#include "qstring.h"
-#include "qvector.h"
-#include "qdatastream.h"
-#endif // QT_H
-
-
-#if defined(Q_TEMPLATEDLL)
-template class Q_EXPORT QVector<char>
-#endif
-
-typedef QVector<char> QStrVecBase;
-
-
-class Q_EXPORT QStrVec : public QStrVecBase
-{
-public:
- QStrVec() { dc = TRUE; }
- QStrVec( uint size, bool deepc = TRUE ) : QStrVecBase(size) {dc=deepc;}
- ~QStrVec() { clear(); }
-private:
- Item newItem( Item d ) { return dc ? qstrdup( (const char*)d ) : d; }
- void deleteItem( Item d ) { if ( dc ) delete[] (char*)d; }
- int compareItems( Item s1, Item s2 )
- { return qstrcmp((const char*)s1,
- (const char*)s2); }
-#ifndef QT_NO_DATASTREAM
- QDataStream &read( QDataStream &s, Item &d )
- { s >> (char *&)d; return s; }
- QDataStream &write( QDataStream &s, Item d ) const
- { return s << (const char*)d; }
-#endif
- bool dc;
-};
-
-
-class Q_EXPORT QStrIVec : public QStrVec // case insensitive string vec
-{
-public:
- QStrIVec() {}
- QStrIVec( uint size, bool dc = TRUE ) : QStrVec( size, dc ) {}
- ~QStrIVec() { clear(); }
-private:
- int compareItems( Item s1, Item s2 )
- { return qstricmp((const char*)s1,
- (const char*)s2); }
-};
-
-
-#endif // QSTRVEC_H
diff --git a/qtools/qtextcodec.cpp b/qtools/qtextcodec.cpp
deleted file mode 100644
index 13c3d51..0000000
--- a/qtools/qtextcodec.cpp
+++ /dev/null
@@ -1,2071 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QTextCodec class
-**
-** Created : 981015
-**
-** Copyright (C)1998-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qtextcodec.h"
-#ifndef QT_NO_TEXTCODEC
-
-#include "qinternallist.h"
-#ifndef QT_NO_CODECS
-#include "qutfcodec.h"
-//#include "qgbkcodec.h"
-//#include "qeucjpcodec.h"
-//#include "qjiscodec.h"
-//#include "qsjiscodec.h"
-//#include "qeuckrcodec.h"
-//#include "qbig5codec.h"
-//#include "qrtlcodec.h"
-//#include "qtsciicodec.h"
-#endif
-
-#include "qfile.h"
-#include "qstrlist.h"
-#include "qstring.h"
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <locale.h>
-
-
-static QInternalList<QTextCodec> * all = 0;
-static bool destroying_is_ok; // starts out as 0
-
-/*! Deletes all the created codecs.
-
- \warning Do not call this function.
-
- QApplication calls this just before exiting, to delete any
- QTextCodec objects that may be lying around. Since various other
- classes hold pointers to QTextCodec objects, it is not safe to call
- this function earlier.
-
- If you are using the utility classes (like QString) but not using
- QApplication, calling this function at the very end of your
- application can be helpful to chasing down memory leaks, as
- QTextCodec objects will not show up.
-*/
-
-void QTextCodec::deleteAllCodecs()
-{
- if ( !all )
- return;
-
- destroying_is_ok = TRUE;
- QInternalList<QTextCodec> * ball = all;
- all = 0;
- ball->clear();
- delete ball;
- destroying_is_ok = FALSE;
-}
-
-
-static void setupBuiltinCodecs();
-
-
-static void realSetup()
-{
-#if defined(CHECK_STATE)
- if ( destroying_is_ok )
- qWarning( "creating new codec during codec cleanup" );
-#endif
- all = new QInternalList<QTextCodec>;
- all->setAutoDelete( TRUE );
- setupBuiltinCodecs();
-}
-
-
-static inline void setup()
-{
- if ( !all )
- realSetup();
-}
-
-
-class QTextStatelessEncoder: public QTextEncoder {
- const QTextCodec* codec;
-public:
- QTextStatelessEncoder(const QTextCodec*);
- QCString fromUnicode(const QString& uc, int& lenInOut);
-};
-
-
-class QTextStatelessDecoder : public QTextDecoder {
- const QTextCodec* codec;
-public:
- QTextStatelessDecoder(const QTextCodec*);
- QString toUnicode(const char* chars, int len);
-};
-
-QTextStatelessEncoder::QTextStatelessEncoder(const QTextCodec* c) :
- codec(c)
-{
-}
-
-
-QCString QTextStatelessEncoder::fromUnicode(const QString& uc, int& lenInOut)
-{
- return codec->fromUnicode(uc,lenInOut);
-}
-
-
-QTextStatelessDecoder::QTextStatelessDecoder(const QTextCodec* c) :
- codec(c)
-{
-}
-
-
-QString QTextStatelessDecoder::toUnicode(const char* chars, int len)
-{
- return codec->toUnicode(chars,len);
-}
-
-
-
-// NOT REVISED
-/*!
- \class QTextCodec qtextcodec.h
- \brief Provides conversion between text encodings.
-
- By making objects of subclasses of QTextCodec, support for
- new text encodings can be added to Qt.
-
- The abstract virtual functions describe the encoder to the
- system and the coder is used as required in the different
- text file formats supported QTextStream and, under X11 for the
- locale-specific character input and output (under Windows NT
- codecs are not needed for GUI I/O since the system works
- with Unicode already, and Windows 95/98 has built-in convertors
- for the 8-bit local encoding).
-
- More recently created QTextCodec objects take precedence
- over earlier ones.
-
- To add support for another 8-bit encoding to Qt, make a subclass
- or QTextCodec and implement at least the following methods:
- <dl>
- <dt>\c const char* name() const
- <dd>Return the official name for the encoding.
- <dt>\c int mibEnum() const
- <dd>Return the MIB enum for the encoding if it is listed in the
- <a href=ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets>
- IANA character-sets encoding file</a>.
- </dl>
- If the encoding is multi-byte then it will have "state"; that is,
- the interpretation of some bytes will be dependent on some preceding
- bytes. For such an encoding, you will need to implement
- <dl>
- <dt> \c QTextDecoder* makeDecoder() const
- <dd>Return a QTextDecoder that remembers incomplete multibyte
- sequence prefixes or other required state.
- </dl>
- If the encoding does \e not require state, you should implement:
- <dl>
- <dt> \c QString toUnicode(const char* chars, int len) const
- <dd>Converts \e len characters from \e chars to Unicode.
- </dl>
- The base QTextCodec class has default implementations of the above
- two functions, <i>but they are mutually recursive</i>, so you must
- re-implement at least one of them, or both for improved efficiency.
-
- For conversion from Unicode to 8-bit encodings, it is rarely necessary
- to maintain state. However, two functions similar to the two above
- are used for encoding:
- <dl>
- <dt> \c QTextEncoder* makeEncoder() const
- <dd>Return a QTextDecoder.
- <dt> \c QCString fromUnicode(const QString& uc, int& lenInOut ) const;
- <dd>Converts \e lenInOut characters (of type QChar) from the start
- of the string \a uc, returning a QCString result, and also returning
- the \link QCString::length() length\endlink
- of the result in lenInOut.
- </dl>
- Again, these are mutually recursive so only one needs to be implemented,
- or both if better efficiency is possible.
-
- Finally, you must implement:
- <dl>
- <dt> \c int heuristicContentMatch(const char* chars, int len) const
- <dd>Gives a value indicating how likely it is that \e len characters
- from \e chars are in the encoding.
- </dl>
- A good model for this function is the
- QWindowsLocalCodec::heuristicContentMatch function found in the Qt sources.
-
- A QTextCodec subclass might have improved performance if you also
- re-implement:
- <dl>
- <dt> \c bool canEncode( QChar ) const
- <dd>Test if a Unicode character can be encoded.
- <dt> \c bool canEncode( const QString& ) const
- <dd>Test if a string of Unicode characters can be encoded.
- <dt> \c int heuristicNameMatch(const char* hint) const
- <dd>Test if a possibly non-standard name is referring to the codec.
- </dl>
-*/
-
-
-/*!
- Constructs a QTextCodec, making it of highest precedence.
- The QTextCodec should always be constructed on the heap
- (with new), and once constructed it becomes the responsibility
- of Qt to delete it (which is done at QApplication destruction).
-*/
-QTextCodec::QTextCodec()
-{
- setup();
- all->insert(0,this);
-}
-
-
-/*!
- Destructs the QTextCodec. Note that you should not delete
- codecs yourself - once created they become the responsibility
- of Qt to delete.
-*/
-QTextCodec::~QTextCodec()
-{
- if ( !destroying_is_ok )
- qWarning("QTextCodec::~QTextCodec() called by application");
- if ( all )
- all->remove( this );
-}
-
-
-/*!
- Returns a value indicating how likely this decoder is
- for decoding some format that has the given name.
-
- A good match returns a positive number around
- the length of the string. A bad match is negative.
-
- The default implementation calls simpleHeuristicNameMatch()
- with the name of the codec.
-*/
-int QTextCodec::heuristicNameMatch(const char* hint) const
-{
- return simpleHeuristicNameMatch(name(),hint);
-}
-
-
-// returns a string containing the letters and numbers from input,
-// with a space separating run of a character class. e.g. "iso8859-1"
-// becomes "iso 8859 1"
-static QString lettersAndNumbers( const char * input )
-{
- QString result;
- QChar c;
-
- while( input && *input ) {
- c = *input;
- if ( c.isLetter() || c.isNumber() )
- result += c.lower();
- if ( input[1] ) {
- // add space at character class transition, except
- // transition from upper-case to lower-case letter
- QChar n( input[1] );
- if ( c.isLetter() && n.isLetter() ) {
- if ( c == c.lower() && n == n.upper() )
- result += ' ';
- } else if ( c.category() != n.category() ) {
- result += ' ';
- }
- }
- input++;
- }
- return result.simplifyWhiteSpace();
-}
-
-/*!
- A simple utility function for heuristicNameMatch() - it
- does some very minor character-skipping
- so that almost-exact matches score high.
-*/
-int QTextCodec::simpleHeuristicNameMatch(const char* name, const char* hint)
-{
- // if they're the same, return a perfect score.
- if ( name && hint && qstrcmp( name, hint ) == 0 )
- return qstrlen( hint );
-
- // if the letters and numbers are the same, we have an "almost"
- // perfect match.
- QString h( lettersAndNumbers( hint ) );
- QString n( lettersAndNumbers( name ) );
- if ( h == n )
- return qstrlen( hint )-1;
-
- if ( h.stripWhiteSpace() == n.stripWhiteSpace() )
- return qstrlen( hint )-2;
-
- // could do some more here, but I don't think it's worth it
-
- return 0;
-}
-
-
-/*!
- Returns the QTextCodec \a i places from the more recently
- inserted, or NULL if there is no such QTextCodec. Thus,
- codecForIndex(0) returns the most recently created QTextCodec.
-*/
-QTextCodec* QTextCodec::codecForIndex(int i)
-{
- setup();
- return (uint)i >= all->count() ? 0 : all->at(i);
-}
-
-
-/*!
- Returns the QTextCodec which matches the
- \link QTextCodec::mibEnum() MIBenum\endlink \a mib.
-*/
-QTextCodec* QTextCodec::codecForMib(int mib)
-{
- setup();
- QInternalListIterator<QTextCodec> i(*all);
- QTextCodec* result;
- for ( ; (result=i); ++i ) {
- if ( result->mibEnum()==mib )
- break;
- }
- return result;
-}
-
-
-
-
-
-#ifdef _OS_WIN32_
-class QWindowsLocalCodec: public QTextCodec
-{
-public:
- QWindowsLocalCodec();
- ~QWindowsLocalCodec();
-
- QString toUnicode(const char* chars, int len) const;
- QCString fromUnicode(const QString& uc, int& lenInOut ) const;
-
- const char* name() const;
- int mibEnum() const;
-
- int heuristicContentMatch(const char* chars, int len) const;
-};
-
-QWindowsLocalCodec::QWindowsLocalCodec()
-{
-}
-
-QWindowsLocalCodec::~QWindowsLocalCodec()
-{
-}
-
-
-QString QWindowsLocalCodec::toUnicode(const char* chars, int len) const
-{
- if ( len == 1 && chars ) { // Optimization; avoids allocation
- char c[2];
- c[0] = *chars;
- c[1] = 0;
- return qt_winMB2QString( c, 2 );
- }
- if ( len < 0 )
- return qt_winMB2QString( chars );
- QCString s(chars,len+1);
- return qt_winMB2QString(s);
-}
-
-QCString QWindowsLocalCodec::fromUnicode(const QString& uc, int& lenInOut ) const
-{
- QCString r = qt_winQString2MB( uc, lenInOut );
- lenInOut = r.length();
- return r;
-}
-
-
-const char* QWindowsLocalCodec::name() const
-{
- return "System";
-}
-
-int QWindowsLocalCodec::mibEnum() const
-{
- return 0;
-}
-
-
-int QWindowsLocalCodec::heuristicContentMatch(const char* chars, int len) const
-{
- // ### Not a bad default implementation?
- QString t = toUnicode(chars,len);
- int l = t.length();
- QCString mb = fromUnicode(t,l);
- int i=0;
- while ( i < len )
- if ( chars[i] == mb[i] )
- i++;
- return i;
-}
-
-#else
-
-/* locale names mostly copied from XFree86 */
-static const char * const iso8859_2locales[] = {
- "croatian", "cs", "cs_CS", "cs_CZ","cz", "cz_CZ", "czech", "hr",
- "hr_HR", "hu", "hu_HU", "hungarian", "pl", "pl_PL", "polish", "ro",
- "ro_RO", "rumanian", "serbocroatian", "sh", "sh_SP", "sh_YU", "sk",
- "sk_SK", "sl", "sl_CS", "sl_SI", "slovak", "slovene", "sr_SP", 0 };
-
-static const char * const iso8859_3locales[] = {
- "eo", 0 };
-
-static const char * const iso8859_4locales[] = {
- "ee", "ee_EE", "lt", "lt_LT", "lv", "lv_LV", 0 };
-
-static const char * const iso8859_5locales[] = {
- "bg", "bg_BG", "bulgarian", "mk", "mk_MK",
- "sp", "sp_YU", 0 };
-
-static const char * const iso8859_6locales[] = {
- "ar_AA", "ar_SA", "arabic", 0 };
-
-static const char * const iso8859_7locales[] = {
- "el", "el_GR", "greek", 0 };
-
-static const char * const iso8859_8locales[] = {
- "hebrew", "he", "he_IL", "iw", "iw_IL", 0 };
-
-static const char * const iso8859_9locales[] = {
- "tr", "tr_TR", "turkish", 0 };
-
-static const char * const iso8859_15locales[] = {
- "fr", "fi", "french", "finnish", "et", "et_EE", 0 };
-
-static const char * const koi8_ulocales[] = {
- "uk", "uk_UA", "ru_UA", "ukrainian", 0 };
-
-static const char * const tis_620locales[] = {
- "th", "th_TH", "thai", 0 };
-
-
-static bool try_locale_list( const char * const locale[], const char * lang )
-{
- int i;
- for( i=0; locale[i] && qstrcmp(locale[i], lang); i++ )
- { }
- return locale[i] != 0;
-}
-
-// For the probably_koi8_locales we have to look. the standard says
-// these are 8859-5, but almost all Russian users uses KOI8-R and
-// incorrectly set $LANG to ru_RU. We'll check tolower() to see what
-// tolower() thinks ru_RU means.
-
-// If you read the history, it seems that many Russians blame ISO and
-// Peristroika for the confusion.
-//
-// The real bug is that some programs break if the user specifies
-// ru_RU.KOI8-R.
-
-static const char * const probably_koi8_rlocales[] = {
- "ru", "ru_SU", "ru_RU", "russian", 0 };
-
-// this means ANY of these locale aliases. if they're aliases for
-// different locales, the code breaks.
-static QTextCodec * ru_RU_codec = 0;
-
-static QTextCodec * ru_RU_hack( const char * i ) {
- if ( ! ru_RU_codec ) {
- QCString origlocale = setlocale( LC_CTYPE, i );
- // unicode koi8r latin5 name
- // 0x044E 0xC0 0xEE CYRILLIC SMALL LETTER YU
- // 0x042E 0xE0 0xCE CYRILLIC CAPITAL LETTER YU
- int latin5 = tolower( 0xCE );
- int koi8r = tolower( 0xE0 );
- if ( koi8r == 0xC0 && latin5 != 0xEE ) {
- ru_RU_codec = QTextCodec::codecForName( "KOI8-R" );
- } else if ( koi8r != 0xC0 && latin5 == 0xEE ) {
- ru_RU_codec = QTextCodec::codecForName( "ISO 8859-5" );
- } else {
- // something else again... let's assume... *throws dice*
- ru_RU_codec = QTextCodec::codecForName( "KOI8-R" );
- qWarning( "QTextCodec: using KOI8-R, probe failed (%02x %02x %s)",
- koi8r, latin5, i );
- }
- setlocale( LC_CTYPE, origlocale.data() );
- }
- return ru_RU_codec;
-}
-
-#endif
-
-static QTextCodec * localeMapper = 0;
-
-void qt_set_locale_codec( QTextCodec *codec )
-{
- localeMapper = codec;
-}
-
-/*! Returns a pointer to the codec most suitable for this locale. */
-
-QTextCodec* QTextCodec::codecForLocale()
-{
- if ( localeMapper )
- return localeMapper;
-
- setup();
-
-#ifdef _OS_WIN32_
- localeMapper = new QWindowsLocalCodec;
-#else
- // Very poorly defined and followed standards causes lots of code
- // to try to get all the cases...
-
- char * lang = qstrdup( getenv("LANG") );
-
- char * p = lang ? strchr( lang, '.' ) : 0;
- if ( !p || *p != '.' ) {
- // Some versions of setlocale return encoding, others not.
- char *ctype = qstrdup( setlocale( LC_CTYPE, 0 ) );
- // Some Linux distributions have broken locales which will return
- // "C" for LC_CTYPE
- if ( qstrcmp( ctype, "C" ) == 0 ) {
- delete [] ctype;
- } else {
- if ( lang )
- delete [] lang;
- lang = ctype;
- p = lang ? strchr( lang, '.' ) : 0;
- }
- }
-
- if( p && *p == '.' ) {
- // if there is an encoding and we don't know it, we return 0
- // User knows what they are doing. Codecs will believe them.
- localeMapper = codecForName( lang );
- if ( !localeMapper ) {
- // Use or codec disagree.
- localeMapper = codecForName( p+1 );
- }
- }
- if ( !localeMapper || !(p && *p == '.') ) {
- // if there is none, we default to 8859-1
- // We could perhaps default to 8859-15.
- if ( try_locale_list( iso8859_2locales, lang ) )
- localeMapper = codecForName( "ISO 8859-2" );
- else if ( try_locale_list( iso8859_3locales, lang ) )
- localeMapper = codecForName( "ISO 8859-3" );
- else if ( try_locale_list( iso8859_4locales, lang ) )
- localeMapper = codecForName( "ISO 8859-4" );
- else if ( try_locale_list( iso8859_5locales, lang ) )
- localeMapper = codecForName( "ISO 8859-5" );
- else if ( try_locale_list( iso8859_6locales, lang ) )
- localeMapper = codecForName( "ISO 8859-6-I" );
- else if ( try_locale_list( iso8859_7locales, lang ) )
- localeMapper = codecForName( "ISO 8859-7" );
- else if ( try_locale_list( iso8859_8locales, lang ) )
- localeMapper = codecForName( "ISO 8859-8-I" );
- else if ( try_locale_list( iso8859_9locales, lang ) )
- localeMapper = codecForName( "ISO 8859-9" );
- else if ( try_locale_list( iso8859_15locales, lang ) )
- localeMapper = codecForName( "ISO 8859-15" );
- else if ( try_locale_list( tis_620locales, lang ) )
- localeMapper = codecForName( "ISO 8859-11" );
- else if ( try_locale_list( koi8_ulocales, lang ) )
- localeMapper = codecForName( "KOI8-U" );
- else if ( try_locale_list( probably_koi8_rlocales, lang ) )
- localeMapper = ru_RU_hack( lang );
- else if (!lang || !(localeMapper = codecForName(lang) ))
- localeMapper = codecForName( "ISO 8859-1" );
- }
- delete[] lang;
-#endif
-
- return localeMapper;
-}
-
-
-/*!
- Searches all installed QTextCodec objects, returning the one
- which best matches given name. Returns NULL if no codec has
- a match closeness above \a accuracy.
-
- \sa heuristicNameMatch()
-*/
-QTextCodec* QTextCodec::codecForName(const char* hint, int accuracy)
-{
- setup();
- QInternalListIterator<QTextCodec> i(*all);
- QTextCodec* result = 0;
- int best=accuracy;
- for ( QTextCodec* cursor; (cursor=i); ++i ) {
- int s = cursor->heuristicNameMatch(hint);
- if ( s > best ) {
- best = s;
- result = cursor;
- }
- }
- return result;
-}
-
-
-/*!
- Searches all installed QTextCodec objects, returning the one
- which most recognizes the given content. May return 0.
-
- Note that this is often a poor choice, since character
- encodings often use most of the available character sequences,
- and so only by linguistic analysis could a true match be made.
-
- \sa heuristicContentMatch()
-*/
-QTextCodec* QTextCodec::codecForContent(const char* chars, int len)
-{
- setup();
- QInternalListIterator<QTextCodec> i(*all);
- QTextCodec* result = 0;
- int best=0;
- for ( QTextCodec* cursor; (cursor=i); ++i ) {
- int s = cursor->heuristicContentMatch(chars,len);
- if ( s > best ) {
- best = s;
- result = cursor;
- }
- }
- return result;
-}
-
-
-/*!
- \fn const char* QTextCodec::name() const
- Subclasses of QTextCodec must reimplement this function. It returns
- the name of the encoding supported by the subclass. When choosing
- a name for an encoding, consider these points:
- <ul>
- <li>On X11, heuristicNameMatch( const char * hint )
- is used to test if a the QTextCodec
- can convert between Unicode and the encoding of a font
- with encoding \e hint, such as "iso8859-1" for Latin-1 fonts,
- "koi8-r" for Russian KOI8 fonts.
- The default algorithm of heuristicNameMatch() uses name().
- <li>Some applications may use this function to present
- encodings to the end user.
- </ul>
-*/
-
-/*!
- \fn int QTextCodec::mibEnum() const
-
- Subclasses of QTextCodec must reimplement this function. It returns the
- MIBenum (see
- <a href="ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets">
- the IANA character-sets encoding file</a> for more information).
- It is important that each QTextCodec subclass return the correct unique
- value for this function.
-*/
-
-
-/*!
- \fn int QTextCodec::heuristicContentMatch(const char* chars, int len) const
-
- Subclasses of QTextCodec must reimplement this function. It examines
- the first \a len bytes of \a chars and returns a value indicating how
- likely it is that the string is a prefix of text encoded in the
- encoding of the subclass. Any negative return value indicates that the text
- is detectably not in the encoding (eg. it contains undefined characters).
- A return value of 0 indicates that the text should be decoded with this
- codec rather than as ASCII, but there
- is no particular evidence. The value should range up to \a len. Thus,
- most decoders will return -1, 0, or -\a len.
-
- The characters are not null terminated.
-
- \sa codecForContent().
-*/
-
-
-/*!
- Creates a QTextDecoder which stores enough state to decode chunks
- of char* data to create chunks of Unicode data. The default implementation
- creates a stateless decoder, which is sufficient for only the simplest
- encodings where each byte corresponds to exactly one Unicode character.
-
- The caller is responsible for deleting the returned object.
-*/
-QTextDecoder* QTextCodec::makeDecoder() const
-{
- return new QTextStatelessDecoder(this);
-}
-
-
-/*!
- Creates a QTextEncoder which stores enough state to encode chunks
- of Unicode data as char* data. The default implementation
- creates a stateless encoder, which is sufficient for only the simplest
- encodings where each Unicode character corresponds to exactly one char.
-
- The caller is responsible for deleting the returned object.
-*/
-QTextEncoder* QTextCodec::makeEncoder() const
-{
- return new QTextStatelessEncoder(this);
-}
-
-
-/*!
- Subclasses of QTextCodec must reimplement this function or
- makeDecoder(). It converts the first \a len characters of \a chars
- to Unicode.
-
- The default implementation makes a decoder with makeDecoder() and
- converts the input with that. Note that the default makeDecoder()
- implementation makes a decoder that simply calls
- this function, hence subclasses \e must reimplement one function or
- the other to avoid infinite recursion.
-*/
-QString QTextCodec::toUnicode(const char* chars, int len) const
-{
- QTextDecoder* i = makeDecoder();
- QString result = i->toUnicode(chars,len);
- delete i;
- return result;
-}
-
-
-/*!
- Subclasses of QTextCodec must reimplement either this function or
- makeEncoder(). It converts the first \a lenInOut characters of \a
- uc from Unicode to the encoding of the subclass. If \a lenInOut
- is negative or too large, the length of \a uc is used instead.
-
- The value returned is the property of the caller, which is
- responsible for deleting it with "delete []". The length of the
- resulting Unicode character sequence is returned in \a lenInOut.
-
- The default implementation makes an encoder with makeEncoder() and
- converts the input with that. Note that the default makeEncoder()
- implementation makes an encoder that simply calls
- this function, hence subclasses \e must reimplement one function or
- the other to avoid infinite recursion.
-*/
-
-QCString QTextCodec::fromUnicode(const QString& uc, int& lenInOut) const
-{
- QTextEncoder* i = makeEncoder();
- QCString result = i->fromUnicode(uc, lenInOut);
- delete i;
- return result;
-}
-
-/*!
- \overload QCString QTextCodec::fromUnicode(const QString& uc) const
-*/
-QCString QTextCodec::fromUnicode(const QString& uc) const
-{
- int l = uc.length();
- return fromUnicode(uc,l);
-}
-
-/*!
- \overload QString QTextCodec::toUnicode(const QByteArray& a, int len) const
-*/
-QString QTextCodec::toUnicode(const QByteArray& a, int len) const
-{
- int l = a.size();
- if( l > 0 && a.data()[l - 1] == '\0' ) l--;
- l = QMIN( l, len );
- return toUnicode( a.data(), l );
-}
-
-/*!
- \overload QString QTextCodec::toUnicode(const QByteArray& a) const
-*/
-QString QTextCodec::toUnicode(const QByteArray& a) const
-{
- int l = a.size();
- if( l > 0 && a.data()[l - 1] == '\0' ) l--;
- return toUnicode( a.data(), l );
-}
-
-/*!
- \overload QString QTextCodec::toUnicode(const char* chars) const
-*/
-QString QTextCodec::toUnicode(const char* chars) const
-{
- return toUnicode(chars,qstrlen(chars));
-}
-
-/*!
- Returns TRUE if the unicode character \a ch can be fully encoded
- with this codec. The default implementation tests if the result of
- toUnicode(fromUnicode(ch)) is the original \a ch. Subclasses may be
- able to improve the efficiency.
-*/
-bool QTextCodec::canEncode( QChar ch ) const
-{
- return toUnicode(fromUnicode(ch)) == ch;
-}
-
-/*!
- Returns TRUE if the unicode string \a s can be fully encoded
- with this codec. The default implementation tests if the result of
- toUnicode(fromUnicode(s)) is the original \a s. Subclasses may be
- able to improve the efficiency.
-*/
-bool QTextCodec::canEncode( const QString& s ) const
-{
- return toUnicode(fromUnicode(s)) == s;
-}
-
-
-
-/*!
- \class QTextEncoder qtextcodec.h
- \brief State-based encoder
-
- A QTextEncoder converts Unicode into another format, remembering
- any state that is required between calls.
-
- \sa QTextCodec::makeEncoder()
-*/
-
-/*!
- Destructs the encoder.
-*/
-QTextEncoder::~QTextEncoder()
-{
-}
-/*!
- \fn QCString QTextEncoder::fromUnicode(const QString& uc, int& lenInOut)
-
- Converts \a lenInOut characters (not bytes) from \a uc, producing
- a QCString. \a lenInOut will also be set to the
- \link QCString::length() length\endlink of the result (in bytes).
-
- The encoder is free to record state to use when subsequent calls are
- made to this function (for example, it might change modes with escape
- sequences if needed during the encoding of one string, then assume that
- mode applies when a subsequent call begins).
-*/
-
-/*!
- \class QTextDecoder qtextcodec.h
- \brief State-based decoder
-
- A QTextEncoder converts a text format into Unicode, remembering
- any state that is required between calls.
-
- \sa QTextCodec::makeEncoder()
-*/
-
-
-/*!
- Destructs the decoder.
-*/
-QTextDecoder::~QTextDecoder()
-{
-}
-
-/*!
- \fn QString QTextDecoder::toUnicode(const char* chars, int len)
-
- Converts the first \a len bytes at \a chars to Unicode, returning the
- result.
-
- If not all characters are used (eg. only part of a multi-byte
- encoding is at the end of the characters), the decoder remembers
- enough state to continue with the next call to this function.
-*/
-
-#define CHAINED 0xffff
-
-struct QMultiByteUnicodeTable {
- // If multibyte, ignore unicode and index into multibyte
- // with the next character.
- QMultiByteUnicodeTable() : unicode(0xfffd), multibyte(0) { }
-
- ~QMultiByteUnicodeTable()
- {
- if ( multibyte )
- delete [] multibyte;
- }
-
- ushort unicode;
- QMultiByteUnicodeTable* multibyte;
-};
-
-#ifndef QT_NO_CODECS
-static int getByte(char* &cursor)
-{
- int byte = 0;
- if ( *cursor ) {
- if ( cursor[1] == 'x' )
- byte = (int)strtol(cursor+2,&cursor,16);
- else if ( cursor[1] == 'd' )
- byte = (int)strtol(cursor+2,&cursor,10);
- else
- byte = (int)strtol(cursor+2,&cursor,8);
- }
- return byte&0xff;
-}
-
-class QTextCodecFromIOD;
-
-class QTextCodecFromIODDecoder : public QTextDecoder {
- const QTextCodecFromIOD* codec;
- QMultiByteUnicodeTable* mb;
-public:
- QTextCodecFromIODDecoder(const QTextCodecFromIOD* c);
- QString toUnicode(const char* chars, int len);
-};
-
-class QTextCodecFromIOD : public QTextCodec {
- friend class QTextCodecFromIODDecoder;
-
- QCString n;
-
- // If from_unicode_page[row()][cell()] is 0 and from_unicode_page_multibyte,
- // use from_unicode_page_multibyte[row()][cell()] as string.
- char** from_unicode_page;
- char*** from_unicode_page_multibyte;
- char unkn;
-
- // Only one of these is used
- ushort* to_unicode;
- QMultiByteUnicodeTable* to_unicode_multibyte;
- int max_bytes_per_char;
- QStrList aliases;
-
- bool stateless() const { return !to_unicode_multibyte; }
-
-public:
- QTextCodecFromIOD(QIODevice* iod)
- {
- from_unicode_page = 0;
- to_unicode_multibyte = 0;
- to_unicode = 0;
- from_unicode_page_multibyte = 0;
- max_bytes_per_char = 1;
-
- const int maxlen=100;
- char line[maxlen];
- char esc='\\';
- char comm='%';
- bool incmap = FALSE;
- while (iod->readLine(line,maxlen) > 0) {
- if (0==qstrnicmp(line,"<code_set_name>",15))
- n = line+15;
- else if (0==qstrnicmp(line,"<escape_char> ",14))
- esc = line[14];
- else if (0==qstrnicmp(line,"<comment_char> ",15))
- comm = line[15];
- else if (line[0]==comm && 0==qstrnicmp(line+1," alias ",7)) {
- aliases.append(line+8);
- } else if (0==qstrnicmp(line,"CHARMAP",7)) {
- if (!from_unicode_page) {
- from_unicode_page = new char*[256];
- for (int i=0; i<256; i++)
- from_unicode_page[i]=0;
- }
- if (!to_unicode) {
- to_unicode = new ushort[256];
- }
- incmap = TRUE;
- } else if (0==qstrnicmp(line,"END CHARMAP",11))
- break;
- else if (incmap) {
- char* cursor = line;
- int byte=0,unicode=-1;
- ushort* mb_unicode=0;
- const int maxmb=8; // more -> we'll need to improve datastructures
- char mb[maxmb+1];
- int nmb=0;
-
- while (*cursor) {
- if (cursor[0]=='<' && cursor[1]=='U' &&
- cursor[2]>='0' && cursor[2]<='9' &&
- cursor[3]>='0' && cursor[3]<='9') {
-
- unicode = (int)strtol(cursor+2,&cursor,16);
-
- } else if (*cursor==esc) {
-
- byte = getByte(cursor);
-
- if ( *cursor == esc ) {
- if ( !to_unicode_multibyte ) {
- to_unicode_multibyte =
- new QMultiByteUnicodeTable[256];
- for (int i=0; i<256; i++) {
- to_unicode_multibyte[i].unicode =
- to_unicode[i];
- to_unicode_multibyte[i].multibyte = 0;
- }
- delete [] to_unicode;
- to_unicode = 0;
- }
- QMultiByteUnicodeTable* mbut =
- to_unicode_multibyte+byte;
- mb[nmb++] = byte;
- while ( nmb < maxmb && *cursor == esc ) {
- // Always at least once
-
- mbut->unicode = CHAINED;
- byte = getByte(cursor);
- mb[nmb++] = byte;
- if (!mbut->multibyte) {
- mbut->multibyte =
- new QMultiByteUnicodeTable[256];
- }
- mbut = mbut->multibyte+byte;
- mb_unicode = & mbut->unicode;
- }
-
- if ( nmb > max_bytes_per_char )
- max_bytes_per_char = nmb;
- }
- } else {
- cursor++;
- }
- }
-
- if (unicode >= 0 && unicode <= 0xffff)
- {
- QChar ch((ushort)unicode);
- if (!from_unicode_page[ch.row()]) {
- from_unicode_page[ch.row()] = new char[256];
- for (int i=0; i<256; i++)
- from_unicode_page[ch.row()][i]=0;
- }
- if ( mb_unicode ) {
- from_unicode_page[ch.row()][ch.cell()] = 0;
- if (!from_unicode_page_multibyte) {
- from_unicode_page_multibyte = new char**[256];
- for (int i=0; i<256; i++)
- from_unicode_page_multibyte[i]=0;
- }
- if (!from_unicode_page_multibyte[ch.row()]) {
- from_unicode_page_multibyte[ch.row()] = new char*[256];
- for (int i=0; i<256; i++)
- from_unicode_page_multibyte[ch.row()][i] = 0;
- }
- mb[nmb++] = 0;
- from_unicode_page_multibyte[ch.row()][ch.cell()]
- = qstrdup(mb);
- *mb_unicode = unicode;
- } else {
- from_unicode_page[ch.row()][ch.cell()] = (char)byte;
- if ( to_unicode )
- to_unicode[byte] = unicode;
- else
- to_unicode_multibyte[byte].unicode = unicode;
- }
- } else {
- }
- }
- }
- n = n.stripWhiteSpace();
-
- unkn = '?'; // ##### Might be a bad choice.
- }
-
- ~QTextCodecFromIOD()
- {
- if ( from_unicode_page ) {
- for (int i=0; i<256; i++)
- if (from_unicode_page[i])
- delete [] from_unicode_page[i];
- }
- if ( from_unicode_page_multibyte ) {
- for (int i=0; i<256; i++)
- if (from_unicode_page_multibyte[i])
- for (int j=0; j<256; j++)
- if (from_unicode_page_multibyte[i][j])
- delete [] from_unicode_page_multibyte[i][j];
- }
- if ( to_unicode )
- delete [] to_unicode;
- if ( to_unicode_multibyte )
- delete [] to_unicode_multibyte;
- }
-
- bool ok() const
- {
- return !!from_unicode_page;
- }
-
- QTextDecoder* makeDecoder() const
- {
- if ( stateless() )
- return QTextCodec::makeDecoder();
- else
- return new QTextCodecFromIODDecoder(this);
- }
-
- const char* name() const
- {
- return n;
- }
-
- int mibEnum() const
- {
- return 0; // #### Unknown.
- }
-
- int heuristicContentMatch(const char*, int) const
- {
- return 0;
- }
-
- int heuristicNameMatch(const char* hint) const
- {
- int bestr = QTextCodec::heuristicNameMatch(hint);
- QStrListIterator it(aliases);
- char* a;
- while ((a=it.current())) {
- ++it;
- int r = simpleHeuristicNameMatch(a,hint);
- if (r > bestr)
- bestr = r;
- }
- return bestr;
- }
-
- QString toUnicode(const char* chars, int len) const
- {
- const uchar* uchars = (const uchar*)chars;
- QString result;
- QMultiByteUnicodeTable* multibyte=to_unicode_multibyte;
- if ( multibyte ) {
- while (len--) {
- QMultiByteUnicodeTable& mb = multibyte[*uchars];
- if ( mb.multibyte ) {
- // Chained multi-byte
- multibyte = mb.multibyte;
- } else {
- result += QChar(mb.unicode);
- multibyte=to_unicode_multibyte;
- }
- uchars++;
- }
- } else {
- while (len--)
- result += QChar(to_unicode[*uchars++]);
- }
- return result;
- }
-
- QCString fromUnicode(const QString& uc, int& lenInOut) const
- {
- if (lenInOut > (int)uc.length())
- lenInOut = uc.length();
- int rlen = lenInOut*max_bytes_per_char;
- QCString rstr(rlen);
- char* cursor = rstr.rawData();
- char* s=0;
- int l = lenInOut;
- int lout = 0;
- for (int i=0; i<l; i++) {
- QChar ch = uc[i];
- if ( ch == QChar::null ) {
- // special
- *cursor++ = 0;
- } else if ( from_unicode_page[ch.row()] &&
- from_unicode_page[ch.row()][ch.cell()] )
- {
- *cursor++ = from_unicode_page[ch.row()][ch.cell()];
- lout++;
- } else if ( from_unicode_page_multibyte &&
- from_unicode_page_multibyte[ch.row()] &&
- (s=from_unicode_page_multibyte[ch.row()][ch.cell()]) )
- {
- while (*s) {
- *cursor++ = *s++;
- lout++;
- }
- } else {
- *cursor++ = unkn;
- lout++;
- }
- }
- *cursor = 0;
- lenInOut = lout;
- return rstr;
- }
-};
-
-QTextCodecFromIODDecoder::QTextCodecFromIODDecoder(const QTextCodecFromIOD* c) :
- codec(c)
-{
- mb = codec->to_unicode_multibyte;
-}
-
-QString QTextCodecFromIODDecoder::toUnicode(const char* chars, int len)
-{
- const uchar* uchars = (const uchar*)chars;
- QString result;
- while (len--) {
- QMultiByteUnicodeTable& t = mb[*uchars];
- if ( t.multibyte ) {
- // Chained multi-byte
- mb = t.multibyte;
- } else {
- if ( t.unicode )
- result += QChar(t.unicode);
- mb=codec->to_unicode_multibyte;
- }
- uchars++;
- }
- return result;
-}
-
-/*!
- Reads a POSIX2 charmap definition from \a iod.
- The parser recognizes the following lines:
-<pre>
- &lt;code_set_name&gt; <i>name</i>
- &lt;escape_char&gt; <i>character</i>
- % alias <i>alias</i>
- CHARMAP
- &lt;<i>token</i>&gt; /x<i>hexbyte</i> &lt;U<i>unicode</i>&gt; ...
- &lt;<i>token</i>&gt; /d<i>decbyte</i> &lt;U<i>unicode</i>&gt; ...
- &lt;<i>token</i>&gt; /<i>octbyte</i> &lt;U<i>unicode</i>&gt; ...
- &lt;<i>token</i>&gt; /<i>any</i>/<i>any</i>... &lt;U<i>unicode</i>&gt; ...
- END CHARMAP
-</pre>
-
- The resulting QTextCodec is returned (and also added to the
- global list of codecs). The name() of the result is taken
- from the code_set_name.
-
- Note that a codec constructed in this way uses much more memory
- and is slower than a hand-written QTextCodec subclass, since
- tables in code are in memory shared by all applications simultaneously
- using Qt.
-
- \sa loadCharmapFile()
-*/
-QTextCodec* QTextCodec::loadCharmap(QIODevice* iod)
-{
- QTextCodecFromIOD* r = new QTextCodecFromIOD(iod);
- if ( !r->ok() ) {
- delete r;
- r = 0;
- }
- return r;
-}
-
-/*!
- A convenience function for loadCharmap().
-*/
-QTextCodec* QTextCodec::loadCharmapFile(QString filename)
-{
- QFile f(filename);
- if (f.open(IO_ReadOnly)) {
- QTextCodecFromIOD* r = new QTextCodecFromIOD(&f);
- if ( !r->ok() )
- delete r;
- else
- return r;
- }
- return 0;
-}
-#endif //QT_NO_CODECS
-
-
-/*!
- Returns a string representing the current language.
-*/
-
-const char* QTextCodec::locale()
-{
- static QCString lang;
- if ( lang.isEmpty() ) {
- lang = getenv( "LANG" ); //########Windows??
- if ( lang.isEmpty() )
- lang = "C";
- }
- return lang;
-}
-
-
-
-#ifndef QT_NO_CODECS
-
-class QSimpleTextCodec: public QTextCodec
-{
-public:
- QSimpleTextCodec( int );
- ~QSimpleTextCodec();
-
- QString toUnicode(const char* chars, int len) const;
- QCString fromUnicode(const QString& uc, int& lenInOut ) const;
-
- const char* name() const;
- int mibEnum() const;
-
- int heuristicContentMatch(const char* chars, int len) const;
-
- int heuristicNameMatch(const char* hint) const;
-
-private:
- int forwardIndex;
-};
-
-
-#define LAST_MIB 2259
-
-static struct {
- const char * cs;
- int mib;
- Q_UINT16 values[128];
-} unicodevalues[] = {
- // from RFC 1489, ftp://ftp.isi.edu/in-notes/rfc1489.txt
- { "KOI8-R", 2084,
- { 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
- 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590,
- 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219/**/, 0x221A, 0x2248,
- 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7,
- 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
- 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E,
- 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
- 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9,
- 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
- 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
- 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
- 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
- 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
- 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
- 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
- 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A } },
- // /**/ - The BULLET OPERATOR is confused. Some people think
- // it should be 0x2022 (BULLET).
-
- // from RFC 2319, ftp://ftp.isi.edu/in-notes/rfc2319.txt
- { "KOI8-U", 2088,
- { 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
- 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590,
- 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248,
- 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7,
- 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457,
- 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x0491, 0x255D, 0x255E,
- 0x255F, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407,
- 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x0490, 0x256C, 0x00A9,
- 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
- 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
- 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
- 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
- 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
- 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
- 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
- 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A } },
-
- // next bits generated from tables on the Unicode 2.0 CD. we can
- // use these tables since this is part of the transition to using
- // unicode everywhere in qt.
-
- // $ for A in 8 9 A B C D E F ; do for B in 0 1 2 3 4 5 6 7 8 9 A B C D E F ; do echo 0x${A}${B} 0xFFFD ; done ; done > /tmp/digits ; for a in 8859-* ; do ( awk '/^0x[89ABCDEF]/{ print $1, $2 }' < $a ; cat /tmp/digits ) | sort | uniq -w4 | cut -c6- | paste '-d ' - - - - - - - - | sed -e 's/ /, /g' -e 's/$/,/' -e '$ s/,$/} },/' -e '1 s/^/{ /' > ~/tmp/$a ; done
-
- // then I inserted the files manually.
- { "ISO 8859-2", 5,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
- 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
- 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
- 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
- 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
- 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
- 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
- 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
- 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
- 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9} },
- { "ISO 8859-3", 6,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0xFFFD, 0x0124, 0x00A7,
- 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0xFFFD, 0x017B,
- 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7,
- 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0xFFFD, 0x017C,
- 0x00C0, 0x00C1, 0x00C2, 0xFFFD, 0x00C4, 0x010A, 0x0108, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0xFFFD, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7,
- 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0xFFFD, 0x00E4, 0x010B, 0x0109, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0xFFFD, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7,
- 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9} },
- { "ISO 8859-4", 7,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7,
- 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF,
- 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7,
- 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B,
- 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A,
- 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF,
- 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B,
- 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9} },
- { "ISO 8859-5", 8,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
- 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
- 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
- 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F} },
- { "ISO 8859-6-I", 82,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0xFFFD, 0xFFFD, 0xFFFD, 0x00A4, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x060C, 0x00AD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0x061B, 0xFFFD, 0xFFFD, 0xFFFD, 0x061F,
- 0xFFFD, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
- 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
- 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
- 0x0638, 0x0639, 0x063A, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
- 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F,
- 0x0650, 0x0651, 0x0652, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD} },
- { "ISO 8859-7", 10,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x2018, 0x2019, 0x00A3, 0xFFFD, 0xFFFD, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0xFFFD, 0x00AB, 0x00AC, 0x00AD, 0xFFFD, 0x2015,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7,
- 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
- 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
- 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
- 0x03A0, 0x03A1, 0xFFFD, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
- 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
- 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
- 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
- 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
- 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0xFFFD} },
- { "ISO 8859-8-I", 85,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0xFFFD, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x203E,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x2017,
- 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
- 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
- 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
- 0x05E8, 0x05E9, 0x05EA, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD} },
- { "ISO 8859-9", 12,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF} },
- { "ISO 8859-10", 13,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7,
- 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A,
- 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7,
- 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B,
- 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF,
- 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168,
- 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
- 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF,
- 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169,
- 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138} },
- { "ISO 8859-13", 109,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7,
- 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7,
- 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
- 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
- 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
- 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
- 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
- 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
- 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
- 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
- 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019} },
- { "ISO 8859-14", 110,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7,
- 0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178,
- 0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56,
- 0x1E81, 0x1E57, 0x1E83, 0x1E60, 0x1EF3, 0x1E84, 0x1E85, 0x1E61,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x0174, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x1E6A,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x0176, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF} },
- { "ISO 8859-15", 111,
- { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7,
- 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7,
- 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF} },
-
- // next bits generated again from tables on the Unicode 3.0 CD.
-
- // $ for a in CP* ; do ( awk '/^0x[89ABCDEF]/{ print $1, $2 }' < $a ) | sort | sed -e 's/#UNDEF.*$/0xFFFD/' | cut -c6- | paste '-d ' - - - - - - - - | sed -e 's/ /, /g' -e 's/$/,/' -e '$ s/,$/} },/' -e '1 s/^/{ /' > ~/tmp/$a ; done
-
- { "CP 874", 0, //### what is the mib?
- { 0x20AC, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x2026, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07,
- 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F,
- 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17,
- 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F,
- 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,
- 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,
- 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,
- 0x0E38, 0x0E39, 0x0E3A, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x0E3F,
- 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47,
- 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
- 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
- 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD} },
- { "CP 1250", 2250,
- { 0x20AC, 0xFFFD, 0x201A, 0xFFFD, 0x201E, 0x2026, 0x2020, 0x2021,
- 0xFFFD, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0xFFFD, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
- 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
- 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
- 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
- 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
- 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
- 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
- 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
- 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
- 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
- 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9} },
- { "CP 1251", 2251,
- { 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
- 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0xFFFD, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
- 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
- 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
- 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
- 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F} },
- { "CP 1252", 2252,
- { 0x20AC, 0xFFFD, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFD, 0x017D, 0xFFFD,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFD, 0x017E, 0x0178,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF} },
- { "CP 1253", 2253,
- { 0x20AC, 0xFFFD, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0xFFFD, 0x2030, 0xFFFD, 0x2039, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0xFFFD, 0x2122, 0xFFFD, 0x203A, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0xFFFD, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7,
- 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
- 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
- 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
- 0x03A0, 0x03A1, 0xFFFD, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
- 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
- 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
- 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
- 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
- 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0xFFFD} },
- { "CP 1254", 2254,
- { 0x20AC, 0xFFFD, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFD, 0xFFFD, 0x0178,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
- 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF} },
- { "CP 1255", 2255,
- { 0x20AC, 0xFFFD, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0xFFFD, 0x2039, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0xFFFD, 0x203A, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
- 0x05B8, 0x05B9, 0xFFFD, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
- 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
- 0x05F4, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
- 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
- 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
- 0x05E8, 0x05E9, 0x05EA, 0xFFFD, 0xFFFD, 0x200E, 0x200F, 0xFFFD} },
- { "CP 1256", 2256,
- { 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
- 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
- 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
- 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
- 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
- 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
- 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643,
- 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
- 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
- 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2} },
- { "CP 1257", 2257,
- { 0x20AC, 0xFFFD, 0x201A, 0xFFFD, 0x201E, 0x2026, 0x2020, 0x2021,
- 0xFFFD, 0x2030, 0xFFFD, 0x2039, 0xFFFD, 0x00A8, 0x02C7, 0x00B8,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0xFFFD, 0x2122, 0xFFFD, 0x203A, 0xFFFD, 0x00AF, 0x02DB, 0xFFFD,
- 0x00A0, 0xFFFD, 0x00A2, 0x00A3, 0x00A4, 0xFFFD, 0x00A6, 0x00A7,
- 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
- 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
- 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
- 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
- 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
- 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
- 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
- 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
- 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9} },
- { "CP 1258", 2258,
- { 0x20AC, 0xFFFD, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0xFFFD, 0x2039, 0x0152, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0xFFFD, 0x203A, 0x0153, 0xFFFD, 0xFFFD, 0x0178,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
- 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
- 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
- 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
- 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7,
- 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
- 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
- 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
- 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF} },
-
- // this one is generated from the charmap file located in /usr/share/i18n/charmaps
- // on most Linux distributions. The thai character set tis620 is byte by byte equivalent
- // to iso8859-11, so we name it 8859-11 here, but recognise the name tis620 too.
-
- // $ for A in 8 9 A B C D E F ; do for B in 0 1 2 3 4 5 6 7 8 9 A B C D E F ; do echo x${A}${B} 0xFFFD ; done ; done > /tmp/digits ; ( cut -c25- < TIS-620 ; cat /tmp/digits ) | awk '/^x[89ABCDEF]/{ print $1, $2 }' | sed -e 's/<U/0x/' -e 's/>//' | sort | uniq -w4 | cut -c5- | paste '-d ' - - - - - - - - | sed -e 's/ /, /g' -e 's/$/,/' -e '$ s/,$/} },/' -e '1 s/^/{ /' > ~/tmp/tis-620
- { "ISO 8859-11", 2259, // Thai character set mib enum taken from tis620 (which is byte by byte equivalent)
- { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07,
- 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F,
- 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17,
- 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F,
- 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,
- 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,
- 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,
- 0x0E38, 0x0E39, 0x0E3A, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x0E3F,
- 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47,
- 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
- 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
- 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD} },
-
- // change LAST_MIB if you add more, and edit unicodevalues in
- // kernel/qpsprinter.cpp too.
-};
-
-
-static const QSimpleTextCodec * reverseOwner = 0;
-static QArray<char> * reverseMap = 0;
-
-
-QSimpleTextCodec::QSimpleTextCodec( int i )
- : QTextCodec(), forwardIndex( i )
-{
-}
-
-
-QSimpleTextCodec::~QSimpleTextCodec()
-{
- if ( reverseOwner == this ) {
- delete reverseMap;
- reverseMap = 0;
- reverseOwner = 0;
- }
-}
-
-// what happens if strlen(chars)<len? what happens if !chars? if len<1?
-QString QSimpleTextCodec::toUnicode(const char* chars, int len) const
-{
- if(len <= 0)
- return QString::null;
-
- int clen = qstrlen(chars);
- len = QMIN(len, clen); // Note: NUL ends string
-
- QString r;
- r.setUnicode(0, len);
- QChar* uc = (QChar*)r.unicode(); // const_cast
- const unsigned char * c = (const unsigned char *)chars;
- for( int i=0; i<len; i++ ) {
- if ( c[i] > 127 )
- uc[i] = unicodevalues[forwardIndex].values[c[i]-128];
- else
- uc[i] = c[i];
- }
- return r;
-}
-
-
-QCString QSimpleTextCodec::fromUnicode(const QString& uc, int& len ) const
-{
- if ( reverseOwner != this ) {
- int m = 0;
- int i = 0;
- while( i < 128 ) {
- if ( unicodevalues[forwardIndex].values[i] > m &&
- unicodevalues[forwardIndex].values[i] < 0xfffd )
- m = unicodevalues[forwardIndex].values[i];
- i++;
- }
- m++;
- if ( !reverseMap )
- reverseMap = new QArray<char>( m );
- if ( m > (int)(reverseMap->size()) )
- reverseMap->resize( m );
- for( i = 0; i < 128 && i < m; i++ )
- (*reverseMap)[i] = (char)i;
- for( ;i < m; i++ )
- (*reverseMap)[i] = '?';
- for( i=128; i<256; i++ ) {
- int u = unicodevalues[forwardIndex].values[i-128];
- if ( u < m )
- (*reverseMap)[u] = (char)(unsigned char)(i);
- }
- reverseOwner = this;
- }
- if ( len <0 || len > (int)uc.length() )
- len = uc.length();
- QCString r( len+1 );
- int i = len;
- int u;
- const QChar* ucp = uc.unicode();
- char* rp = r.rawData();
- char* rmp = reverseMap->data();
- int rmsize = (int) reverseMap->size();
- while( i-- )
- {
- u = ucp->unicode();
- *rp++ = u < 128 ? u : (( u < rmsize ) ? (*(rmp+u)) : '?' );
- ucp++;
- }
- r[len] = 0;
- return r;
-}
-
-
-const char* QSimpleTextCodec::name() const
-{
- return unicodevalues[forwardIndex].cs;
-}
-
-
-int QSimpleTextCodec::mibEnum() const
-{
- return unicodevalues[forwardIndex].mib;
-}
-
-int QSimpleTextCodec::heuristicNameMatch(const char* hint) const
-{
- if ( hint[0]=='k' ) {
- // Help people with messy fonts
- if ( QCString(hint) == "koi8-1" )
- return QTextCodec::heuristicNameMatch("koi8-r")-1;
- if ( QCString(hint) == "koi8-ru" )
- return QTextCodec::heuristicNameMatch("koi8-r")-1;
- } else if ( hint[0] == 't' && QCString(name()) == "ISO 8859-11" ) {
- // 8859-11 and tis620 are byte by bute equivalent
- int i = simpleHeuristicNameMatch("tis620-0", hint);
- if( !i )
- i = simpleHeuristicNameMatch("tis-620", hint);
- if( i ) return i;
- }
- return QTextCodec::heuristicNameMatch(hint);
-}
-
-int QSimpleTextCodec::heuristicContentMatch(const char* chars, int len) const
-{
- if ( len<1 || !chars )
- return -1;
- int i = 0;
- const uchar * c = (const unsigned char *)chars;
- int r = 0;
- while( i<len && c && *c ) {
- if ( *c >= 128 ) {
- if ( unicodevalues[forwardIndex].values[(*c)-128] == 0xfffd )
- return -1;
- }
- if ( (*c >= ' ' && *c < 127) ||
- *c == '\n' || *c == '\t' || *c == '\r' )
- r++;
- i++;
- c++;
- }
- if ( mibEnum()==4 )
- r+=1;
- return r;
-}
-
-
-#endif // QT_NO_CODECS
-
-class QLatin1Codec: public QTextCodec
-{
-public:
- QLatin1Codec();
- ~QLatin1Codec();
-
- QString toUnicode(const char* chars, int len) const;
- QCString fromUnicode(const QString& uc, int& lenInOut ) const;
-
- const char* name() const;
- int mibEnum() const;
-
- int heuristicContentMatch(const char* chars, int len) const;
-
- int heuristicNameMatch(const char* hint) const;
-
-private:
- //int forwardIndex;
-};
-
-
-QLatin1Codec::QLatin1Codec()
- : QTextCodec()
-{
-}
-
-
-QLatin1Codec::~QLatin1Codec()
-{
-}
-
-// what happens if strlen(chars)<len? what happens if !chars? if len<1?
-QString QLatin1Codec::toUnicode(const char* chars, int len) const
-{
- if(len <= 0)
- return QString::null;
-
- return QString::fromLatin1(chars, len);
-}
-
-
-QCString QLatin1Codec::fromUnicode(const QString& uc, int& len ) const
-{
- if ( len <0 || len > (int)uc.length() )
- len = uc.length();
- QCString r( len+1 );
- int i = 0;
- const QChar *ch = uc.unicode();
- while ( i < len ) {
- r[i] = ch->row() ? '?' : ch->cell();
- i++;
- ch++;
- }
- r[len] = 0;
- return r;
-}
-
-
-const char* QLatin1Codec::name() const
-{
- return "ISO 8859-1";
-}
-
-
-int QLatin1Codec::mibEnum() const
-{
- return 4;
-}
-
-int QLatin1Codec::heuristicNameMatch(const char* hint) const
-{
- return QTextCodec::heuristicNameMatch(hint);
-}
-
-int QLatin1Codec::heuristicContentMatch(const char* chars, int len) const
-{
- if ( len<1 || !chars )
- return -1;
- int i = 0;
- const uchar * c = (const unsigned char *)chars;
- int r = 0;
- while( i<len && c && *c ) {
- if ( *c >= 0x80 && *c < 0xa0 )
- return -1;
- if ( (*c >= ' ' && *c < 127) ||
- *c == '\n' || *c == '\t' || *c == '\r' )
- r++;
- i++;
- c++;
- }
- return r;
-}
-
-
-static void setupBuiltinCodecs()
-{
- (void)new QLatin1Codec;
-
-#ifndef QT_NO_CODECS
- int i = 0;
- do {
- (void)new QSimpleTextCodec( i );
- } while( unicodevalues[i++].mib != LAST_MIB );
-
- //(void)new QEucJpCodec;
- //(void)new QSjisCodec;
- //(void)new QJisCodec;
- //(void)new QEucKrCodec;
- //(void)new QGbkCodec;
- //(void)new QBig5Codec;
- (void)new QUtf8Codec;
- (void)new QUtf16Codec;
- //(void)new QHebrewCodec;
- //(void)new QArabicCodec;
- //(void)new QTsciiCodec;
-#endif // QT_NO_CODECS
-}
-
-#endif // QT_NO_TEXTCODEC
diff --git a/qtools/qtextcodec.h b/qtools/qtextcodec.h
deleted file mode 100644
index 18ece20..0000000
--- a/qtools/qtextcodec.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QTextCodec class
-**
-** Created : 981015
-**
-** Copyright (C) 1998-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QTEXTCODEC_H
-#define QTEXTCODEC_H
-
-#ifndef QT_H
-#include "qstring.h"
-#endif // QT_H
-
-#ifndef QT_NO_TEXTCODEC
-
-class QTextCodec;
-class QIODevice;
-
-class Q_EXPORT QTextEncoder {
-public:
- virtual ~QTextEncoder();
- virtual QCString fromUnicode(const QString& uc, int& lenInOut) = 0;
-};
-
-class Q_EXPORT QTextDecoder {
-public:
- virtual ~QTextDecoder();
- virtual QString toUnicode(const char* chars, int len) = 0;
-};
-
-class Q_EXPORT QTextCodec {
-public:
- virtual ~QTextCodec();
-
-#ifndef QT_NO_CODECS
- static QTextCodec* loadCharmap(QIODevice*);
- static QTextCodec* loadCharmapFile(QString filename);
-#endif
- static QTextCodec* codecForMib(int mib);
- static QTextCodec* codecForName(const char* hint, int accuracy=0);
- static QTextCodec* codecForContent(const char* chars, int len);
- static QTextCodec* codecForIndex(int i);
- static QTextCodec* codecForLocale();
-
- static void deleteAllCodecs();
-
- static const char* locale();
-
- virtual const char* name() const = 0;
- virtual int mibEnum() const = 0;
-
- virtual QTextDecoder* makeDecoder() const;
- virtual QTextEncoder* makeEncoder() const;
-
- virtual QString toUnicode(const char* chars, int len) const;
- virtual QCString fromUnicode(const QString& uc, int& lenInOut) const;
-
- QCString fromUnicode(const QString& uc) const;
- QString toUnicode(const QByteArray&, int len) const;
- QString toUnicode(const QByteArray&) const;
- QString toUnicode(const char* chars) const;
- virtual bool canEncode( QChar ) const;
- virtual bool canEncode( const QString& ) const;
-
- virtual int heuristicContentMatch(const char* chars, int len) const = 0;
- virtual int heuristicNameMatch(const char* hint) const;
-
-protected:
- QTextCodec();
- static int simpleHeuristicNameMatch(const char* name, const char* hint);
-};
-#endif // QT_NO_TEXTCODEC
-#endif // QTEXTCODEC_H
diff --git a/qtools/qtextstream.cpp b/qtools/qtextstream.cpp
deleted file mode 100644
index ffbdeba..0000000
--- a/qtools/qtextstream.cpp
+++ /dev/null
@@ -1,2237 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QTextStream class
-**
-** Created : 940922
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qtextstream.h"
-
-#ifndef QT_NO_TEXTSTREAM
-#include "qtextcodec.h"
-#include "qregexp.h"
-#include "qbuffer.h"
-#include "qfile.h"
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-
-#if defined(_OS_WIN32_)
-#include <windows.h>
-#endif
-
-// NOT REVISED
-/*!
- \class QTextStream qtextstream.h
-
- \brief The QTextStream class provides basic functions for reading and
- writing text using a QIODevice.
-
- \ingroup io
-
- \define endl
- \define bin
- \define oct
- \define dec
- \define hex
- \define flush
- \define ws
-
- The text stream class has a functional interface that is very
- similar to that of the standard C++ iostream class. The difference
- between iostream and QTextStream is that our stream operates on a
- QIODevice, which is easily subclassed, while iostream operates on
- FILE * pointers, which can not be subclassed.
-
- Qt provides several global functions similar to the ones in iostream:
- <ul>
- <li> \c bin sets the QTextStream to read/write binary numbers
- <li> \c oct sets the QTextStream to read/write octal numbers
- <li> \c dec sets the QTextStream to read/write decimal numbers
- <li> \c hex sets the QTextStream to read/write hexadecimal numbers
- <li> \c endl forces a line break
- <li> \c flush forces the QIODevice to flush any buffered data
- <li> \c ws eats any available white space (on input)
- <li> \c reset resets the QTextStream to its default mode (see reset()).
- </ul>
-
- \warning By default, QTextStream will automatically detect whether
- integers in the stream are in decimal, octal, hexadecimal or binary
- format when reading from the stream. In particular, a leading '0'
- signifies octal, ie. the sequence "0100" will be interpreted as
- 64.
-
- The QTextStream class reads and writes text and it is not
- appropriate for dealing with binary data (but QDataStream is).
-
- By default output of Unicode text (ie. QString) is done using the
- local 8-bit encoding. This can be changed using the setEncoding()
- method. For input, the QTextStream will auto-detect standard
- Unicode "byte order marked" text files, but otherwise the local
- 8-bit encoding is used.
-
- \sa QDataStream
-*/
-
-/*
- \class QTSManip qtextstream.h
-
- \brief The QTSManip class is an internal helper class for the
- QTextStream.
-
- It is generally a very bad idea to use this class directly in
- application programs.
-
- \internal
-
- This class makes it possible to give the QTextStream function objects
- with arguments, like this:
- \code
- QTextStream cout( stdout, IO_WriteOnly );
- cout << setprecision( 8 ); // QTSManip used here!
- cout << 3.14159265358979323846;
- \endcode
-
- The setprecision() function returns a QTSManip object.
- The QTSManip object contains a pointer to a member function in
- QTextStream and an integer argument.
- When serializing a QTSManip into a QTextStream, the function
- is executed with the argument.
-*/
-
-/*! \fn QTSManip::QTSManip (QTSMFI m, int a)
-
- Constructs a QTSManip object which will call \a m (a member function
- in QTextStream which accepts a single int) with argument \a a when
- QTSManip::exec() is called. Used internally in e.g. endl:
-
- \code
- s << "some text" << endl << "more text";
- \endcode
-*/
-
-/*! \fn void QTSManip::exec (QTextStream& s)
-
- Calls the member function specified in the constructor, for object
- \a s. Used internally in e.g. endl:
-
- \code
- s << "some text" << endl << "more text";
- \endcode
-*/
-
-
-/*****************************************************************************
- QTextStream member functions
- *****************************************************************************/
-
-#if defined(CHECK_STATE)
-#undef CHECK_STREAM_PRECOND
-#define CHECK_STREAM_PRECOND if ( !dev ) { \
- qWarning( "QTextStream: No device" ); \
- return *this; }
-#else
-#define CHECK_STREAM_PRECOND
-#endif
-
-
-#define I_SHORT 0x0010
-#define I_INT 0x0020
-#define I_LONG 0x0030
-#define I_TYPE_MASK 0x00f0
-
-#define I_BASE_2 QTS::bin
-#define I_BASE_8 QTS::oct
-#define I_BASE_10 QTS::dec
-#define I_BASE_16 QTS::hex
-#define I_BASE_MASK (QTS::bin | QTS::oct | QTS::dec | QTS::hex)
-
-#define I_SIGNED 0x0100
-#define I_UNSIGNED 0x0200
-#define I_SIGN_MASK 0x0f00
-
-
-static const QChar QEOF = QChar((ushort)0xffff); //guaranteed not to be a character.
-
-const int QTextStream::basefield = I_BASE_MASK;
-const int QTextStream::adjustfield = ( QTextStream::left |
- QTextStream::right |
- QTextStream::internal );
-const int QTextStream::floatfield = ( QTextStream::scientific |
- QTextStream::fixed );
-
-
-class QTextStreamPrivate {
-public:
-#ifndef QT_NO_TEXTCODEC
- QTextStreamPrivate() : decoder( 0 ), sourceType( NotSet ) {}
- ~QTextStreamPrivate() { delete decoder; }
- QTextDecoder *decoder; //???
-#else
- QTextStreamPrivate() : sourceType( NotSet ) {}
- ~QTextStreamPrivate() { }
-#endif
- QString ungetcBuf;
-
- enum SourceType { NotSet, IODevice, String, ByteArray, File };
- SourceType sourceType;
-};
-
-
-// skips whitespace and returns the first non-whitespace character
-QChar QTextStream::eat_ws()
-{
- QChar c;
- do { c = ts_getc(); } while ( c != QEOF && ts_isspace(c) );
- return c;
-}
-
-void QTextStream::init()
-{
- // ### ungetcBuf = QEOF;
- dev = 0; // no device set
- fstrm = owndev = FALSE;
- mapper = 0;
- d = new QTextStreamPrivate;
- doUnicodeHeader = TRUE; //default to autodetect
- latin1 = TRUE; // ### should use local?
- internalOrder = QChar::networkOrdered(); //default to network order
-}
-
-/*!
- Constructs a data stream that has no IO device.
-*/
-
-QTextStream::QTextStream()
-{
- init();
- setEncoding( Locale ); //###
- reset();
- d->sourceType = QTextStreamPrivate::NotSet;
-}
-
-/*!
- Constructs a text stream that uses the IO device \a iod.
-*/
-
-QTextStream::QTextStream( QIODevice *iod )
-{
- init();
- setEncoding( Locale ); //###
- dev = iod; // set device
- reset();
- d->sourceType = QTextStreamPrivate::IODevice;
-}
-
-// TODO: use special-case handling of this case in QTextStream, and
-// simplify this class to only deal with QChar or QString data.
-class QStringBuffer : public QIODevice {
-public:
- QStringBuffer( QString* str );
- ~QStringBuffer();
- bool open( int m );
- void close();
- void flush();
- uint size() const;
- int at() const;
- bool at( int pos );
- int readBlock( char *p, uint len );
- int writeBlock( const char *p, uint len );
- int getch();
- int putch( int ch );
- int ungetch( int ch );
-protected:
- QString* s;
-
-private: // Disabled copy constructor and operator=
- QStringBuffer( const QStringBuffer & );
- QStringBuffer &operator=( const QStringBuffer & );
-};
-
-
-QStringBuffer::QStringBuffer( QString* str )
-{
- s = str;
-}
-
-QStringBuffer::~QStringBuffer()
-{
-}
-
-
-bool QStringBuffer::open( int m )
-{
- if ( !s ) {
-#if defined(CHECK_STATE)
- qWarning( "QStringBuffer::open: No string" );
-#endif
- return FALSE;
- }
- if ( isOpen() ) { // buffer already open
-#if defined(CHECK_STATE)
- qWarning( "QStringBuffer::open: Buffer already open" );
-#endif
- return FALSE;
- }
- setMode( m );
- if ( m & IO_Truncate ) { // truncate buffer
- s->truncate( 0 );
- }
- if ( m & IO_Append ) { // append to end of buffer
- ioIndex = s->length()*(int)sizeof(QChar);
- } else {
- ioIndex = 0;
- }
- setState( IO_Open );
- setStatus( 0 );
- return TRUE;
-}
-
-void QStringBuffer::close()
-{
- if ( isOpen() ) {
- setFlags( IO_Direct );
- ioIndex = 0;
- }
-}
-
-void QStringBuffer::flush()
-{
-}
-
-uint QStringBuffer::size() const
-{
- return s ? s->length()*(int)sizeof(QChar) : 0;
-}
-
-int QStringBuffer::at() const
-{
- return ioIndex;
-}
-
-bool QStringBuffer::at( int pos )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) {
- qWarning( "QStringBuffer::at: Buffer is not open" );
- return FALSE;
- }
-#endif
- if ( (uint)pos >= s->length()*2 ) {
-#if defined(CHECK_RANGE)
- qWarning( "QStringBuffer::at: Index %d out of range", pos );
-#endif
- return FALSE;
- }
- ioIndex = pos;
- return TRUE;
-}
-
-
-int QStringBuffer::readBlock( char *p, uint len )
-{
-#if defined(CHECK_STATE)
- CHECK_PTR( p );
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::readBlock: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QStringBuffer::readBlock: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex + len > s->length()*sizeof(QChar) ) {
- // overflow
- if ( (uint)ioIndex >= s->length()*sizeof(QChar) ) {
- setStatus( IO_ReadError );
- return -1;
- } else {
- len = s->length()*2 - (uint)ioIndex;
- }
- }
- memcpy( p, ((const char*)(s->unicode()))+ioIndex, len );
- ioIndex += len;
- return len;
-}
-
-int QStringBuffer::writeBlock( const char *p, uint len )
-{
-#if defined(CHECK_NULL)
- if ( p == 0 && len != 0 )
- qWarning( "QStringBuffer::writeBlock: Null pointer error" );
-#endif
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::writeBlock: Buffer not open" );
- return -1;
- }
- if ( !isWritable() ) { // writing not permitted
- qWarning( "QStringBuffer::writeBlock: Write operation not permitted" );
- return -1;
- }
- if ( ioIndex&1 ) {
- qWarning( "QStringBuffer::writeBlock: non-even index - non Unicode" );
- return -1;
- }
- if ( len&1 ) {
- qWarning( "QStringBuffer::writeBlock: non-even length - non Unicode" );
- return -1;
- }
-#endif
- s->replace(ioIndex/2, len/2, (QChar*)p, len/2);
- ioIndex += len;
- return len;
-}
-
-int QStringBuffer::getch()
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::getch: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QStringBuffer::getch: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( (uint)ioIndex >= s->length()*2 ) { // overflow
- setStatus( IO_ReadError );
- return -1;
- }
- return *((char*)s->unicode() + ioIndex++);
-}
-
-int QStringBuffer::putch( int ch )
-{
- char c = ch;
- if ( writeBlock(&c,1) < 0 )
- return -1;
- else
- return ch;
-}
-
-int QStringBuffer::ungetch( int ch )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() ) { // buffer not open
- qWarning( "QStringBuffer::ungetch: Buffer not open" );
- return -1;
- }
- if ( !isReadable() ) { // reading not permitted
- qWarning( "QStringBuffer::ungetch: Read operation not permitted" );
- return -1;
- }
-#endif
- if ( ch != -1 ) { // something to do with eof
- if ( ioIndex )
- ioIndex--;
- else
- ch = -1;
- }
- return ch;
-}
-
-
-/*!
- Constructs a text stream that operates on a Unicode QString through an
- internal device.
-
- If you set an encoding or codec with setEncoding() or setCodec(), this
- setting is ignored for text streams that operate on QString.
-
- Example:
- \code
- QString str;
- QTextStream ts( &str, IO_WriteOnly );
- ts << "pi = " << 3.14; // str == "pi = 3.14"
- \endcode
-
- Writing data to the text stream will modify the contents of the string.
- The string will be expanded when data is written beyond the end of the
- string. Note that the string will not be truncated:
- \code
- QString str = "pi = 3.14";
- QTextStream ts( &str, IO_WriteOnly );
- ts << "2+2 = " << 2+2; // str == "2+2 = 414"
- \endcode
-
- Note that since QString is Unicode, you should not use readRawBytes()
- or writeRawBytes() on such a stream.
-*/
-
-QTextStream::QTextStream( QString* str, int filemode )
-{
- // TODO: optimize for this case as it becomes more common
- // (see QStringBuffer above)
- init();
- dev = new QStringBuffer( str );
- ((QStringBuffer *)dev)->open( filemode );
- owndev = TRUE;
- setEncoding(RawUnicode);
- reset();
- d->sourceType = QTextStreamPrivate::String;
-}
-
-/*! \obsolete
-
- This constructor is equivalent to the constructor taking a QString*
- parameter.
-*/
-
-QTextStream::QTextStream( QString& str, int filemode )
-{
- init();
- dev = new QStringBuffer( &str );
- ((QStringBuffer *)dev)->open( filemode );
- owndev = TRUE;
- setEncoding(RawUnicode);
- reset();
- d->sourceType = QTextStreamPrivate::String;
-}
-
-/*!
- Constructs a text stream that operates on a byte array through an
- internal QBuffer device.
-
- Example:
- \code
- QByteArray array;
- QTextStream ts( array, IO_WriteOnly );
- ts << "pi = " << 3.14 << '\0'; // array == "pi = 3.14"
- \endcode
-
- Writing data to the text stream will modify the contents of the array.
- The array will be expanded when data is written beyond the end of the
- string.
-
- Same example, using a QBuffer:
- \code
- QByteArray array;
- QBuffer buf( array );
- buf.open( IO_WriteOnly );
- QTextStream ts( &buf );
- ts << "pi = " << 3.14 << '\0'; // array == "pi = 3.14"
- buf.close();
- \endcode
-*/
-
-QTextStream::QTextStream( QByteArray a, int mode )
-{
- init();
- dev = new QBuffer( a );
- ((QBuffer *)dev)->open( mode );
- owndev = TRUE;
- setEncoding( Locale ); //### Locale???
- reset();
- d->sourceType = QTextStreamPrivate::ByteArray;
-}
-
-/*!
- Constructs a text stream that operates on an existing file handle \e fh
- through an internal QFile device.
-
- Example:
- \code
- QTextStream cout( stdout, IO_WriteOnly );
- QTextStream cin ( stdin, IO_ReadOnly );
- QTextStream cerr( stderr, IO_WriteOnly );
- \endcode
-*/
-
-QTextStream::QTextStream( FILE *fh, int mode )
-{
- init();
- setEncoding( Locale ); //###
- dev = new QFile;
- ((QFile *)dev)->open( mode, fh );
- fstrm = owndev = TRUE;
- reset();
- d->sourceType = QTextStreamPrivate::File;
-}
-
-/*!
- Destructs the text stream.
-
- The destructor does not affect the current IO device.
-*/
-
-QTextStream::~QTextStream()
-{
- if ( owndev )
- delete dev;
- delete d;
-}
-
-/*!
- Positions the read pointer at the first non-whitespace character.
-*/
-void QTextStream::skipWhiteSpace()
-{
- ts_ungetc( eat_ws() );
-}
-
-
-/*!
- \fn Encoding QTextStream::encoding() const
-
- Returns the encoding mode of the stream.
-
- \sa setEncoding()
-*/
-
-/*!
- Tries to read len characters from the stream and stores them in \a buf.
- Returns the number of characters really read.
- Attention: There will no QEOF appended if the read reaches the end of
- the file. EOF is reached when the return value does not equal \a len.
-*/
-uint QTextStream::ts_getbuf( QChar* buf, uint len )
-{
- if( len<1 )
- return 0;
-
- uint rnum=0; // the number of QChars really read
-
- if ( d && d->ungetcBuf.length() ) {
- while( rnum < len && rnum < d->ungetcBuf.length() ) {
- buf[rnum] = d->ungetcBuf.constref(rnum);
- rnum++;
- }
- d->ungetcBuf = d->ungetcBuf.mid( rnum );
- if ( rnum >= len )
- return rnum;
- }
-
- // we use dev->ungetch() for one of the bytes of the unicode
- // byte-order mark, but a local unget hack for the other byte:
- int ungetHack = EOF;
-
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE; //only at the top
- int c1 = dev->getch();
- if ( c1 == EOF )
- return rnum;
- int c2 = dev->getch();
- if ( c1 == 0xfe && c2 == 0xff ) {
- mapper = 0;
- latin1 = FALSE;
- internalOrder = QChar::networkOrdered(); //network order
- } else if ( c1 == 0xff && c2 == 0xfe ) {
- mapper = 0;
- latin1 = FALSE;
- internalOrder = !QChar::networkOrdered(); //reverse network order
- } else {
- if ( c2 != EOF ) {
- dev->ungetch( c2 );
- ungetHack = c1;
- } else {
- dev->ungetch( c1 );
- // note that a small possible bug might hide here
- // here, if only the first byte of a file has made it
- // so far, and that first byte is half of the
- // byte-order mark, then the utfness will not be
- // detected. whether or not this is a bug depends on
- // taste. I can't really decide.
- }
- }
- }
-
-#ifndef QT_NO_TEXTCODEC
- if ( mapper ) {
- bool shortRead = FALSE;
- if ( !d->decoder )
- d->decoder = mapper->makeDecoder();
- while( rnum < len ) {
- QString s;
- bool readBlock = !( len == 1+rnum );
- while ( TRUE ) {
- // for efficiency: normally read a whole block
- if ( readBlock ) {
- // guess buffersize; this may be wrong (too small or too
- // big). But we can handle this (either iterate reading
- // or use ungetcBuf).
- // Note that this might cause problems for codecs where
- // one byte can result in >1 Unicode Characters if bytes
- // are written to the stream in the meantime (loss of
- // synchronicity).
- uint rlen = len - rnum;
- char *cbuf = new char[ rlen ];
- if ( ungetHack != EOF ) {
- rlen = 1+dev->readBlock( cbuf+1, rlen-1 );
- cbuf[0] = (char)ungetHack;
- ungetHack = EOF;
- } else {
- rlen = dev->readBlock( cbuf, rlen );
- }
- s += d->decoder->toUnicode( cbuf, rlen );
- delete[] cbuf;
- // use buffered reading only for the first time, because we
- // have to get the stream synchronous again (this is easier
- // with single character reading)
- readBlock = FALSE;
- }
- // get stream (and codec) in sync
- int c;
- if ( ungetHack == EOF ) {
- c = dev->getch();
- } else {
- c = ungetHack;
- ungetHack = EOF;
- }
- if ( c == EOF ) {
- shortRead = TRUE;
- break;
- }
- char b = c;
- uint lengthBefore = s.length();
- s += d->decoder->toUnicode( &b, 1 );
- if ( s.length() > lengthBefore )
- break; // it seems we are in sync now
- }
- uint i = 0;
- while( rnum < len && i < s.length() )
- buf[rnum++] = s.constref(i++);
- if ( s.length() > i )
- // could be = but append is clearer
- d->ungetcBuf.append( s.mid( i ) );
- if ( shortRead )
- return rnum;
- }
- } else
-#endif
- if ( latin1 ) {
- if ( len == 1+rnum ) {
- // use this method for one character because it is more efficient
- // (arnt doubts whether it makes a difference, but lets it stand)
- int c = (ungetHack == EOF) ? dev->getch() : ungetHack;
- if ( c != EOF )
- buf[rnum++] = (char)c;
- } else {
- if ( ungetHack != EOF ) {
- buf[rnum++] = (char)ungetHack;
- ungetHack = EOF;
- }
- char *cbuf = new char[len - rnum];
- while ( !dev->atEnd() && rnum < len ) {
- uint rlen = len - rnum;
- rlen = dev->readBlock( cbuf, rlen );
- uint i = 0;
- while( i < rlen )
- buf[rnum++] = cbuf[i++];
- }
- delete[] cbuf;
- }
- } else { // UCS-2 or UTF-16
- if ( len == 1+rnum ) {
- int c1 = (ungetHack == EOF) ? dev->getch() : ungetHack;
- if ( c1 == EOF )
- return rnum;
- int c2 = dev->getch();
- if ( c2 == EOF )
- return rnum;
- if ( isNetworkOrder() )
- buf[rnum++] = QChar( c2, c1 );
- else
- buf[rnum++] = QChar( c1, c2 );
- } else {
- char *cbuf = new char[ 2*( len - rnum ) ]; // for paranoids: overflow possible
- while ( !dev->atEnd() && rnum < len ) {
- uint rlen = 2 * ( len-rnum );
- if ( ungetHack != EOF ) {
- rlen = 1+dev->readBlock( cbuf+1, rlen-1 );
- cbuf[0] = (char)ungetHack;
- ungetHack = EOF;
- } else {
- rlen = dev->readBlock( cbuf, rlen );
- }
- // We can't use an odd number of bytes, so put it back. But
- // do it only if we are capable of reading more -- normally
- // there should not be an odd number, but the file might be
- // truncated or not in UTF-16...
- if ( (rlen & 1) == 1 )
- if ( !dev->atEnd() )
- dev->ungetch( cbuf[--rlen] );
- uint i = 0;
- if ( isNetworkOrder() ) {
- while( i < rlen ) {
- buf[rnum++] = QChar( cbuf[i+1], cbuf[i] );
- i+=2;
- }
- } else {
- while( i < rlen ) {
- buf[rnum++] = QChar( cbuf[i], cbuf[i+1] );
- i+=2;
- }
- }
- }
- delete[] cbuf;
- }
- }
- return rnum;
-}
-
-
-/*!
- Puts one character to the stream.
-*/
-void QTextStream::ts_putc( QChar c )
-{
-#ifndef QT_NO_TEXTCODEC
- if ( mapper ) {
- int len = 1;
- QString s = c;
- QCString block = mapper->fromUnicode( s, len );
- dev->writeBlock( block, len );
- } else
-#endif
- if ( latin1 ) {
- if( c.row() )
- dev->putch( '?' ); //######unknown character???
- else
- dev->putch( c.cell() );
- } else {
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE;
- ts_putc( QChar::byteOrderMark );
- }
- if ( internalOrder ) {
- dev->writeBlock( (char*)&c, sizeof(QChar) );
- } else if ( isNetworkOrder() ) {
- dev->putch(c.row());
- dev->putch(c.cell());
- } else {
- dev->putch(c.cell());
- dev->putch(c.row());
- }
- }
-}
-
-/*!
- Puts one character to the stream.
-*/
-void QTextStream::ts_putc(int ch)
-{
- ts_putc(QChar((ushort)ch));
-}
-
-bool QTextStream::ts_isdigit(QChar c)
-{
- return c.isDigit();
-}
-
-bool QTextStream::ts_isspace( QChar c )
-{
- return c.isSpace();
-}
-
-void QTextStream::ts_ungetc( QChar c )
-{
- if ( c.unicode() == 0xffff )
- return;
-
- d->ungetcBuf.prepend( c );
-}
-
-
-
-/*!
- Reads \e len bytes from the stream into \e e s and returns a reference to
- the stream.
-
- The buffer \e s must be preallocated.
-
- Note that no encoding is done by this function.
-
- \warning The behaviour of this function is undefined unless the
- stream's encoding is set to Unicode or Latin1.
-
- \sa QIODevice::readBlock()
-*/
-
-QTextStream &QTextStream::readRawBytes( char *s, uint len )
-{
- dev->readBlock( s, len );
- return *this;
-}
-
-/*!
- Writes the \e len bytes from \e s to the stream and returns a reference to
- the stream.
-
- Note that no encoding is done by this function.
-
- \sa QIODevice::writeBlock()
-*/
-
-QTextStream &QTextStream::writeRawBytes( const char* s, uint len )
-{
- dev->writeBlock( s, len );
- return *this;
-}
-
-
-QTextStream &QTextStream::writeBlock( const char* p, uint len )
-{
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE;
- if ( !mapper && !latin1 )
- ts_putc( QChar::byteOrderMark );
- }
- //All QCStrings and const char* are defined to be in Latin1
- if ( !mapper && latin1 ) {
- dev->writeBlock( p, len );
- } else if ( !mapper && internalOrder ) {
- QChar *u = new QChar[len];
- for (uint i=0; i<len; i++)
- u[i] = p[i];
- dev->writeBlock( (char*)u, len*(int)sizeof(QChar) );
- delete [] u;
- } else {
- for (uint i=0; i<len; i++)
- ts_putc( (uchar)p[i] );
- }
- return *this;
-}
-
-QTextStream &QTextStream::writeBlock( const QChar* p, uint len )
-{
- if ( !mapper && !latin1 && internalOrder ) {
- if ( doUnicodeHeader ) {
- doUnicodeHeader = FALSE;
- ts_putc( QChar::byteOrderMark );
- }
- dev->writeBlock( (char*)p, (int)sizeof(QChar)*len );
- } else {
- for (uint i=0; i<len; i++)
- ts_putc( p[i] );
- }
- return *this;
-}
-
-
-
-/*!
- Resets the text stream.
-
- <ul>
- <li> All flags are set to 0.
- <li> The field width is set to 0.
- <li> The fill character is set to ' ' (space).
- <li> The precision is set to 6.
- </ul>
-
- \sa setf(), width(), fill(), precision()
-*/
-
-void QTextStream::reset()
-{
- fflags = 0;
- fwidth = 0;
- fillchar = ' ';
- fprec = 6;
-}
-
-
-/*!
- \fn QIODevice *QTextStream::device() const
- Returns the IO device currently set.
- \sa setDevice(), unsetDevice()
-*/
-
-/*!
- Sets the IO device to \a iod.
- \sa device(), unsetDevice()
-*/
-
-void QTextStream::setDevice( QIODevice *iod )
-{
- if ( owndev ) {
- delete dev;
- owndev = FALSE;
- }
- dev = iod;
- d->sourceType = QTextStreamPrivate::IODevice;
-}
-
-/*!
- Unsets the IO device. Equivalent to setDevice( 0 ).
- \sa device(), setDevice()
-*/
-
-void QTextStream::unsetDevice()
-{
- setDevice( 0 );
- d->sourceType = QTextStreamPrivate::NotSet;
-}
-
-/*!
- \fn bool QTextStream::atEnd() const
- Returns TRUE if the IO device has reached the end position (end of
- stream or file) or if there is no IO device set.
-
- Returns FALSE if the current position of the read/write head of the IO
- device is somewhere before the end position.
-
- \sa QIODevice::atEnd()
-*/
-
-/*!\fn bool QTextStream::eof() const
-
- \obsolete
-
- This function has been renamed to atEnd().
-
- \sa QIODevice::atEnd()
-*/
-
-/*****************************************************************************
- QTextStream read functions
- *****************************************************************************/
-
-
-/*!
- Reads a \c char from the stream and returns a reference to the stream.
- Note that whitespace is skipped.
-*/
-
-QTextStream &QTextStream::operator>>( char &c )
-{
- CHECK_STREAM_PRECOND
- c = eat_ws();
- return *this;
-}
-
-/*!
- Reads a \c char from the stream and returns a reference to the stream.
- Note that whitespace is \e not skipped.
-*/
-
-QTextStream &QTextStream::operator>>( QChar &c )
-{
- CHECK_STREAM_PRECOND
- c = ts_getc();
- return *this;
-}
-
-
-ulong QTextStream::input_bin()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- int dv = ch.digitValue();
- while ( dv == 0 || dv == 1 ) {
- val = ( val << 1 ) + dv;
- ch = ts_getc();
- dv = ch.digitValue();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-ulong QTextStream::input_oct()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- int dv = ch.digitValue();
- while ( dv >= 0 && dv <= 7 ) {
- val = ( val << 3 ) + dv;
- ch = ts_getc();
- dv = ch.digitValue();
- }
- if ( dv == 8 || dv == 9 ) {
- while ( ts_isdigit(ch) )
- ch = ts_getc();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-ulong QTextStream::input_dec()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- int dv = ch.digitValue();
- while ( ts_isdigit(ch) ) {
- val = val * 10 + dv;
- ch = ts_getc();
- dv = ch.digitValue();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-ulong QTextStream::input_hex()
-{
- ulong val = 0;
- QChar ch = eat_ws();
- char c = ch;
- while ( isxdigit(c) ) {
- val <<= 4;
- if ( ts_isdigit(c) )
- val += c - '0';
- else
- val += 10 + tolower(c) - 'a';
- c = ch = ts_getc();
- }
- if ( ch != QEOF )
- ts_ungetc( ch );
- return val;
-}
-
-long QTextStream::input_int()
-{
- long val;
- QChar ch;
- char c;
- switch ( flags() & basefield ) {
- case bin:
- val = (long)input_bin();
- break;
- case oct:
- val = (long)input_oct();
- break;
- case dec:
- c = ch = eat_ws();
- if ( ch == QEOF ) {
- val = 0;
- } else {
- if ( !(c == '-' || c == '+') )
- ts_ungetc( ch );
- if ( c == '-' ) {
- ulong v = input_dec();
- if ( v ) { // ensure that LONG_MIN can be read
- v--;
- val = -((long)v) - 1;
- } else {
- val = 0;
- }
- } else {
- val = (long)input_dec();
- }
- }
- break;
- case hex:
- val = (long)input_hex();
- break;
- default:
- val = 0;
- c = ch = eat_ws();
- if ( c == '0' ) { // bin, oct or hex
- c = ch = ts_getc();
- if ( tolower(c) == 'x' )
- val = (long)input_hex();
- else if ( tolower(c) == 'b' )
- val = (long)input_bin();
- else { // octal
- ts_ungetc( ch );
- if ( c >= '0' && c <= '7' ) {
- val = (long)input_oct();
- } else {
- val = 0;
- }
- }
- } else if ( ts_isdigit(ch) ) {
- ts_ungetc( ch );
- val = (long)input_dec();
- } else if ( c == '-' || c == '+' ) {
- ulong v = input_dec();
- if ( c == '-' ) {
- if ( v ) { // ensure that LONG_MIN can be read
- v--;
- val = -((long)v) - 1;
- } else {
- val = 0;
- }
- } else {
- val = (long)v;
- }
- }
- }
- return val;
-}
-
-//
-// We use a table-driven FSM to parse floating point numbers
-// strtod() cannot be used directly since we're reading from a QIODevice
-//
-
-double QTextStream::input_double()
-{
- const int Init = 0; // states
- const int Sign = 1;
- const int Mantissa = 2;
- const int Dot = 3;
- const int Abscissa = 4;
- const int ExpMark = 5;
- const int ExpSign = 6;
- const int Exponent = 7;
- const int Done = 8;
-
- const int InputSign = 1; // input tokens
- const int InputDigit = 2;
- const int InputDot = 3;
- const int InputExp = 4;
-
- static uchar table[8][5] = {
- /* None InputSign InputDigit InputDot InputExp */
- { 0, Sign, Mantissa, Dot, 0, }, // Init
- { 0, 0, Mantissa, Dot, 0, }, // Sign
- { Done, Done, Mantissa, Dot, ExpMark,}, // Mantissa
- { 0, 0, Abscissa, 0, 0, }, // Dot
- { Done, Done, Abscissa, Done, ExpMark,}, // Abscissa
- { 0, ExpSign, Exponent, 0, 0, }, // ExpMark
- { 0, 0, Exponent, 0, 0, }, // ExpSign
- { Done, Done, Exponent, Done, Done } // Exponent
- };
-
- int state = Init; // parse state
- int input; // input token
-
- char buf[256];
- int i = 0;
- QChar c = eat_ws();
-
- while ( TRUE ) {
-
- switch ( c ) {
- case '+':
- case '-':
- input = InputSign;
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- input = InputDigit;
- break;
- case '.':
- input = InputDot;
- break;
- case 'e':
- case 'E':
- input = InputExp;
- break;
- default:
- input = 0;
- break;
- }
-
- state = table[state][input];
-
- if ( state == 0 || state == Done || i > 250 ) {
- if ( i > 250 ) { // ignore rest of digits
- do { c = ts_getc(); } while ( c != QEOF && ts_isdigit(c) );
- }
- if ( c != QEOF )
- ts_ungetc( c );
- buf[i] = '\0';
- char *end;
- return strtod( buf, &end );
- }
-
- buf[i++] = c;
- c = ts_getc();
- }
-
-#if !defined(_CC_EGG_)
- return 0.0;
-#endif
-}
-
-
-/*!
- Reads a signed \c short integer from the stream and returns a reference to
- the stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( signed short &i )
-{
- CHECK_STREAM_PRECOND
- i = (signed short)input_int();
- return *this;
-}
-
-
-/*!
- Reads an unsigned \c short integer from the stream and returns a reference to
- the stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( unsigned short &i )
-{
- CHECK_STREAM_PRECOND
- i = (unsigned short)input_int();
- return *this;
-}
-
-
-/*!
- Reads a signed \c int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( signed int &i )
-{
- CHECK_STREAM_PRECOND
- i = (signed int)input_int();
- return *this;
-}
-
-
-/*!
- Reads an unsigned \c int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( unsigned int &i )
-{
- CHECK_STREAM_PRECOND
- i = (unsigned int)input_int();
- return *this;
-}
-
-
-/*!
- Reads a signed \c long int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( signed long &i )
-{
- CHECK_STREAM_PRECOND
- i = (signed long)input_int();
- return *this;
-}
-
-
-/*!
- Reads an unsigned \c long int from the stream and returns a reference to the
- stream. See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( unsigned long &i )
-{
- CHECK_STREAM_PRECOND
- i = (unsigned long)input_int();
- return *this;
-}
-
-
-/*!
- Reads a \c float from the stream and returns a reference to the stream.
- See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( float &f )
-{
- CHECK_STREAM_PRECOND
- f = (float)input_double();
- return *this;
-}
-
-
-/*!
- Reads a \c double from the stream and returns a reference to the stream.
- See flags() for an explanation of expected input format.
-*/
-
-QTextStream &QTextStream::operator>>( double &f )
-{
- CHECK_STREAM_PRECOND
- f = input_double();
- return *this;
-}
-
-
-/*!
- Reads a word from the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator>>( char *s )
-{
- CHECK_STREAM_PRECOND
- int maxlen = width( 0 );
- QChar c = eat_ws();
- if ( !maxlen )
- maxlen = -1;
- while ( c != QEOF ) {
- if ( ts_isspace(c) || maxlen-- == 0 ) {
- ts_ungetc( c );
- break;
- }
- *s++ = c;
- c = ts_getc();
- }
-
- *s = '\0';
- return *this;
-}
-
-/*!
- Reads a word from the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator>>( QString &str )
-{
- CHECK_STREAM_PRECOND
- str=QString::fromLatin1("");
- QChar c = eat_ws();
-
- while ( c != QEOF ) {
- if ( ts_isspace(c) ) {
- ts_ungetc( c );
- break;
- }
- str += c;
- c = ts_getc();
- }
- return *this;
-}
-
-/*!
- Reads a word from the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator>>( QCString &str )
-{
- CHECK_STREAM_PRECOND
- QCString *dynbuf = 0;
- const int buflen = 256;
- char buffer[buflen];
- char *s = buffer;
- int i = 0;
- QChar c = eat_ws();
-
- while ( c != QEOF ) {
- if ( ts_isspace(c) ) {
- ts_ungetc( c );
- break;
- }
- if ( i >= buflen-1 ) {
- if ( !dynbuf ) { // create dynamic buffer
- dynbuf = new QCString(buflen*2);
- memcpy( dynbuf->rawData(), s, i ); // copy old data
- } else if ( i >= (int)dynbuf->size()-1 ) {
- dynbuf->resize( dynbuf->size()*2 );
- }
- s = dynbuf->rawData();
- }
- s[i++] = c;
- c = ts_getc();
- }
- str.resize( i+1 );
- memcpy( str.rawData(), s, i );
- delete dynbuf;
- return *this;
-}
-
-
-/*!
- Reads a line from the stream and returns a string containing the text.
-
- The returned string does not contain any trailing newline or carriage
- return. Note that this is different from QIODevice::readLine(), which
- does not strip the newline at the end of the line.
-
- On EOF you will get a QString that is null. On reading an empty line the
- returned QString is empty but not null.
-
- \sa QIODevice::readLine()
-*/
-
-QString QTextStream::readLine()
-{
-#if defined(CHECK_STATE)
- if ( !dev ) {
- qWarning( "QTextStream::readLine: No device" );
- return QString::null;
- }
-#endif
- QString result( "" );
- const int buf_size = 256;
- QChar c[buf_size];
- int pos = 0;
-
- c[pos] = ts_getc();
- if ( c[pos] == QEOF )
- return QString::null;
-
- while ( c[pos] != QEOF && c[pos] != '\n' ) {
- pos++;
- if ( pos >= buf_size ) {
- result += QString( c, pos );
- pos = 0;
- }
- c[pos] = ts_getc();
- }
- result += QString( c, pos );
-
- int len = (int)result.length();
- if ( len && result[len-1] == '\r' )
- result.truncate(len-1); // (if there are two \r, let one stay)
-
- return result;
-}
-
-
-/*!
- Reads the entire stream and returns a string containing the text.
-
- \sa QIODevice::readLine()
-*/
-
-QString QTextStream::read()
-{
-#if defined(CHECK_STATE)
- if ( !dev ) {
- qWarning( "QTextStream::read: No device" );
- return QString::null;
- }
-#endif
- QString result;
- const uint bufsize = 512;
- QChar buf[bufsize];
- uint i, num, start;
- bool skipped_cr = FALSE;
-
- while ( 1 ) {
- num = ts_getbuf(buf,bufsize);
- // do a s/\r\n/\n
- start = 0;
- for ( i=0; i<num; i++ ) {
- if ( buf[i] == '\r' ) {
- // Only skip single cr's preceding lf's
- if ( skipped_cr ) {
- result += buf[i];
- start++;
- } else {
- result += QString( &buf[start], i-start );
- start = i+1;
- skipped_cr = TRUE;
- }
- } else {
- if ( skipped_cr ) {
- if ( buf[i] != '\n' ) {
- // Should not have skipped it
- result += '\r';
- }
- skipped_cr = FALSE;
- }
- }
- }
- if ( start < num )
- result += QString( &buf[start], i-start );
- if ( num != bufsize ) // if ( EOF )
- break;
- }
- return result;
-}
-
-
-
-/*****************************************************************************
- QTextStream write functions
- *****************************************************************************/
-
-/*!
- Writes a \c char to the stream and returns a reference to the stream.
-
- The character \a c is assumed to be Latin1 encoded independent of the Encoding set
- for the QTextStream.
-*/
-QTextStream &QTextStream::operator<<( QChar c )
-{
- CHECK_STREAM_PRECOND
- ts_putc( c );
- return *this;
-}
-
-/*!
- Writes a \c char to the stream and returns a reference to the stream.
-*/
-QTextStream &QTextStream::operator<<( char c )
-{
- CHECK_STREAM_PRECOND
- unsigned char uc = (unsigned char) c;
- ts_putc( uc );
- return *this;
-}
-
-QTextStream &QTextStream::output_int( int format, ulong n, bool neg )
-{
- static char hexdigits_lower[] = "0123456789abcdef";
- static char hexdigits_upper[] = "0123456789ABCDEF";
- CHECK_STREAM_PRECOND
- char buf[76];
- char *p;
- int len;
- char *hexdigits;
-
- switch ( flags() & I_BASE_MASK ) {
-
- case I_BASE_2: // output binary number
- switch ( format & I_TYPE_MASK ) {
- case I_SHORT: len=16; break;
- case I_INT: len=sizeof(int)*8; break;
- case I_LONG: len=32; break;
- default: len = 0;
- }
- p = &buf[74]; // go reverse order
- *p = '\0';
- while ( len-- ) {
- *--p = (char)(n&1) + '0';
- n >>= 1;
- if ( !n )
- break;
- }
- if ( flags() & showbase ) { // show base
- *--p = (flags() & uppercase) ? 'B' : 'b';
- *--p = '0';
- }
- break;
-
- case I_BASE_8: // output octal number
- p = &buf[74];
- *p = '\0';
- do {
- *--p = (char)(n&7) + '0';
- n >>= 3;
- } while ( n );
- if ( flags() & showbase )
- *--p = '0';
- break;
-
- case I_BASE_16: // output hexadecimal number
- p = &buf[74];
- *p = '\0';
- hexdigits = (flags() & uppercase) ?
- hexdigits_upper : hexdigits_lower;
- do {
- *--p = hexdigits[(int)n&0xf];
- n >>= 4;
- } while ( n );
- if ( flags() & showbase ) {
- *--p = (flags() & uppercase) ? 'X' : 'x';
- *--p = '0';
- }
- break;
-
- default: // decimal base is default
- p = &buf[74];
- *p = '\0';
- if ( neg )
- n = (ulong)(-(long)n);
- do {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while ( n );
- if ( neg )
- *--p = '-';
- else if ( flags() & showpos )
- *--p = '+';
- if ( (flags() & internal) && fwidth && !ts_isdigit(*p) ) {
- ts_putc( *p ); // special case for internal
- ++p; // padding
- fwidth--;
- return *this << (const char*)p;
- }
- }
- if ( fwidth ) { // adjustment required
- if ( !(flags() & left) ) { // but NOT left adjustment
- len = qstrlen(p);
- int padlen = fwidth - len;
- if ( padlen <= 0 ) { // no padding required
- writeBlock( p, len );
- } else if ( padlen < (int)(p-buf) ) { // speeds up padding
- memset( p-padlen, (char)fillchar, padlen );
- writeBlock( p-padlen, padlen+len );
- }
- else // standard padding
- *this << (const char*)p;
- }
- else
- *this << (const char*)p;
- fwidth = 0; // reset field width
- }
- else
- writeBlock( p, qstrlen(p) );
- return *this;
-}
-
-
-/*!
- Writes a \c short integer to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( signed short i )
-{
- return output_int( I_SHORT | I_SIGNED, i, i < 0 );
-}
-
-
-/*!
- Writes an \c unsigned \c short integer to the stream and returns a reference
- to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( unsigned short i )
-{
- return output_int( I_SHORT | I_UNSIGNED, i, FALSE );
-}
-
-
-/*!
- Writes an \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( signed int i )
-{
- return output_int( I_INT | I_SIGNED, i, i < 0 );
-}
-
-
-/*!
- Writes an \c unsigned \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( unsigned int i )
-{
- return output_int( I_INT | I_UNSIGNED, i, FALSE );
-}
-
-
-/*!
- Writes a \c long \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( signed long i )
-{
- return output_int( I_LONG | I_SIGNED, i, i < 0 );
-}
-
-
-/*!
- Writes an \c unsigned \c long \c int to the stream and returns a reference to
- the stream.
-*/
-
-QTextStream &QTextStream::operator<<( unsigned long i )
-{
- return output_int( I_LONG | I_UNSIGNED, i, FALSE );
-}
-
-
-/*!
- Writes a \c float to the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( float f )
-{
- return *this << (double)f;
-}
-
-
-/*!
- Writes a \c double to the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( double f )
-{
- CHECK_STREAM_PRECOND
- char buf[64];
- char f_char;
- char format[16];
- if ( (flags()&floatfield) == fixed )
- f_char = 'f';
- else if ( (flags()&floatfield) == scientific )
- f_char = (flags() & uppercase) ? 'E' : 'e';
- else
- f_char = (flags() & uppercase) ? 'G' : 'g';
- char *fs = format; // generate format string
- *fs++ = '%'; // "%.<prec>l<f_char>"
- *fs++ = '.';
- int prec = precision();
- if ( prec > 99 )
- prec = 99;
- if ( prec >= 10 ) {
- *fs++ = prec / 10 + '0';
- *fs++ = prec % 10 + '0';
- } else {
- *fs++ = prec + '0';
- }
- *fs++ = 'l';
- *fs++ = f_char;
- *fs = '\0';
- sprintf( buf, format, f ); // convert to text
- if ( fwidth ) // padding
- *this << (const char*)buf;
- else // just write it
- writeBlock( buf, qstrlen(buf) );
- return *this;
-}
-
-
-/*!
- Writes a string to the stream and returns a reference to the stream.
-
- The string \a s is assumed to be Latin1 encoded independent of the Encoding set
- for the QTextStream.
-*/
-
-QTextStream &QTextStream::operator<<( const char* s )
-{
- CHECK_STREAM_PRECOND
- char padbuf[48];
- uint len = qstrlen( s ); // don't write null terminator
- if ( fwidth ) { // field width set
- int padlen = fwidth - len;
- fwidth = 0; // reset width
- if ( padlen > 0 ) {
- char *ppad;
- if ( padlen > 46 ) { // create extra big fill buffer
- ppad = new char[padlen];
- CHECK_PTR( ppad );
- } else {
- ppad = padbuf;
- }
- memset( ppad, (char)fillchar, padlen ); // fill with fillchar
- if ( !(flags() & left) ) {
- writeBlock( ppad, padlen );
- padlen = 0;
- }
- writeBlock( s, len );
- if ( padlen )
- writeBlock( ppad, padlen );
- if ( ppad != padbuf ) // delete extra big fill buf
- delete[] ppad;
- return *this;
- }
- }
- writeBlock( s, len );
- return *this;
-}
-
-/*!
- Writes \a s to the stream and returns a reference to the stream.
-
- The string \a s is assumed to be Latin1 encoded independent of the Encoding set
- for the QTextStream.
-*/
-
-QTextStream &QTextStream::operator<<( const QCString & s )
-{
- return operator<<(s.data());
-}
-
-/*!
- Writes \a s to the stream and returns a reference to the stream.
-*/
-
-QTextStream &QTextStream::operator<<( const QString& s )
-{
- CHECK_STREAM_PRECOND
- uint len = s.length();
- QString s1 = s;
- if ( fwidth ) { // field width set
- if ( !(flags() & left) ) {
- s1 = s.rightJustify(fwidth, (char)fillchar);
- } else {
- s1 = s.leftJustify(fwidth, (char)fillchar);
- }
- fwidth = 0; // reset width
- }
- writeBlock( s1.unicode(), len );
- return *this;
-}
-
-
-/*!
- Writes a pointer to the stream and returns a reference to the stream.
-
- The \e ptr is output as an unsigned long hexadecimal integer.
-*/
-
-QTextStream &QTextStream::operator<<( void *ptr )
-{
- int f = flags();
- setf( hex, basefield );
- setf( showbase );
- unsetf( uppercase );
- output_int( I_LONG | I_UNSIGNED, (uintptr_t)ptr, FALSE );
- flags( f );
- return *this;
-}
-
-
-/*!
- \fn int QTextStream::flags() const
- Returns the current stream flags. The default value is 0.
-
- The meaning of the flags are:
- <ul>
- <li> \e skipws - Not currently used - whitespace always skipped
- <li> \e left - Numeric fields are left-aligned
- <li> \e right - Not currently used (by default numerics are right aligned)
- <li> \e internal - Put any padding spaces between +/- and value
- <li> \e bin - Output \e and input only in binary
- <li> \e oct - Output \e and input only in octal
- <li> \e dec - Output \e and input only in decimal
- <li> \e hex - Output \e and input only in hexadecimal
- <li> \e showbase - Annotate numeric outputs with 0b, 0, or 0x if in
- \e bin, \e oct, or \e hex format
- <li> \e showpoint - Not currently used
- <li> \e uppercase - Use 0B and 0X rather than 0b and 0x
- <li> \e showpos - Show + for positive numeric values
- <li> \e scientific - Use scientific notation for floating point values
- <li> \e fixed - Use fixed-point notation for floating point values
- </ul>
-
- Note that unless \e bin, \e oct, \e dec, or \e hex is set, the input base is
- octal if the value starts with 0, hexadecimal if it starts with 0x, binary
- if the value starts with 0b, and decimal otherwise.
-
- \sa setf(), unsetf()
-*/
-
-/*!
- \fn int QTextStream::flags( int f )
- Sets the stream flags to \e f.
- Returns the previous stream flags.
-
- \sa setf(), unsetf(), flags()
-*/
-
-/*!
- \fn int QTextStream::setf( int bits )
- Sets the stream flag bits \e bits.
- Returns the previous stream flags.
-
- Equivalent to <code>flags( flags() | bits )</code>.
-
- \sa setf(), unsetf()
-*/
-
-/*!
- \fn int QTextStream::setf( int bits, int mask )
- Sets the stream flag bits \e bits with a bit mask \e mask.
- Returns the previous stream flags.
-
- Equivalent to <code>flags( (flags() & ~mask) | (bits & mask) )</code>.
-
- \sa setf(), unsetf()
-*/
-
-/*!
- \fn int QTextStream::unsetf( int bits )
- Clears the stream flag bits \e bits.
- Returns the previous stream flags.
-
- Equivalent to <code>flags( flags() & ~mask )</code>.
-
- \sa setf()
-*/
-
-/*!
- \fn int QTextStream::width() const
- Returns the field width. The default value is 0.
-*/
-
-/*!
- \fn int QTextStream::width( int w )
- Sets the field width to \e w. Returns the previous field width.
-*/
-
-/*!
- \fn int QTextStream::fill() const
- Returns the fill character. The default value is ' ' (space).
-*/
-
-/*!
- \fn int QTextStream::fill( int f )
- Sets the fill character to \e f. Returns the previous fill character.
-*/
-
-/*!
- \fn int QTextStream::precision() const
- Returns the precision. The default value is 6.
-*/
-
-/*!
- \fn int QTextStream::precision( int p )
- Sets the precision to \e p. Returns the previous precision setting.
-*/
-
-
- /*****************************************************************************
- QTextStream manipulators
- *****************************************************************************/
-
-QTextStream &bin( QTextStream &s )
-{
- s.setf(QTS::bin,QTS::basefield);
- return s;
-}
-
-QTextStream &oct( QTextStream &s )
-{
- s.setf(QTS::oct,QTS::basefield);
- return s;
-}
-
-QTextStream &dec( QTextStream &s )
-{
- s.setf(QTS::dec,QTS::basefield);
- return s;
-}
-
-QTextStream &hex( QTextStream &s )
-{
- s.setf(QTS::hex,QTS::basefield);
- return s;
-}
-
-QTextStream &endl( QTextStream &s )
-{
- return s << '\n';
-}
-
-QTextStream &flush( QTextStream &s )
-{
- if ( s.device() )
- s.device()->flush();
- return s;
-}
-
-QTextStream &ws( QTextStream &s )
-{
- s.skipWhiteSpace();
- return s;
-}
-
-QTextStream &reset( QTextStream &s )
-{
- s.reset();
- return s;
-}
-
-
-/*!
- \class QTextIStream qtextstream.h
- \brief A convenience class for input streams.
-
- For simple tasks, code should be simple. Hence this
- class is a shorthand to avoid passing the \e mode argument
- to the normal QTextStream constructors.
-
- This makes it easy for example, to write things like this:
-\code
- QString data = "123 456";
- int a, b;
- QTextIStream(&data) >> a >> b;
-\endcode
-
- \sa QTextOStream
-*/
-
-/*!
- \fn QTextIStream::QTextIStream( QString *s )
-
- Constructs a stream to read from string \a s.
-*/
-/*!
- \fn QTextIStream::QTextIStream( QByteArray ba )
-
- Constructs a stream to read from the array \a ba.
-*/
-/*!
- \fn QTextIStream::QTextIStream( FILE *f )
-
- Constructs a stream to read from the file \a f.
-*/
-
-
-/*!
- \class QTextOStream qtextstream.h
- \brief A convenience class for output streams.
-
- For simple tasks, code should be simple. Hence this
- class is a shorthand to avoid passing the \e mode argument
- to the normal QTextStream constructors.
-
- This makes it easy for example, to write things like this:
-\code
- QString result;
- QTextOStream(&result) << "pi = " << 3.14;
-\endcode
-*/
-
-/*!
- \fn QTextOStream::QTextOStream( QString *s )
-
- Constructs a stream to write to string \a s.
-*/
-/*!
- \fn QTextOStream::QTextOStream( QByteArray ba )
-
- Constructs a stream to write to the array \a ba.
-*/
-/*!
- \fn QTextOStream::QTextOStream( FILE *f )
-
- Constructs a stream to write to the file \a f.
-*/
-
-
-
-/*!
- Sets the encoding of this stream to \a e, where \a e is one of:
- <ul>
- <li> \c Locale Using local file format (Latin1 if locale is not
- set), but autodetecting Unicode(utf16) on input.
- <li> \c Unicode Using Unicode(utf16) for input and output. Output
- will be written in the order most efficient for the current platform
- (i.e. the order used internally in QString).
- <li> \c UnicodeUTF8 Using Unicode(utf8) for input and output. If you use it
- for input it will autodetect utf16 and use it instead of utf8.
- <li> \c Latin1 ISO-8859-1. Will not autodetect utf16.
- <li> \c UnicodeNetworkOrder Using network order Unicode(utf16) for
- input and output. Useful when reading Unicode data that does not
- start with the byte order marker.
- <li> \c UnicodeReverse Using reverse network order Unicode(utf16)
- for input and output. Useful when reading Unicode data that does not
- start with the byte order marker, or writing data that should be
- read by buggy Windows applications.
- <li> \c RawUnicode Like Unicode, but does not write the byte order
- marker, nor does it autodetect the byte order. Only useful when
- writing to non-persistent storage used by a single process.
- </ul>
-
- \c Locale and all Unicode encodings, except \c RawUnicode, will look at
- the first two bytes in a input stream to determine the byte order. The
- initial byte order marker will be stripped off before data is read.
-
- Note that this function should be called before any data is read
- to/written from the stream.
- \sa setCodec()
-*/
-
-void QTextStream::setEncoding( Encoding e )
-{
- if ( d->sourceType == QTextStreamPrivate::String )
- return; // QString does not need any encoding
- switch ( e ) {
- case Unicode:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = TRUE;
- break;
- case UnicodeUTF8:
-#ifndef QT_NO_CODECS
- mapper = QTextCodec::codecForMib( 106 );
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = TRUE;
-#else
- mapper = 0;
- latin1 = TRUE;
- doUnicodeHeader = TRUE;
-#endif
- break;
- case UnicodeNetworkOrder:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = QChar::networkOrdered();
- break;
- case UnicodeReverse:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = TRUE;
- internalOrder = !QChar::networkOrdered(); //reverse network ordered
- break;
- case RawUnicode:
- mapper = 0;
- latin1 = FALSE;
- doUnicodeHeader = FALSE;
- internalOrder = TRUE;
- break;
- case Locale:
- latin1 = TRUE; // fallback to Latin 1
-#ifndef QT_NO_TEXTCODEC
- mapper = QTextCodec::codecForLocale();
-#if defined(_OS_WIN32_)
- if ( GetACP() == 1252 )
- mapper = 0; // Optimized latin1 processing
-#endif
- if ( mapper && mapper->mibEnum() == 4 )
-#endif
- mapper = 0; // Optimized latin1 processing
- doUnicodeHeader = TRUE; // If it reads as Unicode, accept it
- break;
- case Latin1:
- mapper = 0;
- doUnicodeHeader = FALSE;
- latin1 = TRUE;
- break;
- }
-}
-
-
-#ifndef QT_NO_TEXTCODEC
-/*! Sets the codec for this stream to \a codec. Will not try to
- autodetect Unicode.
-
- Note that this function should be called before any data is read
- to/written from the stream.
-
- \sa setEncoding()
-*/
-
-void QTextStream::setCodec( QTextCodec *codec )
-{
- if ( d->sourceType == QTextStreamPrivate::String )
- return; // QString does not need any codec
- mapper = codec;
- doUnicodeHeader = FALSE;
-}
-#endif
-
-#endif // QT_NO_TEXTSTREAM
diff --git a/qtools/qtextstream.h b/qtools/qtextstream.h
deleted file mode 100644
index c5f5ba1..0000000
--- a/qtools/qtextstream.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QTextStream class
-**
-** Created : 940922
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QTEXTSTREAM_H
-#define QTEXTSTREAM_H
-
-#ifndef QT_H
-#include "qiodevice.h"
-#include "qstring.h"
-#include <stdio.h>
-#endif // QT_H
-
-#ifndef QT_NO_TEXTSTREAM
-class QTextCodec;
-class QTextDecoder;
-
-class QTextStreamPrivate;
-
-class Q_EXPORT QTextStream // text stream class
-{
-public:
- enum Encoding { Locale, Latin1, Unicode, UnicodeNetworkOrder,
- UnicodeReverse, RawUnicode, UnicodeUTF8 };
-
- void setEncoding( Encoding );
-#ifndef QT_NO_TEXTCODEC
- void setCodec( QTextCodec* );
-#endif
-
- // Encoding encoding() const { return cmode; }
-
- QTextStream();
- QTextStream( QIODevice * );
- QTextStream( QString*, int mode );
- QTextStream( QString&, int mode ); // obsolete
- QTextStream( QByteArray, int mode );
- QTextStream( FILE *, int mode );
- virtual ~QTextStream();
-
- QIODevice *device() const;
- void setDevice( QIODevice * );
- void unsetDevice();
-
- bool atEnd() const;
- bool eof() const;
-
- QTextStream &operator>>( QChar & );
- QTextStream &operator>>( char & );
- QTextStream &operator>>( signed short & );
- QTextStream &operator>>( unsigned short & );
- QTextStream &operator>>( signed int & );
- QTextStream &operator>>( unsigned int & );
- QTextStream &operator>>( signed long & );
- QTextStream &operator>>( unsigned long & );
- QTextStream &operator>>( float & );
- QTextStream &operator>>( double & );
- QTextStream &operator>>( char * );
- QTextStream &operator>>( QString & );
- QTextStream &operator>>( QCString & );
-
- QTextStream &operator<<( QChar );
- QTextStream &operator<<( char );
- QTextStream &operator<<( signed short );
- QTextStream &operator<<( unsigned short );
- QTextStream &operator<<( signed int );
- QTextStream &operator<<( unsigned int );
- QTextStream &operator<<( signed long );
- QTextStream &operator<<( unsigned long );
- QTextStream &operator<<( float );
- QTextStream &operator<<( double );
- QTextStream &operator<<( const char* );
- QTextStream &operator<<( const QString & );
- QTextStream &operator<<( const QCString & );
- QTextStream &operator<<( void * ); // any pointer
-
- QTextStream &readRawBytes( char *, uint len );
- QTextStream &writeRawBytes( const char* , uint len );
-
- QString readLine();
- QString read();
- void skipWhiteSpace();
-
- enum {
- skipws = 0x0001, // skip whitespace on input
- left = 0x0002, // left-adjust output
- right = 0x0004, // right-adjust output
- internal = 0x0008, // pad after sign
- bin = 0x0010, // binary format integer
- oct = 0x0020, // octal format integer
- dec = 0x0040, // decimal format integer
- hex = 0x0080, // hex format integer
- showbase = 0x0100, // show base indicator
- showpoint = 0x0200, // force decimal point (float)
- uppercase = 0x0400, // upper-case hex output
- showpos = 0x0800, // add '+' to positive integers
- scientific= 0x1000, // scientific float output
- fixed = 0x2000 // fixed float output
- };
-
- static const int basefield; // bin | oct | dec | hex
- static const int adjustfield; // left | right | internal
- static const int floatfield; // scientific | fixed
-
- int flags() const;
- int flags( int f );
- int setf( int bits );
- int setf( int bits, int mask );
- int unsetf( int bits );
-
- void reset();
-
- int width() const;
- int width( int );
- int fill() const;
- int fill( int );
- int precision() const;
- int precision( int );
-
-private:
- long input_int();
- void init();
- QTextStream &output_int( int, ulong, bool );
- QIODevice *dev;
- bool isNetworkOrder() { return internalOrder == QChar::networkOrdered(); }
-
- int fflags;
- int fwidth;
- int fillchar;
- int fprec;
- bool fstrm;
- bool owndev;
- QTextCodec *mapper;
- QTextStreamPrivate * d;
- QChar ungetcBuf;
- bool latin1;
- bool internalOrder;
- bool doUnicodeHeader;
- void *reserved_ptr;
-
- QChar eat_ws();
- void ts_ungetc( QChar );
- QChar ts_getc();
- uint ts_getbuf( QChar*, uint );
- void ts_putc(int);
- void ts_putc(QChar);
- bool ts_isspace(QChar);
- bool ts_isdigit(QChar);
- ulong input_bin();
- ulong input_oct();
- ulong input_dec();
- ulong input_hex();
- double input_double();
- QTextStream &writeBlock( const char* p, uint len );
- QTextStream &writeBlock( const QChar* p, uint len );
-
-private: // Disabled copy constructor and operator=
-#if defined(Q_DISABLE_COPY)
- QTextStream( const QTextStream & );
- QTextStream &operator=( const QTextStream & );
-#endif
-};
-
-typedef QTextStream QTS;
-
-class Q_EXPORT QTextIStream : public QTextStream {
-public:
- QTextIStream( QString* s ) :
- QTextStream(s,IO_ReadOnly) { }
- QTextIStream( QByteArray ba ) :
- QTextStream(ba,IO_ReadOnly) { }
- QTextIStream( FILE *f ) :
- QTextStream(f,IO_ReadOnly) { }
-};
-
-class Q_EXPORT QTextOStream : public QTextStream {
-public:
- QTextOStream( QString* s ) :
- QTextStream(s,IO_WriteOnly) { }
- QTextOStream( QByteArray ba ) :
- QTextStream(ba,IO_WriteOnly) { }
- QTextOStream( FILE *f ) :
- QTextStream(f,IO_WriteOnly) { }
-};
-
-/*****************************************************************************
- QTextStream inline functions
- *****************************************************************************/
-
-inline QIODevice *QTextStream::device() const
-{ return dev; }
-
-inline bool QTextStream::atEnd() const
-{ return dev ? dev->atEnd() : FALSE; }
-
-inline bool QTextStream::eof() const
-{ return atEnd(); }
-
-inline int QTextStream::flags() const
-{ return fflags; }
-
-inline int QTextStream::flags( int f )
-{ int oldf = fflags; fflags = f; return oldf; }
-
-inline int QTextStream::setf( int bits )
-{ int oldf = fflags; fflags |= bits; return oldf; }
-
-inline int QTextStream::setf( int bits, int mask )
-{ int oldf = fflags; fflags = (fflags & ~mask) | (bits & mask); return oldf; }
-
-inline int QTextStream::unsetf( int bits )
-{ int oldf = fflags; fflags &= ~bits; return oldf; }
-
-inline int QTextStream::width() const
-{ return fwidth; }
-
-inline int QTextStream::width( int w )
-{ int oldw = fwidth; fwidth = w; return oldw; }
-
-inline int QTextStream::fill() const
-{ return fillchar; }
-
-inline int QTextStream::fill( int f )
-{ int oldc = fillchar; fillchar = f; return oldc; }
-
-inline int QTextStream::precision() const
-{ return fprec; }
-
-inline int QTextStream::precision( int p )
-{ int oldp = fprec; fprec = p; return oldp; }
-
-/*!
- Returns one character from the stream, or EOF.
-*/
-inline QChar QTextStream::ts_getc()
-{ QChar r; return ( ts_getbuf( &r,1 ) == 1 ? r : QChar((ushort)0xffff) ); }
-
-/*****************************************************************************
- QTextStream manipulators
- *****************************************************************************/
-
-typedef QTextStream & (*QTSFUNC)(QTextStream &);// manipulator function
-typedef int (QTextStream::*QTSMFI)(int); // manipulator w/int argument
-
-class Q_EXPORT QTSManip { // text stream manipulator
-public:
- QTSManip( QTSMFI m, int a ) { mf=m; arg=a; }
- void exec( QTextStream &s ) { (s.*mf)(arg); }
-private:
- QTSMFI mf; // QTextStream member function
- int arg; // member function argument
-};
-
-Q_EXPORT inline QTextStream &operator>>( QTextStream &s, QTSFUNC f )
-{ return (*f)( s ); }
-
-Q_EXPORT inline QTextStream &operator<<( QTextStream &s, QTSFUNC f )
-{ return (*f)( s ); }
-
-Q_EXPORT inline QTextStream &operator<<( QTextStream &s, QTSManip m )
-{ m.exec(s); return s; }
-
-Q_EXPORT QTextStream &bin( QTextStream &s ); // set bin notation
-Q_EXPORT QTextStream &oct( QTextStream &s ); // set oct notation
-Q_EXPORT QTextStream &dec( QTextStream &s ); // set dec notation
-Q_EXPORT QTextStream &hex( QTextStream &s ); // set hex notation
-Q_EXPORT QTextStream &endl( QTextStream &s ); // insert EOL ('\n')
-Q_EXPORT QTextStream &flush( QTextStream &s ); // flush output
-Q_EXPORT QTextStream &ws( QTextStream &s ); // eat whitespace on input
-Q_EXPORT QTextStream &reset( QTextStream &s ); // set default flags
-
-Q_EXPORT inline QTSManip qSetW( int w )
-{
- QTSMFI func = &QTextStream::width;
- return QTSManip(func,w);
-}
-
-Q_EXPORT inline QTSManip qSetFill( int f )
-{
- QTSMFI func = &QTextStream::fill;
- return QTSManip(func,f);
-}
-
-Q_EXPORT inline QTSManip qSetPrecision( int p )
-{
- QTSMFI func = &QTextStream::precision;
- return QTSManip(func,p);
-}
-
-
-#ifndef QT_ALTERNATE_QTSMANIP
-
-// These will go away in Qt 3.0, as they conflict with std libs
-//
-// If you get conflicts now, #define QT_ALTERNATE_QTSMANIP before
-// including this file.
-
-Q_EXPORT inline QTSManip setw( int w )
-{
- QTSMFI func = &QTextStream::width;
- return QTSManip(func,w);
-}
-
-Q_EXPORT inline QTSManip setfill( int f )
-{
- QTSMFI func = &QTextStream::fill;
- return QTSManip(func,f);
-}
-
-Q_EXPORT inline QTSManip setprecision( int p )
-{
- QTSMFI func = &QTextStream::precision;
- return QTSManip(func,p);
-}
-#endif
-
-#endif // QT_NO_TEXTSTREAM
-#endif // QTEXTSTREAM_H
diff --git a/qtools/qtl.doc b/qtools/qtl.doc
deleted file mode 100644
index 8ce89bd..0000000
--- a/qtools/qtl.doc
+++ /dev/null
@@ -1,249 +0,0 @@
-/****************************************************************************
-**
-**
-** Qt template library classes documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-/*!
-\page qtl.html
-
-\title Qt Template library
-
-The Qt Template Library is a set of templates within Qt dealing with
-containers of objects. It provides a list of objects, a stack of
-objects, a map (or dictionary) from one type to another, and
-associated iterators and algorithms.
-
-Qt also contains similar classes that deal with pointers to objects;
-\l QValueList vs. \l QList, etc. Compared to the pointer-based
-templates, the QTL offers easy copying of the container, real support
-for classes that e.g. require constructors, expand to much more object
-code, can often be a bit faster, require that the objects stored can
-be copied, and finally, have a worse record of compiler problems.
-
-Compared to the STL, the QTL contains only the most important features
-of the STL, has more regular function naming, has no platform
-differences, is often a little slower and often expands to less object
-code.
-
-
-If you can not make copies of the objects you want to store you are
-better off with QCollection and friends. They were designed to handle
-exactly that kind of pointer semantics. This applies for example to
-all classes derived from \l QObject. A QObject does not have a copy
-constructor, so using it as value is impossible. You may choose be
-store pointers to QObjects in a QValueList, but using QList directly
-seems to be the better choice for this kind of application
-domain. QList, like all other QCollection based containers, provides
-far more sanity checking than a speed-optimized value
-based container.
-
-If you have objects that implement value semantics, use the Qt
-template library. Value semantics require at least
-<ul>
-<li>a copy constructor,
-<li>an assignment operator and
-<li> a default constructor, i.e. a constructor that does not take
-any arguments.
-</ul>
-Note that a fast copy constructor is absolutely crucial for a good
-overall performance of the container, since many copy operations are
-going to happen.
-
-Examples for value based classes are QRect, QPoint, QSize and all
-simple C++ types like int, bool or double.
-
-The Qt template library is designed for speed. Especially iterators
-are extremely fast. On the drawback side, less error checking is done
-than in the QCollection based containers. A template library container
-for example does not track associated iterators. This makes certain
-validity checks, like on removing items, impossible to perform
-automatically.
-
-<h2> Iterators </h2>
-
-The Qt template library deals with value objects, not with pointers.
-For that reason, there is no other way of iterating over containers
-than using iterators. This is no disadvantage as the size of an
-iterator matches the size of a normal pointer - 32 or 64 bits
-depending on your CPU architecture.
-
-To iterate over a container, use a loop like this:
-
-\code
- typedef QValueList<int> List;
- List l;
- for( List::Iterator it = l.begin(); it != l.end(); ++it )
- printf("Number is %i\n",*it);
-\endcode
-
-begin() returns the iterator pointing at the first element, while
-end() returns an iterator that points \e after the last
-element. end() marks an invalid position, it can never be
-dereferenced. It's the break condition in any iteration, may it be
-from begin() or fromLast(). For maximum speed, use increment or
-decrement iterators with the prefix operator (++it, --it) instead of the
-postfix one (it++, it--), since the former is slightly faster.
-
-The same concept applies to the other container classes:
-
-\code
- typedef QMap<QString,QString> Map;
- Map map;
- for( Map::Iterator it = map.begin(); it != map.end(); ++it )
- printf("Key=%s Data=%s\n", it.key().ascii(), it.data().ascii() );
-
- typedef QArray<int> Array;
- Array array;
- for( Array::Iterator it = array.begin(); it != array.end(); ++it )
- printf("Data=%i\n", *it );
-\endcode
-
-There are two kind of iterators, the volatile iterator shown in the
-examples above and a version that returns a const reference to its
-current object, the ConstIterator. Const iterators are required
-whenever the container itself is const, such as a member variable
-inside a const function. Assigning a ConstIterator to a normal
-Iterator is not allowed as it would violate const semantics.
-
-<h2> Algorithms </h2>
-
-The template library defines a number of algorithms that operate on
-its containers: qHeapSort(), qBubbleSort(), qSwap() and
-qCopy(). These algorithms are implemented as template functions.
-
-qHeapSort() and qBubbleSort() provide the well known sorting
-algorithms. You can use them like this:
-
-\code
- typedef QValueList<int> List;
- List l;
- l << 42 << 100 << 1234 << 12 << 8;
- qHeapSort( l );
-
- List l2;
- l2 << 42 << 100 << 1234 << 12 << 8;
- List::Iterator b = l2.find( 100 );
- List::Iterator e = l2.find( 8 );
- qHeapSort( b, e );
-
- double arr[] = { 3.2, 5.6, 8.9 };
- qHeapSort( arr, arr + 3 );
-\endcode
-
-The first example sorts the entire list. The second one sorts all
-elements enclosed in the two iterators, namely 100, 1234 and 12. The
-third example shows that iterators act like pointers and can be
-treated as such.
-
-Naturally, the sorting templates won't work with const iterators.
-
-Another utility is qSwap(). It exchanges the values of two variables:
-
-\code
- QString second( "Einstein" );
- QString name( "Albert" );
- qSwap( second, name );
-\endcode
-
-Another template function is qCopy(). It copies a container or a slice
-of it to an OutputIterator, in this case a QTextOStreamIterator:
-
-\code
- typedef QValueList<int> List;
- List l;
- l << 100 << 200 << 300;
- QTextOStream str( stdout );
- qCopy( l, QTextOStreamIterator( str ) );
-\endcode
-
-In addition, you can use any Qt template library iterator as the
-OutputIterator. Just make sure that the right hand of the iterator has
-as many elements present as you want to insert. The following example
-illustrates this:
-
-\code
- QStringList l1, l2;
- l1 << "Weis" << "Ettrich" << "Arnt" << "Sue";
- l2 << "Torben" << "Matthias";
- qCopy( l2, l1.begin();
-\endcode
-
-At the end of this code fragment, the List l1 contains "Torben",
-"Matthias", "Arnt" and "Sue", with the prior contents being
-overwritten. Another flavor of qCopy() takes three arguments to make
-it possible to copy a slice of a container:
-
-\code
- typedef QValueList<int> List;
- List l;
- l << 42 << 100 << 1234 << 12 << 8;
- List::Iterator b = l.find( 100 );
- List::Iterator e = l.find( 8 );
- QTextOStream str( stdout );
- qCopy( b, e, QTextOStreamIterator( str ) );
-\endcode
-
-If you write new algorithms, consider writing them as template
-functions in order to make them usable with as many containers
-possible. In the above example, you could just as easily print out a
-standard C++ array with qCopy():
-
-\code
- int arr[] = { 100, 200, 300 };
- QTextOStream str( stdout );
- qCopy( arr, arr + 3, QTextOStreamIterator( str ) );
-\endcode
-
-
-<h2> Streaming </h2>
-
-All mentioned containers can be serialized with the respective
-streaming operators. Here is an example.
-
-\code
- QDataStream str(...);
- QValueList<QRect> l;
- // ... fill the list here
- str << l;
-\endcode
-
-The container can be read in again with:
-
-\code
- QValueList<QRect> l;
- str >> l;
-\endcode
-
-The same applies to QStringList, QValueStack and QMap.
-
-*/
diff --git a/qtools/qtl.h b/qtools/qtl.h
deleted file mode 100644
index bd72e7d..0000000
--- a/qtools/qtl.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of Qt template library classes
-**
-** Created : 990128
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-#ifndef QTL_H
-#define QTL_H
-
-#ifndef QT_H
-#include "qtextstream.h"
-#include "qstring.h"
-#endif // QT_H
-
-#ifndef QT_NO_TEXTSTREAM
-template <class T>
-class QTextOStreamIterator
-{
-protected:
- QTextOStream& stream;
- QString separator;
-
-public:
- QTextOStreamIterator( QTextOStream& s) : stream( s ) {}
- QTextOStreamIterator( QTextOStream& s, const QString& sep )
- : stream( s ), separator( sep ) {}
- QTextOStreamIterator<T>& operator= ( const T& x ) {
- stream << x;
- if ( !separator.isEmpty() )
- stream << separator;
- return *this;
- }
- QTextOStreamIterator<T>& operator*() { return *this; }
- QTextOStreamIterator<T>& operator++() { return *this; }
- QTextOStreamIterator<T>& operator++(int) { return *this; }
-};
-#endif //QT_NO_TEXTSTREAM
-
-template <class InputIterator, class OutputIterator>
-inline OutputIterator qCopy( InputIterator _begin, InputIterator _end,
- OutputIterator _dest )
-{
- while( _begin != _end )
- *_dest++ = *_begin++;
- return _dest;
-}
-
-
-template <class T>
-inline void qSwap( T& _value1, T& _value2 )
-{
- T tmp = _value1;
- _value1 = _value2;
- _value2 = tmp;
-}
-
-
-template <class InputIterator>
-inline void qBubbleSort( InputIterator b, InputIterator e )
-{
- // Goto last element;
- InputIterator last = e;
- --last;
- // only one element or no elements ?
- if ( last == b )
- return;
-
- // So we have at least two elements in here
- while( b != last ) {
- bool swapped = FALSE;
- InputIterator swap_pos = b;
- InputIterator x = e;
- InputIterator y = x;
- y--;
- do {
- --x;
- --y;
- if ( *x < *y ) {
- swapped = TRUE;
- qSwap( *x, *y );
- swap_pos = y;
- }
- } while( y != b );
- if ( !swapped )
- return;
- b = swap_pos;
- b++;
- }
-}
-
-
-template <class Container>
-inline void qBubbleSort( Container &c )
-{
- qBubbleSort( c.begin(), c.end() );
-}
-
-
-template <class Value>
-inline void qHeapSortPushDown( Value* heap, int first, int last )
-{
- int r = first;
- while( r <= last/2 ) {
- // Node r has only one child ?
- if ( last == 2*r ) {
- // Need for swapping ?
- if ( heap[r] > heap[ 2*r ] )
- qSwap( heap[r], heap[ 2*r ] );
- // That's it ...
- r = last;
- } else { // Node has two children
- if ( heap[r] > heap[ 2*r ] && heap[ 2*r ] <= heap[ 2*r+1 ] ) {
- // Swap with left child
- qSwap( heap[r], heap[ 2*r ] );
- r *= 2;
- } else if ( heap[r] > heap[ 2*r+1 ] &&
- heap[ 2*r+1 ] < heap[ 2*r ] ) {
- // Swap with right child
- qSwap( heap[r], heap[ 2*r+1 ] );
- r = 2*r+1;
- } else {
- // We are done
- r = last;
- }
- }
- }
-}
-
-
-template <class InputIterator, class Value>
-inline void qHeapSortHelper( InputIterator b, InputIterator e, Value, uint n )
-{
- // Create the heap
- InputIterator insert = b;
- Value* realheap = new Value[ n ];
- // Wow, what a fake. But I want the heap to be indexed as 1...n
- Value* heap = realheap - 1;
- int size = 0;
- for( ; insert != e; ++insert ) {
- heap[++size] = *insert;
- int i = size;
- while( i > 1 && heap[i] < heap[ i / 2 ] ) {
- qSwap( heap[i], heap[ i / 2 ] );
- i /= 2;
- }
- }
-
- // Now do the sorting
- for( uint i = n; i > 0; i-- ) {
- *b++ = heap[1];
- if ( i > 1 ) {
- heap[1] = heap[i];
- qHeapSortPushDown( heap, 1, (int)i - 1 );
- }
- }
-
- delete[] realheap;
-}
-
-
-template <class InputIterator>
-inline void qHeapSort( InputIterator b, InputIterator e )
-{
- // Empty ?
- if ( b == e )
- return;
-
- // How many entries have to be sorted ?
- InputIterator it = b;
- uint n = 0;
- while ( it != e ) {
- ++n;
- ++it;
- }
-
- // The second last parameter is a hack to retrieve the value type
- // Do the real sorting here
- qHeapSortHelper( b, e, *b, n );
-}
-
-
-template <class Container>
-inline void qHeapSort( Container &c )
-{
- if ( c.isEmpty() )
- return;
-
- // The second last parameter is a hack to retrieve the value type
- // Do the real sorting here
- qHeapSortHelper( c.begin(), c.end(), *(c.begin()), c.count() );
-}
-
-#endif
diff --git a/qtools/qutfcodec.cpp b/qtools/qutfcodec.cpp
deleted file mode 100644
index a37e37f..0000000
--- a/qtools/qutfcodec.cpp
+++ /dev/null
@@ -1,276 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QEucCodec class
-**
-** Created : 981015
-**
-** Copyright (C)1998-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#include "qutfcodec.h"
-
-#ifndef QT_NO_TEXTCODEC
-
-int QUtf8Codec::mibEnum() const
-{
- return 106;
-}
-
-QCString QUtf8Codec::fromUnicode(const QString& uc, int& len_in_out) const
-{
- int l = QMIN((int)uc.length(),len_in_out);
- int rlen = l*3+1;
- QCString rstr(rlen);
- uchar* cursor = (uchar*)rstr.data();
- for (int i=0; i<l; i++) {
- QChar ch = uc[i];
- if ( !ch.row() && ch.cell() < 0x80 ) {
- *cursor++ = ch.cell();
- } else {
- uchar b = (ch.row() << 2) | (ch.cell() >> 6);
- if ( ch.row() < 0x08 ) {
- *cursor++ = 0xc0 | b;
- } else {
- *cursor++ = 0xe0 | (ch.row() >> 4);
- *cursor++ = 0x80 | (b&0x3f);
- }
- *cursor++ = 0x80 | (ch.cell()&0x3f);
- }
- }
- len_in_out = (int)(cursor - (uchar*)rstr.data());
- rstr.truncate(len_in_out);
- return rstr;
-}
-
-const char* QUtf8Codec::name() const
-{
- return "UTF-8";
-}
-
-int QUtf8Codec::heuristicContentMatch(const char* chars, int len) const
-{
- int score = 0;
- for (int i=0; i<len; i++) {
- uchar ch = chars[i];
- // No nulls allowed.
- if ( !ch )
- return -1;
- if ( ch < 128 ) {
- // Inconclusive
- score++;
- } else if ( (ch&0xe0) == 0xc0 ) {
- if ( i < len-1 ) {
- uchar c2 = chars[++i];
- if ( (c2&0xc0) != 0x80 )
- return -1;
- score+=3;
- }
- } else if ( (ch&0xf0) == 0xe0 ) {
- if ( i < len-1 ) {
- uchar c2 = chars[++i];
- if ( (c2&0xc0) != 0x80 ) {
- return -1;
-#if 0
- if ( i < len-1 ) {
- uchar c3 = chars[++i];
- if ( (c3&0xc0) != 0x80 )
- return -1;
- score+=3;
- }
-#endif
- }
- score+=2;
- }
- }
- }
- return score;
-}
-
-
-
-
-class QUtf8Decoder : public QTextDecoder {
- ushort uc;
- int need;
-public:
- QUtf8Decoder() : need(0)
- {
- }
-
- QString toUnicode(const char* chars, int len)
- {
- QString result;
- for (int i=0; i<len; i++) {
- uchar ch = chars[i];
- if (need) {
- if ( (ch&0xc0) == 0x80 ) {
- uc = (uc << 6) | (ch & 0x3f);
- need--;
- if ( !need ) {
- result += QChar(uc);
- }
- } else {
- // error
- result += QChar::replacement;
- need = 0;
- }
- } else {
- if ( ch < 128 ) {
- result += QChar(ch);
- } else if ( (ch&0xe0) == 0xc0 ) {
- uc = ch &0x1f;
- need = 1;
- } else if ( (ch&0xf0) == 0xe0 ) {
- uc = ch &0x0f;
- need = 2;
- }
- }
- }
- return result;
- }
-};
-
-QTextDecoder* QUtf8Codec::makeDecoder() const
-{
- return new QUtf8Decoder;
-}
-
-
-
-
-
-
-int QUtf16Codec::mibEnum() const
-{
- return 1000;
-}
-
-const char* QUtf16Codec::name() const
-{
- return "ISO-10646-UCS-2";
-}
-
-int QUtf16Codec::heuristicContentMatch(const char* chars, int len) const
-{
- uchar* uchars = (uchar*)chars;
- if ( len >= 2 && ((uchars[0] == 0xff && uchars[1] == 0xfe) ||
- (uchars[1] == 0xff && uchars[0] == 0xfe)) )
- return len;
- else
- return 0;
-}
-
-
-
-
-class QUtf16Encoder : public QTextEncoder {
- bool headerdone;
-public:
- QUtf16Encoder() : headerdone(FALSE)
- {
- }
-
- QCString fromUnicode(const QString& uc, int& len_in_out)
- {
- if ( headerdone ) {
- len_in_out = uc.length()*(int)sizeof(QChar);
- QCString d(len_in_out);
- memcpy(d.rawData(),uc.unicode(),len_in_out);
- return d;
- } else {
- headerdone = TRUE;
- len_in_out = (1+uc.length())*(int)sizeof(QChar);
- QCString d(len_in_out);
- memcpy(d.rawData(),&QChar::byteOrderMark,sizeof(QChar));
- memcpy(d.rawData()+sizeof(QChar),uc.unicode(),uc.length()*sizeof(QChar));
- return d;
- }
- }
-};
-
-class QUtf16Decoder : public QTextDecoder {
- uchar buf;
- bool half;
- bool swap;
- bool headerdone;
-
-public:
- QUtf16Decoder() : half(FALSE), swap(FALSE), headerdone(FALSE)
- {
- }
-
- QString toUnicode(const char* chars, int len)
- {
- QString r;
-
- while ( len-- ) {
- if ( half ) {
- QChar ch;
- if ( swap ) {
- ch.row() = *chars++;
- ch.cell() = buf;
- } else {
- ch.row() = buf;
- ch.cell() = *chars++;
- }
- if ( !headerdone ) {
- if ( ch == QChar::byteOrderSwapped ) {
- swap = !swap;
- } else if ( ch == QChar::byteOrderMark ) {
- // Ignore ZWNBSP
- } else {
- r += ch;
- }
- headerdone = TRUE;
- } else
- r += ch;
- half = FALSE;
- } else {
- buf = *chars++;
- half = TRUE;
- }
- }
-
- return r;
- }
-};
-
-QTextDecoder* QUtf16Codec::makeDecoder() const
-{
- return new QUtf16Decoder;
-}
-
-QTextEncoder* QUtf16Codec::makeEncoder() const
-{
- return new QUtf16Encoder;
-}
-
-#endif // QT_NO_TEXTCODEC
diff --git a/qtools/qutfcodec.h b/qtools/qutfcodec.h
deleted file mode 100644
index af864be..0000000
--- a/qtools/qutfcodec.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QEucCodec class
-**
-** Created : 981015
-**
-** Copyright (C) 1998-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QUTFCODEC_H
-#define QUTFCODEC_H
-
-#ifndef QT_H
-#include "qtextcodec.h"
-#endif // QT_H
-
-#ifndef QT_NO_TEXTCODEC
-
-class Q_EXPORT QUtf8Codec : public QTextCodec {
-public:
- virtual int mibEnum() const;
- const char* name() const;
-
- QTextDecoder* makeDecoder() const;
-
- QCString fromUnicode(const QString& uc, int& len_in_out) const;
-
- int heuristicContentMatch(const char* chars, int len) const;
-};
-
-class Q_EXPORT QUtf16Codec : public QTextCodec {
-public:
- virtual int mibEnum() const;
- const char* name() const;
-
- QTextDecoder* makeDecoder() const;
- QTextEncoder* makeEncoder() const;
-
- int heuristicContentMatch(const char* chars, int len) const;
-};
-
-#endif //QT_NO_TEXTCODEC
-#endif // QUTFCODEC_H
diff --git a/qtools/qvaluelist.doc b/qtools/qvaluelist.doc
deleted file mode 100644
index 9f34c8e..0000000
--- a/qtools/qvaluelist.doc
+++ /dev/null
@@ -1,772 +0,0 @@
-/****************************************************************************
-**
-**
-** QValueList and QValueListIterator class documentation
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-
-/*****************************************************************************
- QValueList documentation
- *****************************************************************************/
-
-/*!
- \class QValueList qvaluelist.h
- \brief The QValueList class is a value based template class that provides doubly linked lists.
-
- \ingroup qtl
- \ingroup tools
- \ingroup shared
-
- Define a template instance QValueList\<X\> to create a list of values which all
- have the class X. Please notice that QValueList does not store pointers to the
- members of the list. It holds a copy of every member. That is the reason why this
- kind of classes are called "value based" while QList and QDict are "reference based".
-
- Some classes can not be used within a QValueList, for example everything
- derived from QObject and thus all classes that implement widgets.
- Only values can be used in a QValueList. To qualify as a value, the class
- must provide
- <ul>
- <li>a copy constructor,
- <li>an assignment operator and
- <li> a default constructor, i.e. a constructor that does not take any arguments.
- </ul>
-
- Note that C++ defaults to field-by-field assignment operators and
- copy constructors if no explicit version is supplied. In many cases,
- this is sufficient.
-
- Example:
- \code
- #include <qvaluelist.h>
- #include <qstring.h>
- #include <stdio.h>
-
- class Employee
- {
- public:
- Employee(): s(0) {}
- Employee( const QString& name, int salary )
- : n(name), s(salary)
- {}
-
- QString name() const { return n; }
- int salary() const { return s; }
- void setSalary( int salary ) { s = salary; }
- private:
- QString n;
- int s;
- };
-
- void main()
- {
- typedef QValueList<Employee> EmployeeList;
- EmployeeList list; // list of Employee
-
- list.append( Employee("Bill", 50000) );
- list.append( Employee("Steve",80000) );
- list.append( Employee("Ron", 60000) );
-
- Employee joe( "Joe", 50000 );
- list.append( joe );
- joe.setSalary( 4000 );
-
- EmployeeList::Iterator it;
- for( it = list.begin(); it != list.end(); ++it )
- printf( "%s earns %d\n", (*it).name().latin1(), (*it).salary().latin1() );
- }
- \endcode
-
- Program output:
- \code
- Bill earns 50000
- Steve earns 80000
- Ron earns 60000
- Joe earns 50000
- \endcode
-
- As you can see, the latest changes to Joes salary did not affect the value
- in the list because the list created a copy of Joes entry.
-
- There are three ways of finding items in the list. The first one is by using
- the at() function. It returns an iterator. The advantages of
- getting an iterator is that you can now move forward or backward from this
- position by incrementing/decrementing the iterator. To get the amount of
- items in the list call count(). Valid indices are 0..count().
-
- The second way of accessing a list is with operator[]. That means you can address
- it like an array. The return value is a reference to the value stored in the list.
- There exist two versions of this operator. The first one is const and returns a
- const reference to the value. The second on is non const and returns a non const
- reference to the value. It is up to your compiler to choose the correct one.
-
- The third method is to use the functions begin() and end().
- With a simple for loop as shown in the example you can iterate over the complete list.
- It is save to have multiple iterators at the same time. If some member of the list is
- removed then only iterators pointing to the removed member become invalid. Inserting in
- the list does not invalidate any iterator. For convenience the function last() returns
- an iterator for the last and first() for the first element in the list.
-
- In addition you can search items in the list with the find() function. It exists in a const
- and a non const version. It starts searching from the beginning of the list, but another
- flavor of the find() function allows you to specify where searching should start.
- If you just want to know whether a certain item is at least once in the list, then you
- can use the contains() function.
-
- Since QValueList is value based there is no need to care about deleting elements in the
- list. The list holds its own copies and will free them if the corresponding member or
- the list itself is deleted. You can force the list to free all of its item with clear().
-
- QValueList is implicitly shared. That means you can just make copies of the list
- in time O(1). If multiple QValueList instances share the same data and one
- is doing a modification of the lists data then this modifying instance makes a copy
- and modifies its private copy. So it does not affect the other instances.
- From a developers point of view you can think that a QValueList and a copy of this
- list have nothing to do with each other. Developers may only notice that copying is
- very fast. People known to a CPUs MMU architecture will know this pattern as "copy on write".
-
- There exist three functions to insert items in the list. append()
- inserts an item at the end, prepend() inserts at the beginning
- and insert() inserts in front of the position given by an iterator.
-
- Items can be removed from the list in two ways. The first is to pass an iterator to
- the remove(). The other possibility is to pass a value to remove() which will
- delete all members which match this value.
-
- Lists can be sorted with the algorithms provided by the <a
- href="qtl.html">Qt Template Library</a>, for example with
- qHeapSort():
-
- Example:
- \code
- QValueList l;
- l.append( 5 );
- l.append( 8 );
- l.append( 3 );
- l.append( 4 );
- qHeapSort( l );
- \endcode
-
- \sa QValueListIterator
-*/
-
-
-/*!
- \fn QValueList::QValueList()
- Constructs an empty list.
-*/
-
-/*!
- \fn QValueList::QValueList( const QValueList<T>& l )
- Constructs a copy of \e l.
-
- This operation costs O(1) time since QValueList is implicit shared.
- The first instance applying modifications to a shared list will create
- a copy which takes in turn O(n) time. However returning a QValueList from
- a function is very fast.
-*/
-
-/*!
- \fn QValueList::~QValueList()
- Destroys the list. References to the values in the list and all iterators
- of this list become invalidated. Since QValueList is highly tuned for performance
- you won't see warnings if you use invalid iterators,
- because it is impossible for
- an iterator to check whether it is valid or not.
-*/
-
-/*!
- \fn QValueList<T>& QValueList::operator= ( const QValueList<T>& l )
- Assigns \e l to this list and returns a reference to this list.
-
- All iterators of the current list become invalidated by this operation.
- The cost of such an assignment is O(1) since QValueList is implicitly shared.
-*/
-
-/*!
- \fn QValueList<T> QValueList::operator+ ( const QValueList<T>& l ) const
- Creates a new list and fills it with the elements of this list. Then the
- elements of \e l are appended.
-
- Returns the new list.
-*/
-
-/*!
- \fn QValueList<T>& QValueList::operator+= ( const QValueList<T>& l )
- Adds \e list to this list.
-
- Returns a reference to this list.
-*/
-
-/*!
- \fn bool QValueList::operator== ( const QValueList<T>& l ) const
- Compares both lists.
-
- Returns TRUE if both list are equal.
-*/
-
-/*!
- \fn bool QValueList::operator!= ( const QValueList<T>& l ) const
- Compares both lists.
-
- Returns TRUE if both list are unequal.
-*/
-
-/*!
- \fn QValueList<T>& QValueList::operator+= ( const T& x )
- Adds the value \e x to the end of the list.
-
- Returns a reference to the list.
-*/
-
-/*!
- \fn QValueList<T>& QValueList::operator<< ( const T& x )
- Adds the value \e x to the end of the list.
-
- Returns a reference to the list.
-*/
-
-/*!
- \fn const T& QValueList::operator[] ( uint i ) const
- Returns a const reference to the item with index \e i in the list.
- It is up to you to check whether this item really exists. You can do that easily
- with the count() function. However this operator does not check whether \e i
- is in range and will deliver undefined results if it does not exist.
-*/
-
-/*!
- \fn T& QValueList::operator[] ( uint i )
- Returns a reference to the item with index \e i in the list.
- It is up to you to check whether this item really exists. You can do that easily
- with the count() function. However this operator does not check whether \e i
- is in range and will deliver undefined results if it does not exist.
- In contrast to the const operator[] you may manipulate the value returned by this
- operator.
-*/
-
-/*!
- \fn uint QValueList::count() const
- Returns the number of items in the list.
- \sa isEmpty()
-*/
-
-/*!
- \fn bool QValueList::isEmpty() const
- Returns TRUE if the list is empty, i.e. count() == 0. Returns FALSE
- otherwise.
- \sa count()
-*/
-
-/*!
- \fn Iterator QValueList::insert( Iterator it, const T& x )
- Inserts the value \e x in front of the iterator \e it.
-
- Returns an iterator pointing at the inserted item.
-
- \sa append(), prepend()
-*/
-
-/*!
- \fn Iterator QValueList::append( const T& x )
- Inserts the value \e x at the end of the list.
-
- Returns an iterator pointing at the inserted item.
-
- \sa insert(), prepend()
-*/
-
-/*!
- \fn Iterator QValueList::prepend( const T& x )
- Inserts the value \e x at the beginning of the list.
-
- Returns an iterator pointing at the inserted item.
-
- \sa insert(), append()
-*/
-
-/*!
- \fn Iterator QValueList::remove( Iterator it )
- Removes the item at position \e it in the list.
-
- Returns an iterator pointing to the item following the
- removed on or end() if the last item was deleted.
-
- \sa clear()
-*/
-
-/*!
- \fn void QValueList::remove( const T& x )
- Removes all items which have the value \e x.
-
- \sa clear()
-*/
-
-/*!
- \fn void QValueList::clear()
- Removes all items from the list.
-
- \sa remove()
-*/
-
-/*!
- \fn Iterator QValueList::find( const T& x )
- Finds the first occurrence of \e x in the list.
-
- Returns end() if no item did match.
-*/
-
-/*!
- \fn ConstIterator QValueList::find( const T& x ) const
- Finds the first occurrence of \e x in the list.
-
- Returns end() if no item did match.
-*/
-
-/*!
- \fn Iterator QValueList::find( Iterator it, const T& x )
- Finds the first occurrence of \e x in the list starting at
- the position given by \e it.
-
- Returns end() if no item did match.
-*/
-
-/*!
- \fn ConstIterator QValueList::find( ConstIterator it, const T& x ) const
- Finds the first occurrence of \e x in the list starting at
- the position given by \e it.
-
- Returns end() if no item did match.
-*/
-
-/*!
- \fn uint QValueList::contains( const T& x ) const
- Counts and returns the number of occurrences of the value \e x in the list.
-*/
-
-/*!
- \fn int QValueList::findIndex( const T& x ) const
- Returns the first index of the value \e x in the list or -1 if no such value
- can be found in the list.
-*/
-
-/*!
- \fn Iterator QValueList::at( uint i )
- Returns an iterator pointing to the item at position \e i in the list, or
- end() if the index is out of range.
-*/
-
-/*!
- \fn ConstIterator QValueList::at( uint i ) const
- Returns an iterator pointing to the item at position \e i in the list, or
- end() if the index is out of range.
-*/
-
-/*!
- \fn T& QValueList::first()
- Returns a reference to the first item in the list or the item
- referenced by end()
- if no such items exists. Please note that you may not change
- the value the end() Iterator is pointing to.
-
- \sa begin(), last()
-*/
-
-/*!
- \fn const T& QValueList::first() const
- Returns a reference to the first item in the list or the item
- referenced by end() if
- no such items exists.
-
- \sa begin(), last()
-*/
-
-/*!
- \fn Iterator QValueList::fromLast()
- Returns an iterator pointing to the last element in the list or
- end() if no such item exists.
-
- \sa last()
-*/
-
-/*!
- \fn ConstIterator QValueList::fromLast() const
- Returns an iterator pointing to the last element in the list or
- end() if no such item exists.
-
- \sa last()
-*/
-
-/*!
- \fn T& QValueList::last()
- Returns a reference to the last item in the list or the item
- referenced by end() if no
- such item exists. Please note that you may not change
- the value the end() Iterator is pointing to.
-
- \sa end(), first(), fromLast()
-*/
-
-/*!
- \fn const T& QValueList::last() const
- Returns a reference to the last item in the list or the item
- referenced by end() if no such item exists.
-
- \sa end(), first(), fromLast()
-*/
-
-/*!
- \fn Iterator QValueList::begin()
- Returns an iterator pointing to the first element in the list. This
- iterator equals end() if the list is empty;
- \sa first(), end()
-*/
-
-/*!
- \fn ConstIterator QValueList::begin() const
- Returns an iterator pointing to the first element in the list. This
- iterator equals end() if the list is empty;
- \sa first(), end()
-*/
-
-/*!
- \fn Iterator QValueList::end()
- Returns an iterator pointing behind the last element in the list. This
- iterator equals begin() if the list is empty.
-
- \sa last(), begin()
-*/
-
-/*!
- \fn ConstIterator QValueList::end() const
- Returns an iterator pointing behind the last element in the list. This
- iterator equals begin() if the list is empty.
-
- \sa last(), begin()
-*/
-
-/*!
- \fn void QValueList::detach()
- If the list does not share its data with another QValueList instance, then nothing
- happens, otherwise the function creates a new copy of this data and detaches
- from the shared one. This function is called whenever the list is modified.
- The implicit sharing mechanism is implemented this way.
-*/
-
-/*!
- \fn QDataStream& operator>>( QDataStream& s, QValueList<T>& l )
- \relates QValueList
- Reads a list from the stream. The type \e T stored in the list must implement
- the streaming operator, too.
-*/
-
-/*!
- \fn QDataStream& operator<<( QDataStream& s, const QValueList<T>& l )
- \relates QValueList
- Writes a list to the stream. The type \e T stored in the list must implement
- the streaming operator, too.
-*/
-
-/*****************************************************************************
- QValueListIterator documentation
- *****************************************************************************/
-
-/*!
- \class QValueListIterator qvaluelist.h
- \brief The QValueListIterator class provides an iterator for QValueList.
-
- \ingroup qtl
- \ingroup tools
-
- You can not create an iterator by yourself. Instead you have to
- ask a list to give you one. An iterator has only the size of a pointer.
- On 32 bit machines that means 4 bytes otherwise 8 bytes. That makes them
- very fast. In fact they resemble the semantics of pointers as good as possible
- and they are almost as fast as usual pointers.
-
- Example:
- \code
- #include <qvaluelist.h>
- #include <qstring.h>
- #include <stdio.h>
-
- class Employee
- {
- public:
- Employee(): s(0) {}
- Employee( const QString& name, int salary )
- : n(name), s(salary)
- {}
-
- QString name() const { return n; }
- int salary() const { return s; }
- void setSalary( int salary ) { s = salary; }
- private:
- QString n;
- int s;
- };
-
- void main()
- {
- typedef QValueList<Employee> EmployeeList;
- EmployeeList list; // list of Employee
-
- list.append( Employee("Bill", 50000) );
- list.append( Employee("Steve",80000) );
- list.append( Employee("Ron", 60000) );
-
- Employee joe( "Joe", 50000 );
- list.append( joe );
- joe.setSalary( 4000 );
-
- EmployeeList::Iterator it;
- for( it = list.begin(); it != list.end(); ++it )
- printf( "%s earns %d\n", (*it).name().latin1(), (*it).salary() );
- }
- \endcode
-
- Program output:
- \code
- Bill earns 50000
- Steve earns 80000
- Ron earns 60000
- Joe earns 50000
- \endcode
-
- In contrast to QList there are no built in functions in QValueList to
- traverse the list. The only way to do this is to use iterators.
- QValueList is highly optimized for performance and memory usage.
- On the other hand that means that you have to be a bit more careful
- by what you are doing. QValueList does not know about all its iterators
- and the iterators don't even know to which list they belong. That makes
- things fast and slim but a bit dangerous because it is up to you to make
- sure that iterators you are using are still valid. QListIterator will be able
- to give warnings while QValueListIterator may end up in an undefined state.
-
- For every Iterator there is a ConstIterator. When accessing a QValueList
- in a const environment or if the reference or pointer to the list is itself
- const, then you have to use the ConstIterator. Its semantics are the same,
- but it returns only const references to the item it points to.
-
- \sa QValueList, QValueListConstIterator
-*/
-
-/*!
- \fn QValueListIterator::QValueListIterator()
- Creates un uninitialized iterator.
-*/
-
-/*!
- \fn QValueListIterator::QValueListIterator( NodePtr p )
- Internal function.
-*/
-
-/*!
- \fn QValueListIterator::QValueListIterator( const QValueListIterator<T>& it )
- Constructs a copy of the iterator \e it.
-*/
-
-/*!
- \fn QValueListIterator::~QValueListIterator()
- Destroys the iterator.
-*/
-
-/* Unfortunately not with MSVC
- \fn T *QValueListIterator::operator->()
- Pointer operator. Returns a pointer to the current iterator item.
- The great advantage of this operator is that you can treat the
- iterator like a pointer.
-
- Example:
- \code
- QValueList<int>::Iterator it = list.begin();
- for( ; it != end(); ++it )
- it->show();
- \endcode
-*/
-
-/*!
- \fn T& QValueListIterator::operator*()
- Asterisk operator. Returns a reference to the current iterator item.
-*/
-
-/*!
- \fn const T& QValueListIterator::operator*() const
- Asterisk operator. Returns a reference to the current iterator item.
-*/
-
-/*!
- \fn QValueListIterator<T>& QValueListIterator::operator++()
- Prefix ++ makes the succeeding item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the end of the list. Incrementing
- the iterator as returned by end() causes undefined results.
-*/
-
-/*!
- \fn QValueListIterator<T> QValueListIterator::operator++(int)
- Postfix ++ makes the succeeding item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the end of the list. Incrementing
- the iterator as returned by end() causes undefined results.
-*/
-
-/*!
- \fn QValueListIterator<T>& QValueListIterator::operator--()
- Prefix -- makes the previous item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the beginning of the list. Decrementing
- the iterator as returned by begin() causes undefined results.
-*/
-
-/*!
- \fn QValueListIterator<T> QValueListIterator::operator--(int)
- Postfix -- makes the previous item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the beginning of the list. Decrementing
- the iterator as returned by begin() causes undefined results.
-*/
-
-/*!
- \fn bool QValueListIterator::operator==( const QValueListIterator<T>& it ) const
- Compares both iterators and returns TRUE if they point to the same item.
-*/
-
-/*!
- \fn bool QValueListIterator::operator!=( const QValueListIterator<T>& it ) const
- Compares both iterators and returns TRUE if they point to different items.
-*/
-
-/*****************************************************************************
- QValueListConstIterator documentation
- *****************************************************************************/
-
-/*!
- \class QValueListConstIterator qvaluelist.h
- \brief The QValueListConstIterator class provides an iterator for QValueList.
-
- \ingroup qtl
- \ingroup tools
-
- In contrast to QValueListIterator this class is used to iterate over a const
- list. It does not allow to modify the values of the list since this would
- break the const semantics.
-
- For more information on QValueList iterators see QValueListIterator.
-
- \sa QValueListIterator, QValueList
-*/
-
-/*!
- \fn QValueListConstIterator::QValueListConstIterator()
- Creates un uninitialized iterator.
-*/
-
-/*!
- \fn QValueListConstIterator::QValueListConstIterator( NodePtr p )
- Internal function.
-*/
-
-/*!
- \fn QValueListConstIterator::QValueListConstIterator( const QValueListConstIterator<T>& it )
- Constructs a copy of the iterator \e it.
-*/
-
-/*!
- \fn QValueListConstIterator::QValueListConstIterator( const QValueListIterator<T>& it )
- Constructs a copy of the iterator \e it.
-*/
-
-/*!
- \fn QValueListConstIterator::~QValueListConstIterator()
- Destroys the iterator.
-*/
-
-/* Unfortunately not with MSVC
- \fn const T *QValueListConstIterator::operator->()
- Pointer operator. Returns a pointer to the current iterator item.
- The great advantage of this operator is that you can treat the
- iterator like a pointer.
-
- Example:
- \code
- QValueList<int>::Iterator it = list.begin();
- for( ; it != end(); ++it )
- it->show();
- \endcode
-*/
-
-/*!
- \fn const T& QValueListConstIterator::operator*() const
- Asterisk operator. Returns a reference to the current iterator item.
-*/
-
-/*!
- \fn QValueListConstIterator<T>& QValueListConstIterator::operator++()
- Prefix ++ makes the succeeding item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the end of the list. Incrementing
- the iterator as returned by end() causes undefined results.
-*/
-
-/*!
- \fn QValueListConstIterator<T> QValueListConstIterator::operator++(int)
- Postfix ++ makes the succeeding item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the end of the list. Incrementing
- the iterator as returned by end() causes undefined results.
-*/
-
-/*!
- \fn QValueListConstIterator<T>& QValueListConstIterator::operator--()
- Prefix -- makes the previous item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the beginning of the list. Decrementing
- the iterator as returned by begin() causes undefined results.
-*/
-
-/*!
- \fn QValueListConstIterator<T> QValueListConstIterator::operator--(int)
- Postfix -- makes the previous item current and returns
- an iterator pointing to the new current item.
- The iterator can not check whether it reached the beginning of the list. Decrementing
- the iterator as returned by begin() causes undefined results.
-*/
-
-/*!
- \fn bool QValueListConstIterator::operator==( const QValueListConstIterator<T>& it ) const
- Compares both iterators and returns TRUE if they point to the same item.
-*/
-
-/*!
- \fn bool QValueListConstIterator::operator!=( const QValueListConstIterator<T>& it ) const
- Compares both iterators and returns TRUE if they point to different items.
-*/
diff --git a/qtools/qvaluelist.h b/qtools/qvaluelist.h
deleted file mode 100644
index 8885bea..0000000
--- a/qtools/qvaluelist.h
+++ /dev/null
@@ -1,455 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QValueList class
-**
-** Created : 990406
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QVALUELIST_H
-#define QVALUELIST_H
-
-#ifndef QT_H
-#include "qshared.h"
-#include "qdatastream.h"
-#endif // QT_H
-
-template <class T>
-class Q_EXPORT QValueListNode
-{
-public:
- QValueListNode( const T& t ) : data( t ) { }
- QValueListNode() { }
-#if defined(Q_TEMPLATEDLL)
- // Workaround MS bug in memory de/allocation in DLL vs. EXE
- virtual ~QValueListNode() { }
-#endif
-
- QValueListNode<T>* next;
- QValueListNode<T>* prev;
- T data;
-};
-
-template<class T>
-class Q_EXPORT QValueListIterator
-{
- public:
- /**
- * Typedefs
- */
- typedef QValueListNode<T>* NodePtr;
-
- /**
- * Variables
- */
- NodePtr node;
-
- /**
- * Functions
- */
- QValueListIterator() : node( 0 ) {}
- QValueListIterator( NodePtr p ) : node( p ) {}
- QValueListIterator( const QValueListIterator<T>& it ) : node( it.node ) {}
- QValueListIterator &operator=(const QValueListIterator &it)
- {
- node = it.node;
- return *this;
- }
-
- bool operator==( const QValueListIterator<T>& it ) const { return node == it.node; }
- bool operator!=( const QValueListIterator<T>& it ) const { return node != it.node; }
- const T& operator*() const { return node->data; }
- T& operator*() { return node->data; }
-
- // Compilers are too dumb to understand this for QValueList<int>
- //T* operator->() const { return &(node->data); }
-
- QValueListIterator<T>& operator++() {
- node = node->next;
- return *this;
- }
-
- QValueListIterator<T> operator++(int) {
- QValueListIterator<T> tmp = *this;
- node = node->next;
- return tmp;
- }
-
- QValueListIterator<T>& operator--() {
- node = node->prev;
- return *this;
- }
-
- QValueListIterator<T> operator--(int) {
- QValueListIterator<T> tmp = *this;
- node = node->prev;
- return tmp;
- }
-};
-
-template<class T>
-class Q_EXPORT QValueListConstIterator
-{
- public:
- /**
- * Typedefs
- */
- typedef QValueListNode<T>* NodePtr;
-
- /**
- * Variables
- */
- NodePtr node;
-
- /**
- * Functions
- */
- QValueListConstIterator() : node( 0 ) {}
- QValueListConstIterator( NodePtr p ) : node( p ) {}
- QValueListConstIterator( const QValueListConstIterator<T>& it ) : node( it.node ) {}
- QValueListConstIterator( const QValueListIterator<T>& it ) : node( it.node ) {}
- QValueListConstIterator &operator=(const QValueListConstIterator &it)
- {
- node = it.node;
- return *this;
- }
-
- bool operator==( const QValueListConstIterator<T>& it ) const { return node == it.node; }
- bool operator!=( const QValueListConstIterator<T>& it ) const { return node != it.node; }
- const T& operator*() const { return node->data; }
-
- // Compilers are too dumb to understand this for QValueList<int>
- //const T* operator->() const { return &(node->data); }
-
- QValueListConstIterator<T>& operator++() {
- node = node->next;
- return *this;
- }
-
- QValueListConstIterator<T> operator++(int) {
- QValueListConstIterator<T> tmp = *this;
- node = node->next;
- return tmp;
- }
-
- QValueListConstIterator<T>& operator--() {
- node = node->prev;
- return *this;
- }
-
- QValueListConstIterator<T> operator--(int) {
- QValueListConstIterator<T> tmp = *this;
- node = node->prev;
- return tmp;
- }
-};
-
-template <class T>
-class Q_EXPORT QValueListPrivate : public QShared
-{
-public:
- /**
- * Typedefs
- */
- typedef QValueListIterator<T> Iterator;
- typedef QValueListConstIterator<T> ConstIterator;
- typedef QValueListNode<T> Node;
- typedef QValueListNode<T>* NodePtr;
-
- /**
- * Functions
- */
- QValueListPrivate() { node = new Node; node->next = node->prev = node; nodes = 0; }
- QValueListPrivate( const QValueListPrivate<T>& _p ) : QShared() {
- node = new Node; node->next = node->prev = node; nodes = 0;
- Iterator b( _p.node->next );
- Iterator e( _p.node );
- Iterator i( node );
- while( b != e )
- insert( i, *b++ );
- }
-
- void derefAndDelete() // ### hack to get around hp-cc brain damage
- {
- if ( deref() )
- delete this;
- }
-
-#if defined(Q_TEMPLATEDLL)
- // Workaround MS bug in memory de/allocation in DLL vs. EXE
- virtual
-#endif
- ~QValueListPrivate() {
- NodePtr p = node->next;
- while( p != node ) {
- NodePtr x = p->next;
- delete p;
- p = x;
- }
- delete node;
- }
-
- Iterator insert( Iterator it, const T& x ) {
- NodePtr p = new Node( x );
- p->next = it.node;
- p->prev = it.node->prev;
- it.node->prev->next = p;
- it.node->prev = p;
- nodes++;
- return p;
- }
-
- Iterator remove( Iterator it ) {
- ASSERT ( it.node != node );
- NodePtr next = it.node->next;
- NodePtr prev = it.node->prev;
- prev->next = next;
- next->prev = prev;
- delete it.node;
- nodes--;
- return Iterator( next );
- }
-
- NodePtr find( NodePtr start, const T& x ) const {
- ConstIterator first( start );
- ConstIterator last( node );
- while( first != last) {
- if ( *first == x )
- return first.node;
- ++first;
- }
- return last.node;
- }
-
- int findIndex( NodePtr start, const T& x ) const {
- ConstIterator first( start );
- ConstIterator last( node );
- int pos = 0;
- while( first != last) {
- if ( *first == x )
- return pos;
- ++first;
- ++pos;
- }
- return -1;
- }
-
- uint contains( const T& x ) const {
- uint result = 0;
- Iterator first = Iterator( node->next );
- Iterator last = Iterator( node );
- while( first != last) {
- if ( *first == x )
- ++result;
- ++first;
- }
- return result;
- }
-
- void remove( const T& x ) {
- Iterator first = Iterator( node->next );
- Iterator last = Iterator( node );
- while( first != last) {
- if ( *first == x )
- first = remove( first );
- else
- ++first;
- }
- }
-
- NodePtr at( uint i ) const {
- ASSERT( i <= nodes );
- NodePtr p = node->next;
- for( uint x = 0; x < i; ++x )
- p = p->next;
- return p;
- }
-
- void clear() {
- nodes = 0;
- NodePtr p = node->next;
- while( p != node ) {
- NodePtr next = p->next;
- delete p;
- p = next;
- }
- node->next = node->prev = node;
- }
-
- NodePtr node;
- uint nodes;
-};
-
-template <class T>
-class Q_EXPORT QValueList
-{
-public:
- /**
- * Typedefs
- */
- typedef QValueListIterator<T> Iterator;
- typedef QValueListConstIterator<T> ConstIterator;
- typedef T ValueType;
-
- /**
- * API
- */
- QValueList() { sh = new QValueListPrivate<T>; }
- QValueList( const QValueList<T>& l ) { sh = l.sh; sh->ref(); }
- ~QValueList() { sh->derefAndDelete(); }
-
- QValueList<T>& operator= ( const QValueList<T>& l )
- {
- l.sh->ref();
- sh->derefAndDelete();
- sh = l.sh;
- return *this;
- }
-
- QValueList<T> operator+ ( const QValueList<T>& l ) const
- {
- QValueList<T> l2( *this );
- for( ConstIterator it = l.begin(); it != l.end(); ++it )
- l2.append( *it );
- return l2;
- }
-
- QValueList<T>& operator+= ( const QValueList<T>& l )
- {
- for( ConstIterator it = l.begin(); it != l.end(); ++it )
- append( *it );
- return *this;
- }
-
- bool operator== ( const QValueList<T>& l ) const
- {
- if ( count() != l.count() )
- return FALSE;
- ConstIterator it2 = begin();
- ConstIterator it = l.begin();
- for( ; it != l.end(); ++it, ++it2 )
- if ( !( *it == *it2 ) )
- return FALSE;
- return TRUE;
- }
-
- bool operator!= ( const QValueList<T>& l ) const { return !( *this == l ); }
-
- Iterator begin() { detach(); return Iterator( sh->node->next ); }
- ConstIterator begin() const { return ConstIterator( sh->node->next ); }
- Iterator end() { detach(); return Iterator( sh->node ); }
- ConstIterator end() const { return ConstIterator( sh->node ); }
- Iterator fromLast() { detach(); return Iterator( sh->node->prev ); }
- ConstIterator fromLast() const { return ConstIterator( sh->node->prev ); }
-
- bool isEmpty() const { return ( sh->nodes == 0 ); }
-
- Iterator insert( Iterator it, const T& x ) { detach(); return sh->insert( it, x ); }
-
- Iterator append( const T& x ) { detach(); return sh->insert( end(), x ); }
- Iterator prepend( const T& x ) { detach(); return sh->insert( begin(), x ); }
-
- Iterator remove( Iterator it ) { detach(); return sh->remove( it ); }
- void remove( const T& x ) { detach(); sh->remove( x ); }
-
- T& first() { detach(); return sh->node->next->data; }
- const T& first() const { return sh->node->next->data; }
- T& last() { detach(); return sh->node->prev->data; }
- const T& last() const { return sh->node->prev->data; }
-
- T& operator[] ( uint i ) { detach(); return sh->at(i)->data; }
- const T& operator[] ( uint i ) const { return sh->at(i)->data; }
- Iterator at( uint i ) { detach(); return Iterator( sh->at(i) ); }
- ConstIterator at( uint i ) const { return ConstIterator( sh->at(i) ); }
- Iterator find ( const T& x ) { detach(); return Iterator( sh->find( sh->node->next, x) ); }
- ConstIterator find ( const T& x ) const { return ConstIterator( sh->find( sh->node->next, x) ); }
- Iterator find ( Iterator it, const T& x ) { detach(); return Iterator( sh->find( it.node, x ) ); }
- ConstIterator find ( ConstIterator it, const T& x ) const { return ConstIterator( sh->find( it.node, x ) ); }
- int findIndex( const T& x ) const { return sh->findIndex( sh->node->next, x) ; }
- uint contains( const T& x ) const { return sh->contains( x ); }
-
- uint count() const { return sh->nodes; }
-
- void clear() { if ( sh->count == 1 ) sh->clear(); else { sh->deref(); sh = new QValueListPrivate<T>; } }
-
-
- QValueList<T>& operator+= ( const T& x )
- {
- append( x );
- return *this;
- }
- QValueList<T>& operator<< ( const T& x )
- {
- append( x );
- return *this;
- }
-
-
-protected:
- /**
- * Helpers
- */
- void detach() { if ( sh->count > 1 ) { sh->deref(); sh = new QValueListPrivate<T>( *sh ); } }
-
- /**
- * Variables
- */
- QValueListPrivate<T>* sh;
-};
-
-#ifndef QT_NO_DATASTREAM
-template<class T>
-inline QDataStream& operator>>( QDataStream& s, QValueList<T>& l )
-{
- l.clear();
- Q_UINT32 c;
- s >> c;
- for( Q_UINT32 i = 0; i < c; ++i )
- {
- T t;
- s >> t;
- l.append( t );
- }
- return s;
-}
-
-template<class T>
-inline QDataStream& operator<<( QDataStream& s, const QValueList<T>& l )
-{
- s << (Q_UINT32)l.count();
- QValueListConstIterator<T> it = l.begin();
- for( ; it != l.end(); ++it )
- s << *it;
- return s;
-}
-#endif // QT_NO_DATASTREAM
-#endif // QVALUELIST_H
diff --git a/qtools/qvaluestack.h b/qtools/qvaluestack.h
deleted file mode 100644
index fe4462a..0000000
--- a/qtools/qvaluestack.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QValueStack class
-**
-** Created : 990925
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the tools module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
-** licenses may use this file in accordance with the Qt Commercial License
-** Agreement provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QVALUESTACK_H
-#define QVALUESTACK_H
-
-#ifndef QT_H
-#include "qvaluelist.h"
-#endif // QT_H
-
-
-template<class T>
-class Q_EXPORT QValueStack : public QValueList<T>
-{
-public:
- QValueStack() {}
- ~QValueStack() {}
- void push( const T& d ) { QValueList<T>::append(d); }
- T pop()
- {
- T elem( this->last() );
- if ( !this->isEmpty() )
- this->remove( this->fromLast() );
- return elem;
- }
- T& top() { return this->last(); }
- const T& top() const { return this->last(); }
-};
-
-#endif
diff --git a/qtools/qxml.cpp b/qtools/qxml.cpp
deleted file mode 100644
index b7a68fc..0000000
--- a/qtools/qxml.cpp
+++ /dev/null
@@ -1,6061 +0,0 @@
-/****************************************************************************
-**
-**
-** Implementation of QXmlSimpleReader and related classes.
-**
-** Created : 000518
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the XML module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition licenses may use this
-** file in accordance with the Qt Commercial License Agreement provided
-** with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#define QT_XML_CPP
-#include "qxml.h"
-#include "qtextcodec.h"
-#include "qbuffer.h"
-
-#ifndef QT_NO_XML
-// NOT REVISED
-
-// Error strings for the XML reader
-#define XMLERR_OK "no error occurred"
-#define XMLERR_TAGMISMATCH "tag mismatch"
-#define XMLERR_UNEXPECTEDEOF "unexpected end of file"
-#define XMLERR_FINISHEDPARSINGWHILENOTEOF "parsing is finished but end of file is not reached"
-#define XMLERR_LETTEREXPECTED "letter is expected"
-#define XMLERR_ERRORPARSINGELEMENT "error while parsing element"
-#define XMLERR_ERRORPARSINGPROLOG "error while parsing prolog"
-#define XMLERR_ERRORPARSINGMAINELEMENT "error while parsing main element"
-#define XMLERR_ERRORPARSINGCONTENT "error while parsing content"
-#define XMLERR_ERRORPARSINGNAME "error while parsing name"
-#define XMLERR_ERRORPARSINGNMTOKEN "error while parsing Nmtoken"
-#define XMLERR_ERRORPARSINGATTRIBUTE "error while parsing attribute"
-#define XMLERR_ERRORPARSINGMISC "error while parsing misc"
-#define XMLERR_ERRORPARSINGCHOICE "error while parsing choice or seq"
-#define XMLERR_ERRORBYCONSUMER "error triggered by consumer"
-#define XMLERR_UNEXPECTEDCHARACTER "unexpected character"
-#define XMLERR_EQUALSIGNEXPECTED "expected '=' but not found"
-#define XMLERR_QUOTATIONEXPECTED "expected \" or ' but not found"
-#define XMLERR_ERRORPARSINGREFERENCE "error while parsing reference"
-#define XMLERR_ERRORPARSINGPI "error while parsing processing instruction"
-#define XMLERR_ERRORPARSINGATTLISTDECL "error while parsing attribute list declaration"
-#define XMLERR_ERRORPARSINGATTTYPE "error while parsing attribute type declaration"
-#define XMLERR_ERRORPARSINGATTVALUE "error while parsing attribute value declaration"
-#define XMLERR_ERRORPARSINGELEMENTDECL "error while parsing element declaration"
-#define XMLERR_ERRORPARSINGENTITYDECL "error while parsing entity declaration"
-#define XMLERR_ERRORPARSINGNOTATIONDECL "error while parsing notation declaration"
-#define XMLERR_ERRORPARSINGEXTERNALID "error while parsing external id"
-#define XMLERR_ERRORPARSINGCOMMENT "error while parsing comment"
-#define XMLERR_ERRORPARSINGENTITYVALUE "error while parsing entity value declaration"
-#define XMLERR_CDSECTHEADEREXPECTED "expected the header for a cdata section"
-#define XMLERR_MORETHANONEDOCTYPE "more than one document type definition"
-#define XMLERR_ERRORPARSINGDOCTYPE "error while parsing document type definition"
-#define XMLERR_INVALIDNAMEFORPI "invalid name for processing instruction"
-#define XMLERR_VERSIONEXPECTED "version expected while reading the XML declaration"
-#define XMLERR_EDECLORSDDECLEXPECTED "EDecl or SDDecl expected while reading the XML declaration"
-#define XMLERR_SDDECLEXPECTED "SDDecl expected while reading the XML declaration"
-#define XMLERR_WRONGVALUEFORSDECL "wrong value for standalone declaration"
-#define XMLERR_UNPARSEDENTITYREFERENCE "unparsed entity reference in wrong context"
-#define XMLERR_INTERNALGENERALENTITYINDTD "internal general entity reference not allowed in DTD"
-#define XMLERR_EXTERNALGENERALENTITYINDTD "external parsed general entity reference not allowed in DTD"
-#define XMLERR_EXTERNALGENERALENTITYINAV "external parsed general entity reference not allowed in attribute value"
-
-
-// the constants for the lookup table
-static const signed char cltWS = 0; // white space
-static const signed char cltPer = 1; // %
-static const signed char cltAmp = 2; // &
-static const signed char cltGt = 3; // >
-static const signed char cltLt = 4; // <
-static const signed char cltSlash = 5; // /
-static const signed char cltQm = 6; // ?
-static const signed char cltEm = 7; // !
-static const signed char cltDash = 8; // -
-static const signed char cltCB = 9; // ]
-static const signed char cltOB = 10; // [
-static const signed char cltEq = 11; // =
-static const signed char cltDq = 12; // "
-static const signed char cltSq = 13; // '
-static const signed char cltUnknown = 14;
-
-// character lookup table
-static const signed char charLookupTable[256]={
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x00 - 0x07
- cltUnknown, // 0x08
- cltWS, // 0x09 \t
- cltWS, // 0x0A \n
- cltUnknown, // 0x0B
- cltUnknown, // 0x0C
- cltWS, // 0x0D \r
- cltUnknown, // 0x0E
- cltUnknown, // 0x0F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x17 - 0x16
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x18 - 0x1F
- cltWS, // 0x20 Space
- cltEm, // 0x21 !
- cltDq, // 0x22 "
- cltUnknown, // 0x23
- cltUnknown, // 0x24
- cltPer, // 0x25 %
- cltAmp, // 0x26 &
- cltSq, // 0x27 '
- cltUnknown, // 0x28
- cltUnknown, // 0x29
- cltUnknown, // 0x2A
- cltUnknown, // 0x2B
- cltUnknown, // 0x2C
- cltDash, // 0x2D -
- cltUnknown, // 0x2E
- cltSlash, // 0x2F /
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x30 - 0x37
- cltUnknown, // 0x38
- cltUnknown, // 0x39
- cltUnknown, // 0x3A
- cltUnknown, // 0x3B
- cltLt, // 0x3C <
- cltEq, // 0x3D =
- cltGt, // 0x3E >
- cltQm, // 0x3F ?
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x40 - 0x47
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x48 - 0x4F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x50 - 0x57
- cltUnknown, // 0x58
- cltUnknown, // 0x59
- cltUnknown, // 0x5A
- cltOB, // 0x5B [
- cltUnknown, // 0x5C
- cltCB, // 0x5D ]
- cltUnknown, // 0x5E
- cltUnknown, // 0x5F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x60 - 0x67
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x68 - 0x6F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x70 - 0x77
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x78 - 0x7F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x80 - 0x87
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x88 - 0x8F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x90 - 0x97
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0x98 - 0x9F
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xA0 - 0xA7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xA8 - 0xAF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xB0 - 0xB7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xB8 - 0xBF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xC0 - 0xC7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xC8 - 0xCF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xD0 - 0xD7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xD8 - 0xDF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xE0 - 0xE7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xE8 - 0xEF
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, // 0xF0 - 0xF7
- cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown, cltUnknown // 0xF8 - 0xFF
-};
-
-
-class QXmlNamespaceSupportPrivate
-{
-};
-class QXmlAttributesPrivate
-{
-};
-class QXmlInputSourcePrivate
-{
-};
-class QXmlParseExceptionPrivate
-{
-};
-class QXmlLocatorPrivate
-{
-};
-class QXmlDefaultHandlerPrivate
-{
-};
-
-#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
-bool operator==( const QMap<QString, QString>, const QMap<QString, QString> )
-{
- return FALSE;
-}
-#endif
-
-/*!
- \class QXmlParseException qxml.h
- \brief The QXmlParseException class is used to report errors with the
- QXmlErrorHandler interface.
-
- \module XML
-
- \sa QXmlErrorHandler
-*/
-/*!
- \fn QXmlParseException::QXmlParseException( const QString& name, int c, int l, const QString& p, const QString& s )
-
- Constructs a parse exception with the error string \a name in the column
- \a c and line \a l for the public identifier \a p and the system identifier
- \a s.
-*/
-/*!
- Returns the error message.
-*/
-QString QXmlParseException::message() const
-{
- return msg;
-}
-/*!
- Returns the column number the error occurred.
-*/
-int QXmlParseException::columnNumber() const
-{
- return column;
-}
-/*!
- Returns the line number the error occurred.
-*/
-int QXmlParseException::lineNumber() const
-{
- return line;
-}
-/*!
- Returns the public identifier the error occurred.
-*/
-QString QXmlParseException::publicId() const
-{
- return pub;
-}
-/*!
- Returns the system identifier the error occurred.
-*/
-QString QXmlParseException::systemId() const
-{
- return sys;
-}
-
-
-/*!
- \class QXmlLocator qxml.h
- \brief The QXmlLocator class provides the XML handler classes with
- information about the actual parsing position.
-
- \module XML
-
- The reader reports a QXmlLocator to the content handler before he starts to
- parse the document. This is done with the
- QXmlContentHandler::setDocumentLocator() function. The handler classes can
- now use this locator to get the actual position the reader is at.
-*/
-/*!
- \fn QXmlLocator::QXmlLocator( QXmlSimpleReader* parent )
-
- Constructor.
-*/
-/*!
- \fn QXmlLocator::~QXmlLocator()
-
- Destructor.
-*/
-/*!
- Gets the column number (starting with 1) or -1 if there is no column number
- available.
-*/
-int QXmlLocator::columnNumber()
-{
- return ( reader->columnNr == -1 ? -1 : reader->columnNr + 1 );
-}
-/*!
- Gets the line number (starting with 1) or -1 if there is no line number
- available.
-*/
-int QXmlLocator::lineNumber()
-{
- return ( reader->lineNr == -1 ? -1 : reader->lineNr + 1 );
-}
-
-
-/*********************************************
- *
- * QXmlNamespaceSupport
- *
- *********************************************/
-
-/*!
- \class QXmlNamespaceSupport qxml.h
- \brief The QXmlNamespaceSupport class is a helper class for XML readers which
- want to include namespace support.
-
- \module XML
-
- It provides some functions that makes it easy to handle namespaces. Its main
- use is for subclasses of QXmlReader which want to provide namespace
- support.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-
-/*!
- Constructs a QXmlNamespaceSupport.
-*/
-QXmlNamespaceSupport::QXmlNamespaceSupport()
-{
- reset();
-}
-
-/*!
- Destructs a QXmlNamespaceSupport.
-*/
-QXmlNamespaceSupport::~QXmlNamespaceSupport()
-{
-}
-
-/*!
- This function declares a prefix in the current namespace context; the prefix
- will remain in force until this context is popped, unless it is shadowed in a
- descendant context.
-
- Note that there is an asymmetry in this library: while prefix() will not
- return the default "" prefix, even if you have declared one; to check for a
- default prefix, you have to look it up explicitly using uri(). This
- asymmetry exists to make it easier to look up prefixes for attribute names,
- where the default prefix is not allowed.
-*/
-void QXmlNamespaceSupport::setPrefix( const QString& pre, const QString& uri )
-{
- if( pre.isNull() ) {
- ns.insert( "", uri );
- } else {
- ns.insert( pre, uri );
- }
-}
-
-/*!
- Returns one of the prefixes mapped to a namespace URI.
-
- If more than one prefix is currently mapped to the same URI, this function
- will make an arbitrary selection; if you want all of the prefixes, use the
- prefixes() function instead.
-
- Note: this will never return the empty (default) prefix; to check for a
- default prefix, use the uri() function with an argument of "".
-*/
-QString QXmlNamespaceSupport::prefix( const QString& uri ) const
-{
- QMap<QString, QString>::ConstIterator itc, it = ns.begin();
- while ( (itc=it) != ns.end() ) {
- ++it;
- if ( itc.data() == uri && !itc.key().isEmpty() )
- return itc.key();
- }
- return "";
-}
-
-/*!
- Looks up a prefix in the current context and returns the currently-mapped
- namespace URI. Use the empty string ("") for the default namespace.
-*/
-QString QXmlNamespaceSupport::uri( const QString& prefix ) const
-{
- const QString& returi = ns[ prefix ];
- return returi;
-}
-
-/*!
- Splits the name at the ':' and returns the prefix and the local name.
-*/
-void QXmlNamespaceSupport::splitName( const QString& qname,
- QString& prefix, QString& localname ) const
-{
- uint pos;
- // search the ':'
- for( pos=0; pos<qname.length(); pos++ ) {
- if ( qname.at(pos) == ':' )
- break;
- }
- // and split
- prefix = qname.left( pos );
- localname = qname.mid( pos+1 );
-}
-
-/*!
- Processes a raw XML 1.0 name in the current context by removing the prefix
- and looking it up among the prefixes currently declared.
-
- First parameter is the raw XML 1.0 name to be processed. The second parameter
- is a flag whether the name is the name of an attribute (TRUE) or not (FALSE).
-
- The return values will be stored in the last two parameters as follows:
- <ul>
- <li> The namespace URI, or an empty string if none is in use.
- <li> The local name (without prefix).
- </ul>
-
- If the raw name has a prefix that has not been declared, then the return
- value will be empty.
-
- Note that attribute names are processed differently than element names: an
- unprefixed element name will received the default namespace (if any), while
- an unprefixed element name will not
-*/
-void QXmlNamespaceSupport::processName( const QString& qname,
- bool isAttribute,
- QString& nsuri, QString& localname ) const
-{
- uint pos;
- // search the ':'
- for( pos=0; pos<qname.length(); pos++ ) {
- if ( qname.at(pos) == ':' )
- break;
- }
- if ( pos < qname.length() ) {
- // there was a ':'
- nsuri = uri( qname.left( pos ) );
- localname = qname.mid( pos+1 );
- } else {
- // there was no ':'
- if ( isAttribute ) {
- nsuri = ""; // attributes don't take default namespace
- } else {
- nsuri = uri( "" ); // get default namespace
- }
- localname = qname;
- }
-}
-
-/*!
- Returns an enumeration of all prefixes currently declared.
-
- Note: if there is a default prefix, it will not be returned in this
- enumeration; check for the default prefix using uri() with an argument
- of "".
-*/
-QStringList QXmlNamespaceSupport::prefixes() const
-{
- QStringList list;
-
- QMap<QString, QString>::ConstIterator itc, it = ns.begin();
- while ( (itc=it) != ns.end() ) {
- ++it;
- if ( !itc.key().isEmpty() )
- list.append( itc.key() );
- }
- return list;
-}
-
-/*!
- Returns a list of all prefixes currently declared for a URI.
-
- The xml: prefix will be included. If you want only one prefix that's
- mapped to the namespace URI, and you don't care which one you get, use the
- prefix() function instead.
-
- Note: the empty (default) prefix is never included in this enumeration; to
- check for the presence of a default namespace, use uri() with an
- argument of "".
-*/
-QStringList QXmlNamespaceSupport::prefixes( const QString& uri ) const
-{
- QStringList list;
-
- QMap<QString, QString>::ConstIterator itc, it = ns.begin();
- while ( (itc=it) != ns.end() ) {
- ++it;
- if ( itc.data() == uri && !itc.key().isEmpty() )
- list.append( itc.key() );
- }
- return list;
-}
-
-/*!
- Starts a new namespace context.
-
- Normally, you should push a new context at the beginning of each XML element:
- the new context will automatically inherit the declarations of its parent
- context, but it will also keep track of which declarations were made within
- this context.
-*/
-void QXmlNamespaceSupport::pushContext()
-{
- nsStack.push( ns );
-}
-
-/*!
- Reverts to the previous namespace context.
-
- Normally, you should pop the context at the end of each XML element. After
- popping the context, all namespace prefix mappings that were previously in
- force are restored.
-*/
-void QXmlNamespaceSupport::popContext()
-{
- if( !nsStack.isEmpty() )
- ns = nsStack.pop();
-}
-
-/*!
- Resets this namespace support object for reuse.
-*/
-void QXmlNamespaceSupport::reset()
-{
- nsStack.clear();
- ns.clear();
- ns.insert( "xml", "http://www.w3.org/XML/1998/namespace" ); // the XML namespace
-}
-
-
-
-/*********************************************
- *
- * QXmlAttributes
- *
- *********************************************/
-
-/*!
- \class QXmlAttributes qxml.h
- \brief The QXmlAttributes class provides XML attributes.
-
- \module XML
-
- If attributes are reported by QXmlContentHandler::startElement() this
- class is used to pass the attribute values. It provides you with different
- functions to access the attribute names and values.
-*/
-/*!
- \fn QXmlAttributes::QXmlAttributes()
-
- Constructs an empty attribute list.
-*/
-/*!
- \fn QXmlAttributes::~QXmlAttributes()
-
- Destructs attributes.
-*/
-
-/*!
- Look up the index of an attribute by an XML 1.0 qualified name.
-
- Returns the index of the attribute (starting with 0) or -1 if it wasn't
- found.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-int QXmlAttributes::index( const QString& qName ) const
-{
- return qnameList.findIndex( qName );
-}
-
-/*!
- Looks up the index of an attribute by a namespace name.
-
- \a uri specifies the namespace URI, or the empty string if the name has no
- namespace URI. \a localPart specifies the attribute's local name.
-
- Returns the index of the attribute (starting with 0) or -1 if it wasn't
- found.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-int QXmlAttributes::index( const QString& uri, const QString& localPart ) const
-{
- uint count = uriList.count();
- for ( uint i=0; i<count; i++ ) {
- if ( uriList[i] == uri && localnameList[i] == localPart )
- return i;
- }
- return -1;
-}
-
-/*!
- Returns the number of attributes in the list.
-*/
-int QXmlAttributes::length() const
-{
- return valueList.count();
-}
-
-/*!
- Looks up an attribute's local name by index (starting with 0).
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-QString QXmlAttributes::localName( int index ) const
-{
- return localnameList[index];
-}
-
-/*!
- Looks up an attribute's XML 1.0 qualified name by index (starting with 0).
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-QString QXmlAttributes::qName( int index ) const
-{
- return qnameList[index];
-}
-
-/*!
- Looks up an attribute's namespace URI by index (starting with 0).
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-QString QXmlAttributes::uri( int index ) const
-{
- return uriList[index];
-}
-
-/*!
- Looks up an attribute's type by index (starting with 0).
-
- At the moment only 'CDATA' is returned.
-*/
-QString QXmlAttributes::type( int ) const
-{
- return "CDATA";
-}
-
-/*!
- Looks up an attribute's type by XML 1.0 qualified name.
-
- At the moment only 'CDATA' is returned.
-*/
-QString QXmlAttributes::type( const QString& ) const
-{
- return "CDATA";
-}
-
-/*!
- Looks up an attribute's type by namespace name.
-
- The first parameter specifies the namespace URI, or the empty string if
- the name has no namespace URI. The second parameter specifies the
- attribute's local name.
-
- At the moment only 'CDATA' is returned.
-*/
-QString QXmlAttributes::type( const QString&, const QString& ) const
-{
- return "CDATA";
-}
-
-/*!
- Looks up an attribute's value by index (starting with 0).
-*/
-QString QXmlAttributes::value( int index ) const
-{
- return valueList[index];
-}
-
-/*!
- Looks up an attribute's value by XML 1.0 qualified name.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-QString QXmlAttributes::value( const QString& qName ) const
-{
- int i = index( qName );
- if ( i == -1 )
- return QString::null;
- return valueList[ i ];
-}
-
-/*!
- Looks up an attribute's value by namespace name.
-
- \a uri specifies the namespace URI, or the empty string if the name has no
- namespace URI. \a localName specifies the attribute's local name.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-*/
-QString QXmlAttributes::value( const QString& uri, const QString& localName ) const
-{
- int i = index( uri, localName );
- if ( i == -1 )
- return QString::null;
- return valueList[ i ];
-}
-
-
-/*********************************************
- *
- * QXmlInputSource
- *
- *********************************************/
-
-/*!
- \class QXmlInputSource qxml.h
- \brief The QXmlInputSource class is the source where XML data is read from.
-
- \module XML
-
- All subclasses of QXmlReader read the input from this class.
-*/
-
-/*!
- Returns all the data this input source contains.
-*/
-const QString& QXmlInputSource::data() const
-{
- return input;
-}
-
-/*!
- Constructs a input source which contains no data.
-*/
-QXmlInputSource::QXmlInputSource( )
-{
- input = "";
-}
-
-/*!
- Constructs a input source and get the data from the text stream.
-*/
-QXmlInputSource::QXmlInputSource( QTextStream& stream )
-{
- QByteArray rawData;
- if ( stream.device()->isDirectAccess() ) {
- rawData = stream.device()->readAll();
- } else {
- int nread = 0;
- const int bufsize = 512;
- while ( !stream.device()->atEnd() ) {
- rawData.resize( nread + bufsize );
- nread += stream.device()->readBlock( rawData.data()+nread, bufsize );
- }
- rawData.resize( nread );
- }
- readInput( rawData );
-}
-
-/*!
- Constructs a input source and get the data from a file. If the file cannot be
- read the input source is empty.
-*/
-QXmlInputSource::QXmlInputSource( QFile& file )
-{
- if ( !file.open(IO_ReadOnly) ) {
- input = "";
- return;
- }
- QByteArray rawData = file.readAll();
- readInput( rawData );
- file.close();
-}
-
-/*!
- Destructor.
-*/
-QXmlInputSource::~QXmlInputSource()
-{
-}
-
-/*!
- Sets the data of the input source to \a dat.
-*/
-void QXmlInputSource::setData( const QString& dat )
-{
- input = dat;
-}
-
-/*!
- Read the XML file from the byte array; try to recognize the encoding.
-*/
-// ### The input source should not do the encoding detection!
-void QXmlInputSource::readInput( QByteArray& rawData )
-{
- QBuffer buf( rawData );
- buf.open( IO_ReadOnly );
- QTextStream *stream = new QTextStream( &buf );
- QChar tmp;
- // assume UTF8 or UTF16 at first
- stream->setEncoding( QTextStream::UnicodeUTF8 );
- input = "";
- // read the first 5 characters
- for ( int i=0; i<5; i++ ) {
- *stream >> tmp;
- input += tmp;
- }
- // starts the document with an XML declaration?
- if ( input == "<?xml" ) {
- // read the whole XML declaration
- do {
- *stream >> tmp;
- input += tmp;
- } while( tmp != '>' );
- // and try to find out if there is an encoding
- int pos = input.find( "encoding" );
- if ( pos != -1 ) {
- QString encoding;
- do {
- pos++;
- if ( pos > (int)input.length() )
- goto finished;
- } while( input[pos] != '"' && input[pos] != '\'' );
- pos++;
- while( input[pos] != '"' && input[pos] != '\'' ) {
- encoding += input[pos];
- pos++;
- if ( pos > (int)input.length() )
- goto finished;
- }
- delete stream;
- stream = new QTextStream( &buf );
- stream->setCodec( QTextCodec::codecForName( encoding.utf8() ) );
- buf.reset();
- input = "";
- }
- }
-finished:
- input += stream->read();
- delete stream;
- buf.close();
-}
-
-
-/*********************************************
- *
- * QXmlDefaultHandler
- *
- *********************************************/
-
-/*!
- \class QXmlContentHandler qxml.h
- \brief The QXmlContentHandler class provides an interface to report logical
- content of XML data.
-
- \module XML
-
- If the application needs to be informed of basic parsing events, it
- implements this interface and sets it with QXmlReader::setContentHandler().
- The reader reports basic document-related events like the start and end of
- elements and character data through this interface.
-
- The order of events in this interface is very important, and mirrors the
- order of information in the document itself. For example, all of an element's
- content (character data, processing instructions, and/or subelements) will
- appear, in order, between the startElement() event and the corresponding
- endElement() event.
-
- The class QXmlDefaultHandler gives a default implementation for this
- interface; subclassing from this class is very convenient if you want only be
- informed of some parsing events.
-
- See also the <a href="xml.html#introSAX2">Introduction to SAX2</a>.
-
- \sa QXmlDTDHandler QXmlDeclHandler QXmlEntityResolver QXmlErrorHandler
- QXmlLexicalHandler
-*/
-/*!
- \fn void QXmlContentHandler::setDocumentLocator( QXmlLocator* locator )
-
- The reader calls this function before he starts parsing the document. The
- argument \a locator is a pointer to a QXmlLocator which allows the
- application to get the actual position of the parsing in the document.
-
- Do not destroy the \a locator; it is destroyed when the reader is destroyed
- (do not use the \a locator after the reader got destroyed).
-*/
-/*!
- \fn bool QXmlContentHandler::startDocument()
-
- The reader calls this function when he starts parsing the document.
- The reader will call this function only once before any other functions in
- this class or in the QXmlDTDHandler class are called (except
- QXmlContentHandler::setDocumentLocator()).
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- \sa endDocument()
-*/
-/*!
- \fn bool QXmlContentHandler::endDocument()
-
- The reader calls this function after he has finished the parsing. It
- is only called once. It is the last function of all handler functions that is
- called. It is called after the reader has read all input or has abandoned
- parsing because of a fatal error.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- \sa startDocument()
-*/
-/*!
- \fn bool QXmlContentHandler::startPrefixMapping( const QString& prefix, const QString& uri )
-
- The reader calls this function to signal the begin of a prefix-URI
- namespace mapping scope. This information is not necessary for normal
- namespace processing since the reader automatically replaces prefixes for
- element and attribute names.
-
- Note that startPrefixMapping and endPrefixMapping calls are not guaranteed to
- be properly nested relative to each-other: all startPrefixMapping events will
- occur before the corresponding startElement event, and all endPrefixMapping
- events will occur after the corresponding endElement event, but their order
- is not otherwise guaranteed.
-
- The argument \a prefix is the namespace prefix being declared and the
- argument \a uri is the namespace URI the prefix is mapped to.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-
- \sa endPrefixMapping()
-*/
-/*!
- \fn bool QXmlContentHandler::endPrefixMapping( const QString& prefix )
-
- The reader calls this function to signal the end of a prefix mapping.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-
- \sa startPrefixMapping()
-*/
-/*!
- \fn bool QXmlContentHandler::startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts )
-
- The reader calls this function when he has parsed a start element tag.
-
- There will be a corresponding endElement() call when the corresponding end
- element tag was read. The startElement() and endElement() calls are always
- nested correctly. Empty element tags (e.g. &lt;a/&gt;) are reported by
- startElement() directly followed by a call to endElement().
-
- The attribute list provided will contain only attributes with explicit
- values. The attribute list will contain attributes used for namespace
- declaration (i.e. attributes starting with xmlns) only if the
- namespace-prefix property of the reader is TRUE.
-
- The argument \a uri is the namespace URI, or the empty string if the element
- has no namespace URI or if namespace processing is not being performed, \a
- localName is the local name (without prefix), or the empty string if
- namespace processing is not being performed, \a qName is the qualified name
- (with prefix), or the empty string if qualified names are not available and
- \a atts are the attributes attached to the element. If there are no
- attributes, \a atts is an empty attributes object
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-
- \sa endElement()
-*/
-/*!
- \fn bool QXmlContentHandler::endElement( const QString& namespaceURI, const QString& localName, const QString& qName )
-
- The reader calls this function when he has parsed an end element tag.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- See also the <a href="xml-sax.html#namespaces">namespace description</a>.
-
- \sa startElement()
-*/
-/*!
- \fn bool QXmlContentHandler::characters( const QString& ch )
-
- The reader calls this function when he has parsed a chunk of character
- data (either normal character data or character data inside a CDATA section;
- if you have to distinguish between those two types you have to use
- QXmlLexicalHandler::startCDATA() and QXmlLexicalHandler::endCDATA() in
- addition).
-
- Some readers will report whitespace in element content using the
- ignorableWhitespace() function rather than this one (QXmlSimpleReader will
- do it not though).
-
- A reader is allowed to report the character data of an element in more than
- one chunk; e.g. a reader might want to report "a &amp;lt; b" in three
- characters() events ("a ", "<" and " b").
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlContentHandler::ignorableWhitespace( const QString& ch )
-
- Some readers may use this function to report each chunk of whitespace in
- element content (QXmlSimpleReader does not though).
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlContentHandler::processingInstruction( const QString& target, const QString& data )
-
- The reader calls this function when he has parsed a processing
- instruction.
-
- \a target is the target name of the processing instruction and \a data is the
- data of the processing instruction.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlContentHandler::skippedEntity( const QString& name )
-
- Some readers may skip entities if they have not seen the declarations (e.g.
- because they are in an external DTD). If they do so they will report it by
- calling this function.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn QString QXmlContentHandler::errorString()
-
- The reader calls this function to get an error string if any of the handler
- functions returns FALSE to him.
-*/
-
-
-/*!
- \class QXmlErrorHandler qxml.h
- \brief The QXmlErrorHandler class provides an interface to report errors in
- XML data.
-
- \module XML
-
- If the application is interested in reporting errors to the user or any other
- customized error handling, you should subclass this class.
-
- You can set the error handler with QXmlReader::setErrorHandler().
-
- See also the <a href="xml.html#introSAX2">Introduction to SAX2</a>.
-
- \sa QXmlDTDHandler QXmlDeclHandler QXmlContentHandler QXmlEntityResolver
- QXmlLexicalHandler
-*/
-/*!
- \fn bool QXmlErrorHandler::warning( const QXmlParseException& exception )
-
- A reader might use this function to report a warning. Warnings are conditions
- that are not errors or fatal errors as defined by the XML 1.0 specification.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlErrorHandler::error( const QXmlParseException& exception )
-
- A reader might use this function to report a recoverable error. A recoverable
- error corresponds to the definition of "error" in section 1.2 of the XML 1.0
- specification.
-
- The reader must continue to provide normal parsing events after invoking this
- function.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlErrorHandler::fatalError( const QXmlParseException& exception )
-
- A reader must use this function to report a non-recoverable error.
-
- If this function returns TRUE the reader might try to go on parsing and
- reporting further errors; but no regular parsing events are reported.
-*/
-/*!
- \fn QString QXmlErrorHandler::errorString()
-
- The reader calls this function to get an error string if any of the handler
- functions returns FALSE to him.
-*/
-
-
-/*!
- \class QXmlDTDHandler qxml.h
- \brief The QXmlDTDHandler class provides an interface to report DTD content
- of XML data.
-
- \module XML
-
- If an application needs information about notations and unparsed entities,
- then the application implements this interface and registers an instance with
- QXmlReader::setDTDHandler().
-
- Note that this interface includes only those DTD events that the XML
- recommendation requires processors to report: notation and unparsed entity
- declarations.
-
- See also the <a href="xml.html#introSAX2">Introduction to SAX2</a>.
-
- \sa QXmlDeclHandler QXmlContentHandler QXmlEntityResolver QXmlErrorHandler
- QXmlLexicalHandler
-*/
-/*!
- \fn bool QXmlDTDHandler::notationDecl( const QString& name, const QString& publicId, const QString& systemId )
-
- The reader calls this function when he has parsed a notation
- declaration.
-
- The argument \a name is the notation name, \a publicId is the notations's
- public identifier and \a systemId is the notations's system identifier.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlDTDHandler::unparsedEntityDecl( const QString& name, const QString& publicId, const QString& systemId, const QString& notationName )
-
- The reader calls this function when he finds an unparsed entity declaration.
-
- The argument \a name is the unparsed entity's name, \a publicId is the
- entity's public identifier, \a systemId is the entity's system identifier and
- \a notation is the name of the associated notation.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn QString QXmlDTDHandler::errorString()
-
- The reader calls this function to get an error string if any of the handler
- functions returns FALSE to him.
-*/
-
-
-/*!
- \class QXmlEntityResolver qxml.h
- \brief The QXmlEntityResolver class provides an interface to resolve extern
- entities contained in XML data.
-
- \module XML
-
- If an application needs to implement customized handling for external
- entities, it must implement this interface and register it with
- QXmlReader::setEntityResolver().
-
- See also the <a href="xml.html#introSAX2">Introduction to SAX2</a>.
-
- \sa QXmlDTDHandler QXmlDeclHandler QXmlContentHandler QXmlErrorHandler
- QXmlLexicalHandler
-*/
-/*!
- \fn bool QXmlEntityResolver::resolveEntity( const QString& publicId, const QString& systemId, QXmlInputSource* ret )
-
- The reader will call this function before he opens any external entity,
- except the top-level document entity. The application may request the reader
- to resolve the entity itself (\a ret is 0) or to use an entirely different
- input source (\a ret points to the input source).
-
- The reader will delete the input source \a ret when he no longer needs it. So
- you should allocate it on the heap with \c new.
-
- The argument \a publicId is the public identifier of the external entity, \a
- systemId is the system identifier of the external entity and \a ret is the
- return value of this function: if it is 0 the reader should resolve the
- entity itself, if it is non-zero it must point to an input source which the
- reader will use instead.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn QString QXmlEntityResolver::errorString()
-
- The reader calls this function to get an error string if any of the handler
- functions returns FALSE to him.
-*/
-
-
-/*!
- \class QXmlLexicalHandler qxml.h
- \brief The QXmlLexicalHandler class provides an interface to report lexical
- content of XML data.
-
- \module XML
-
- The events in the lexical handler apply to the entire document, not just to
- the document element, and all lexical handler events appear between the
- content handler's startDocument and endDocument events.
-
- You can set the lexical handler with QXmlReader::setLexicalHandler().
-
- This interface is designed after the SAX2 extension LexicalHandler. The
- functions startEntity() and endEntity() are not included though.
-
- See also the <a href="xml.html#introSAX2">Introduction to SAX2</a>.
-
- \sa QXmlDTDHandler QXmlDeclHandler QXmlContentHandler QXmlEntityResolver
- QXmlErrorHandler
-*/
-/*!
- \fn bool QXmlLexicalHandler::startDTD( const QString& name, const QString& publicId, const QString& systemId )
-
- The reader calls this function to report the start of a DTD declaration, if
- any.
-
- All declarations reported through QXmlDTDHandler or QXmlDeclHandler appear
- between the startDTD() and endDTD() calls.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- \sa endDTD()
-*/
-/*!
- \fn bool QXmlLexicalHandler::endDTD()
-
- The reader calls this function to report the end of a DTD declaration, if
- any.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- \sa startDTD()
-*/
-/*!
- \fn bool QXmlLexicalHandler::startCDATA()
-
- The reader calls this function to report the start of a CDATA section. The
- content of the CDATA section will be reported through the regular
- QXmlContentHandler::characters(). This function is intended only to report
- the boundary.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- \sa endCDATA()
-*/
-/*!
- \fn bool QXmlLexicalHandler::endCDATA()
-
- The reader calls this function to report the end of a CDATA section.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-
- \sa startCDATA()
-*/
-/*!
- \fn bool QXmlLexicalHandler::comment( const QString& ch )
-
- The reader calls this function to report an XML comment anywhere in the
- document.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn QString QXmlLexicalHandler::errorString()
-
- The reader calls this function to get an error string if any of the handler
- functions returns FALSE to him.
-*/
-
-
-/*!
- \class QXmlDeclHandler qxml.h
- \brief The QXmlDeclHandler class provides an interface to report declaration
- content of XML data.
-
- \module XML
-
- You can set the declaration handler with QXmlReader::setDeclHandler().
-
- This interface is designed after the SAX2 extension DeclHandler.
-
- See also the <a href="xml.html#introSAX2">Introduction to SAX2</a>.
-
- \sa QXmlDTDHandler QXmlContentHandler QXmlEntityResolver QXmlErrorHandler
- QXmlLexicalHandler
-*/
-/*!
- \fn bool QXmlDeclHandler::attributeDecl( const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value )
-
- The reader calls this function to report an attribute type declaration. Only
- the effective (first) declaration for an attribute will be reported.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlDeclHandler::internalEntityDecl( const QString& name, const QString& value )
-
- The reader calls this function to report an internal entity declaration. Only
- the effective (first) declaration will be reported.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn bool QXmlDeclHandler::externalEntityDecl( const QString& name, const QString& publicId, const QString& systemId )
-
- The reader calls this function to report a parsed external entity
- declaration. Only the effective (first) declaration for each entity will be
- reported.
-
- If this function returns FALSE the reader will stop parsing and will report
- an error. The reader will use the function errorString() to get the error
- message that will be used for reporting the error.
-*/
-/*!
- \fn QString QXmlDeclHandler::errorString()
-
- The reader calls this function to get an error string if any of the handler
- functions returns FALSE to him.
-*/
-
-
-/*!
- \class QXmlDefaultHandler qxml.h
- \brief The QXmlDefaultHandler class provides a default implementation of all
- XML handler classes.
-
- \module XML
-
- Very often you are only interested in parts of the things that that the
- reader reports to you. This class simply implements a default behaviour of
- the handler classes (most of the time: do nothing). Normally this is the
- class you subclass for implementing your customized handler.
-
- See also the <a href="xml.html#introSAX2">Introduction to SAX2</a>.
-
- \sa QXmlDTDHandler QXmlDeclHandler QXmlContentHandler QXmlEntityResolver
- QXmlErrorHandler QXmlLexicalHandler
-*/
-/*!
- \fn QXmlDefaultHandler::QXmlDefaultHandler()
-
- Constructor.
-*/
-/*!
- \fn QXmlDefaultHandler::~QXmlDefaultHandler()
-
- Destructor.
-*/
-
-/*!
- Does nothing.
-*/
-void QXmlDefaultHandler::setDocumentLocator( QXmlLocator* )
-{
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::startDocument()
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::endDocument()
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::startPrefixMapping( const QString&, const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::endPrefixMapping( const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::startElement( const QString&, const QString&,
- const QString&, const QXmlAttributes& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::endElement( const QString&, const QString&,
- const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::characters( const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::ignorableWhitespace( const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::processingInstruction( const QString&,
- const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::skippedEntity( const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::warning( const QXmlParseException& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::error( const QXmlParseException& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::fatalError( const QXmlParseException& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::notationDecl( const QString&, const QString&,
- const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::unparsedEntityDecl( const QString&, const QString&,
- const QString&, const QString& )
-{
- return TRUE;
-}
-
-/*!
- Always sets \a ret to 0, so that the reader will use the system identifier
- provided in the XML document.
-*/
-bool QXmlDefaultHandler::resolveEntity( const QString&, const QString&,
- QXmlInputSource* &ret )
-{
- ret = 0;
- return TRUE;
-}
-
-/*!
- Returns the default error string.
-*/
-QString QXmlDefaultHandler::errorString()
-{
- return QString( XMLERR_ERRORBYCONSUMER );
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::startDTD( const QString&, const QString&, const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::endDTD()
-{
- return TRUE;
-}
-
-#if 0
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::startEntity( const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::endEntity( const QString& )
-{
- return TRUE;
-}
-#endif
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::startCDATA()
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::endCDATA()
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::comment( const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::attributeDecl( const QString&, const QString&, const QString&, const QString&, const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::internalEntityDecl( const QString&, const QString& )
-{
- return TRUE;
-}
-
-/*!
- Does nothing.
-*/
-bool QXmlDefaultHandler::externalEntityDecl( const QString&, const QString&, const QString& )
-{
- return TRUE;
-}
-
-
-/*********************************************
- *
- * QXmlSimpleReaderPrivate
- *
- *********************************************/
-
-class QXmlSimpleReaderPrivate
-{
-private:
- // constructor
- QXmlSimpleReaderPrivate()
- { }
-
-
- // used for entity declarations
- struct ExternParameterEntity
- {
- ExternParameterEntity( ) {}
- ExternParameterEntity( const QString &p, const QString &s )
- : publicId(p), systemId(s) {}
- QString publicId;
- QString systemId;
- };
- struct ExternEntity
- {
- ExternEntity( ) {}
- ExternEntity( const QString &p, const QString &s, const QString &n )
- : publicId(p), systemId(s), notation(n) {}
- QString publicId;
- QString systemId;
- QString notation;
- };
- QMap<QString,ExternParameterEntity> externParameterEntities;
- QMap<QString,QString> parameterEntities;
- QMap<QString,ExternEntity> externEntities;
- QMap<QString,QString> entities;
-
- // used for standalone declaration
- enum Standalone { Yes, No, Unknown };
-
- QString doctype; // only used for the doctype
- QString xmlVersion; // only used to store the version information
- QString encoding; // only used to store the encoding
- Standalone standalone; // used to store the value of the standalone declaration
-
- QString publicId; // used by parseExternalID() to store the public ID
- QString systemId; // used by parseExternalID() to store the system ID
- QString attDeclEName; // use by parseAttlistDecl()
- QString attDeclAName; // use by parseAttlistDecl()
-
- // flags for some features support
- bool useNamespaces;
- bool useNamespacePrefixes;
- bool reportWhitespaceCharData;
-
- // used to build the attribute list
- QXmlAttributes attList;
-
- // helper classes
- QXmlLocator *locator;
- QXmlNamespaceSupport namespaceSupport;
-
- // error string
- QString error;
-
- // friend declarations
- friend class QXmlSimpleReader;
-};
-
-
-/*********************************************
- *
- * QXmlSimpleReader
- *
- *********************************************/
-
-/*!
- \class QXmlReader qxml.h
- \brief The QXmlReader class provides an interface for XML readers (i.e.
- parsers).
-
- \module XML
-
- This abstract class describes an interface for all XML readers in Qt. At the
- moment there is only one implementation of a reader included in the XML
- module of Qt (QXmlSimpleReader). In future releases there might be more
- readers with different properties available (e.g. a validating parser).
-
- The design of the XML classes follow the
- <a href="http://www.megginson.com/SAX/">SAX2 java interface</a>.
- It was adopted to fit into the Qt naming conventions; so it should be very
- easy for anybody who has worked with SAX2 to get started with the Qt XML
- classes.
-
- All readers use the class QXmlInputSource to read the input document from.
- Since you are normally interested in certain contents of the XML document,
- the reader reports those contents through special handler classes
- (QXmlDTDHandler, QXmlDeclHandler, QXmlContentHandler, QXmlEntityResolver,
- QXmlErrorHandler and QXmlLexicalHandler).
-
- You have to subclass these classes. Since the handler classes describe only
- interfaces you must implement all functions; there is a class
- (QXmlDefaultHandler) to make this easier; it implements a default behaviour
- (do nothing) for all functions.
-
- For getting started see also the
- <a href="xml-sax.html#quickStart">Quick start</a>.
-
- \sa QXmlSimpleReader
-*/
-/*!
- \fn bool QXmlReader::feature( const QString& name, bool *ok ) const
-
- If the reader has the feature \a name, this function returns the value of the
- feature.
-
- If the reader has not the feature \a name, the return value may be anything.
-
- If \a ok is not 0, then \a ok is set to TRUE if the reader has the feature
- \a name, otherwise \a ok is set to FALSE.
-
- \sa setFeature() hasFeature()
-*/
-/*!
- \fn void QXmlReader::setFeature( const QString& name, bool value )
-
- Sets the feature \a name to \a value. If the reader has not the feature \a
- name, this value is ignored.
-
- \sa feature() hasFeature()
-*/
-/*!
- \fn bool QXmlReader::hasFeature( const QString& name ) const
-
- Returns \c TRUE if the reader has the feature \a name, otherwise FALSE.
-
- \sa feature() setFeature()
-*/
-/*!
- \fn void* QXmlReader::property( const QString& name, bool *ok ) const
-
- If the reader has the property \a name, this function returns the value of
- the property.
-
- If the reader has not the property \a name, the return value is 0.
-
- If \a ok is not 0, then \a ok is set to TRUE if the reader has the property
- \a name, otherwise \a ok is set to FALSE.
-
- \sa setProperty() hasProperty()
-*/
-/*!
- \fn void QXmlReader::setProperty( const QString& name, void* value )
-
- Sets the property \a name to \a value. If the reader has not the property \a
- name, this value is ignored.
-
- \sa property() hasProperty()
-*/
-/*!
- \fn bool QXmlReader::hasProperty( const QString& name ) const
-
- Returns TRUE if the reader has the property \a name, otherwise FALSE.
-
- \sa property() setProperty()
-*/
-/*!
- \fn void QXmlReader::setEntityResolver( QXmlEntityResolver* handler )
-
- Sets the entity resolver to \a handler.
-
- \sa entityResolver()
-*/
-/*!
- \fn QXmlEntityResolver* QXmlReader::entityResolver() const
-
- Returns the entity resolver or 0 if none was set.
-
- \sa setEntityResolver()
-*/
-/*!
- \fn void QXmlReader::setDTDHandler( QXmlDTDHandler* handler )
-
- Sets the DTD handler to \a handler.
-
- \sa DTDHandler()
-*/
-/*!
- \fn QXmlDTDHandler* QXmlReader::DTDHandler() const
-
- Returns the DTD handler or 0 if none was set.
-
- \sa setDTDHandler()
-*/
-/*!
- \fn void QXmlReader::setContentHandler( QXmlContentHandler* handler )
-
- Sets the content handler to \a handler.
-
- \sa contentHandler()
-*/
-/*!
- \fn QXmlContentHandler* QXmlReader::contentHandler() const
-
- Returns the content handler or 0 if none was set.
-
- \sa setContentHandler()
-*/
-/*!
- \fn void QXmlReader::setErrorHandler( QXmlErrorHandler* handler )
-
- Sets the error handler to \a handler.
-
- \sa errorHandler()
-*/
-/*!
- \fn QXmlErrorHandler* QXmlReader::errorHandler() const
-
- Returns the error handler or 0 if none was set
-
- \sa setErrorHandler()
-*/
-/*!
- \fn void QXmlReader::setLexicalHandler( QXmlLexicalHandler* handler )
-
- Sets the lexical handler to \a handler.
-
- \sa lexicalHandler()
-*/
-/*!
- \fn QXmlLexicalHandler* QXmlReader::lexicalHandler() const
-
- Returns the lexical handler or 0 if none was set.
-
- \sa setLexicalHandler()
-*/
-/*!
- \fn void QXmlReader::setDeclHandler( QXmlDeclHandler* handler )
-
- Sets the declaration handler to \a handler.
-
- \sa declHandler()
-*/
-/*!
- \fn QXmlDeclHandler* QXmlReader::declHandler() const
-
- Returns the declaration handler or 0 if none was set.
-
- \sa setDeclHandler()
-*/
-/*!
- \fn bool QXmlReader::parse( const QXmlInputSource& input )
-
- Parses the XML document \a input. Returns TRUE if the parsing was successful,
- otherwise FALSE.
-*/
-/*!
- \fn bool QXmlReader::parse( const QString& systemId )
-
- Parses the XML document at the location \a systemId. Returns TRUE if the
- parsing was successful, otherwise FALSE.
-*/
-
-
-/*!
- \class QXmlSimpleReader qxml.h
- \brief The QXmlSimpleReader class provides an implementation of a simple XML
- reader (i.e. parser).
-
- \module XML
-
- This XML reader is sufficient for simple parsing tasks. Here is a short list
- of the properties of this reader:
- <ul>
- <li> well-formed parser
- <li> does not parse any external entities
- <li> can do namespace processing
- </ul>
-
- For getting started see also the
- <a href="xml-sax.html#quickStart">Quick start</a>.
-*/
-
-//guaranteed not to be a character
-const QChar QXmlSimpleReader::QEOF = QChar((ushort)0xffff);
-
-/*!
- Constructs a simple XML reader.
-*/
-QXmlSimpleReader::QXmlSimpleReader()
-{
- d = new QXmlSimpleReaderPrivate();
- d->locator = new QXmlLocator( this );
-
- entityRes = 0;
- dtdHnd = 0;
- contentHnd = 0;
- errorHnd = 0;
- lexicalHnd = 0;
- declHnd = 0;
-
- // default feature settings
- d->useNamespaces = TRUE;
- d->useNamespacePrefixes = FALSE;
- d->reportWhitespaceCharData = TRUE;
-}
-
-/*!
- Destroys a simple XML reader.
-*/
-QXmlSimpleReader::~QXmlSimpleReader()
-{
- delete d->locator;
- delete d;
-}
-
-/*!
- Gets the state of a feature.
-
- \sa setFeature() hasFeature()
-*/
-bool QXmlSimpleReader::feature( const QString& name, bool *ok ) const
-{
- if ( ok != 0 )
- *ok = TRUE;
- if ( name == "http://xml.org/sax/features/namespaces" ) {
- return d->useNamespaces;
- } else if ( name == "http://xml.org/sax/features/namespace-prefixes" ) {
- return d->useNamespacePrefixes;
- } else if ( name == "http://trolltech.com/xml/features/report-whitespace-only-CharData" ) {
- return d->reportWhitespaceCharData;
- } else {
- qWarning( "Unknown feature %s", name.ascii() );
- if ( ok != 0 )
- *ok = FALSE;
- }
- return FALSE;
-}
-
-/*!
- Sets the state of a feature.
-
- Supported features are:
- <ul>
- <li> http://xml.org/sax/features/namespaces:
- if this feature is TRUE, namespace processing is performed
- <li> http://xml.org/sax/features/namespace-prefixes:
- if this feature is TRUE, the original prefixed names and attributes
- used for namespace declarations are reported
- <li> http://trolltech.com/xml/features/report-whitespace-only-CharData:
- if this feature is TRUE, CharData that consists only of whitespace (and
- no other characters) is not reported via
- QXmlContentHandler::characters()
- </ul>
-
- \sa feature() hasFeature()
-*/
-void QXmlSimpleReader::setFeature( const QString& name, bool value )
-{
- if ( name == "http://xml.org/sax/features/namespaces" ) {
- d->useNamespaces = value;
- } else if ( name == "http://xml.org/sax/features/namespace-prefixes" ) {
- d->useNamespacePrefixes = value;
- } else if ( name == "http://trolltech.com/xml/features/report-whitespace-only-CharData" ) {
- d->reportWhitespaceCharData = value;
- } else {
- qWarning( "Unknown feature %s", name.ascii() );
- }
-}
-
-/*!
- Returns TRUE if the class has a feature named \a feature, otherwise FALSE.
-
- \sa setFeature() feature()
-*/
-bool QXmlSimpleReader::hasFeature( const QString& name ) const
-{
- if ( name == "http://xml.org/sax/features/namespaces" ||
- name == "http://xml.org/sax/features/namespace-prefixes" ||
- name == "http://trolltech.com/xml/features/report-whitespace-only-CharData" ) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-/*!
- Returns 0 since this class does not support any properties.
-*/
-void* QXmlSimpleReader::property( const QString&, bool *ok ) const
-{
- if ( ok != 0 )
- *ok = FALSE;
- return 0;
-}
-
-/*!
- Does nothing since this class does not support any properties.
-*/
-void QXmlSimpleReader::setProperty( const QString&, void* )
-{
-}
-
-/*!
- Returns FALSE since this class does not support any properties.
-*/
-bool QXmlSimpleReader::hasProperty( const QString& ) const
-{
- return FALSE;
-}
-
-/*! \reimp */
-void QXmlSimpleReader::setEntityResolver( QXmlEntityResolver* handler )
-{ entityRes = handler; }
-
-/*! \reimp */
-QXmlEntityResolver* QXmlSimpleReader::entityResolver() const
-{ return entityRes; }
-
-/*! \reimp */
-void QXmlSimpleReader::setDTDHandler( QXmlDTDHandler* handler )
-{ dtdHnd = handler; }
-
-/*! \reimp */
-QXmlDTDHandler* QXmlSimpleReader::DTDHandler() const
-{ return dtdHnd; }
-
-/*! \reimp */
-void QXmlSimpleReader::setContentHandler( QXmlContentHandler* handler )
-{ contentHnd = handler; }
-
-/*! \reimp */
-QXmlContentHandler* QXmlSimpleReader::contentHandler() const
-{ return contentHnd; }
-
-/*! \reimp */
-void QXmlSimpleReader::setErrorHandler( QXmlErrorHandler* handler )
-{ errorHnd = handler; }
-
-/*! \reimp */
-QXmlErrorHandler* QXmlSimpleReader::errorHandler() const
-{ return errorHnd; }
-
-/*! \reimp */
-void QXmlSimpleReader::setLexicalHandler( QXmlLexicalHandler* handler )
-{ lexicalHnd = handler; }
-
-/*! \reimp */
-QXmlLexicalHandler* QXmlSimpleReader::lexicalHandler() const
-{ return lexicalHnd; }
-
-/*! \reimp */
-void QXmlSimpleReader::setDeclHandler( QXmlDeclHandler* handler )
-{ declHnd = handler; }
-
-/*! \reimp */
-QXmlDeclHandler* QXmlSimpleReader::declHandler() const
-{ return declHnd; }
-
-
-
-/*! \reimp */
-bool QXmlSimpleReader::parse( const QXmlInputSource& input )
-{
- init( input );
- // call the handler
- if ( contentHnd ) {
- contentHnd->setDocumentLocator( d->locator );
- if ( !contentHnd->startDocument() ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- // parse prolog
- if ( !parseProlog() ) {
- d->error = XMLERR_ERRORPARSINGPROLOG;
- goto parseError;
- }
- // parse element
- if ( !parseElement() ) {
- d->error = XMLERR_ERRORPARSINGMAINELEMENT;
- goto parseError;
- }
- // parse Misc*
- while ( !atEnd() ) {
- if ( !parseMisc() ) {
- d->error = XMLERR_ERRORPARSINGMISC;
- goto parseError;
- }
- }
- // is stack empty?
- if ( !tags.isEmpty() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- // call the handler
- if ( contentHnd ) {
- if ( !contentHnd->endDocument() ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
-
- return TRUE;
-
- // error handling
-
-parseError:
- reportParseError();
- tags.clear();
- return FALSE;
-}
-
-/*!
- Parses the prolog [22].
-*/
-bool QXmlSimpleReader::parseProlog()
-{
- bool xmldecl_possible = TRUE;
- bool doctype_read = FALSE;
-
- const signed char Init = 0;
- const signed char EatWS = 1; // eat white spaces
- const signed char Lt = 2; // '<' read
- const signed char Em = 3; // '!' read
- const signed char DocType = 4; // read doctype
- const signed char Comment = 5; // read comment
- const signed char PI = 6; // read PI
- const signed char Done = 7;
-
- const signed char InpWs = 0;
- const signed char InpLt = 1; // <
- const signed char InpQm = 2; // ?
- const signed char InpEm = 3; // !
- const signed char InpD = 4; // D
- const signed char InpDash = 5; // -
- const signed char InpUnknown = 6;
-
- // use some kind of state machine for parsing
- static signed char table[7][7] = {
- /* InpWs InpLt InpQm InpEm InpD InpDash InpUnknown */
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // Init
- { -1, Lt, -1, -1, -1, -1, -1 }, // EatWS
- { -1, -1, PI, Em, Done, -1, Done }, // Lt
- { -1, -1, -1, -1, DocType, Comment, -1 }, // Em
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // DocType
- { EatWS, Lt, -1, -1, -1, -1, -1 }, // Comment
- { EatWS, Lt, -1, -1, -1, -1, -1 } // PI
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // read input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '<' ) {
- input = InpLt;
- } else if ( c == '?' ) {
- input = InpQm;
- } else if ( c == '!' ) {
- input = InpEm;
- } else if ( c == 'D' ) {
- input = InpD;
- } else if ( c == '-' ) {
- input = InpDash;
- } else {
- input = InpUnknown;
- }
- // get new state
- state = table[state][input];
-
- // in some cases do special actions depending on state
- switch ( state ) {
- case EatWS:
- // XML declaration only on first position possible
- xmldecl_possible = FALSE;
- // eat white spaces
- eat_ws();
- break;
- case Lt:
- // next character
- next();
- break;
- case Em:
- // XML declaration only on first position possible
- xmldecl_possible = FALSE;
- // next character
- next();
- break;
- case DocType:
- parseOk = parseDoctype();
- break;
- case Comment:
- parseOk = parseComment();
- break;
- case PI:
- parseOk = parsePI( xmldecl_possible );
- break;
- }
- // no input is read after this
- switch ( state ) {
- case DocType:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGPROLOG;
- goto parseError;
- }
- if ( doctype_read ) {
- d->error = XMLERR_MORETHANONEDOCTYPE;
- goto parseError;
- } else {
- doctype_read = FALSE;
- }
- break;
- case Comment:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGPROLOG;
- goto parseError;
- }
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- break;
- case PI:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGPROLOG;
- goto parseError;
- }
- // call the handler
- if ( contentHnd ) {
- if ( xmldecl_possible && !d->xmlVersion.isEmpty() ) {
- QString value( "version = '" );
- value += d->xmlVersion;
- value += "'";
- if ( !d->encoding.isEmpty() ) {
- value += " encoding = '";
- value += d->encoding;
- value += "'";
- }
- if ( d->standalone == QXmlSimpleReaderPrivate::Yes ) {
- value += " standalone = 'yes'";
- } else if ( d->standalone == QXmlSimpleReaderPrivate::No ) {
- value += " standalone = 'no'";
- }
- if ( !contentHnd->processingInstruction( "xml", value ) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- } else {
- if ( !contentHnd->processingInstruction( name(), string() ) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- }
- // XML declaration only on first position possible
- xmldecl_possible = FALSE;
- break;
- case Done:
- return TRUE;
- case -1:
- d->error = XMLERR_ERRORPARSINGELEMENT;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse an element [39].
-
- Precondition: the opening '<' is already read.
-*/
-bool QXmlSimpleReader::parseElement()
-{
- static QString uri, lname, prefix;
- static bool t;
-
- const signed char Init = 0;
- const signed char ReadName = 1;
- const signed char Ws1 = 2;
- const signed char STagEnd = 3;
- const signed char STagEnd2 = 4;
- const signed char ETagBegin = 5;
- const signed char ETagBegin2 = 6;
- const signed char Ws2 = 7;
- const signed char EmptyTag = 8;
- const signed char Attribute = 9;
- const signed char Ws3 = 10;
- const signed char Done = 11;
-
- const signed char InpWs = 0; // whitespace
- const signed char InpNameBe = 1; // is_NameBeginning()
- const signed char InpGt = 2; // >
- const signed char InpSlash = 3; // /
- const signed char InpUnknown = 4;
-
- // use some kind of state machine for parsing
- static signed char table[11][5] = {
- /* InpWs InpNameBe InpGt InpSlash InpUnknown */
- { -1, ReadName, -1, -1, -1 }, // Init
- { Ws1, Attribute, STagEnd, EmptyTag, -1 }, // ReadName
- { -1, Attribute, STagEnd, EmptyTag, -1 }, // Ws1
- { STagEnd2, STagEnd2, STagEnd2, STagEnd2, STagEnd2 }, // STagEnd
- { -1, -1, -1, ETagBegin, -1 }, // STagEnd2
- { -1, ETagBegin2, -1, -1, -1 }, // ETagBegin
- { Ws2, -1, Done, -1, -1 }, // ETagBegin2
- { -1, -1, Done, -1, -1 }, // Ws2
- { -1, -1, Done, -1, -1 }, // EmptyTag
- { Ws3, Attribute, STagEnd, EmptyTag, -1 }, // Attribute
- { -1, Attribute, STagEnd, EmptyTag, -1 } // Ws3
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // read input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( is_NameBeginning(c) ) {
- input = InpNameBe;
- } else if ( c == '>' ) {
- input = InpGt;
- } else if ( c == '/' ) {
- input = InpSlash;
- } else {
- input = InpUnknown;
- }
- // get new state
-//qDebug( "%d -%d(%c)-> %d", state, input, c.latin1(), table[state][input] );
- state = table[state][input];
-
- // in some cases do special actions depending on state
- switch ( state ) {
- case ReadName:
- parseOk = parseName();
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- eat_ws();
- break;
- case STagEnd:
- // call the handler
- if ( contentHnd ) {
- if ( d->useNamespaces ) {
- d->namespaceSupport.processName( tags.top(), FALSE, uri, lname );
- t = contentHnd->startElement( uri, lname, tags.top(), d->attList );
- } else {
- t = contentHnd->startElement( "", "", tags.top(), d->attList );
- }
- if ( !t ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- next();
- break;
- case STagEnd2:
- parseOk = parseContent();
- break;
- case ETagBegin:
- next();
- break;
- case ETagBegin2:
- // get the name of the tag
- parseOk = parseName();
- break;
- case EmptyTag:
- if ( tags.isEmpty() ) {
- d->error = XMLERR_TAGMISMATCH;
- goto parseError;
- }
- if ( !parseElementEmptyTag( t, uri, lname ) )
- goto parseError;
- // next character
- next();
- break;
- case Attribute:
- // get name and value of attribute
- parseOk = parseAttribute();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case ReadName:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- // store it on the stack
- tags.push( name() );
- // empty the attributes
- d->attList.qnameList.clear();
- d->attList.uriList.clear();
- d->attList.localnameList.clear();
- d->attList.valueList.clear();
- // namespace support?
- if ( d->useNamespaces ) {
- d->namespaceSupport.pushContext();
- }
- break;
- case STagEnd2:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGCONTENT;
- goto parseError;
- }
- break;
- case ETagBegin2:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- if ( !parseElementETagBegin2( uri, lname ) )
- goto parseError;
- break;
- case Attribute:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGATTRIBUTE;
- goto parseError;
- }
- if ( !parseElementAttribute( prefix, uri, lname ) )
- goto parseError;
- break;
- case Done:
- return TRUE;
- case -1:
- d->error = XMLERR_ERRORPARSINGELEMENT;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-/*!
- Helper to break down the size of the code in the case statement.
- Return FALSE on error, otherwise TRUE.
-*/
-bool QXmlSimpleReader::parseElementEmptyTag( bool &t, QString &uri, QString &lname )
-{
- // pop the stack and call the handler
- if ( contentHnd ) {
- // report startElement first...
- if ( d->useNamespaces ) {
- d->namespaceSupport.processName( tags.top(), FALSE, uri, lname );
- t = contentHnd->startElement( uri, lname, tags.top(), d->attList );
- } else {
- t = contentHnd->startElement( "", "", tags.top(), d->attList );
- }
- if ( !t ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- // ... followed by endElement
- if ( d->useNamespaces ) {
- if ( !contentHnd->endElement( uri, lname,tags.pop() ) ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- }
- else {
- if ( !contentHnd->endElement( "","",tags.pop() ) ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- }
- // namespace support?
- if ( d->useNamespaces ) {
- QStringList prefixesBefore, prefixesAfter;
- if ( contentHnd ) {
- prefixesBefore = d->namespaceSupport.prefixes();
- }
- d->namespaceSupport.popContext();
- // call the handler for prefix mapping
- if ( contentHnd ) {
- prefixesAfter = d->namespaceSupport.prefixes();
- for ( QStringList::Iterator it = prefixesBefore.begin(); it != prefixesBefore.end(); ++it ) {
- if ( prefixesAfter.contains(*it) == 0 ) {
- if ( !contentHnd->endPrefixMapping( *it ) ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- }
- }
- }
- }
- } else {
- tags.pop();
- }
- return TRUE;
-}
-/*!
- Helper to break down the size of the code in the case statement.
- Return FALSE on error, otherwise TRUE.
-*/
-bool QXmlSimpleReader::parseElementETagBegin2( QString &uri, QString &lname )
-{
-
- // pop the stack and compare it with the name
- if ( tags.pop() != name() ) {
- d->error = XMLERR_TAGMISMATCH;
- return FALSE;
- }
- // call the handler
- if ( contentHnd ) {
- if ( d->useNamespaces ) {
- d->namespaceSupport.processName( name(), FALSE, uri, lname );
- if ( !contentHnd->endElement(uri,lname,name()) ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- }
- else {
- if ( !contentHnd->endElement("","",name()) ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- }
- }
- // namespace support?
- if ( d->useNamespaces ) {
- QStringList prefixesBefore, prefixesAfter;
- if ( contentHnd ) {
- prefixesBefore = d->namespaceSupport.prefixes();
- }
- d->namespaceSupport.popContext();
- // call the handler for prefix mapping
- if ( contentHnd ) {
- prefixesAfter = d->namespaceSupport.prefixes();
- for ( QStringList::Iterator it = prefixesBefore.begin(); it != prefixesBefore.end(); ++it ) {
- if ( prefixesAfter.contains(*it) == 0 ) {
- if ( !contentHnd->endPrefixMapping( *it ) ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- }
- }
- }
- }
- return TRUE;
-}
-/*!
- Helper to break down the size of the code in the case statement.
- Return FALSE on error, otherwise TRUE.
-*/
-bool QXmlSimpleReader::parseElementAttribute( QString &prefix, QString &uri, QString &lname )
-{
- // add the attribute to the list
- if ( d->useNamespaces ) {
- // is it a namespace declaration?
- d->namespaceSupport.splitName( name(), prefix, lname );
- if ( prefix == "xmlns" ) {
- // namespace declaration
- d->namespaceSupport.setPrefix( lname, string() );
- if ( d->useNamespacePrefixes ) {
- d->attList.qnameList.append( name() );
- d->attList.uriList.append( "" );
- d->attList.localnameList.append( "" );
- d->attList.valueList.append( string() );
- }
- // call the handler for prefix mapping
- if ( contentHnd ) {
- if ( !contentHnd->startPrefixMapping( lname, string() ) ) {
- d->error = contentHnd->errorString();
- return FALSE;
- }
- }
- } else {
- // no namespace declaration
- d->namespaceSupport.processName( name(), TRUE, uri, lname );
- d->attList.qnameList.append( name() );
- d->attList.uriList.append( uri );
- d->attList.localnameList.append( lname );
- d->attList.valueList.append( string() );
- }
- } else {
- // no namespace support
- d->attList.qnameList.append( name() );
- d->attList.uriList.append( "" );
- d->attList.localnameList.append( "" );
- d->attList.valueList.append( string() );
- }
- return TRUE;
-}
-
-/*!
- Parse a content [43].
-
- A content is only used between tags. If a end tag is found the < is already
- read and the head stand on the '/' of the end tag '</name>'.
-*/
-bool QXmlSimpleReader::parseContent()
-{
- bool charDataRead = FALSE;
-
- const signed char Init = 0;
- const signed char ChD = 1; // CharData
- const signed char ChD1 = 2; // CharData help state
- const signed char ChD2 = 3; // CharData help state
- const signed char Ref = 4; // Reference
- const signed char Lt = 5; // '<' read
- const signed char PI = 6; // PI
- const signed char Elem = 7; // Element
- const signed char Em = 8; // '!' read
- const signed char Com = 9; // Comment
- const signed char CDS = 10; // CDSect
- const signed char CDS1 = 11; // read a CDSect
- const signed char CDS2 = 12; // read a CDSect (help state)
- const signed char CDS3 = 13; // read a CDSect (help state)
- const signed char Done = 14; // finished reading content
-
- const signed char InpLt = 0; // <
- const signed char InpGt = 1; // >
- const signed char InpSlash = 2; // /
- const signed char InpQMark = 3; // ?
- const signed char InpEMark = 4; // !
- const signed char InpAmp = 5; // &
- const signed char InpDash = 6; // -
- const signed char InpOpenB = 7; // [
- const signed char InpCloseB = 8; // ]
- const signed char InpUnknown = 9;
-
- static signed char mapCLT2FSMChar[] = {
- InpUnknown, // white space
- InpUnknown, // %
- InpAmp, // &
- InpGt, // >
- InpLt, // <
- InpSlash, // /
- InpQMark, // ?
- InpEMark, // !
- InpDash, // -
- InpCloseB, // ]
- InpOpenB, // [
- InpUnknown, // =
- InpUnknown, // "
- InpUnknown, // '
- InpUnknown // unknown
- };
-
- // use some kind of state machine for parsing
- static signed char const table[14][10] = {
- /* InpLt InpGt InpSlash InpQMark InpEMark InpAmp InpDash InpOpenB InpCloseB InpUnknown */
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD1, ChD }, // Init
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD1, ChD }, // ChD
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD2, ChD }, // ChD1
- { Lt, -1, ChD, ChD, ChD, Ref, ChD, ChD, ChD2, ChD }, // ChD2
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Ref (same as Init)
- { -1, -1, Done, PI, Em, -1, -1, -1, -1, Elem }, // Lt
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // PI (same as Init)
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Elem (same as Init)
- { -1, -1, -1, -1, -1, -1, Com, CDS, -1, -1 }, // Em
- { Lt, ChD, ChD, ChD, ChD, Ref, ChD, ChD, ChD, ChD }, // Com (same as Init)
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS2, CDS1 }, // CDS
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS2, CDS1 }, // CDS1
- { CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS3, CDS1 }, // CDS2
- { CDS1, Init, CDS1, CDS1, CDS1, CDS1, CDS1, CDS1, CDS3, CDS1 } // CDS3
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input (use lookup-table instead of nested ifs for performance
- // reasons)
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c.row() ) {
- input = InpUnknown;
- } else {
- input = mapCLT2FSMChar[ charLookupTable[ c.cell() ] ];
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Init:
- // next character
- next();
- break;
- case ChD:
- // on first call: clear string
- if ( !charDataRead ) {
- charDataRead = TRUE;
- stringClear();
- }
- stringAddC();
- next();
- break;
- case ChD1:
- // on first call: clear string
- if ( !charDataRead ) {
- charDataRead = TRUE;
- stringClear();
- }
- stringAddC();
- next();
- break;
- case ChD2:
- stringAddC();
- next();
- break;
- case Ref:
- if ( !charDataRead) {
- // reference may be CharData; so clear string to be safe
- stringClear();
- parseOk = parseReference( charDataRead, InContent );
- } else {
- bool tmp;
- parseOk = parseReference( tmp, InContent );
- }
- break;
- case Lt:
- // call the handler for CharData
- if ( contentHnd ) {
- if ( charDataRead ) {
- if ( d->reportWhitespaceCharData || !string().simplifyWhiteSpace().isEmpty() ) {
- if ( !contentHnd->characters( string() ) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- }
- }
- charDataRead = FALSE;
- // next character
- next();
- break;
- case PI:
- parseOk = parsePI();
- break;
- case Elem:
- parseOk = parseElement();
- break;
- case Em:
- // next character
- next();
- break;
- case Com:
- parseOk = parseComment();
- break;
- case CDS:
- parseOk = parseString( "[CDATA[" );
- break;
- case CDS1:
- // read one character and add it
- stringAddC();
- next();
- break;
- case CDS2:
- // skip ']'
- next();
- break;
- case CDS3:
- // skip ']'...
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Ref:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGREFERENCE;
- goto parseError;
- }
- break;
- case PI:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGPI;
- goto parseError;
- }
- // call the handler
- if ( contentHnd ) {
- if ( !contentHnd->processingInstruction(name(),string()) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- break;
- case Elem:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGELEMENT;
- goto parseError;
- }
- break;
- case Com:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGCOMMENT;
- goto parseError;
- }
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- break;
- case CDS:
- if( !parseOk ) {
- d->error = XMLERR_CDSECTHEADEREXPECTED;
- goto parseError;
- }
- // empty string
- stringClear();
- break;
- case CDS2:
- if (c != ']') {
- stringAddC( ']' );
- }
- break;
- case CDS3:
- // test if this skipping was legal
- if ( c == '>' ) {
- // the end of the CDSect
- if ( lexicalHnd ) {
- if ( !lexicalHnd->startCDATA() ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- if ( contentHnd ) {
- if ( !contentHnd->characters( string() ) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- if ( lexicalHnd ) {
- if ( !lexicalHnd->endCDATA() ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- } else if (c == ']') {
- // three or more ']'
- stringAddC( ']' );
- } else {
- // after ']]' comes another character
- stringAddC( ']' );
- stringAddC( ']' );
- }
- break;
- case Done:
- // call the handler for CharData
- if ( contentHnd ) {
- if ( charDataRead ) {
- if ( d->reportWhitespaceCharData || !string().simplifyWhiteSpace().isEmpty() ) {
- if ( !contentHnd->characters( string() ) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- }
- }
- // Done
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_ERRORPARSINGCONTENT;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse Misc [27].
-*/
-bool QXmlSimpleReader::parseMisc()
-{
- const signed char Init = 0;
- const signed char Lt = 1; // '<' was read
- const signed char Comment = 2; // read comment
- const signed char eatWS = 3; // eat whitespaces
- const signed char PI = 4; // read PI
- const signed char Comment2 = 5; // read comment
-
- const signed char InpWs = 0; // S
- const signed char InpLt = 1; // <
- const signed char InpQm = 2; // ?
- const signed char InpEm = 3; // !
- const signed char InpUnknown = 4;
-
- // use some kind of state machine for parsing
- static signed char table[3][5] = {
- /* InpWs InpLt InpQm InpEm InpUnknown */
- { eatWS, Lt, -1, -1, -1 }, // Init
- { -1, -1, PI, Comment, -1 }, // Lt
- { -1, -1, -1, -1, Comment2 } // Comment
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '<' ) {
- input = InpLt;
- } else if ( c == '?' ) {
- input = InpQm;
- } else if ( c == '!' ) {
- input = InpEm;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case eatWS:
- eat_ws();
- break;
- case Lt:
- next();
- break;
- case PI:
- parseOk = parsePI();
- break;
- case Comment:
- next();
- break;
- case Comment2:
- parseOk = parseComment();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case eatWS:
- return TRUE;
- case PI:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGPI;
- goto parseError;
- }
- if ( contentHnd ) {
- if ( !contentHnd->processingInstruction(name(),string()) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- return TRUE;
- case Comment2:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGCOMMENT;
- goto parseError;
- }
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a processing instruction [16].
-
- If xmldec is TRUE, it tries to parse a PI or a XML declaration [23].
-
- Precondition: the beginning '<' of the PI is already read and the head stand
- on the '?' of '<?'.
-
- If this function was successful, the head-position is on the first
- character after the PI.
-*/
-bool QXmlSimpleReader::parsePI( bool xmldecl )
-{
- const signed char Init = 0;
- const signed char QmI = 1; // ? was read
- const signed char Name = 2; // read Name
- const signed char XMLDecl = 3; // read XMLDecl
- const signed char Ws1 = 4; // eat ws after "xml" of XMLDecl
- const signed char PI = 5; // read PI
- const signed char Ws2 = 6; // eat ws after Name of PI
- const signed char Version = 7; // read versionInfo
- const signed char Ws3 = 8; // eat ws after versionInfo
- const signed char EorSD = 9; // read EDecl or SDDecl
- const signed char Ws4 = 10; // eat ws after EDecl or SDDecl
- const signed char SD = 11; // read SDDecl
- const signed char Ws5 = 12; // eat ws after SDDecl
- const signed char ADone = 13; // almost done
- const signed char Char = 14; // Char was read
- const signed char Qm = 15; // Qm was read
- const signed char Done = 16; // finished reading content
-
- const signed char InpWs = 0; // whitespace
- const signed char InpNameBe = 1; // is_nameBeginning()
- const signed char InpGt = 2; // >
- const signed char InpQm = 3; // ?
- const signed char InpUnknown = 4;
-
- // use some kind of state machine for parsing
- static signed char table[16][5] = {
- /* InpWs, InpNameBe InpGt InpQm InpUnknown */
- { -1, -1, -1, QmI, -1 }, // Init
- { -1, Name, -1, -1, -1 }, // QmI
- { -1, -1, -1, -1, -1 }, // Name (this state is left not through input)
- { Ws1, -1, -1, -1, -1 }, // XMLDecl
- { -1, Version, -1, -1, -1 }, // Ws1
- { Ws2, -1, -1, Qm, -1 }, // PI
- { Char, Char, Char, Qm, Char }, // Ws2
- { Ws3, -1, -1, ADone, -1 }, // Version
- { -1, EorSD, -1, ADone, -1 }, // Ws3
- { Ws4, -1, -1, ADone, -1 }, // EorSD
- { -1, SD, -1, ADone, -1 }, // Ws4
- { Ws5, -1, -1, ADone, -1 }, // SD
- { -1, -1, -1, ADone, -1 }, // Ws5
- { -1, -1, Done, -1, -1 }, // ADone
- { Char, Char, Char, Qm, Char }, // Char
- { Char, Char, Done, Qm, Char }, // Qm
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( is_NameBeginning(c) ) {
- input = InpNameBe;
- } else if ( c == '>' ) {
- input = InpGt;
- } else if ( c == '?' ) {
- input = InpQm;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case QmI:
- next();
- break;
- case Name:
- parseOk = parseName();
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- case Ws4:
- case Ws5:
- eat_ws();
- break;
- case Version:
- parseOk = parseAttribute();
- break;
- case EorSD:
- parseOk = parseAttribute();
- break;
- case SD:
- // get the SDDecl (syntax like an attribute)
- if ( d->standalone != QXmlSimpleReaderPrivate::Unknown ) {
- // already parsed the standalone declaration
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- parseOk = parseAttribute();
- break;
- case ADone:
- next();
- break;
- case Char:
- stringAddC();
- next();
- break;
- case Qm:
- // skip the '?'
- next();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Name:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- // test what name was read and determine the next state
- // (not very beautiful, I admit)
- if ( name().lower() == "xml" ) {
- if ( xmldecl && name()=="xml" ) {
- state = XMLDecl;
- } else {
- d->error = XMLERR_INVALIDNAMEFORPI;
- goto parseError;
- }
- } else {
- state = PI;
- stringClear();
- }
- break;
- case Version:
- // get version (syntax like an attribute)
- if ( !parseOk ) {
- d->error = XMLERR_VERSIONEXPECTED;
- goto parseError;
- }
- if ( name() != "version" ) {
- d->error = XMLERR_VERSIONEXPECTED;
- goto parseError;
- }
- d->xmlVersion = string();
- break;
- case EorSD:
- // get the EDecl or SDDecl (syntax like an attribute)
- if ( !parseOk ) {
- d->error = XMLERR_EDECLORSDDECLEXPECTED;
- goto parseError;
- }
- if ( name() == "standalone" ) {
- if ( string()=="yes" ) {
- d->standalone = QXmlSimpleReaderPrivate::Yes;
- } else if ( string()=="no" ) {
- d->standalone = QXmlSimpleReaderPrivate::No;
- } else {
- d->error = XMLERR_WRONGVALUEFORSDECL;
- goto parseError;
- }
- } else if ( name() == "encoding" ) {
- d->encoding = string();
- } else {
- d->error = XMLERR_EDECLORSDDECLEXPECTED;
- goto parseError;
- }
- break;
- case SD:
- if ( !parseOk ) {
- d->error = XMLERR_SDDECLEXPECTED;
- goto parseError;
- }
- if ( name() != "standalone" ) {
- d->error = XMLERR_SDDECLEXPECTED;
- goto parseError;
- }
- if ( string()=="yes" ) {
- d->standalone = QXmlSimpleReaderPrivate::Yes;
- } else if ( string()=="no" ) {
- d->standalone = QXmlSimpleReaderPrivate::No;
- } else {
- d->error = XMLERR_WRONGVALUEFORSDECL;
- goto parseError;
- }
- break;
- case Qm:
- // test if the skipping was legal
- if ( c != '>' ) {
- stringAddC( '?' );
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a document type definition (doctypedecl [28]).
-
- Precondition: the beginning '<!' of the doctype is already read the head
- stands on the 'D' of '<!DOCTYPE'.
-
- If this function was successful, the head-position is on the first
- character after the document type definition.
-*/
-bool QXmlSimpleReader::parseDoctype()
-{
- // some init-stuff
- d->systemId = QString::null;
- d->publicId = QString::null;
-
- const signed char Init = 0;
- const signed char Doctype = 1; // read the doctype
- const signed char Ws1 = 2; // eat_ws
- const signed char Doctype2 = 3; // read the doctype, part 2
- const signed char Ws2 = 4; // eat_ws
- const signed char Sys = 5; // read SYSTEM
- const signed char Ws3 = 6; // eat_ws
- const signed char MP = 7; // markupdecl or PEReference
- const signed char PER = 8; // PERReference
- const signed char Mup = 9; // markupdecl
- const signed char Ws4 = 10; // eat_ws
- const signed char MPE = 11; // end of markupdecl or PEReference
- const signed char Done = 12;
-
- const signed char InpWs = 0;
- const signed char InpD = 1; // 'D'
- const signed char InpS = 2; // 'S' or 'P'
- const signed char InpOB = 3; // [
- const signed char InpCB = 4; // ]
- const signed char InpPer = 5; // %
- const signed char InpGt = 6; // >
- const signed char InpUnknown = 7;
-
- // use some kind of state machine for parsing
- static signed char table[12][8] = {
- /* InpWs, InpD InpS InpOB InpCB InpPer InpGt InpUnknown */
- { -1, Doctype, -1, -1, -1, -1, -1, -1 }, // Init
- { Ws1, Doctype2, Doctype2, -1, -1, -1, -1, Doctype2 }, // Doctype
- { -1, Doctype2, Doctype2, -1, -1, -1, -1, Doctype2 }, // Ws1
- { Ws2, -1, Sys, MP, -1, -1, Done, -1 }, // Doctype2
- { -1, -1, Sys, MP, -1, -1, Done, -1 }, // Ws2
- { Ws3, -1, -1, MP, -1, -1, Done, -1 }, // Sys
- { -1, -1, -1, MP, -1, -1, Done, -1 }, // Ws3
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // MP
- { Ws4, -1, -1, -1, MPE, PER, -1, Mup }, // PER
- { Ws4, -1, -1, -1, MPE, PER, -1, Mup }, // Mup
- { -1, -1, -1, -1, MPE, PER, -1, Mup }, // Ws4
- { -1, -1, -1, -1, -1, -1, Done, -1 } // MPE
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == 'D' ) {
- input = InpD;
- } else if ( c == 'S' ) {
- input = InpS;
- } else if ( c == 'P' ) {
- input = InpS;
- } else if ( c == '[' ) {
- input = InpOB;
- } else if ( c == ']' ) {
- input = InpCB;
- } else if ( c == '%' ) {
- input = InpPer;
- } else if ( c == '>' ) {
- input = InpGt;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Doctype:
- parseOk = parseString( "DOCTYPE" );
- break;
- case Ws1:
- case Ws2:
- case Ws3:
- case Ws4:
- eat_ws();
- break;
- case Doctype2:
- parseName();
- break;
- case Sys:
- parseOk = parseExternalID();
- break;
- case MP:
- next_eat_ws();
- break;
- case PER:
- parseOk = parsePEReference( InDTD );
- break;
- case Mup:
- parseOk = parseMarkupdecl();
- break;
- case MPE:
- next_eat_ws();
- break;
- case Done:
- if ( lexicalHnd ) {
- if ( !lexicalHnd->endDTD() ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Doctype:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGDOCTYPE;
- goto parseError;
- }
- if ( !is_S(c) ) {
- d->error = XMLERR_ERRORPARSINGDOCTYPE;
- goto parseError;
- }
- break;
- case Doctype2:
- d->doctype = name();
- if ( lexicalHnd ) {
- if ( !lexicalHnd->startDTD( d->doctype, d->publicId, d->systemId ) ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- break;
- case Sys:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGDOCTYPE;
- goto parseError;
- }
- break;
- case PER:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGDOCTYPE;
- goto parseError;
- }
- break;
- case Mup:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGDOCTYPE;
- goto parseError;
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_ERRORPARSINGDOCTYPE;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a ExternalID [75].
-
- If allowPublicID is TRUE parse ExternalID [75] or PublicID [83].
-*/
-bool QXmlSimpleReader::parseExternalID( bool allowPublicID )
-{
- // some init-stuff
- d->systemId = QString::null;
- d->publicId = QString::null;
-
- const signed char Init = 0;
- const signed char Sys = 1; // parse 'SYSTEM'
- const signed char SysWS = 2; // parse the whitespace after 'SYSTEM'
- const signed char SysSQ = 3; // parse SystemLiteral with '
- const signed char SysSQ2 = 4; // parse SystemLiteral with '
- const signed char SysDQ = 5; // parse SystemLiteral with "
- const signed char SysDQ2 = 6; // parse SystemLiteral with "
- const signed char Pub = 7; // parse 'PUBLIC'
- const signed char PubWS = 8; // parse the whitespace after 'PUBLIC'
- const signed char PubSQ = 9; // parse PubidLiteral with '
- const signed char PubSQ2 = 10; // parse PubidLiteral with '
- const signed char PubDQ = 11; // parse PubidLiteral with "
- const signed char PubDQ2 = 12; // parse PubidLiteral with "
- const signed char PubE = 13; // finished parsing the PubidLiteral
- const signed char PubWS2 = 14; // parse the whitespace after the PubidLiteral
- const signed char PDone = 15; // done if allowPublicID is TRUE
- const signed char Done = 16;
-
- const signed char InpSQ = 0; // '
- const signed char InpDQ = 1; // "
- const signed char InpS = 2; // S
- const signed char InpP = 3; // P
- const signed char InpWs = 4; // white space
- const signed char InpUnknown = 5;
-
- // use some kind of state machine for parsing
- static signed char table[15][6] = {
- /* InpSQ InpDQ InpS InpP InpWs InpUnknown */
- { -1, -1, Sys, Pub, -1, -1 }, // Init
- { -1, -1, -1, -1, SysWS, -1 }, // Sys
- { SysSQ, SysDQ, -1, -1, -1, -1 }, // SysWS
- { Done, SysSQ2, SysSQ2, SysSQ2, SysSQ2, SysSQ2 }, // SysSQ
- { Done, SysSQ2, SysSQ2, SysSQ2, SysSQ2, SysSQ2 }, // SysSQ2
- { SysDQ2, Done, SysDQ2, SysDQ2, SysDQ2, SysDQ2 }, // SysDQ
- { SysDQ2, Done, SysDQ2, SysDQ2, SysDQ2, SysDQ2 }, // SysDQ2
- { -1, -1, -1, -1, PubWS, -1 }, // Pub
- { PubSQ, PubDQ, -1, -1, -1, -1 }, // PubWS
- { PubE, -1, PubSQ2, PubSQ2, PubSQ2, PubSQ2 }, // PubSQ
- { PubE, -1, PubSQ2, PubSQ2, PubSQ2, PubSQ2 }, // PubSQ2
- { -1, PubE, PubDQ2, PubDQ2, PubDQ2, PubDQ2 }, // PubDQ
- { -1, PubE, PubDQ2, PubDQ2, PubDQ2, PubDQ2 }, // PubDQ2
- { PDone, PDone, PDone, PDone, PubWS2, PDone }, // PubE
- { SysSQ, SysDQ, PDone, PDone, PDone, PDone } // PubWS2
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '\'' ) {
- input = InpSQ;
- } else if ( c == '"' ) {
- input = InpDQ;
- } else if ( c == 'S' ) {
- input = InpS;
- } else if ( c == 'P' ) {
- input = InpP;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Sys:
- parseOk = parseString( "SYSTEM" );
- break;
- case SysWS:
- eat_ws();
- break;
- case SysSQ:
- case SysDQ:
- stringClear();
- next();
- break;
- case SysSQ2:
- case SysDQ2:
- stringAddC();
- next();
- break;
- case Pub:
- parseOk = parseString( "PUBLIC" );
- break;
- case PubWS:
- eat_ws();
- break;
- case PubSQ:
- case PubDQ:
- stringClear();
- next();
- break;
- case PubSQ2:
- case PubDQ2:
- stringAddC();
- next();
- break;
- case PubE:
- next();
- break;
- case PubWS2:
- d->publicId = string();
- eat_ws();
- break;
- case Done:
- d->systemId = string();
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Sys:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Pub:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case PDone:
- if ( allowPublicID ) {
- d->publicId = string();
- return TRUE;
- } else {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a markupdecl [29].
-*/
-bool QXmlSimpleReader::parseMarkupdecl()
-{
- const signed char Init = 0;
- const signed char Lt = 1; // < was read
- const signed char Em = 2; // ! was read
- const signed char CE = 3; // E was read
- const signed char Qm = 4; // ? was read
- const signed char Dash = 5; // - was read
- const signed char CA = 6; // A was read
- const signed char CEL = 7; // EL was read
- const signed char CEN = 8; // EN was read
- const signed char CN = 9; // N was read
- const signed char Done = 10;
-
- const signed char InpLt = 0; // <
- const signed char InpQm = 1; // ?
- const signed char InpEm = 2; // !
- const signed char InpDash = 3; // -
- const signed char InpA = 4; // A
- const signed char InpE = 5; // E
- const signed char InpL = 6; // L
- const signed char InpN = 7; // N
- const signed char InpUnknown = 8;
-
- // use some kind of state machine for parsing
- static signed char table[4][9] = {
- /* InpLt InpQm InpEm InpDash InpA InpE InpL InpN InpUnknown */
- { Lt, -1, -1, -1, -1, -1, -1, -1, -1 }, // Init
- { -1, Qm, Em, -1, -1, -1, -1, -1, -1 }, // Lt
- { -1, -1, -1, Dash, CA, CE, -1, CN, -1 }, // Em
- { -1, -1, -1, -1, -1, -1, CEL, CEN, -1 } // CE
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c == '<' ) {
- input = InpLt;
- } else if ( c == '?' ) {
- input = InpQm;
- } else if ( c == '!' ) {
- input = InpEm;
- } else if ( c == '-' ) {
- input = InpDash;
- } else if ( c == 'A' ) {
- input = InpA;
- } else if ( c == 'E' ) {
- input = InpE;
- } else if ( c == 'L' ) {
- input = InpL;
- } else if ( c == 'N' ) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Lt:
- next();
- break;
- case Em:
- next();
- break;
- case CE:
- next();
- break;
- case Qm:
- parseOk = parsePI();
- break;
- case Dash:
- parseOk = parseComment();
- break;
- case CA:
- parseOk = parseAttlistDecl();
- break;
- case CEL:
- parseOk = parseElementDecl();
- break;
- case CEN:
- parseOk = parseEntityDecl();
- break;
- case CN:
- parseOk = parseNotationDecl();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Qm:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGPI;
- goto parseError;
- }
- if ( contentHnd ) {
- if ( !contentHnd->processingInstruction(name(),string()) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- return TRUE;
- case Dash:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGCOMMENT;
- goto parseError;
- }
- if ( lexicalHnd ) {
- if ( !lexicalHnd->comment( string() ) ) {
- d->error = lexicalHnd->errorString();
- goto parseError;
- }
- }
- return TRUE;
- case CA:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGATTLISTDECL;
- goto parseError;
- }
- return TRUE;
- case CEL:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGELEMENTDECL;
- goto parseError;
- }
- return TRUE;
- case CEN:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGENTITYDECL;
- goto parseError;
- }
- return TRUE;
- case CN:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNOTATIONDECL;
- goto parseError;
- }
- return TRUE;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a PEReference [69]
-*/
-bool QXmlSimpleReader::parsePEReference( EntityRecognitionContext context )
-{
- const signed char Init = 0;
- const signed char Next = 1;
- const signed char Name = 2;
- const signed char Done = 3;
-
- const signed char InpSemi = 0; // ;
- const signed char InpPer = 1; // %
- const signed char InpUnknown = 2;
-
- // use some kind of state machine for parsing
- static signed char table[3][3] = {
- /* InpSemi InpPer InpUnknown */
- { -1, Next, -1 }, // Init
- { -1, -1, Name }, // Next
- { Done, -1, -1 } // Name
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c == ';' ) {
- input = InpSemi;
- } else if ( c == '%' ) {
- input = InpPer;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Next:
- next();
- break;
- case Name:
- parseOk = parseName( TRUE );
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Name:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- if ( d->parameterEntities.find( ref() ) == d->parameterEntities.end() ) {
- // ### skip it???
- if ( contentHnd ) {
- if ( !contentHnd->skippedEntity( QString("%") + ref() ) ) {
- d->error = contentHnd->errorString();
- goto parseError;
- }
- }
- } else {
- if ( context == InEntityValue ) {
- // Included in literal
- xmlRef = d->parameterEntities.find( ref() )
- .data().replace( QRegExp("\""), "&quot;" ).replace( QRegExp("'"), "&apos;" )
- + xmlRef;
- } else if ( context == InDTD ) {
- // Included as PE
- xmlRef = QString(" ") +
- d->parameterEntities.find( ref() ).data() +
- QString(" ") + xmlRef;
- }
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a AttlistDecl [52].
-
- Precondition: the beginning '<!' is already read and the head
- stands on the 'A' of '<!ATTLIST'
-*/
-bool QXmlSimpleReader::parseAttlistDecl()
-{
- const signed char Init = 0;
- const signed char Attlist = 1; // parse the string "ATTLIST"
- const signed char Ws = 2; // whitespace read
- const signed char Name = 3; // parse name
- const signed char Ws1 = 4; // whitespace read
- const signed char Attdef = 5; // parse the AttDef
- const signed char Ws2 = 6; // whitespace read
- const signed char Atttype = 7; // parse the AttType
- const signed char Ws3 = 8; // whitespace read
- const signed char DDecH = 9; // DefaultDecl with #
- const signed char DefReq = 10; // parse the string "REQUIRED"
- const signed char DefImp = 11; // parse the string "IMPLIED"
- const signed char DefFix = 12; // parse the string "FIXED"
- const signed char Attval = 13; // parse the AttValue
- const signed char Ws4 = 14; // whitespace read
- const signed char Done = 15;
-
- const signed char InpWs = 0; // white space
- const signed char InpGt = 1; // >
- const signed char InpHash = 2; // #
- const signed char InpA = 3; // A
- const signed char InpI = 4; // I
- const signed char InpF = 5; // F
- const signed char InpR = 6; // R
- const signed char InpUnknown = 7;
-
- // use some kind of state machine for parsing
- static signed char table[15][8] = {
- /* InpWs InpGt InpHash InpA InpI InpF InpR InpUnknown */
- { -1, -1, -1, Attlist, -1, -1, -1, -1 }, // Init
- { Ws, -1, -1, -1, -1, -1, -1, -1 }, // Attlist
- { -1, -1, -1, Name, Name, Name, Name, Name }, // Ws
- { Ws1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef }, // Name
- { -1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef }, // Ws1
- { Ws2, -1, -1, -1, -1, -1, -1, -1 }, // Attdef
- { -1, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype }, // Ws2
- { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // Atttype
- { -1, Attval, DDecH, Attval, Attval, Attval, Attval, Attval }, // Ws3
- { -1, -1, -1, -1, DefImp, DefFix, DefReq, -1 }, // DDecH
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // DefReq
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // DefImp
- { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // DefFix
- { Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // Attval
- { -1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef } // Ws4
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '>' ) {
- input = InpGt;
- } else if ( c == '#' ) {
- input = InpHash;
- } else if ( c == 'A' ) {
- input = InpA;
- } else if ( c == 'I' ) {
- input = InpI;
- } else if ( c == 'F' ) {
- input = InpF;
- } else if ( c == 'R' ) {
- input = InpR;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Attlist:
- parseOk = parseString( "ATTLIST" );
- break;
- case Ws:
- case Ws1:
- case Ws2:
- case Ws3:
- eat_ws();
- break;
- case Name:
- parseOk = parseName();
- break;
- case Attdef:
- parseOk = parseName();
- break;
- case Atttype:
- parseOk = parseAttType();
- break;
- case DDecH:
- next();
- break;
- case DefReq:
- parseOk = parseString( "REQUIRED" );
- break;
- case DefImp:
- parseOk = parseString( "IMPLIED" );
- break;
- case DefFix:
- parseOk = parseString( "FIXED" );
- break;
- case Attval:
- parseOk = parseAttValue();
- break;
- case Ws4:
- if ( declHnd ) {
- // TODO: not all values are computed yet...
- if ( !declHnd->attributeDecl( d->attDeclEName, d->attDeclAName, "", "", "" ) ) {
- d->error = declHnd->errorString();
- goto parseError;
- }
- }
- eat_ws();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Attlist:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Name:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- d->attDeclEName = name();
- break;
- case Attdef:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- d->attDeclAName = name();
- break;
- case Atttype:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGATTTYPE;
- goto parseError;
- }
- break;
- case DefReq:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case DefImp:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case DefFix:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Attval:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGATTVALUE;
- goto parseError;
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a AttType [54]
-*/
-bool QXmlSimpleReader::parseAttType()
-{
- const signed char Init = 0;
- const signed char ST = 1; // StringType
- const signed char TTI = 2; // TokenizedType starting with 'I'
- const signed char TTI2 = 3; // TokenizedType helpstate
- const signed char TTI3 = 4; // TokenizedType helpstate
- const signed char TTE = 5; // TokenizedType starting with 'E'
- const signed char TTEY = 6; // TokenizedType starting with 'ENTITY'
- const signed char TTEI = 7; // TokenizedType starting with 'ENTITI'
- const signed char N = 8; // N read (TokenizedType or Notation)
- const signed char TTNM = 9; // TokenizedType starting with 'NM'
- const signed char TTNM2 = 10; // TokenizedType helpstate
- const signed char NO = 11; // Notation
- const signed char NO2 = 12; // Notation helpstate
- const signed char NO3 = 13; // Notation helpstate
- const signed char NOName = 14; // Notation, read name
- const signed char NO4 = 15; // Notation helpstate
- const signed char EN = 16; // Enumeration
- const signed char ENNmt = 17; // Enumeration, read Nmtoken
- const signed char EN2 = 18; // Enumeration helpstate
- const signed char ADone = 19; // almost done (make next and accept)
- const signed char Done = 20;
-
- const signed char InpWs = 0; // whitespace
- const signed char InpOp = 1; // (
- const signed char InpCp = 2; // )
- const signed char InpPipe = 3; // |
- const signed char InpC = 4; // C
- const signed char InpE = 5; // E
- const signed char InpI = 6; // I
- const signed char InpM = 7; // M
- const signed char InpN = 8; // N
- const signed char InpO = 9; // O
- const signed char InpR = 10; // R
- const signed char InpS = 11; // S
- const signed char InpY = 12; // Y
- const signed char InpUnknown = 13;
-
- // use some kind of state machine for parsing
- static signed char table[19][14] = {
- /* InpWs InpOp InpCp InpPipe InpC InpE InpI InpM InpN InpO InpR InpS InpY InpUnknown */
- { -1, EN, -1, -1, ST, TTE, TTI, -1, N, -1, -1, -1, -1, -1 }, // Init
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // ST
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTI2, Done, Done, Done }, // TTI
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTI3, Done, Done }, // TTI2
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTI3
- { -1, -1, -1, -1, -1, -1, TTEI, -1, -1, -1, -1, -1, TTEY, -1 }, // TTE
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTEY
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTEI
- { -1, -1, -1, -1, -1, -1, -1, TTNM, -1, NO, -1, -1, -1, -1 }, // N
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, TTNM2, Done, Done }, // TTNM
- { Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done, Done }, // TTNM2
- { NO2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO
- { -1, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO2
- { NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName, NOName }, // NO3
- { NO4, -1, ADone, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NOName
- { -1, -1, ADone, NO3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // NO4
- { -1, -1, ENNmt, -1, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt, ENNmt }, // EN
- { EN2, -1, ADone, EN, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // ENNmt
- { -1, -1, ADone, EN, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } // EN2
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '(' ) {
- input = InpOp;
- } else if ( c == ')' ) {
- input = InpCp;
- } else if ( c == '|' ) {
- input = InpPipe;
- } else if ( c == 'C' ) {
- input = InpC;
- } else if ( c == 'E' ) {
- input = InpE;
- } else if ( c == 'I' ) {
- input = InpI;
- } else if ( c == 'M' ) {
- input = InpM;
- } else if ( c == 'N' ) {
- input = InpN;
- } else if ( c == 'O' ) {
- input = InpO;
- } else if ( c == 'R' ) {
- input = InpR;
- } else if ( c == 'S' ) {
- input = InpS;
- } else if ( c == 'Y' ) {
- input = InpY;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case ST:
- parseOk = parseString( "CDATA" );
- break;
- case TTI:
- parseOk = parseString( "ID" );
- break;
- case TTI2:
- parseOk = parseString( "REF" );
- break;
- case TTI3:
- next(); // S
- break;
- case TTE:
- parseOk = parseString( "ENTIT" );
- break;
- case TTEY:
- next(); // Y
- break;
- case TTEI:
- parseOk = parseString( "IES" );
- break;
- case N:
- next(); // N
- break;
- case TTNM:
- parseOk = parseString( "MTOKEN" );
- break;
- case TTNM2:
- next(); // S
- break;
- case NO:
- parseOk = parseString( "OTATION" );
- break;
- case NO2:
- eat_ws();
- break;
- case NO3:
- next_eat_ws();
- break;
- case NOName:
- parseOk = parseName();
- break;
- case NO4:
- eat_ws();
- break;
- case EN:
- next_eat_ws();
- break;
- case ENNmt:
- parseOk = parseNmtoken();
- break;
- case EN2:
- eat_ws();
- break;
- case ADone:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case ST:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case TTI:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case TTI2:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case TTE:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case TTEI:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case TTNM:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case NO:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case NOName:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case ENNmt:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNMTOKEN;
- goto parseError;
- }
- break;
- case ADone:
- return TRUE;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a AttValue [10]
-
- Precondition: the head stands on the beginning " or '
-
- If this function was successful, the head stands on the first
- character after the closing " or ' and the value of the attribute
- is in string().
-*/
-bool QXmlSimpleReader::parseAttValue()
-{
- bool tmp;
-
- const signed char Init = 0;
- const signed char Dq = 1; // double quotes were read
- const signed char DqRef = 2; // read references in double quotes
- const signed char DqC = 3; // signed character read in double quotes
- const signed char Sq = 4; // single quotes were read
- const signed char SqRef = 5; // read references in single quotes
- const signed char SqC = 6; // signed character read in single quotes
- const signed char Done = 7;
-
- const signed char InpDq = 0; // "
- const signed char InpSq = 1; // '
- const signed char InpAmp = 2; // &
- const signed char InpLt = 3; // <
- const signed char InpUnknown = 4;
-
- // use some kind of state machine for parsing
- static signed char table[7][5] = {
- /* InpDq InpSq InpAmp InpLt InpUnknown */
- { Dq, Sq, -1, -1, -1 }, // Init
- { Done, DqC, DqRef, -1, DqC }, // Dq
- { Done, DqC, DqRef, -1, DqC }, // DqRef
- { Done, DqC, DqRef, -1, DqC }, // DqC
- { SqC, Done, SqRef, -1, SqC }, // Sq
- { SqC, Done, SqRef, -1, SqC }, // SqRef
- { SqC, Done, SqRef, -1, SqC } // SqRef
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c == '"' ) {
- input = InpDq;
- } else if ( c == '\'' ) {
- input = InpSq;
- } else if ( c == '&' ) {
- input = InpAmp;
- } else if ( c == '<' ) {
- input = InpLt;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Dq:
- case Sq:
- stringClear();
- next();
- break;
- case DqRef:
- case SqRef:
- parseOk = parseReference( tmp, InAttributeValue );
- break;
- case DqC:
- case SqC:
- stringAddC();
- next();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case DqRef:
- case SqRef:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGREFERENCE;
- goto parseError;
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a elementdecl [45].
-
- Precondition: the beginning '<!E' is already read and the head
- stands on the 'L' of '<!ELEMENT'
-*/
-bool QXmlSimpleReader::parseElementDecl()
-{
- const signed char Init = 0;
- const signed char Elem = 1; // parse the beginning string
- const signed char Ws1 = 2; // whitespace required
- const signed char Nam = 3; // parse Name
- const signed char Ws2 = 4; // whitespace required
- const signed char Empty = 5; // read EMPTY
- const signed char Any = 6; // read ANY
- const signed char Cont = 7; // read contentspec (except ANY or EMPTY)
- const signed char Mix = 8; // read Mixed
- const signed char Mix2 = 9; //
- const signed char Mix3 = 10; //
- const signed char MixN1 = 11; //
- const signed char MixN2 = 12; //
- const signed char MixN3 = 13; //
- const signed char MixN4 = 14; //
- const signed char Cp = 15; // parse cp
- const signed char Cp2 = 16; //
- const signed char WsD = 17; // eat whitespace before Done
- const signed char Done = 18;
-
- const signed char InpWs = 0;
- const signed char InpGt = 1; // >
- const signed char InpPipe = 2; // |
- const signed char InpOp = 3; // (
- const signed char InpCp = 4; // )
- const signed char InpHash = 5; // #
- const signed char InpQm = 6; // ?
- const signed char InpAst = 7; // *
- const signed char InpPlus = 8; // +
- const signed char InpA = 9; // A
- const signed char InpE = 10; // E
- const signed char InpL = 11; // L
- const signed char InpUnknown = 12;
-
- // use some kind of state machine for parsing
- static signed char table[18][13] = {
- /* InpWs InpGt InpPipe InpOp InpCp InpHash InpQm InpAst InpPlus InpA InpE InpL InpUnknown */
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, Elem, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Elem
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, Nam, Nam, Nam, Nam }, // Ws1
- { Ws2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Nam
- { -1, -1, -1, Cont, -1, -1, -1, -1, -1, Any, Empty, -1, -1 }, // Ws2
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Empty
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Any
- { -1, -1, -1, Cp, Cp, Mix, -1, -1, -1, Cp, Cp, Cp, Cp }, // Cont
- { Mix2, -1, MixN1, -1, Mix3, -1, -1, -1, -1, -1, -1, -1, -1 }, // Mix
- { -1, -1, MixN1, -1, Mix3, -1, -1, -1, -1, -1, -1, -1, -1 }, // Mix2
- { WsD, Done, -1, -1, -1, -1, -1, WsD, -1, -1, -1, -1, -1 }, // Mix3
- { -1, -1, -1, -1, -1, -1, -1, -1, -1, MixN2, MixN2, MixN2, MixN2 }, // MixN1
- { MixN3, -1, MixN1, -1, MixN4, -1, -1, -1, -1, -1, -1, -1, -1 }, // MixN2
- { -1, -1, MixN1, -1, MixN4, -1, -1, -1, -1, -1, -1, -1, -1 }, // MixN3
- { -1, -1, -1, -1, -1, -1, -1, WsD, -1, -1, -1, -1, -1 }, // MixN4
- { WsD, Done, -1, -1, -1, -1, Cp2, Cp2, Cp2, -1, -1, -1, -1 }, // Cp
- { WsD, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, // Cp2
- { -1, Done, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } // WsD
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // read input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '>' ) {
- input = InpGt;
- } else if ( c == '|' ) {
- input = InpPipe;
- } else if ( c == '(' ) {
- input = InpOp;
- } else if ( c == ')' ) {
- input = InpCp;
- } else if ( c == '#' ) {
- input = InpHash;
- } else if ( c == '?' ) {
- input = InpQm;
- } else if ( c == '*' ) {
- input = InpAst;
- } else if ( c == '+' ) {
- input = InpPlus;
- } else if ( c == 'A' ) {
- input = InpA;
- } else if ( c == 'E' ) {
- input = InpE;
- } else if ( c == 'L' ) {
- input = InpL;
- } else {
- input = InpUnknown;
- }
- // get new state
-//qDebug( "%d -%d(%c)-> %d", state, input, c.latin1(), table[state][input] );
- state = table[state][input];
-
- // in some cases do special actions depending on state
- switch ( state ) {
- case Elem:
- parseOk = parseString( "LEMENT" );
- break;
- case Ws1:
- eat_ws();
- break;
- case Nam:
- parseOk = parseName();
- break;
- case Ws2:
- eat_ws();
- break;
- case Empty:
- parseOk = parseString( "EMPTY" );
- break;
- case Any:
- parseOk = parseString( "ANY" );
- break;
- case Cont:
- next_eat_ws();
- break;
- case Mix:
- parseOk = parseString( "#PCDATA" );
- break;
- case Mix2:
- eat_ws();
- break;
- case Mix3:
- next();
- break;
- case MixN1:
- next_eat_ws();
- break;
- case MixN2:
- parseOk = parseName();
- break;
- case MixN3:
- eat_ws();
- break;
- case MixN4:
- next();
- break;
- case Cp:
- parseOk = parseChoiceSeq();
- break;
- case Cp2:
- next();
- break;
- case WsD:
- next_eat_ws();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Elem:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Nam:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case Empty:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Any:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Mix:
- if( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case MixN2:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case Cp:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGCHOICE;
- goto parseError;
- }
- break;
- case Done:
- return TRUE;
- case -1:
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a NotationDecl [82].
-
- Precondition: the beginning '<!' is already read and the head
- stands on the 'N' of '<!NOTATION'
-*/
-bool QXmlSimpleReader::parseNotationDecl()
-{
- const signed char Init = 0;
- const signed char Not = 1; // read NOTATION
- const signed char Ws1 = 2; // eat whitespaces
- const signed char Nam = 3; // read Name
- const signed char Ws2 = 4; // eat whitespaces
- const signed char ExtID = 5; // parse ExternalID
- const signed char Ws3 = 6; // eat whitespaces
- const signed char Done = 7;
-
- const signed char InpWs = 0;
- const signed char InpGt = 1; // >
- const signed char InpN = 2; // N
- const signed char InpUnknown = 3;
-
- // use some kind of state machine for parsing
- static signed char table[7][4] = {
- /* InpWs InpGt InpN InpUnknown */
- { -1, -1, Not, -1 }, // Init
- { Ws1, -1, -1, -1 }, // Not
- { -1, -1, Nam, Nam }, // Ws1
- { Ws2, Done, -1, -1 }, // Nam
- { -1, Done, ExtID, ExtID }, // Ws2
- { Ws3, Done, -1, -1 }, // ExtID
- { -1, Done, -1, -1 } // Ws3
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '>' ) {
- input = InpGt;
- } else if ( c == 'N' ) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Not:
- parseOk = parseString( "NOTATION" );
- break;
- case Ws1:
- eat_ws();
- break;
- case Nam:
- parseOk = parseName();
- break;
- case Ws2:
- eat_ws();
- break;
- case ExtID:
- parseOk = parseExternalID( TRUE );
- break;
- case Ws3:
- eat_ws();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Not:
- if ( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Nam:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case ExtID:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGEXTERNALID;
- goto parseError;
- }
- // call the handler
- if ( dtdHnd ) {
- if ( !dtdHnd->notationDecl( name(), d->publicId, d->systemId ) ) {
- d->error = dtdHnd->errorString();
- goto parseError;
- }
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse choice [49] or seq [50].
-
- Precondition: the beginning '('S? is already read and the head
- stands on the first non-whitespace character after it.
-*/
-bool QXmlSimpleReader::parseChoiceSeq()
-{
- const signed char Init = 0;
- const signed char Ws1 = 1; // eat whitespace
- const signed char CS_ = 2; // choice or set
- const signed char Ws2 = 3; // eat whitespace
- const signed char More = 4; // more cp to read
- const signed char Name = 5; // read name
- const signed char Done = 6; //
-
- const signed char InpWs = 0; // S
- const signed char InpOp = 1; // (
- const signed char InpCp = 2; // )
- const signed char InpQm = 3; // ?
- const signed char InpAst = 4; // *
- const signed char InpPlus = 5; // +
- const signed char InpPipe = 6; // |
- const signed char InpComm = 7; // ,
- const signed char InpUnknown = 8;
-
- // use some kind of state machine for parsing
- static signed char table[6][9] = {
- /* InpWs InpOp InpCp InpQm InpAst InpPlus InpPipe InpComm InpUnknown */
- { -1, Ws1, -1, -1, -1, -1, -1, -1, Name }, // Init
- { -1, CS_, -1, -1, -1, -1, -1, -1, CS_ }, // Ws1
- { Ws2, -1, Done, Ws2, Ws2, Ws2, More, More, -1 }, // CS_
- { -1, -1, Done, -1, -1, -1, More, More, -1 }, // Ws2
- { -1, Ws1, -1, -1, -1, -1, -1, -1, Name }, // More (same as Init)
- { Ws2, -1, Done, Ws2, Ws2, Ws2, More, More, -1 } // Name (same as CS_)
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '(' ) {
- input = InpOp;
- } else if ( c == ')' ) {
- input = InpCp;
- } else if ( c == '?' ) {
- input = InpQm;
- } else if ( c == '*' ) {
- input = InpAst;
- } else if ( c == '+' ) {
- input = InpPlus;
- } else if ( c == '|' ) {
- input = InpPipe;
- } else if ( c == ',' ) {
- input = InpComm;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Ws1:
- next_eat_ws();
- break;
- case CS_:
- parseOk = parseChoiceSeq();
- break;
- case Ws2:
- next_eat_ws();
- break;
- case More:
- next_eat_ws();
- break;
- case Name:
- parseOk = parseName();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case CS_:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGCHOICE;
- goto parseError;
- }
- break;
- case Name:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a EntityDecl [70].
-
- Precondition: the beginning '<!E' is already read and the head
- stand on the 'N' of '<!ENTITY'
-*/
-bool QXmlSimpleReader::parseEntityDecl()
-{
- const signed char Init = 0;
- const signed char Ent = 1; // parse "ENTITY"
- const signed char Ws1 = 2; // white space read
- const signed char Name = 3; // parse name
- const signed char Ws2 = 4; // white space read
- const signed char EValue = 5; // parse entity value
- const signed char ExtID = 6; // parse ExternalID
- const signed char Ws3 = 7; // white space read
- const signed char Ndata = 8; // parse "NDATA"
- const signed char Ws4 = 9; // white space read
- const signed char NNam = 10; // parse name
- const signed char PEDec = 11; // parse PEDecl
- const signed char Ws6 = 12; // white space read
- const signed char PENam = 13; // parse name
- const signed char Ws7 = 14; // white space read
- const signed char PEVal = 15; // parse entity value
- const signed char PEEID = 16; // parse ExternalID
- const signed char WsE = 17; // white space read
- const signed char EDDone = 19; // done, but also report an external, unparsed entity decl
- const signed char Done = 18;
-
- const signed char InpWs = 0; // white space
- const signed char InpPer = 1; // %
- const signed char InpQuot = 2; // " or '
- const signed char InpGt = 3; // >
- const signed char InpN = 4; // N
- const signed char InpUnknown = 5;
-
- // use some kind of state machine for parsing
- static signed char table[18][6] = {
- /* InpWs InpPer InpQuot InpGt InpN InpUnknown */
- { -1, -1, -1, -1, Ent, -1 }, // Init
- { Ws1, -1, -1, -1, -1, -1 }, // Ent
- { -1, PEDec, -1, -1, Name, Name }, // Ws1
- { Ws2, -1, -1, -1, -1, -1 }, // Name
- { -1, -1, EValue, -1, -1, ExtID }, // Ws2
- { WsE, -1, -1, Done, -1, -1 }, // EValue
- { Ws3, -1, -1, EDDone,-1, -1 }, // ExtID
- { -1, -1, -1, EDDone,Ndata, -1 }, // Ws3
- { Ws4, -1, -1, -1, -1, -1 }, // Ndata
- { -1, -1, -1, -1, NNam, NNam }, // Ws4
- { WsE, -1, -1, Done, -1, -1 }, // NNam
- { Ws6, -1, -1, -1, -1, -1 }, // PEDec
- { -1, -1, -1, -1, PENam, PENam }, // Ws6
- { Ws7, -1, -1, -1, -1, -1 }, // PENam
- { -1, -1, PEVal, -1, -1, PEEID }, // Ws7
- { WsE, -1, -1, Done, -1, -1 }, // PEVal
- { WsE, -1, -1, Done, -1, -1 }, // PEEID
- { -1, -1, -1, Done, -1, -1 } // WsE
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_S(c) ) {
- input = InpWs;
- } else if ( c == '%' ) {
- input = InpPer;
- } else if ( c == '"' || c == '\'' ) {
- input = InpQuot;
- } else if ( c == '>' ) {
- input = InpGt;
- } else if ( c == 'N' ) {
- input = InpN;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Ent:
- parseOk = parseString( "NTITY" );
- break;
- case Ws1:
- eat_ws();
- break;
- case Name:
- parseOk = parseName();
- break;
- case Ws2:
- eat_ws();
- break;
- case EValue:
- parseOk = parseEntityValue();
- break;
- case ExtID:
- parseOk = parseExternalID();
- break;
- case Ws3:
- eat_ws();
- break;
- case Ndata:
- parseOk = parseString( "NDATA" );
- break;
- case Ws4:
- eat_ws();
- break;
- case NNam:
- parseOk = parseName( TRUE );
- break;
- case PEDec:
- next();
- break;
- case Ws6:
- eat_ws();
- break;
- case PENam:
- parseOk = parseName();
- break;
- case Ws7:
- eat_ws();
- break;
- case PEVal:
- parseOk = parseEntityValue();
- break;
- case PEEID:
- parseOk = parseExternalID();
- break;
- case WsE:
- eat_ws();
- break;
- case EDDone:
- next();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Ent:
- if ( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case Name:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case EValue:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGENTITYVALUE;
- goto parseError;
- }
- if ( !entityExist( name() ) ) {
- d->entities.insert( name(), string() );
- if ( declHnd ) {
- if ( !declHnd->internalEntityDecl( name(), string() ) ) {
- d->error = declHnd->errorString();
- goto parseError;
- }
- }
- }
- break;
- case ExtID:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGEXTERNALID;
- goto parseError;
- }
- break;
- case Ndata:
- if ( !parseOk ) {
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
- break;
- case NNam:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- if ( !entityExist( name() ) ) {
- d->externEntities.insert( name(), QXmlSimpleReaderPrivate::ExternEntity( d->publicId, d->systemId, ref() ) );
- if ( dtdHnd ) {
- if ( !dtdHnd->unparsedEntityDecl( name(), d->publicId, d->systemId, ref() ) ) {
- d->error = declHnd->errorString();
- goto parseError;
- }
- }
- }
- break;
- case PENam:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case PEVal:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGENTITYVALUE;
- goto parseError;
- }
- if ( !entityExist( name() ) ) {
- d->parameterEntities.insert( name(), string() );
- if ( declHnd ) {
- if ( !declHnd->internalEntityDecl( QString("%")+name(), string() ) ) {
- d->error = declHnd->errorString();
- goto parseError;
- }
- }
- }
- break;
- case PEEID:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGEXTERNALID;
- goto parseError;
- }
- if ( !entityExist( name() ) ) {
- d->externParameterEntities.insert( name(), QXmlSimpleReaderPrivate::ExternParameterEntity( d->publicId, d->systemId ) );
- if ( declHnd ) {
- if ( !declHnd->externalEntityDecl( QString("%")+name(), d->publicId, d->systemId ) ) {
- d->error = declHnd->errorString();
- goto parseError;
- }
- }
- }
- break;
- case EDDone:
- if ( !entityExist( name() ) ) {
- d->externEntities.insert( name(), QXmlSimpleReaderPrivate::ExternEntity( d->publicId, d->systemId, QString::null ) );
- if ( declHnd ) {
- if ( !declHnd->externalEntityDecl( name(), d->publicId, d->systemId ) ) {
- d->error = declHnd->errorString();
- goto parseError;
- }
- }
- }
- return TRUE;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a EntityValue [9]
-*/
-bool QXmlSimpleReader::parseEntityValue()
-{
- bool tmp;
-
- const signed char Init = 0;
- const signed char Dq = 1; // EntityValue is double quoted
- const signed char DqC = 2; // signed character
- const signed char DqPER = 3; // PEReference
- const signed char DqRef = 4; // Reference
- const signed char Sq = 5; // EntityValue is double quoted
- const signed char SqC = 6; // signed character
- const signed char SqPER = 7; // PEReference
- const signed char SqRef = 8; // Reference
- const signed char Done = 9;
-
- const signed char InpDq = 0; // "
- const signed char InpSq = 1; // '
- const signed char InpAmp = 2; // &
- const signed char InpPer = 3; // %
- const signed char InpUnknown = 4;
-
- // use some kind of state machine for parsing
- static signed char table[9][5] = {
- /* InpDq InpSq InpAmp InpPer InpUnknown */
- { Dq, Sq, -1, -1, -1 }, // Init
- { Done, DqC, DqRef, DqPER, DqC }, // Dq
- { Done, DqC, DqRef, DqPER, DqC }, // DqC
- { Done, DqC, DqRef, DqPER, DqC }, // DqPER
- { Done, DqC, DqRef, DqPER, DqC }, // DqRef
- { SqC, Done, SqRef, SqPER, SqC }, // Sq
- { SqC, Done, SqRef, SqPER, SqC }, // SqC
- { SqC, Done, SqRef, SqPER, SqC }, // SqPER
- { SqC, Done, SqRef, SqPER, SqC } // SqRef
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c == '"' ) {
- input = InpDq;
- } else if ( c == '\'' ) {
- input = InpSq;
- } else if ( c == '&' ) {
- input = InpAmp;
- } else if ( c == '%' ) {
- input = InpPer;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Dq:
- case Sq:
- stringClear();
- next();
- break;
- case DqC:
- case SqC:
- stringAddC();
- next();
- break;
- case DqPER:
- case SqPER:
- parseOk = parsePEReference( InEntityValue );
- break;
- case DqRef:
- case SqRef:
- parseOk = parseReference( tmp, InEntityValue );
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case DqPER:
- case SqPER:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGDOCTYPE;
- goto parseError;
- }
- break;
- case DqRef:
- case SqRef:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGREFERENCE;
- goto parseError;
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a comment [15].
-
- Precondition: the beginning '<!' of the comment is already read and the head
- stands on the first '-' of '<!--'.
-
- If this function was successful, the head-position is on the first
- character after the comment.
-*/
-bool QXmlSimpleReader::parseComment()
-{
- const signed char Init = 0;
- const signed char Dash1 = 1; // the first dash was read
- const signed char Dash2 = 2; // the second dash was read
- const signed char Com = 3; // read comment
- const signed char Com2 = 4; // read comment (help state)
- const signed char ComE = 5; // finished reading comment
- const signed char Done = 6;
-
- const signed char InpDash = 0; // -
- const signed char InpGt = 1; // >
- const signed char InpUnknown = 2;
-
- // use some kind of state machine for parsing
- static signed char table[6][3] = {
- /* InpDash InpGt InpUnknown */
- { Dash1, -1, -1 }, // Init
- { Dash2, -1, -1 }, // Dash1
- { Com2, Com, Com }, // Dash2
- { Com2, Com, Com }, // Com
- { ComE, Com, Com }, // Com2
- { -1, Done, -1 } // ComE
- };
- signed char state = Init;
- signed char input;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c == '-' ) {
- input = InpDash;
- } else if ( c == '>' ) {
- input = InpGt;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Dash1:
- next();
- break;
- case Dash2:
- next();
- break;
- case Com:
- stringAddC();
- next();
- break;
- case Com2:
- next();
- break;
- case ComE:
- next();
- break;
- case Done:
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Dash2:
- stringClear();
- break;
- case Com2:
- // if next character is not a dash than don't skip it
- if ( c != '-' ) {
- stringAddC( '-' );
- }
- break;
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_ERRORPARSINGCOMMENT;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a Attribute [41].
-
- Precondition: the head stands on the first character of the name of the
- attribute (i.e. all whitespaces are already parsed).
-
- The head stand on the next character after the end quotes. The variable name
- contains the name of the attribute and the variable string contains the value
- of the attribute.
-*/
-bool QXmlSimpleReader::parseAttribute()
-{
- const signed char Init = 0;
- const signed char PName = 1; // parse name
- const signed char Ws = 2; // eat ws
- const signed char Eq = 3; // the '=' was read
- const signed char Quotes = 4; // " or ' were read
-
- const signed char InpNameBe = 0;
- const signed char InpEq = 1; // =
- const signed char InpDq = 2; // "
- const signed char InpSq = 3; // '
- const signed char InpUnknown = 4;
-
- // use some kind of state machine for parsing
- static signed char table[4][5] = {
- /* InpNameBe InpEq InpDq InpSq InpUnknown */
- { PName, -1, -1, -1, -1 }, // Init
- { -1, Eq, -1, -1, Ws }, // PName
- { -1, Eq, -1, -1, -1 }, // Ws
- { -1, -1, Quotes, Quotes, -1 } // Eq
- };
- signed char state = Init;
- signed char input;
- bool parseOk = TRUE;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_NameBeginning(c) ) {
- input = InpNameBe;
- } else if ( c == '=' ) {
- input = InpEq;
- } else if ( c == '"' ) {
- input = InpDq;
- } else if ( c == '\'' ) {
- input = InpSq;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case PName:
- parseOk = parseName();
- break;
- case Ws:
- eat_ws();
- break;
- case Eq:
- next_eat_ws();
- break;
- case Quotes:
- parseOk = parseAttValue();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case PName:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGNAME;
- goto parseError;
- }
- break;
- case Quotes:
- if ( !parseOk ) {
- d->error = XMLERR_ERRORPARSINGATTVALUE;
- goto parseError;
- }
- // Done
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a Name [5] and store the name in name or ref (if useRef is TRUE).
-*/
-bool QXmlSimpleReader::parseName( bool useRef )
-{
- const signed char Init = 0;
- const signed char Name1 = 1; // parse first signed character of the name
- const signed char Name = 2; // parse name
- const signed char Done = 3;
-
- const signed char InpNameBe = 0; // name beginning signed characters
- const signed char InpNameCh = 1; // NameChar without InpNameBe
- const signed char InpUnknown = 2;
-
- // use some kind of state machine for parsing
- static signed char table[3][3] = {
- /* InpNameBe InpNameCh InpUnknown */
- { Name1, -1, -1 }, // Init
- { Name, Name, Done }, // Name1
- { Name, Name, Done } // Name
- };
- signed char state = Init;
- signed char input;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_NameBeginning(c) ) {
- input = InpNameBe;
- } else if ( is_NameChar(c) ) {
- input = InpNameCh;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case Name1:
- if ( useRef ) {
- refClear();
- refAddC();
- } else {
- nameClear();
- nameAddC();
- }
- next();
- break;
- case Name:
- if ( useRef ) {
- refAddC();
- } else {
- nameAddC();
- }
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a Nmtoken [7] and store the name in name.
-*/
-bool QXmlSimpleReader::parseNmtoken()
-{
- const signed char Init = 0;
- const signed char NameF = 1;
- const signed char Name = 2;
- const signed char Done = 3;
-
- const signed char InpNameCh = 0; // NameChar without InpNameBe
- const signed char InpUnknown = 1;
-
- // use some kind of state machine for parsing
- static signed char table[3][2] = {
- /* InpNameCh InpUnknown */
- { NameF, -1 }, // Init
- { Name, Done }, // NameF
- { Name, Done } // Name
- };
- signed char state = Init;
- signed char input;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( is_NameChar(c) ) {
- input = InpNameCh;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case NameF:
- nameClear();
- nameAddC();
- next();
- break;
- case Name:
- nameAddC();
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case Done:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_LETTEREXPECTED;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Parse a Reference [67].
-
- charDataRead is set to TRUE if the reference must not be parsed. The
- character(s) which the reference mapped to are appended to string. The
- head stands on the first character after the reference.
-
- charDataRead is set to FALSE if the reference must be parsed. The
- character(s) which the reference mapped to are inserted at the reference
- position. The head stands on the first character of the replacement).
-*/
-bool QXmlSimpleReader::parseReference( bool &charDataRead, EntityRecognitionContext context )
-{
- // temporary variables
- uint tmp;
- bool ok;
-
- const signed char Init = 0;
- const signed char SRef = 1; // start of a reference
- const signed char ChRef = 2; // parse CharRef
- const signed char ChDec = 3; // parse CharRef decimal
- const signed char ChHexS = 4; // start CharRef hexadecimal
- const signed char ChHex = 5; // parse CharRef hexadecimal
- const signed char Name = 6; // parse name
- const signed char DoneD = 7; // done CharRef decimal
- const signed char DoneH = 8; // done CharRef hexadecimal
- const signed char DoneN = 9; // done EntityRef
-
- const signed char InpAmp = 0; // &
- const signed char InpSemi = 1; // ;
- const signed char InpHash = 2; // #
- const signed char InpX = 3; // x
- const signed char InpNum = 4; // 0-9
- const signed char InpHex = 5; // a-f A-F
- const signed char InpUnknown = 6;
-
- // use some kind of state machine for parsing
- static signed char table[8][7] = {
- /* InpAmp InpSemi InpHash InpX InpNum InpHex InpUnknown */
- { SRef, -1, -1, -1, -1, -1, -1 }, // Init
- { -1, -1, ChRef, Name, Name, Name, Name }, // SRef
- { -1, -1, -1, ChHexS, ChDec, -1, -1 }, // ChRef
- { -1, DoneD, -1, -1, ChDec, -1, -1 }, // ChDec
- { -1, -1, -1, -1, ChHex, ChHex, -1 }, // ChHexS
- { -1, DoneH, -1, -1, ChHex, ChHex, -1 }, // ChHex
- { -1, DoneN, -1, -1, -1, -1, -1 } // Name
- };
- signed char state = Init;
- signed char input;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c.row() ) {
- input = InpUnknown;
- } else if ( c.cell() == '&' ) {
- input = InpAmp;
- } else if ( c.cell() == ';' ) {
- input = InpSemi;
- } else if ( c.cell() == '#' ) {
- input = InpHash;
- } else if ( c.cell() == 'x' ) {
- input = InpX;
- } else if ( '0' <= c.cell() && c.cell() <= '9' ) {
- input = InpNum;
- } else if ( 'a' <= c.cell() && c.cell() <= 'f' ) {
- input = InpHex;
- } else if ( 'A' <= c.cell() && c.cell() <= 'F' ) {
- input = InpHex;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- state = table[state][input];
-
- // do some actions according to state
- switch ( state ) {
- case SRef:
- refClear();
- next();
- break;
- case ChRef:
- next();
- break;
- case ChDec:
- refAddC();
- next();
- break;
- case ChHexS:
- next();
- break;
- case ChHex:
- refAddC();
- next();
- break;
- case Name:
- // read the name into the ref
- parseName( TRUE );
- break;
- case DoneD:
- tmp = ref().toUInt( &ok, 10 );
- if ( ok ) {
- stringAddC( QChar(tmp) );
- } else {
- d->error = XMLERR_ERRORPARSINGREFERENCE;
- goto parseError;
- }
- charDataRead = TRUE;
- next();
- break;
- case DoneH:
- tmp = ref().toUInt( &ok, 16 );
- if ( ok ) {
- stringAddC( QChar(tmp) );
- } else {
- d->error = XMLERR_ERRORPARSINGREFERENCE;
- goto parseError;
- }
- charDataRead = TRUE;
- next();
- break;
- case DoneN:
- if ( !processReference( charDataRead, context ) )
- goto parseError;
- next();
- break;
- }
- // no input is read after this
- switch ( state ) {
- case DoneD:
- return TRUE;
- case DoneH:
- return TRUE;
- case DoneN:
- return TRUE;
- case -1:
- // Error
- d->error = XMLERR_ERRORPARSINGREFERENCE;
- goto parseError;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-/*!
- Helper function for parseReference()
-*/
-bool QXmlSimpleReader::processReference( bool &charDataRead, EntityRecognitionContext context )
-{
- QString reference = ref();
- if ( reference == "amp" ) {
- if ( context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'a' ); stringAddC( 'm' ); stringAddC( 'p' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '&' );
- }
- charDataRead = TRUE;
- } else if ( reference == "lt" ) {
- if ( context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'l' ); stringAddC( 't' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '<' );
- }
- charDataRead = TRUE;
- } else if ( reference == "gt" ) {
- if ( context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'g' ); stringAddC( 't' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '>' );
- }
- charDataRead = TRUE;
- } else if ( reference == "apos" ) {
- if ( context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'a' ); stringAddC( 'p' ); stringAddC( 'o' ); stringAddC( 's' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '\'' );
- }
- charDataRead = TRUE;
- } else if ( reference == "quot" ) {
- if ( context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' ); stringAddC( 'q' ); stringAddC( 'u' ); stringAddC( 'o' ); stringAddC( 't' ); stringAddC( ';' );
- } else {
- // Included or Included in literal
- stringAddC( '"' );
- }
- charDataRead = TRUE;
- } else {
- QMap<QString,QString>::Iterator it;
- it = d->entities.find( reference );
- if ( it != d->entities.end() ) {
- // "Internal General"
- switch ( context ) {
- case InContent:
- // Included
- xmlRef = it.data() + xmlRef;
- charDataRead = FALSE;
- break;
- case InAttributeValue:
- // Included in literal
- xmlRef = it.data().replace( QRegExp("\""), "&quot;" ).replace( QRegExp("'"), "&apos;" )
- + xmlRef;
- charDataRead = FALSE;
- break;
- case InEntityValue:
- {
- // Bypassed
- stringAddC( '&' );
- for ( int i=0; i<(int)reference.length(); i++ ) {
- stringAddC( reference[i] );
- }
- stringAddC( ';');
- charDataRead = TRUE;
- }
- break;
- case InDTD:
- // Forbidden
- d->error = XMLERR_INTERNALGENERALENTITYINDTD;
- charDataRead = FALSE;
- break;
- }
- } else {
- QMap<QString,QXmlSimpleReaderPrivate::ExternEntity>::Iterator itExtern;
- itExtern = d->externEntities.find( reference );
- if ( itExtern == d->externEntities.end() ) {
- // entity not declared
- // ### check this case for conformance
- if ( context == InEntityValue ) {
- // Bypassed
- stringAddC( '&' );
- for ( int i=0; i<(int)reference.length(); i++ ) {
- stringAddC( reference[i] );
- }
- stringAddC( ';');
- charDataRead = TRUE;
- } else {
- if ( contentHnd ) {
- if ( !contentHnd->skippedEntity( reference ) ) {
- d->error = contentHnd->errorString();
- return FALSE; // error
- }
- }
- }
- } else if ( (*itExtern).notation.isNull() ) {
- // "External Parsed General"
- switch ( context ) {
- case InContent:
- // Included if validating
- if ( contentHnd ) {
- if ( !contentHnd->skippedEntity( reference ) ) {
- d->error = contentHnd->errorString();
- return FALSE; // error
- }
- }
- charDataRead = FALSE;
- break;
- case InAttributeValue:
- // Forbidden
- d->error = XMLERR_EXTERNALGENERALENTITYINAV;
- charDataRead = FALSE;
- break;
- case InEntityValue:
- {
- // Bypassed
- stringAddC( '&' );
- for ( int i=0; i<(int)reference.length(); i++ ) {
- stringAddC( reference[i] );
- }
- stringAddC( ';');
- charDataRead = TRUE;
- }
- break;
- case InDTD:
- // Forbidden
- d->error = XMLERR_EXTERNALGENERALENTITYINDTD;
- charDataRead = FALSE;
- break;
- }
- } else {
- // "Unparsed"
- // ### notify for "Occurs as Attribute Value" missing (but this is no reference, anyway)
- // Forbidden
- d->error = XMLERR_UNPARSEDENTITYREFERENCE;
- charDataRead = FALSE;
- return FALSE; // error
- }
- }
- }
- return TRUE; // no error
-}
-
-
-/*!
- Parse over a simple string.
-
- After the string was successfully parsed, the head is on the first
- character after the string.
-*/
-bool QXmlSimpleReader::parseString( const QString& s )
-{
- signed char Done = s.length();
-
- const signed char InpCharExpected = 0; // the character that was expected
- const signed char InpUnknown = 1;
-
- signed char state = 0; // state in this function is the position in the string s
- signed char input;
-
- while ( TRUE ) {
-
- // get input
- if ( atEnd() ) {
- d->error = XMLERR_UNEXPECTEDEOF;
- goto parseError;
- }
- if ( c == s[(int)state] ) {
- input = InpCharExpected;
- } else {
- input = InpUnknown;
- }
-
- // set state according to input
- if ( input == InpCharExpected ) {
- state++;
- } else {
- // Error
- d->error = XMLERR_UNEXPECTEDCHARACTER;
- goto parseError;
- }
-
- // do some actions according to state
- next();
- // no input is read after this
- if ( state == Done ) {
- return TRUE;
- }
-
- }
-
- return TRUE;
-
-parseError:
- reportParseError();
- return FALSE;
-}
-
-
-/*!
- Inits the data values.
-*/
-void QXmlSimpleReader::init( const QXmlInputSource& i )
-{
- xml = i.data();
- xmlLength = xml.length();
- xmlRef = "";
-
- d->externParameterEntities.clear();
- d->parameterEntities.clear();
- d->externEntities.clear();
- d->entities.clear();
-
- tags.clear();
-
- d->doctype = "";
- d->xmlVersion = "";
- d->encoding = "";
- d->standalone = QXmlSimpleReaderPrivate::Unknown;
-
- lineNr = 0;
- columnNr = -1;
- pos = 0;
- next();
- d->error = XMLERR_OK;
-}
-
-/*!
- Returns TRUE if a entity with the name \a e exists,
- otherwise returns FALSE.
-*/
-bool QXmlSimpleReader::entityExist( const QString& e ) const
-{
- if ( d->parameterEntities.find(e) == d->parameterEntities.end() &&
- d->externParameterEntities.find(e) == d->externParameterEntities.end() ) {
- return FALSE;
- } else {
- return TRUE;
- }
-}
-
-void QXmlSimpleReader::reportParseError()
-{
- if ( errorHnd )
- errorHnd->fatalError( QXmlParseException( d->error, columnNr+1, lineNr+1 ) );
-}
-
-#endif //QT_NO_XML
diff --git a/qtools/qxml.h b/qtools/qxml.h
deleted file mode 100644
index b44e42c..0000000
--- a/qtools/qxml.h
+++ /dev/null
@@ -1,671 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QXmlSimpleReader and related classes.
-**
-** Created : 000518
-**
-** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
-**
-** This file is part of the XML module of the Qt GUI Toolkit.
-**
-** This file may be distributed under the terms of the Q Public License
-** as defined by Trolltech AS of Norway and appearing in the file
-** LICENSE.QPL included in the packaging of this file.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** Licensees holding valid Qt Enterprise Edition licenses may use this
-** file in accordance with the Qt Commercial License Agreement provided
-** with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
-** information about Qt Commercial License Agreements.
-** See http://www.trolltech.com/qpl/ for QPL licensing information.
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QXML_H
-#define QXML_H
-
-#include <qmodules.h>
-
-#if !defined(QT_MODULE_XML)
-#define QM_EXPORT
-#else
-#define QM_EXPORT Q_EXPORT
-#endif
-
-#ifndef QT_H
-#include <qtextstream.h>
-#include <qfile.h>
-#include <qstring.h>
-#include <qstringlist.h>
-#include <qvaluestack.h>
-#include <qmap.h>
-#endif // QT_H
-
-#ifndef QT_NO_XML
-
-class QXmlNamespaceSupport;
-class QXmlAttributes;
-class QXmlContentHandler;
-class QXmlDefaultHandler;
-class QXmlDTDHandler;
-class QXmlEntityResolver;
-class QXmlErrorHandler;
-class QXmlLexicalHandler;
-class QXmlDeclHandler;
-class QXmlInputSource;
-class QXmlLocator;
-class QXmlNamespaceSupport;
-class QXmlParseException;
-
-class QXmlReader;
-class QXmlSimpleReader;
-
-class QXmlSimpleReaderPrivate;
-class QXmlNamespaceSupportPrivate;
-class QXmlAttributesPrivate;
-class QXmlInputSourcePrivate;
-class QXmlParseExceptionPrivate;
-class QXmlLocatorPrivate;
-class QXmlDefaultHandlerPrivate;
-
-
-//
-// SAX Namespace Support
-//
-
-#if defined(Q_TEMPLATEDLL)
-// MOC_SKIP_BEGIN
-template class QM_EXPORT QMap<QString, QString>;
-template class QM_EXPORT QValueStack<QMap<QString, QString> >;
-template class QM_EXPORT QValueStack<QString>;
-// MOC_SKIP_END
-#endif
-
-class QM_EXPORT QXmlNamespaceSupport
-{
-public:
- QXmlNamespaceSupport();
- ~QXmlNamespaceSupport();
-
- void setPrefix( const QString&, const QString& );
-
- QString prefix( const QString& ) const;
- QString uri( const QString& ) const;
- void splitName( const QString&, QString&, QString& ) const;
- void processName( const QString&, bool, QString&, QString& ) const;
- QStringList prefixes() const;
- QStringList prefixes( const QString& ) const;
-
- void pushContext();
- void popContext();
- void reset();
-private:
- QValueStack<QMap<QString, QString> > nsStack;
- QMap<QString, QString> ns;
-
- //QXmlNamespaceSupportPrivate *d;
-};
-
-
-//
-// SAX Attributes
-//
-
-class QM_EXPORT QXmlAttributes
-{
-public:
- QXmlAttributes() {}
- virtual ~QXmlAttributes() {}
-
- int index( const QString& qName ) const;
- int index( const QString& uri, const QString& localPart ) const;
- int length() const;
- QString localName( int index ) const;
- QString qName( int index ) const;
- QString uri( int index ) const;
- QString type( int index ) const;
- QString type( const QString& qName ) const;
- QString type( const QString& uri, const QString& localName ) const;
- QString value( int index ) const;
- QString value( const QString& qName ) const;
- QString value( const QString& uri, const QString& localName ) const;
-
-private:
- QStringList qnameList;
- QStringList uriList;
- QStringList localnameList;
- QStringList valueList;
-
- //QXmlAttributesPrivate *d;
-
- friend class QXmlSimpleReader;
-};
-
-//
-// SAX Input Source
-//
-
-class QM_EXPORT QXmlInputSource
-{
-public:
- QXmlInputSource();
- QXmlInputSource( QTextStream& stream );
- QXmlInputSource( QFile& file );
- virtual ~QXmlInputSource();
-
- virtual const QString& data() const;
- virtual void setData( const QString& d );
-
-private:
- void readInput( QByteArray& rawData );
-
- QString input;
-
- //QXmlInputSourcePrivate *d;
-};
-
-//
-// SAX Exception Classes
-//
-
-class QM_EXPORT QXmlParseException
-{
-public:
- QXmlParseException( const QString& name="", int c=-1, int l=-1, const QString& p="", const QString& s="" )
- : msg( name ), column( c ), line( l ), pub( p ), sys( s )
- { }
-
- int columnNumber() const;
- int lineNumber() const;
- QString publicId() const;
- QString systemId() const;
- QString message() const;
-
-private:
- QString msg;
- int column;
- int line;
- QString pub;
- QString sys;
-
- //QXmlParseExceptionPrivate *d;
-};
-
-
-//
-// XML Reader
-//
-
-class QM_EXPORT QXmlReader
-{
-public:
- virtual ~QXmlReader() {}
- virtual bool feature( const QString& name, bool *ok = 0 ) const = 0;
- virtual void setFeature( const QString& name, bool value ) = 0;
- virtual bool hasFeature( const QString& name ) const = 0;
- virtual void* property( const QString& name, bool *ok = 0 ) const = 0;
- virtual void setProperty( const QString& name, void* value ) = 0;
- virtual bool hasProperty( const QString& name ) const = 0;
- virtual void setEntityResolver( QXmlEntityResolver* handler ) = 0;
- virtual QXmlEntityResolver* entityResolver() const = 0;
- virtual void setDTDHandler( QXmlDTDHandler* handler ) = 0;
- virtual QXmlDTDHandler* DTDHandler() const = 0;
- virtual void setContentHandler( QXmlContentHandler* handler ) = 0;
- virtual QXmlContentHandler* contentHandler() const = 0;
- virtual void setErrorHandler( QXmlErrorHandler* handler ) = 0;
- virtual QXmlErrorHandler* errorHandler() const = 0;
- virtual void setLexicalHandler( QXmlLexicalHandler* handler ) = 0;
- virtual QXmlLexicalHandler* lexicalHandler() const = 0;
- virtual void setDeclHandler( QXmlDeclHandler* handler ) = 0;
- virtual QXmlDeclHandler* declHandler() const = 0;
- virtual bool parse( const QXmlInputSource& input ) = 0;
-};
-
-class QM_EXPORT QXmlSimpleReader : public QXmlReader
-{
-public:
- QXmlSimpleReader();
- virtual ~QXmlSimpleReader();
-
- bool feature( const QString& name, bool *ok = 0 ) const;
- void setFeature( const QString& name, bool value );
- bool hasFeature( const QString& name ) const;
-
- void* property( const QString& name, bool *ok = 0 ) const;
- void setProperty( const QString& name, void* value );
- bool hasProperty( const QString& name ) const;
-
- void setEntityResolver( QXmlEntityResolver* handler );
- QXmlEntityResolver* entityResolver() const;
- void setDTDHandler( QXmlDTDHandler* handler );
- QXmlDTDHandler* DTDHandler() const;
- void setContentHandler( QXmlContentHandler* handler );
- QXmlContentHandler* contentHandler() const;
- void setErrorHandler( QXmlErrorHandler* handler );
- QXmlErrorHandler* errorHandler() const;
- void setLexicalHandler( QXmlLexicalHandler* handler );
- QXmlLexicalHandler* lexicalHandler() const;
- void setDeclHandler( QXmlDeclHandler* handler );
- QXmlDeclHandler* declHandler() const;
-
- bool parse( const QXmlInputSource& input );
-
-private:
- // variables
- QXmlContentHandler* contentHnd;
- QXmlErrorHandler* errorHnd;
- QXmlDTDHandler* dtdHnd;
- QXmlEntityResolver* entityRes;
- QXmlLexicalHandler* lexicalHnd;
- QXmlDeclHandler* declHnd;
-
- QChar c; // the character at reading position
- int lineNr; // number of line
- int columnNr; // position in line
- int pos; // position in string
-
- int namePos;
- QChar nameArray[256]; // only used for names
- QString nameValue; // only used for names
- int refPos;
- QChar refArray[256]; // only used for references
- QString refValue; // only used for references
- int stringPos;
- QChar stringArray[256]; // used for any other strings that are parsed
- QString stringValue; // used for any other strings that are parsed
-
- QString xml;
- int xmlLength;
- QString xmlRef; // used for parsing of entity references
-
- QValueStack<QString> tags;
-
- QXmlSimpleReaderPrivate* d;
-
- static const QChar QEOF;
-
- // inlines
- virtual bool is_S( const QChar& );
- virtual bool is_Letter( const QChar& );
- virtual bool is_NameBeginning( const QChar& );
- virtual bool is_Digit( const QChar& );
- virtual bool is_CombiningChar( const QChar& );
- virtual bool is_Extender( const QChar& );
- virtual bool is_NameChar( const QChar& );
-
- QString& string();
- void stringClear();
- void stringAddC();
- void stringAddC(const QChar&);
- QString& name();
- void nameClear();
- void nameAddC();
- void nameAddC(const QChar&);
- QString& ref();
- void refClear();
- void refAddC();
- void refAddC(const QChar&);
-
- // used by parseReference() and parsePEReference()
- enum EntityRecognitionContext { InContent, InAttributeValue, InEntityValue, InDTD };
-
- // private functions
- void eat_ws();
- void next_eat_ws();
-
- void next();
- bool atEnd();
-
- void init( const QXmlInputSource& i );
-
- bool entityExist( const QString& ) const;
-
- bool parseProlog();
- bool parseElement();
- bool parseElementEmptyTag( bool &t, QString &uri, QString &lname );
- bool parseElementETagBegin2( QString &uri, QString &lname );
- bool parseElementAttribute( QString &prefix, QString &uri, QString &lname );
- bool parseMisc();
- bool parseContent();
-
- bool parsePI(bool xmldecl=FALSE);
- bool parseDoctype();
- bool parseComment();
-
- bool parseName( bool useRef=FALSE );
- bool parseNmtoken();
- bool parseAttribute();
- bool parseReference( bool &charDataRead, EntityRecognitionContext context );
- bool processReference( bool &charDataRead, EntityRecognitionContext context );
-
- bool parseExternalID( bool allowPublicID = FALSE );
- bool parsePEReference( EntityRecognitionContext context );
- bool parseMarkupdecl();
- bool parseAttlistDecl();
- bool parseAttType();
- bool parseAttValue();
- bool parseElementDecl();
- bool parseNotationDecl();
- bool parseChoiceSeq();
- bool parseEntityDecl();
- bool parseEntityValue();
-
- bool parseString( const QString& s );
-
- void reportParseError();
-
- friend class QXmlSimpleReaderPrivate;
- friend class QXmlLocator;
-};
-
-//
-// SAX Locator
-//
-
-class QM_EXPORT QXmlLocator
-{
-public:
- QXmlLocator( QXmlSimpleReader* parent )
- { reader = parent; }
- ~QXmlLocator()
- { }
-
- int columnNumber();
- int lineNumber();
-// QString getPublicId()
-// QString getSystemId()
-
-private:
- QXmlSimpleReader* reader;
-
- //QXmlLocatorPrivate *d;
-};
-
-//
-// SAX handler classes
-//
-
-class QM_EXPORT QXmlContentHandler
-{
-public:
- virtual ~QXmlContentHandler() {}
- virtual void setDocumentLocator( QXmlLocator* locator ) = 0;
- virtual bool startDocument() = 0;
- virtual bool endDocument() = 0;
- virtual bool startPrefixMapping( const QString& prefix, const QString& uri ) = 0;
- virtual bool endPrefixMapping( const QString& prefix ) = 0;
- virtual bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts ) = 0;
- virtual bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName ) = 0;
- virtual bool characters( const QString& ch ) = 0;
- virtual bool ignorableWhitespace( const QString& ch ) = 0;
- virtual bool processingInstruction( const QString& target, const QString& data ) = 0;
- virtual bool skippedEntity( const QString& name ) = 0;
- virtual QString errorString() = 0;
-};
-
-class QM_EXPORT QXmlErrorHandler
-{
-public:
- virtual ~QXmlErrorHandler() {}
- virtual bool warning( const QXmlParseException& exception ) = 0;
- virtual bool error( const QXmlParseException& exception ) = 0;
- virtual bool fatalError( const QXmlParseException& exception ) = 0;
- virtual QString errorString() = 0;
-};
-
-class QM_EXPORT QXmlDTDHandler
-{
-public:
- virtual ~QXmlDTDHandler() {}
- virtual bool notationDecl( const QString& name, const QString& publicId, const QString& systemId ) = 0;
- virtual bool unparsedEntityDecl( const QString& name, const QString& publicId, const QString& systemId, const QString& notationName ) = 0;
- virtual QString errorString() = 0;
-};
-
-class QM_EXPORT QXmlEntityResolver
-{
-public:
- virtual ~QXmlEntityResolver() {}
- virtual bool resolveEntity( const QString& publicId, const QString& systemId, QXmlInputSource* &ret ) = 0;
- virtual QString errorString() = 0;
-};
-
-class QM_EXPORT QXmlLexicalHandler
-{
-public:
- virtual ~QXmlLexicalHandler() {}
- virtual bool startDTD( const QString& name, const QString& publicId, const QString& systemId ) = 0;
- virtual bool endDTD() = 0;
-// virtual bool startEntity( const QString& name ) = 0;
-// virtual bool endEntity( const QString& name ) = 0;
- virtual bool startCDATA() = 0;
- virtual bool endCDATA() = 0;
- virtual bool comment( const QString& ch ) = 0;
- virtual QString errorString() = 0;
-};
-
-class QM_EXPORT QXmlDeclHandler
-{
-public:
- virtual ~QXmlDeclHandler() {}
- virtual bool attributeDecl( const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value ) = 0;
- virtual bool internalEntityDecl( const QString& name, const QString& value ) = 0;
- virtual bool externalEntityDecl( const QString& name, const QString& publicId, const QString& systemId ) = 0;
- virtual QString errorString() = 0;
-};
-
-
-class QM_EXPORT QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler
-{
-public:
- QXmlDefaultHandler() { }
- virtual ~QXmlDefaultHandler() { }
-
- void setDocumentLocator( QXmlLocator* locator );
- bool startDocument();
- bool endDocument();
- bool startPrefixMapping( const QString& prefix, const QString& uri );
- bool endPrefixMapping( const QString& prefix );
- bool startElement( const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts );
- bool endElement( const QString& namespaceURI, const QString& localName, const QString& qName );
- bool characters( const QString& ch );
- bool ignorableWhitespace( const QString& ch );
- bool processingInstruction( const QString& target, const QString& data );
- bool skippedEntity( const QString& name );
-
- bool warning( const QXmlParseException& exception );
- bool error( const QXmlParseException& exception );
- bool fatalError( const QXmlParseException& exception );
-
- bool notationDecl( const QString& name, const QString& publicId, const QString& systemId );
- bool unparsedEntityDecl( const QString& name, const QString& publicId, const QString& systemId, const QString& notationName );
-
- bool resolveEntity( const QString& publicId, const QString& systemId, QXmlInputSource* &ret );
-
- bool startDTD( const QString& name, const QString& publicId, const QString& systemId );
- bool endDTD();
-// bool startEntity( const QString& name );
-// bool endEntity( const QString& name );
- bool startCDATA();
- bool endCDATA();
- bool comment( const QString& ch );
-
- bool attributeDecl( const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value );
- bool internalEntityDecl( const QString& name, const QString& value );
- bool externalEntityDecl( const QString& name, const QString& publicId, const QString& systemId );
-
- QString errorString();
-
-private:
- //QXmlDefaultHandlerPrivate *d;
-};
-
-#ifdef _WS_QWS_
-#ifdef QT_XML_CPP
-#define inline
-#else
-#define QT_NO_XML_INLINE
-#endif
-#endif
-
-#ifndef QT_NO_XML_INLINE
-//
-// inlines
-//
-
-inline bool QXmlSimpleReader::is_S(const QChar& ch)
-{ return ch==' ' || ch=='\t' || ch=='\n' || ch=='\r'; }
-
-inline bool QXmlSimpleReader::is_Letter( const QChar& ch )
-{ return ch.isLetter(); }
-
-inline bool QXmlSimpleReader::is_NameBeginning( const QChar& ch )
-{ return ch=='_' || ch==':' || ch.isLetter(); }
-
-inline bool QXmlSimpleReader::is_Digit( const QChar& ch )
-{ return ch.isDigit(); }
-
-inline bool QXmlSimpleReader::is_CombiningChar( const QChar& )
-{ return FALSE; }
-
-inline bool QXmlSimpleReader::is_Extender( const QChar& )
-{ return FALSE; }
-
-inline bool QXmlSimpleReader::is_NameChar( const QChar& ch )
-{
- return ch=='.' || ch=='-' || ch=='_' || ch==':' ||
- is_Letter(ch) || is_Digit(ch) ||
- is_CombiningChar(ch) || is_Extender(ch);
-}
-
-inline void QXmlSimpleReader::next()
-{
- if ( !xmlRef.isEmpty() ) {
- c = xmlRef[0];
- xmlRef.remove( 0, 1 );
- } else {
- if ( c=='\n' || c=='\r' ) {
- lineNr++;
- columnNr = -1;
- }
- if ( pos >= xmlLength ) {
- c = QEOF;
- } else {
- c = xml[pos];
- columnNr++;
- pos++;
- }
- }
-}
-
-inline bool QXmlSimpleReader::atEnd()
-{ return c == QEOF; }
-
-inline void QXmlSimpleReader::eat_ws()
-{ while ( !atEnd() && is_S(c) ) next(); }
-
-inline void QXmlSimpleReader::next_eat_ws()
-{ next(); eat_ws(); }
-
-
-// use buffers instead of QString::operator+= when single characters are read
-inline QString& QXmlSimpleReader::string()
-{
- stringValue += QString( stringArray, stringPos );
- stringPos = 0;
- return stringValue;
-}
-inline QString& QXmlSimpleReader::name()
-{
- nameValue += QString( nameArray, namePos );
- namePos = 0;
- return nameValue;
-}
-inline QString& QXmlSimpleReader::ref()
-{
- refValue += QString( refArray, refPos );
- refPos = 0;
- return refValue;
-}
-
-inline void QXmlSimpleReader::stringClear()
-{ stringValue = ""; stringPos = 0; }
-inline void QXmlSimpleReader::nameClear()
-{ nameValue = ""; namePos = 0; }
-inline void QXmlSimpleReader::refClear()
-{ refValue = ""; refPos = 0; }
-
-inline void QXmlSimpleReader::stringAddC()
-{
- if ( stringPos >= 256 ) {
- stringValue += QString( stringArray, stringPos );
- stringPos = 0;
- }
- stringArray[stringPos++] = c;
-}
-inline void QXmlSimpleReader::nameAddC()
-{
- if ( namePos >= 256 ) {
- nameValue += QString( nameArray, namePos );
- namePos = 0;
- }
- nameArray[namePos++] = c;
-}
-inline void QXmlSimpleReader::refAddC()
-{
- if ( refPos >= 256 ) {
- refValue += QString( refArray, refPos );
- refPos = 0;
- }
- refArray[refPos++] = c;
-}
-
-inline void QXmlSimpleReader::stringAddC(const QChar& ch)
-{
- if ( stringPos >= 256 ) {
- stringValue += QString( stringArray, stringPos );
- stringPos = 0;
- }
- stringArray[stringPos++] = ch;
-}
-inline void QXmlSimpleReader::nameAddC(const QChar& ch)
-{
- if ( namePos >= 256 ) {
- nameValue += QString( nameArray, namePos );
- namePos = 0;
- }
- nameArray[namePos++] = ch;
-}
-inline void QXmlSimpleReader::refAddC(const QChar& ch)
-{
- if ( refPos >= 256 ) {
- refValue += QString( refArray, refPos );
- refPos = 0;
- }
- refArray[refPos++] = ch;
-}
-#endif
-
-#ifdef _WS_QWS_
-#ifdef QT_XML_CPP
-#undef inline
-#endif
-#endif
-
-#endif //QT_NO_XML
-
-#endif