summaryrefslogtreecommitdiffstats
path: root/forms/inc
diff options
context:
space:
mode:
Diffstat (limited to 'forms/inc')
-rw-r--r--forms/inc/pch/precompiled_frm.cxx12
-rw-r--r--forms/inc/pch/precompiled_frm.hxx275
-rw-r--r--forms/inc/strings.hrc86
3 files changed, 373 insertions, 0 deletions
diff --git a/forms/inc/pch/precompiled_frm.cxx b/forms/inc/pch/precompiled_frm.cxx
new file mode 100644
index 000000000..ea011d914
--- /dev/null
+++ b/forms/inc/pch/precompiled_frm.cxx
@@ -0,0 +1,12 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "precompiled_frm.hxx"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/forms/inc/pch/precompiled_frm.hxx b/forms/inc/pch/precompiled_frm.hxx
new file mode 100644
index 000000000..12877c840
--- /dev/null
+++ b/forms/inc/pch/precompiled_frm.hxx
@@ -0,0 +1,275 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+/*
+ This file has been autogenerated by update_pch.sh. It is possible to edit it
+ manually (such as when an include file has been moved/renamed/removed). All such
+ manual changes will be rewritten by the next run of update_pch.sh (which presumably
+ also fixes all possible problems, so it's usually better to use it).
+
+ Generated on 2021-04-08 13:50:44 using:
+ ./bin/update_pch forms frm --cutoff=2 --exclude:system --exclude:module --exclude:local
+
+ If after updating build fails, use the following command to locate conflicting headers:
+ ./bin/update_pch_bisect ./forms/inc/pch/precompiled_frm.hxx "make forms.build" --find-conflicts
+*/
+
+#include <sal/config.h>
+#if PCH_LEVEL >= 1
+#include <algorithm>
+#include <cassert>
+#include <climits>
+#include <cstddef>
+#include <cstdlib>
+#include <functional>
+#include <iterator>
+#include <limits.h>
+#include <limits>
+#include <map>
+#include <memory>
+#include <new>
+#include <optional>
+#include <ostream>
+#include <set>
+#include <string.h>
+#include <string_view>
+#include <type_traits>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+#include <boost/lexical_cast.hpp>
+#endif // PCH_LEVEL >= 1
+#if PCH_LEVEL >= 2
+#include <osl/diagnose.h>
+#include <osl/endian.h>
+#include <osl/interlck.h>
+#include <osl/mutex.hxx>
+#include <rtl/alloc.h>
+#include <rtl/character.hxx>
+#include <rtl/instance.hxx>
+#include <rtl/math.h>
+#include <rtl/math.hxx>
+#include <rtl/ref.hxx>
+#include <rtl/strbuf.hxx>
+#include <rtl/string.h>
+#include <rtl/string.hxx>
+#include <rtl/stringconcat.hxx>
+#include <rtl/stringutils.hxx>
+#include <rtl/tencinfo.h>
+#include <rtl/textenc.h>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/ustring.hxx>
+#include <sal/log.hxx>
+#include <sal/macros.h>
+#include <sal/types.h>
+#include <vcl/dllapi.h>
+#include <vcl/errcode.hxx>
+#include <vcl/graph.hxx>
+#include <vcl/image.hxx>
+#include <vcl/keycod.hxx>
+#include <vcl/keycodes.hxx>
+#include <vcl/mapmod.hxx>
+#include <vcl/outdev.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/vclenum.hxx>
+#include <vcl/vclptr.hxx>
+#endif // PCH_LEVEL >= 2
+#if PCH_LEVEL >= 3
+#include <basegfx/color/bcolor.hxx>
+#include <com/sun/star/awt/FontDescriptor.hpp>
+#include <com/sun/star/awt/FontSlant.hpp>
+#include <com/sun/star/awt/MouseButton.hpp>
+#include <com/sun/star/awt/PosSize.hpp>
+#include <com/sun/star/awt/XControlModel.hpp>
+#include <com/sun/star/awt/XTextComponent.hpp>
+#include <com/sun/star/awt/XVclWindowPeer.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
+#include <com/sun/star/beans/NamedValue.hpp>
+#include <com/sun/star/beans/Property.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XFastPropertySet.hpp>
+#include <com/sun/star/beans/XMultiPropertySet.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XChild.hpp>
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/form/FormComponentType.hpp>
+#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/form/XResetListener.hpp>
+#include <com/sun/star/form/XSubmit.hpp>
+#include <com/sun/star/form/binding/IncompatibleTypesException.hpp>
+#include <com/sun/star/form/runtime/FormFeature.hpp>
+#include <com/sun/star/frame/FrameSearchFlag.hpp>
+#include <com/sun/star/frame/ModuleManager.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/graphic/GraphicObject.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/i18n/ForbiddenCharacters.hpp>
+#include <com/sun/star/i18n/LanguageCountryInfo.hpp>
+#include <com/sun/star/i18n/LocaleDataItem2.hpp>
+#include <com/sun/star/i18n/LocaleItem.hpp>
+#include <com/sun/star/i18n/reservedWords.hpp>
+#include <com/sun/star/io/Pipe.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XMarkableStream.hpp>
+#include <com/sun/star/io/XPersistObject.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XTypeProvider.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+#include <com/sun/star/sdbc/DataType.hpp>
+#include <com/sun/star/sdbc/ResultSetType.hpp>
+#include <com/sun/star/sdbc/SQLException.hpp>
+#include <com/sun/star/sdbc/XConnection.hpp>
+#include <com/sun/star/sdbc/XRowSet.hpp>
+#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
+#include <com/sun/star/task/InteractionHandler.hpp>
+#include <com/sun/star/task/XInteractionRequest.hpp>
+#include <com/sun/star/text/WritingMode2.hpp>
+#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
+#include <com/sun/star/uno/Any.h>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/RuntimeException.hpp>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/Type.h>
+#include <com/sun/star/uno/Type.hxx>
+#include <com/sun/star/uno/XAggregation.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/uno/XInterface.hpp>
+#include <com/sun/star/uno/XWeak.hpp>
+#include <com/sun/star/util/Date.hpp>
+#include <com/sun/star/util/DateTime.hpp>
+#include <com/sun/star/util/NumberFormat.hpp>
+#include <com/sun/star/util/Time.hpp>
+#include <com/sun/star/util/URLTransformer.hpp>
+#include <com/sun/star/util/VetoException.hpp>
+#include <com/sun/star/util/XCloneable.hpp>
+#include <com/sun/star/util/XModifyBroadcaster.hpp>
+#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
+#include <com/sun/star/xforms/XModel.hpp>
+#include <com/sun/star/xml/dom/DocumentBuilder.hpp>
+#include <com/sun/star/xml/dom/NodeType.hpp>
+#include <com/sun/star/xml/dom/XDocument.hpp>
+#include <com/sun/star/xml/dom/XDocumentBuilder.hpp>
+#include <com/sun/star/xml/dom/XDocumentFragment.hpp>
+#include <com/sun/star/xml/dom/XNode.hpp>
+#include <com/sun/star/xml/dom/XNodeList.hpp>
+#include <com/sun/star/xml/xpath/XPathObjectType.hpp>
+#include <com/sun/star/xml/xpath/XXPathObject.hpp>
+#include <com/sun/star/xsd/DataTypeClass.hpp>
+#include <comphelper/basicio.hxx>
+#include <comphelper/comphelperdllapi.h>
+#include <comphelper/enumhelper.hxx>
+#include <comphelper/guarding.hxx>
+#include <comphelper/interfacecontainer2.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/property.hxx>
+#include <comphelper/sequence.hxx>
+#include <comphelper/servicehelper.hxx>
+#include <comphelper/streamsection.hxx>
+#include <comphelper/types.hxx>
+#include <comphelper/uno3.hxx>
+#include <connectivity/dbconversion.hxx>
+#include <connectivity/dbtools.hxx>
+#include <connectivity/dbtoolsdllapi.hxx>
+#include <connectivity/formattedcolumnvalue.hxx>
+#include <cppuhelper/cppuhelperdllapi.h>
+#include <cppuhelper/exc_hlp.hxx>
+#include <cppuhelper/implbase.hxx>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase_ex.hxx>
+#include <cppuhelper/queryinterface.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <cppuhelper/typeprovider.hxx>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/weakref.hxx>
+#include <editeng/editeng.hxx>
+#include <editeng/editengdllapi.h>
+#include <editeng/editstat.hxx>
+#include <editeng/editview.hxx>
+#include <editeng/eeitem.hxx>
+#include <editeng/fhgtitem.hxx>
+#include <editeng/scripttypeitem.hxx>
+#include <editeng/svxenum.hxx>
+#include <i18nlangtag/lang.h>
+#include <i18nlangtag/languagetag.hxx>
+#include <o3tl/any.hxx>
+#include <o3tl/safeint.hxx>
+#include <o3tl/typed_flags_set.hxx>
+#include <sfx2/dllapi.h>
+#include <sfx2/filedlghelper.hxx>
+#include <sfx2/groupid.hxx>
+#include <sfx2/shell.hxx>
+#include <sfx2/signaturestate.hxx>
+#include <sot/formats.hxx>
+#include <svl/cenumitm.hxx>
+#include <svl/eitem.hxx>
+#include <svl/itempool.hxx>
+#include <svl/itemset.hxx>
+#include <svl/poolitem.hxx>
+#include <svl/svldllapi.h>
+#include <svl/typedwhich.hxx>
+#include <svtools/imageresourceaccess.hxx>
+#include <svx/svxdllapi.h>
+#include <toolkit/helper/vclunohelper.hxx>
+#include <tools/color.hxx>
+#include <tools/date.hxx>
+#include <tools/datetime.hxx>
+#include <tools/debug.hxx>
+#include <tools/degree.hxx>
+#include <tools/diagnose_ex.h>
+#include <tools/fontenum.hxx>
+#include <tools/gen.hxx>
+#include <tools/inetmime.hxx>
+#include <tools/lineend.hxx>
+#include <tools/link.hxx>
+#include <tools/long.hxx>
+#include <tools/mapunit.hxx>
+#include <tools/ref.hxx>
+#include <tools/solar.h>
+#include <tools/stream.hxx>
+#include <tools/time.hxx>
+#include <tools/toolsdllapi.h>
+#include <tools/urlobj.hxx>
+#include <ucbhelper/content.hxx>
+#include <unotools/localedatawrapper.hxx>
+#include <unotools/sharedunocomponent.hxx>
+#include <unotools/syslocale.hxx>
+#include <unotools/ucbstreamhelper.hxx>
+#include <unotools/unotoolsdllapi.h>
+#endif // PCH_LEVEL >= 3
+#if PCH_LEVEL >= 4
+#include <FormComponent.hxx>
+#include <commandimageprovider.hxx>
+#include <componenttools.hxx>
+#include <controlfeatureinterception.hxx>
+#include <featuredispatcher.hxx>
+#include <frm_resource.hxx>
+#include <frm_strings.hxx>
+#include <navtoolbar.hxx>
+#include <property.hxx>
+#include <propertybaghelper.hxx>
+#include <services.hxx>
+#include <urltransformer.hxx>
+#endif // PCH_LEVEL >= 4
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/forms/inc/strings.hrc b/forms/inc/strings.hrc
new file mode 100644
index 000000000..8ff5d91dc
--- /dev/null
+++ b/forms/inc/strings.hrc
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <unotools/resmgr.hxx>
+
+#define NC_(Context, String) TranslateId(Context, reinterpret_cast<char const *>(u8##String))
+
+#define RID_BASELISTBOX_ERROR_FILLLIST NC_("RID_BASELISTBOX_ERROR_FILLLIST", "The contents of a combo box or list field could not be determined.")
+#define RID_STR_IMPORT_GRAPHIC NC_("RID_STR_IMPORT_GRAPHIC", "Insert Image" )
+#define RID_STR_CONTROL_SUBSTITUTED_NAME NC_("RID_STR_CONTROL_SUBSTITUTED_NAME", "substituted")
+#define RID_STR_CONTROL_SUBSTITUTED_EPXPLAIN NC_("RID_STR_CONTROL_SUBSTITUTED_EPXPLAIN", "An error occurred while this control was being loaded. It was therefore replaced with a placeholder.")
+#define RID_STR_READERROR NC_("RID_STR_READERROR", "Error reading data from database" )
+#define RID_STR_CONNECTERROR NC_("RID_STR_CONNECTERROR", "Connection failed" )
+#define RID_ERR_LOADING_FORM NC_("RID_ERR_LOADING_FORM", "The data content could not be loaded.")
+#define RID_ERR_REFRESHING_FORM NC_("RID_ERR_REFRESHING_FORM", "The data content could not be updated")
+#define RID_STR_ERR_INSERTRECORD NC_("RID_STR_ERR_INSERTRECORD", "Error inserting the new record")
+#define RID_STR_ERR_UPDATERECORD NC_("RID_STR_ERR_UPDATERECORD", "Error updating the current record")
+#define RID_STR_ERR_DELETERECORD NC_("RID_STR_ERR_DELETERECORD", "Error deleting the current record")
+#define RID_STR_ERR_DELETERECORDS NC_("RID_STR_ERR_DELETERECORDS", "Error deleting the specified records")
+#define RID_STR_NEED_NON_NULL_OBJECT NC_("RID_STR_NEED_NON_NULL_OBJECT", "The object cannot be NULL.")
+#define RID_STR_OPEN_GRAPHICS NC_("RID_STR_OPEN_GRAPHICS", "Insert Image from...")
+#define RID_STR_CLEAR_GRAPHICS NC_("RID_STR_CLEAR_GRAPHICS", "Remove Image")
+#define RID_STR_INVALIDSTREAM NC_("RID_STR_INVALIDSTREAM", "The given stream is invalid.")
+#define RID_STR_SYNTAXERROR NC_("RID_STR_SYNTAXERROR", "Syntax error in query expression" )
+#define RID_STR_INCOMPATIBLE_TYPES NC_("RID_STR_INCOMPATIBLE_TYPES", "The value types supported by the binding cannot be used for exchanging data with this control.")
+#define RID_STR_LABEL_RECORD NC_("RID_STR_LABEL_RECORD", "Record")
+#define RID_STR_INVALID_VALIDATOR NC_("RID_STR_INVALID_VALIDATOR", "The control is connected to an external value binding, which at the same time acts as validator. You need to revoke the value binding, before you can set a new validator.")
+#define RID_STR_LABEL_OF NC_("RID_STR_LABEL_OF", "of")
+#define RID_STR_QUERY_SAVE_MODIFIED_ROW NC_("RID_STR_QUERY_SAVE_MODIFIED_ROW", "The content of the current form has been modified.\nDo you want to save your changes?")
+#define RID_STR_COULD_NOT_SET_ORDER NC_("RID_STR_COULD_NOT_SET_ORDER", "Error setting the sort criteria")
+#define RID_STR_COULD_NOT_SET_FILTER NC_("RID_STR_COULD_NOT_SET_FILTER", "Error setting the filter criteria")
+#define RID_STR_FEATURE_REQUIRES_PARAMETERS NC_("RID_STR_FEATURE_REQUIRES_PARAMETERS", "To execute this function, parameters are needed.")
+#define RID_STR_FEATURE_NOT_EXECUTABLE NC_("RID_STR_FEATURE_NOT_EXECUTABLE", "This function cannot be executed, but is only for status queries.")
+#define RID_STR_FEATURE_UNKNOWN NC_("RID_STR_FEATURE_UNKNOWN", "Unknown function.")
+
+#define RID_STR_XFORMS_NO_BINDING_EXPRESSION NC_("RID_STR_XFORMS_NO_BINDING_EXPRESSION", "Please enter a binding expression.")
+#define RID_STR_XFORMS_INVALID_BINDING_EXPRESSION NC_("RID_STR_XFORMS_INVALID_BINDING_EXPRESSION", "This is an invalid binding expression.")
+#define RID_STR_XFORMS_INVALID_VALUE NC_("RID_STR_XFORMS_INVALID_VALUE", "Value is invalid.")
+#define RID_STR_XFORMS_REQUIRED NC_("RID_STR_XFORMS_REQUIRED", "A value is required.")
+#define RID_STR_XFORMS_INVALID_CONSTRAINT NC_("RID_STR_XFORMS_INVALID_CONSTRAINT", "The constraint '$1' not validated.")
+#define RID_STR_XFORMS_VALUE_IS_NOT_A NC_("RID_STR_XFORMS_VALUE_IS_NOT_A", "The value is not of the type '$2'.")
+#define RID_STR_XFORMS_VALUE_MAX_INCL NC_("RID_STR_XFORMS_VALUE_MAX_INCL", "The value must be smaller than or equal to $2.")
+#define RID_STR_XFORMS_VALUE_MAX_EXCL NC_("RID_STR_XFORMS_VALUE_MAX_EXCL", "The value must be smaller than $2.")
+#define RID_STR_XFORMS_VALUE_MIN_INCL NC_("RID_STR_XFORMS_VALUE_MIN_INCL", "The value must be greater than or equal to $2.")
+#define RID_STR_XFORMS_VALUE_MIN_EXCL NC_("RID_STR_XFORMS_VALUE_MIN_EXCL", "The value must be greater than $2.")
+#define RID_STR_XFORMS_VALUE_TOTAL_DIGITS NC_("RID_STR_XFORMS_VALUE_TOTAL_DIGITS", "$2 digits allowed at most.")
+#define RID_STR_XFORMS_VALUE_FRACTION_DIGITS NC_("RID_STR_XFORMS_VALUE_FRACTION_DIGITS", "$2 fraction digits allowed at most.")
+#define RID_STR_XFORMS_VALUE_LENGTH NC_("RID_STR_XFORMS_VALUE_LENGTH", "The string must be $2 characters long.")
+#define RID_STR_XFORMS_VALUE_MIN_LENGTH NC_("RID_STR_XFORMS_VALUE_MIN_LENGTH", "The string must be at least $2 characters long.")
+#define RID_STR_XFORMS_VALUE_MAX_LENGTH NC_("RID_STR_XFORMS_VALUE_MAX_LENGTH", "The string can only be $2 characters long at most.")
+#define RID_STR_DATATYPE_STRING NC_("RID_STR_DATATYPE_STRING", "String")
+#define RID_STR_DATATYPE_URL NC_("RID_STR_DATATYPE_URL", "Hyperlink")
+#define RID_STR_DATATYPE_BOOLEAN NC_("RID_STR_DATATYPE_BOOLEAN", "True/False (Boolean)")
+#define RID_STR_DATATYPE_DECIMAL NC_("RID_STR_DATATYPE_DECIMAL", "Decimal")
+#define RID_STR_DATATYPE_FLOAT NC_("RID_STR_DATATYPE_FLOAT", "Floating point")
+#define RID_STR_DATATYPE_DOUBLE NC_("RID_STR_DATATYPE_DOUBLE", "Double")
+#define RID_STR_DATATYPE_DATE NC_("RID_STR_DATATYPE_DATE", "Date")
+#define RID_STR_DATATYPE_TIME NC_("RID_STR_DATATYPE_TIME", "Time")
+#define RID_STR_DATATYPE_DATETIME NC_("RID_STR_DATATYPE_DATETIME", "Date and Time")
+#define RID_STR_DATATYPE_YEAR NC_("RID_STR_DATATYPE_YEAR", "Year")
+#define RID_STR_DATATYPE_MONTH NC_("RID_STR_DATATYPE_MONTH", "Month")
+#define RID_STR_DATATYPE_DAY NC_("RID_STR_DATATYPE_DAY", "Day")
+#define RID_STR_XFORMS_CANT_EVALUATE NC_("RID_STR_XFORMS_CANT_EVALUATE", "Error during evaluation")
+#define RID_STR_XFORMS_PATTERN_DOESNT_MATCH NC_("RID_STR_XFORMS_PATTERN_DOESNT_MATCH", "The string '$1' does not match the required regular expression '$2'.")
+#define RID_STR_XFORMS_BINDING_UI_NAME NC_("RID_STR_XFORMS_BINDING_UI_NAME", "Binding" )
+#define RID_STR_XFORMS_CANT_REMOVE_TYPE NC_("RID_STR_XFORMS_CANT_REMOVE_TYPE", "This is a built-in type and cannot be removed." )
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */