diff options
Diffstat (limited to 'framework/source')
-rw-r--r-- | framework/source/accelerators/keymapping.cxx | 229 | ||||
-rw-r--r-- | framework/source/fwe/xml/statusbardocumenthandler.cxx | 33 | ||||
-rw-r--r-- | framework/source/fwe/xml/toolboxdocumenthandler.cxx | 18 | ||||
-rw-r--r-- | framework/source/inc/accelerators/keymapping.hxx | 2 |
4 files changed, 138 insertions, 144 deletions
diff --git a/framework/source/accelerators/keymapping.cxx b/framework/source/accelerators/keymapping.cxx index be0c4c27f291..ca506c7d4b64 100644 --- a/framework/source/accelerators/keymapping.cxx +++ b/framework/source/accelerators/keymapping.cxx @@ -28,118 +28,118 @@ namespace framework // helper -KeyMapping::KeyIdentifierInfo const KeyMapping::KeyIdentifierMap[] = +KeyMapping::KeyIdentifierInfo constexpr KeyMapping::KeyIdentifierMap[] = { - {css::awt::Key::NUM0 , "KEY_0" }, - {css::awt::Key::NUM1 , "KEY_1" }, - {css::awt::Key::NUM2 , "KEY_2" }, - {css::awt::Key::NUM3 , "KEY_3" }, - {css::awt::Key::NUM4 , "KEY_4" }, - {css::awt::Key::NUM5 , "KEY_5" }, - {css::awt::Key::NUM6 , "KEY_6" }, - {css::awt::Key::NUM7 , "KEY_7" }, - {css::awt::Key::NUM8 , "KEY_8" }, - {css::awt::Key::NUM9 , "KEY_9" }, - {css::awt::Key::A , "KEY_A" }, - {css::awt::Key::B , "KEY_B" }, - {css::awt::Key::C , "KEY_C" }, - {css::awt::Key::D , "KEY_D" }, - {css::awt::Key::E , "KEY_E" }, - {css::awt::Key::F , "KEY_F" }, - {css::awt::Key::G , "KEY_G" }, - {css::awt::Key::H , "KEY_H" }, - {css::awt::Key::I , "KEY_I" }, - {css::awt::Key::J , "KEY_J" }, - {css::awt::Key::K , "KEY_K" }, - {css::awt::Key::L , "KEY_L" }, - {css::awt::Key::M , "KEY_M" }, - {css::awt::Key::N , "KEY_N" }, - {css::awt::Key::O , "KEY_O" }, - {css::awt::Key::P , "KEY_P" }, - {css::awt::Key::Q , "KEY_Q" }, - {css::awt::Key::R , "KEY_R" }, - {css::awt::Key::S , "KEY_S" }, - {css::awt::Key::T , "KEY_T" }, - {css::awt::Key::U , "KEY_U" }, - {css::awt::Key::V , "KEY_V" }, - {css::awt::Key::W , "KEY_W" }, - {css::awt::Key::X , "KEY_X" }, - {css::awt::Key::Y , "KEY_Y" }, - {css::awt::Key::Z , "KEY_Z" }, - {css::awt::Key::F1 , "KEY_F1" }, - {css::awt::Key::F2 , "KEY_F2" }, - {css::awt::Key::F3 , "KEY_F3" }, - {css::awt::Key::F4 , "KEY_F4" }, - {css::awt::Key::F5 , "KEY_F5" }, - {css::awt::Key::F6 , "KEY_F6" }, - {css::awt::Key::F7 , "KEY_F7" }, - {css::awt::Key::F8 , "KEY_F8" }, - {css::awt::Key::F9 , "KEY_F9" }, - {css::awt::Key::F10 , "KEY_F10" }, - {css::awt::Key::F11 , "KEY_F11" }, - {css::awt::Key::F12 , "KEY_F12" }, - {css::awt::Key::F13 , "KEY_F13" }, - {css::awt::Key::F14 , "KEY_F14" }, - {css::awt::Key::F15 , "KEY_F15" }, - {css::awt::Key::F16 , "KEY_F16" }, - {css::awt::Key::F17 , "KEY_F17" }, - {css::awt::Key::F18 , "KEY_F18" }, - {css::awt::Key::F19 , "KEY_F19" }, - {css::awt::Key::F20 , "KEY_F20" }, - {css::awt::Key::F21 , "KEY_F21" }, - {css::awt::Key::F22 , "KEY_F22" }, - {css::awt::Key::F23 , "KEY_F23" }, - {css::awt::Key::F24 , "KEY_F24" }, - {css::awt::Key::F25 , "KEY_F25" }, - {css::awt::Key::F26 , "KEY_F26" }, - {css::awt::Key::DOWN , "KEY_DOWN" }, - {css::awt::Key::UP , "KEY_UP" }, - {css::awt::Key::LEFT , "KEY_LEFT" }, - {css::awt::Key::RIGHT , "KEY_RIGHT" }, - {css::awt::Key::HOME , "KEY_HOME" }, - {css::awt::Key::END , "KEY_END" }, - {css::awt::Key::PAGEUP , "KEY_PAGEUP" }, - {css::awt::Key::PAGEDOWN , "KEY_PAGEDOWN" }, - {css::awt::Key::RETURN , "KEY_RETURN" }, - {css::awt::Key::ESCAPE , "KEY_ESCAPE" }, - {css::awt::Key::TAB , "KEY_TAB" }, - {css::awt::Key::BACKSPACE , "KEY_BACKSPACE" }, - {css::awt::Key::SPACE , "KEY_SPACE" }, - {css::awt::Key::INSERT , "KEY_INSERT" }, - {css::awt::Key::DELETE , "KEY_DELETE" }, - {css::awt::Key::ADD , "KEY_ADD" }, - {css::awt::Key::SUBTRACT , "KEY_SUBTRACT" }, - {css::awt::Key::MULTIPLY , "KEY_MULTIPLY" }, - {css::awt::Key::DIVIDE , "KEY_DIVIDE" }, - {css::awt::Key::POINT , "KEY_POINT" }, - {css::awt::Key::COMMA , "KEY_COMMA" }, - {css::awt::Key::LESS , "KEY_LESS" }, - {css::awt::Key::GREATER , "KEY_GREATER" }, - {css::awt::Key::EQUAL , "KEY_EQUAL" }, - {css::awt::Key::OPEN , "KEY_OPEN" }, - {css::awt::Key::CUT , "KEY_CUT" }, - {css::awt::Key::COPY , "KEY_COPY" }, - {css::awt::Key::PASTE , "KEY_PASTE" }, - {css::awt::Key::UNDO , "KEY_UNDO" }, - {css::awt::Key::REPEAT , "KEY_REPEAT" }, - {css::awt::Key::FIND , "KEY_FIND" }, - {css::awt::Key::PROPERTIES , "KEY_PROPERTIES" }, - {css::awt::Key::FRONT , "KEY_FRONT" }, - {css::awt::Key::CONTEXTMENU , "KEY_CONTEXTMENU"}, - {css::awt::Key::HELP , "KEY_HELP" }, - {css::awt::Key::MENU , "KEY_MENU" }, - {css::awt::Key::HANGUL_HANJA , "KEY_HANGUL_HANJA"}, - {css::awt::Key::DECIMAL , "KEY_DECIMAL" }, - {css::awt::Key::TILDE , "KEY_TILDE" }, - {css::awt::Key::QUOTELEFT , "KEY_QUOTELEFT" }, - {css::awt::Key::BRACKETLEFT , "KEY_BRACKETLEFT" }, - {css::awt::Key::BRACKETRIGHT , "KEY_BRACKETRIGHT" }, - {css::awt::Key::SEMICOLON , "KEY_SEMICOLON" }, - {css::awt::Key::QUOTERIGHT , "KEY_QUOTERIGHT" }, - {css::awt::Key::RIGHTCURLYBRACKET, "KEY_RIGHTCURLYBRACKET" }, - {css::awt::Key::NUMBERSIGN, "KEY_NUMBERSIGN" }, - {css::awt::Key::COLON , "KEY_COLON" }, - {0 , "" } // mark the end of this array! + {css::awt::Key::NUM0 , u"KEY_0"_ustr }, + {css::awt::Key::NUM1 , u"KEY_1"_ustr }, + {css::awt::Key::NUM2 , u"KEY_2"_ustr }, + {css::awt::Key::NUM3 , u"KEY_3"_ustr }, + {css::awt::Key::NUM4 , u"KEY_4"_ustr }, + {css::awt::Key::NUM5 , u"KEY_5"_ustr }, + {css::awt::Key::NUM6 , u"KEY_6"_ustr }, + {css::awt::Key::NUM7 , u"KEY_7"_ustr }, + {css::awt::Key::NUM8 , u"KEY_8"_ustr }, + {css::awt::Key::NUM9 , u"KEY_9"_ustr }, + {css::awt::Key::A , u"KEY_A"_ustr }, + {css::awt::Key::B , u"KEY_B"_ustr }, + {css::awt::Key::C , u"KEY_C"_ustr }, + {css::awt::Key::D , u"KEY_D"_ustr }, + {css::awt::Key::E , u"KEY_E"_ustr }, + {css::awt::Key::F , u"KEY_F"_ustr }, + {css::awt::Key::G , u"KEY_G"_ustr }, + {css::awt::Key::H , u"KEY_H"_ustr }, + {css::awt::Key::I , u"KEY_I"_ustr }, + {css::awt::Key::J , u"KEY_J"_ustr }, + {css::awt::Key::K , u"KEY_K"_ustr }, + {css::awt::Key::L , u"KEY_L"_ustr }, + {css::awt::Key::M , u"KEY_M"_ustr }, + {css::awt::Key::N , u"KEY_N"_ustr }, + {css::awt::Key::O , u"KEY_O"_ustr }, + {css::awt::Key::P , u"KEY_P"_ustr }, + {css::awt::Key::Q , u"KEY_Q"_ustr }, + {css::awt::Key::R , u"KEY_R"_ustr }, + {css::awt::Key::S , u"KEY_S"_ustr }, + {css::awt::Key::T , u"KEY_T"_ustr }, + {css::awt::Key::U , u"KEY_U"_ustr }, + {css::awt::Key::V , u"KEY_V"_ustr }, + {css::awt::Key::W , u"KEY_W"_ustr }, + {css::awt::Key::X , u"KEY_X"_ustr }, + {css::awt::Key::Y , u"KEY_Y"_ustr }, + {css::awt::Key::Z , u"KEY_Z"_ustr }, + {css::awt::Key::F1 , u"KEY_F1"_ustr }, + {css::awt::Key::F2 , u"KEY_F2"_ustr }, + {css::awt::Key::F3 , u"KEY_F3"_ustr }, + {css::awt::Key::F4 , u"KEY_F4"_ustr }, + {css::awt::Key::F5 , u"KEY_F5"_ustr }, + {css::awt::Key::F6 , u"KEY_F6"_ustr }, + {css::awt::Key::F7 , u"KEY_F7"_ustr }, + {css::awt::Key::F8 , u"KEY_F8"_ustr }, + {css::awt::Key::F9 , u"KEY_F9"_ustr }, + {css::awt::Key::F10 , u"KEY_F10"_ustr }, + {css::awt::Key::F11 , u"KEY_F11"_ustr }, + {css::awt::Key::F12 , u"KEY_F12"_ustr }, + {css::awt::Key::F13 , u"KEY_F13"_ustr }, + {css::awt::Key::F14 , u"KEY_F14"_ustr }, + {css::awt::Key::F15 , u"KEY_F15"_ustr }, + {css::awt::Key::F16 , u"KEY_F16"_ustr }, + {css::awt::Key::F17 , u"KEY_F17"_ustr }, + {css::awt::Key::F18 , u"KEY_F18"_ustr }, + {css::awt::Key::F19 , u"KEY_F19"_ustr }, + {css::awt::Key::F20 , u"KEY_F20"_ustr }, + {css::awt::Key::F21 , u"KEY_F21"_ustr }, + {css::awt::Key::F22 , u"KEY_F22"_ustr }, + {css::awt::Key::F23 , u"KEY_F23"_ustr }, + {css::awt::Key::F24 , u"KEY_F24"_ustr }, + {css::awt::Key::F25 , u"KEY_F25"_ustr }, + {css::awt::Key::F26 , u"KEY_F26"_ustr }, + {css::awt::Key::DOWN , u"KEY_DOWN"_ustr }, + {css::awt::Key::UP , u"KEY_UP"_ustr }, + {css::awt::Key::LEFT , u"KEY_LEFT"_ustr }, + {css::awt::Key::RIGHT , u"KEY_RIGHT"_ustr }, + {css::awt::Key::HOME , u"KEY_HOME"_ustr }, + {css::awt::Key::END , u"KEY_END"_ustr }, + {css::awt::Key::PAGEUP , u"KEY_PAGEUP"_ustr }, + {css::awt::Key::PAGEDOWN , u"KEY_PAGEDOWN"_ustr }, + {css::awt::Key::RETURN , u"KEY_RETURN"_ustr }, + {css::awt::Key::ESCAPE , u"KEY_ESCAPE"_ustr }, + {css::awt::Key::TAB , u"KEY_TAB"_ustr }, + {css::awt::Key::BACKSPACE , u"KEY_BACKSPACE"_ustr }, + {css::awt::Key::SPACE , u"KEY_SPACE"_ustr }, + {css::awt::Key::INSERT , u"KEY_INSERT"_ustr }, + {css::awt::Key::DELETE , u"KEY_DELETE"_ustr }, + {css::awt::Key::ADD , u"KEY_ADD"_ustr }, + {css::awt::Key::SUBTRACT , u"KEY_SUBTRACT"_ustr }, + {css::awt::Key::MULTIPLY , u"KEY_MULTIPLY"_ustr }, + {css::awt::Key::DIVIDE , u"KEY_DIVIDE"_ustr }, + {css::awt::Key::POINT , u"KEY_POINT"_ustr }, + {css::awt::Key::COMMA , u"KEY_COMMA"_ustr }, + {css::awt::Key::LESS , u"KEY_LESS"_ustr }, + {css::awt::Key::GREATER , u"KEY_GREATER"_ustr }, + {css::awt::Key::EQUAL , u"KEY_EQUAL"_ustr }, + {css::awt::Key::OPEN , u"KEY_OPEN"_ustr }, + {css::awt::Key::CUT , u"KEY_CUT"_ustr }, + {css::awt::Key::COPY , u"KEY_COPY"_ustr }, + {css::awt::Key::PASTE , u"KEY_PASTE"_ustr }, + {css::awt::Key::UNDO , u"KEY_UNDO"_ustr }, + {css::awt::Key::REPEAT , u"KEY_REPEAT"_ustr }, + {css::awt::Key::FIND , u"KEY_FIND"_ustr }, + {css::awt::Key::PROPERTIES , u"KEY_PROPERTIES"_ustr }, + {css::awt::Key::FRONT , u"KEY_FRONT"_ustr }, + {css::awt::Key::CONTEXTMENU , u"KEY_CONTEXTMENU"_ustr}, + {css::awt::Key::HELP , u"KEY_HELP"_ustr }, + {css::awt::Key::MENU , u"KEY_MENU"_ustr }, + {css::awt::Key::HANGUL_HANJA , u"KEY_HANGUL_HANJA"_ustr}, + {css::awt::Key::DECIMAL , u"KEY_DECIMAL"_ustr }, + {css::awt::Key::TILDE , u"KEY_TILDE"_ustr }, + {css::awt::Key::QUOTELEFT , u"KEY_QUOTELEFT"_ustr }, + {css::awt::Key::BRACKETLEFT , u"KEY_BRACKETLEFT"_ustr }, + {css::awt::Key::BRACKETRIGHT , u"KEY_BRACKETRIGHT"_ustr }, + {css::awt::Key::SEMICOLON , u"KEY_SEMICOLON"_ustr }, + {css::awt::Key::QUOTERIGHT , u"KEY_QUOTERIGHT"_ustr }, + {css::awt::Key::RIGHTCURLYBRACKET, u"KEY_RIGHTCURLYBRACKET"_ustr }, + {css::awt::Key::NUMBERSIGN, u"KEY_NUMBERSIGN"_ustr }, + {css::awt::Key::COLON , u"KEY_COLON"_ustr }, + {0 , u""_ustr } // mark the end of this array! }; KeyMapping::KeyMapping() @@ -147,11 +147,8 @@ KeyMapping::KeyMapping() sal_Int32 i = 0; while(KeyIdentifierMap[i].Code != 0) { - OUString sIdentifier = OUString::createFromAscii(KeyIdentifierMap[i].Identifier); - sal_Int16 nCode = KeyIdentifierMap[i].Code; - - m_lIdentifierHash[sIdentifier] = nCode; - m_lCodeHash [nCode] = sIdentifier; + m_lIdentifierHash[KeyIdentifierMap[i].Identifier] = KeyIdentifierMap[i].Code; + m_lCodeHash [KeyIdentifierMap[i].Code] = KeyIdentifierMap[i].Identifier; ++i; } diff --git a/framework/source/fwe/xml/statusbardocumenthandler.cxx b/framework/source/fwe/xml/statusbardocumenthandler.cxx index cafd3258eca1..27653fa3b2fd 100644 --- a/framework/source/fwe/xml/statusbardocumenthandler.cxx +++ b/framework/source/fwe/xml/statusbardocumenthandler.cxx @@ -45,18 +45,15 @@ constexpr OUStringLiteral XMLNS_XLINK_PREFIX = u"xlink:"; constexpr OUString XMLNS_FILTER_SEPARATOR = u"^"_ustr; -#define ELEMENT_STATUSBAR "statusbar" -#define ELEMENT_STATUSBARITEM "statusbaritem" - -#define ATTRIBUTE_ALIGN "align" -#define ATTRIBUTE_STYLE "style" -#define ATTRIBUTE_URL "href" -#define ATTRIBUTE_WIDTH "width" -#define ATTRIBUTE_OFFSET "offset" -#define ATTRIBUTE_AUTOSIZE "autosize" -#define ATTRIBUTE_OWNERDRAW "ownerdraw" -#define ATTRIBUTE_HELPURL "helpid" -#define ATTRIBUTE_MANDATORY "mandatory" +constexpr OUString ATTRIBUTE_ALIGN = u"align"_ustr; +constexpr OUString ATTRIBUTE_STYLE = u"style"_ustr; +constexpr OUString ATTRIBUTE_URL = u"href"_ustr; +constexpr OUString ATTRIBUTE_WIDTH = u"width"_ustr; +constexpr OUString ATTRIBUTE_OFFSET = u"offset"_ustr; +constexpr OUString ATTRIBUTE_AUTOSIZE = u"autosize"_ustr; +constexpr OUString ATTRIBUTE_OWNERDRAW = u"ownerdraw"_ustr; +constexpr OUString ATTRIBUTE_HELPURL = u"helpid"_ustr; +constexpr OUString ATTRIBUTE_MANDATORY = u"mandatory"_ustr; constexpr OUString ELEMENT_NS_STATUSBAR = u"statusbar:statusbar"_ustr; constexpr OUString ELEMENT_NS_STATUSBARITEM = u"statusbar:statusbaritem"_ustr; @@ -126,15 +123,15 @@ namespace { struct StatusBarEntryProperty { OReadStatusBarDocumentHandler::StatusBar_XML_Namespace nNamespace; - char aEntryName[20]; + OUString aEntryName; }; } -StatusBarEntryProperty const StatusBarEntries[OReadStatusBarDocumentHandler::SB_XML_ENTRY_COUNT] = +StatusBarEntryProperty constexpr StatusBarEntries[OReadStatusBarDocumentHandler::SB_XML_ENTRY_COUNT] = { - { OReadStatusBarDocumentHandler::SB_NS_STATUSBAR, ELEMENT_STATUSBAR }, - { OReadStatusBarDocumentHandler::SB_NS_STATUSBAR, ELEMENT_STATUSBARITEM }, + { OReadStatusBarDocumentHandler::SB_NS_STATUSBAR, u"statusbar"_ustr }, + { OReadStatusBarDocumentHandler::SB_NS_STATUSBAR, u"statusbaritem"_ustr }, { OReadStatusBarDocumentHandler::SB_NS_XLINK, ATTRIBUTE_URL }, { OReadStatusBarDocumentHandler::SB_NS_STATUSBAR, ATTRIBUTE_ALIGN }, { OReadStatusBarDocumentHandler::SB_NS_STATUSBAR, ATTRIBUTE_STYLE }, @@ -156,13 +153,13 @@ OReadStatusBarDocumentHandler::OReadStatusBarDocumentHandler( if ( StatusBarEntries[i].nNamespace == SB_NS_STATUSBAR ) { OUString temp = XMLNS_STATUSBAR + XMLNS_FILTER_SEPARATOR + - OUString::createFromAscii( StatusBarEntries[i].aEntryName ); + StatusBarEntries[i].aEntryName; m_aStatusBarMap.emplace( temp, static_cast<StatusBar_XML_Entry>(i) ); } else { OUString temp = XMLNS_XLINK + XMLNS_FILTER_SEPARATOR + - OUString::createFromAscii( StatusBarEntries[i].aEntryName ); + StatusBarEntries[i].aEntryName; m_aStatusBarMap.emplace( temp, static_cast<StatusBar_XML_Entry>(i) ); } } diff --git a/framework/source/fwe/xml/toolboxdocumenthandler.cxx b/framework/source/fwe/xml/toolboxdocumenthandler.cxx index 7464939e1e03..86e161309800 100644 --- a/framework/source/fwe/xml/toolboxdocumenthandler.cxx +++ b/framework/source/fwe/xml/toolboxdocumenthandler.cxx @@ -105,18 +105,18 @@ namespace { struct ToolBarEntryProperty { OReadToolBoxDocumentHandler::ToolBox_XML_Namespace nNamespace; - char aEntryName[20]; + OUString aEntryName; }; } -ToolBarEntryProperty const ToolBoxEntries[OReadToolBoxDocumentHandler::TB_XML_ENTRY_COUNT] = +ToolBarEntryProperty constexpr ToolBoxEntries[OReadToolBoxDocumentHandler::TB_XML_ENTRY_COUNT] = { - { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBAR }, - { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARITEM }, - { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARSPACE }, - { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARBREAK }, - { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARSEPARATOR }, + { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, u"toolbar"_ustr }, + { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, u"toolbaritem"_ustr }, + { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, u"toolbarspace"_ustr }, + { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, u"toolbarbreak"_ustr }, + { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, u"toolbarseparator"_ustr }, { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_TEXT }, { OReadToolBoxDocumentHandler::TB_NS_XLINK, ATTRIBUTE_URL }, { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_VISIBLE }, @@ -138,13 +138,13 @@ OReadToolBoxDocumentHandler::OReadToolBoxDocumentHandler( const Reference< XInde if ( ToolBoxEntries[i].nNamespace == TB_NS_TOOLBAR ) { OUString temp = XMLNS_TOOLBAR XMLNS_FILTER_SEPARATOR + - OUString::createFromAscii( ToolBoxEntries[i].aEntryName ); + ToolBoxEntries[i].aEntryName; m_aToolBoxMap.emplace( temp, static_cast<ToolBox_XML_Entry>(i) ); } else { OUString temp = XMLNS_XLINK XMLNS_FILTER_SEPARATOR + - OUString::createFromAscii( ToolBoxEntries[i].aEntryName ); + ToolBoxEntries[i].aEntryName; m_aToolBoxMap.emplace( temp, static_cast<ToolBox_XML_Entry>(i) ); } } diff --git a/framework/source/inc/accelerators/keymapping.hxx b/framework/source/inc/accelerators/keymapping.hxx index b387655f3db9..272ca051eb49 100644 --- a/framework/source/inc/accelerators/keymapping.hxx +++ b/framework/source/inc/accelerators/keymapping.hxx @@ -45,7 +45,7 @@ class KeyMapping struct KeyIdentifierInfo { sal_Int16 Code; - const char* Identifier; + OUString Identifier; }; /** @short hash structure to map identifier to key codes. */ |