7812adb2ed
When a formula cell gets copied from google docs, the value of the <td> element only contains the formula result. This means once value cells and formula cells gets copied together, the pasted formula cell won't updated anymore when the input values change. Turns out there is a data-sheets-formula attribute on <td> that contains the formula, it seems it uses the R1C1 format. Fix the problem by extending ScHTMLLayoutParser::TableDataOn() to parse this attribute and set a formula on the target cell (rather than a value) if the formula is available. This required also extending ScEEImport a bit, since the HTML paste builds on top of the RTF one in Calc. Change-Id: I720df96ce74a5e865b7329d06f3b719551f31b96 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163234 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
483 lines
12 KiB
C++
483 lines
12 KiB
C++
/* -*- 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 <svtools/svtdllapi.h>
|
|
#include <sal/types.h>
|
|
#include <stdexcept>
|
|
#include <string_view>
|
|
|
|
namespace rtl {
|
|
class OUString;
|
|
};
|
|
enum class HtmlOptionId;
|
|
enum class HtmlTokenId : sal_Int16;
|
|
|
|
// search the char for the CharName
|
|
sal_Unicode GetHTMLCharName( std::u16string_view rName );
|
|
|
|
// search the TokenID for the token
|
|
SVT_DLLPUBLIC HtmlTokenId GetHTMLToken( std::u16string_view rName );
|
|
|
|
// search the TokenId for an attribute token
|
|
HtmlOptionId GetHTMLOption( std::u16string_view rName );
|
|
|
|
// search the 24-bit color for a color name (not found = SAL_MAX_UINT32)
|
|
SVT_DLLPUBLIC sal_uInt32 GetHTMLColor( const rtl::OUString& rName );
|
|
|
|
enum class HtmlTokenId : sal_Int16
|
|
{
|
|
INVALID = -1,
|
|
NONE = 0,
|
|
// always starting from 256 on, greater than a char
|
|
TEXTTOKEN = 0x100,
|
|
SINGLECHAR,
|
|
NEWPARA,
|
|
TABCHAR,
|
|
RAWDATA,
|
|
LINEFEEDCHAR,
|
|
|
|
// these will only be turned on
|
|
AREA, // Netscape 2.0
|
|
BASE, // HTML 3.0
|
|
COMMENT,
|
|
CDATA,
|
|
DUMMY, // so ONOFF_START is even
|
|
DOCTYPE,
|
|
EMBED, // Netscape 2.0 ignore </EMBED>
|
|
HORZRULE, // ignore </HR>
|
|
IMAGE, // ignore </IMG>
|
|
INPUT, // ignore </INPUT>
|
|
LINEBREAK, // </BR> -> <BR>
|
|
LINK, // HTML 3.0
|
|
META, // HTML 3.0 ignore </META>
|
|
OPTION, // ignore </OPTION>
|
|
PARAM, // HotJava
|
|
SPACER, // Netscape 3.0b5 // ignore </SPACER>
|
|
|
|
// tokens recognised using HTML character
|
|
NONBREAKSPACE,
|
|
SOFTHYPH,
|
|
|
|
// these will be turned back off,
|
|
// the off value is always located behind (+1) !!
|
|
ONOFF_START,
|
|
ABBREVIATION_ON = ONOFF_START, // HTML 3.0
|
|
ABBREVIATION_OFF, // HTML 3.0
|
|
ACRONYM_ON, // HTML 3.0
|
|
ACRONYM_OFF, // HTML 3.0
|
|
ADDRESS_ON,
|
|
ADDRESS_OFF,
|
|
ANCHOR_ON,
|
|
ANCHOR_OFF,
|
|
APPLET_ON, // HotJava
|
|
APPLET_OFF, // HotJava
|
|
AUTHOR_ON, // HTML 3.0
|
|
AUTHOR_OFF, // HTML 3.0
|
|
BANNER_ON, // HTML 3.0
|
|
BANNER_OFF, // HTML 3.0
|
|
BASEFONT_ON, // Netscape
|
|
BASEFONT_OFF, // Netscape
|
|
BIGPRINT_ON, // HTML 3.0
|
|
BIGPRINT_OFF, // HTML 3.0
|
|
BLINK_ON, // Netscape
|
|
BLINK_OFF, // Netscape
|
|
BLOCKQUOTE30_ON, // HTML 3.0
|
|
BLOCKQUOTE30_OFF, // HTML 3.0
|
|
BLOCKQUOTE_ON,
|
|
BLOCKQUOTE_OFF,
|
|
BODY_ON,
|
|
BODY_OFF,
|
|
BOLD_ON,
|
|
BOLD_OFF,
|
|
CAPTION_ON, // HTML 3.0
|
|
CAPTION_OFF, // HTML 3.0
|
|
CENTER_ON, // Netscape
|
|
CENTER_OFF, // Netscape
|
|
CITATION_ON,
|
|
CITATION_OFF,
|
|
CODE_ON,
|
|
CODE_OFF,
|
|
COL_ON, // HTML3 Table Model Draft
|
|
COL_OFF, // HTML3 Table Model Draft
|
|
COLGROUP_ON, // HTML3 Table Model Draft
|
|
COLGROUP_OFF, // HTML3 Table Model Draft
|
|
CREDIT_ON, // HTML 3.0
|
|
CREDIT_OFF, // HTML 3.0
|
|
DD_ON,
|
|
DD_OFF,
|
|
DEFLIST_ON,
|
|
DEFLIST_OFF,
|
|
DELETEDTEXT_ON, // HTML 3.0
|
|
DELETEDTEXT_OFF, // HTML 3.0
|
|
DIRLIST_ON,
|
|
DIRLIST_OFF,
|
|
DIVISION_ON, // HTML 3.0
|
|
DIVISION_OFF, // HTML 3.0
|
|
DT_ON,
|
|
DT_OFF,
|
|
EMPHASIS_ON,
|
|
EMPHASIS_OFF,
|
|
FIGURE_ON, // HTML 3.0
|
|
FIGURE_OFF, // HTML 3.0
|
|
FONT_ON, // Netscape
|
|
FONT_OFF, // Netscape
|
|
FOOTNOTE_ON, // HTML 3.0
|
|
FOOTNOTE_OFF, // HTML 3.0
|
|
FORM_ON,
|
|
FORM_OFF,
|
|
FRAME_ON, // Netscape 2.0
|
|
FRAME_OFF, // Netscape 2.0
|
|
FRAMESET_ON, // Netscape 2.0
|
|
FRAMESET_OFF, // Netscape 2.0
|
|
HEAD1_ON,
|
|
HEAD1_OFF,
|
|
HEAD2_ON,
|
|
HEAD2_OFF,
|
|
HEAD3_ON,
|
|
HEAD3_OFF,
|
|
HEAD4_ON,
|
|
HEAD4_OFF,
|
|
HEAD5_ON,
|
|
HEAD5_OFF,
|
|
HEAD6_ON,
|
|
HEAD6_OFF,
|
|
HEAD_ON,
|
|
HEAD_OFF,
|
|
HTML_ON,
|
|
HTML_OFF,
|
|
IFRAME_ON, // IE 3.0b2
|
|
IFRAME_OFF, // IE 3.0b2
|
|
INSERTEDTEXT_ON, // HTML 3.0
|
|
INSERTEDTEXT_OFF, // HTML 3.0
|
|
ITALIC_ON,
|
|
ITALIC_OFF,
|
|
KEYBOARD_ON,
|
|
KEYBOARD_OFF,
|
|
LANGUAGE_ON, // HTML 3.0
|
|
LANGUAGE_OFF, // HTML 3.0
|
|
LISTHEADER_ON, // HTML 3.0
|
|
LISTHEADER_OFF, // HTML 3.0
|
|
LI_ON,
|
|
LI_OFF,
|
|
MAP_ON, // Netscape 2.0
|
|
MAP_OFF, // Netscape 2.0
|
|
MENULIST_ON,
|
|
MENULIST_OFF,
|
|
MULTICOL_ON, // Netscape 3.0b5
|
|
MULTICOL_OFF, // Netscape 3.0b5
|
|
NOBR_ON, // Netscape
|
|
NOBR_OFF, // Netscape
|
|
NOEMBED_ON, // Netscape 2.0
|
|
NOEMBED_OFF, // Netscape 2.0
|
|
NOFRAMES_ON, // Netscape 2.0
|
|
NOFRAMES_OFF, // Netscape 2.0
|
|
NOSCRIPT_ON, // Netscape 2.0
|
|
NOSCRIPT_OFF, // Netscape 3.0
|
|
NOTE_ON, // HTML 3.0
|
|
NOTE_OFF, // HTML 3.0
|
|
OBJECT_ON, // HotJava
|
|
OBJECT_OFF, // HotJava
|
|
ORDERLIST_ON,
|
|
ORDERLIST_OFF,
|
|
PARABREAK_ON,
|
|
PARABREAK_OFF,
|
|
PERSON_ON, // HTML 3.0
|
|
PERSON_OFF, // HTML 3.0
|
|
PLAINTEXT_ON, // HTML 3.0
|
|
PLAINTEXT_OFF, // HTML 3.0
|
|
PREFORMTXT_ON,
|
|
PREFORMTXT_OFF,
|
|
SAMPLE_ON,
|
|
SAMPLE_OFF,
|
|
SCRIPT_ON, // HTML 3.2
|
|
SCRIPT_OFF, // HTML 3.2
|
|
SELECT_ON,
|
|
SELECT_OFF,
|
|
SHORTQUOTE_ON, // HTML 3.0
|
|
SHORTQUOTE_OFF, // HTML 3.0
|
|
SMALLPRINT_ON, // HTML 3.0
|
|
SMALLPRINT_OFF, // HTML 3.0
|
|
SPAN_ON, // Style Sheets
|
|
SPAN_OFF, // Style Sheets
|
|
STRIKETHROUGH_ON, // HTML 3.0
|
|
STRIKETHROUGH_OFF, // HTML 3.0
|
|
STRONG_ON,
|
|
STRONG_OFF,
|
|
STYLE_ON, // HTML 3.0
|
|
STYLE_OFF, // HTML 3.0
|
|
SUBSCRIPT_ON, // HTML 3.0
|
|
SUBSCRIPT_OFF, // HTML 3.0
|
|
SUPERSCRIPT_ON, // HTML 3.0
|
|
SUPERSCRIPT_OFF, // HTML 3.0
|
|
TABLE_ON, // HTML 3.0
|
|
TABLE_OFF, // HTML 3.0
|
|
TABLEDATA_ON, // HTML 3.0
|
|
TABLEDATA_OFF, // HTML 3.0
|
|
TABLEHEADER_ON, // HTML 3.0
|
|
TABLEHEADER_OFF, // HTML 3.0
|
|
TABLEROW_ON, // HTML 3.0
|
|
TABLEROW_OFF, // HTML 3.0
|
|
TBODY_ON, // HTML3 Table Model Draft
|
|
TBODY_OFF, // HTML3 Table Model Draft
|
|
TELETYPE_ON,
|
|
TELETYPE_OFF,
|
|
TEXTAREA_ON,
|
|
TEXTAREA_OFF,
|
|
TFOOT_ON, // HTML3 Table Model Draft
|
|
TFOOT_OFF, // HTML3 Table Model Draft
|
|
THEAD_ON, // HTML3 Table Model Draft
|
|
THEAD_OFF, // HTML3 Table Model Draft
|
|
TITLE_ON,
|
|
TITLE_OFF,
|
|
UNDERLINE_ON,
|
|
UNDERLINE_OFF,
|
|
UNORDERLIST_ON,
|
|
UNORDERLIST_OFF,
|
|
VARIABLE_ON,
|
|
VARIABLE_OFF,
|
|
|
|
// obsolete features
|
|
XMP_ON,
|
|
XMP_OFF,
|
|
LISTING_ON,
|
|
LISTING_OFF,
|
|
|
|
// proposed features
|
|
DEFINSTANCE_ON,
|
|
DEFINSTANCE_OFF,
|
|
STRIKE_ON,
|
|
STRIKE_OFF,
|
|
|
|
UNKNOWNCONTROL_ON,
|
|
UNKNOWNCONTROL_OFF,
|
|
|
|
// Microsoft features
|
|
COMMENT2_ON, // HTML 2.0 ?
|
|
COMMENT2_OFF, // HTML 2.0 ?
|
|
MARQUEE_ON,
|
|
MARQUEE_OFF,
|
|
PLAINTEXT2_ON, // HTML 2.0 ?
|
|
PLAINTEXT2_OFF, // HTML 2.0 ?
|
|
|
|
SDFIELD_ON,
|
|
SDFIELD_OFF
|
|
};
|
|
|
|
constexpr bool isOffToken(HtmlTokenId nToken)
|
|
{
|
|
return (nToken == HtmlTokenId::NONE || nToken >= HtmlTokenId::ONOFF_START)
|
|
? (1 & static_cast<int>(nToken))
|
|
: throw std::logic_error("Assertion failed!"); // C++11 does not do assert in constexpr
|
|
}
|
|
|
|
constexpr HtmlTokenId getOnToken(HtmlTokenId nToken)
|
|
{
|
|
return (nToken == HtmlTokenId::NONE || nToken >= HtmlTokenId::ONOFF_START)
|
|
? HtmlTokenId(~1 & static_cast<int>(nToken))
|
|
: throw std::logic_error("Assertion failed!"); // C++11 does not do assert in constexpr
|
|
}
|
|
|
|
// HTML attribute token (=Options)
|
|
|
|
enum class HtmlOptionId
|
|
{
|
|
// always starting from 256 on, greater than a char
|
|
BOOL_START = 0x100,
|
|
|
|
// attributes without value
|
|
CHECKED = BOOL_START,
|
|
COMPACT,
|
|
DECLARE, // IExplorer 3.0b5
|
|
DISABLED,
|
|
ISMAP,
|
|
MAYSCRIPT, // Netscape 3.0
|
|
MULTIPLE,
|
|
NOHREF, // Netscape
|
|
NORESIZE, // Netscape 2.0
|
|
NOSHADE, // Netscape
|
|
NOWRAP,
|
|
SDFIXED,
|
|
SELECTED,
|
|
BOOL_END,
|
|
|
|
// attributes with a string as value
|
|
STRING_START = BOOL_END,
|
|
ACCEPT = STRING_START,
|
|
ACCESSKEY,
|
|
ALT,
|
|
AXIS,
|
|
CHAR, // HTML3 Table Model Draft
|
|
CHARSET,
|
|
CLASS,
|
|
CODE, // HotJava
|
|
CODETYPE,
|
|
CONTENT,
|
|
COORDS, // Netscape 2.0
|
|
ENCTYPE,
|
|
FACE, // IExplorer 2.0
|
|
FRAMEBORDER, // IExplorer 3.0
|
|
HTTPEQUIV,
|
|
LANGUAGE, // JavaScript
|
|
NAME,
|
|
PROMPT,
|
|
SHAPE,
|
|
STANDBY,
|
|
STYLE, // Style Sheets
|
|
TITLE,
|
|
VALUE,
|
|
SDVAL, // StarDiv NumberValue
|
|
DSVAL,
|
|
SDNUM, // StarDiv NumberFormat
|
|
DSNUM,
|
|
DSFORMULA,
|
|
SDLIBRARY,
|
|
SDMODULE,
|
|
STRING_END,
|
|
|
|
// attributes with an SGML identifier as value
|
|
SGMLID_START = STRING_END,
|
|
ID = SGMLID_START,
|
|
TARGET, // Netscape 2.0
|
|
TO,
|
|
SGMLID_END,
|
|
|
|
// attributes with a URI as value
|
|
URI_START = SGMLID_END,
|
|
ACTION = URI_START,
|
|
ARCHIVE,
|
|
BACKGROUND,
|
|
CLASSID,
|
|
CODEBASE, // HotJava
|
|
DATA,
|
|
HREF,
|
|
SCRIPT,
|
|
SRC,
|
|
USEMAP, // Netscape 2.0
|
|
URI_END,
|
|
|
|
// attributes with a color as value (all Netscape)
|
|
COLOR_START = URI_END,
|
|
ALINK = COLOR_START,
|
|
BGCOLOR,
|
|
BORDERCOLOR, // IExplorer 2.0
|
|
BORDERCOLORLIGHT, // IExplorer 2.0
|
|
BORDERCOLORDARK, // IExplorer 2.0
|
|
COLOR,
|
|
LINK,
|
|
TEXT,
|
|
VLINK,
|
|
COLOR_END,
|
|
|
|
// attributes with a numeric value
|
|
NUMBER_START = COLOR_END,
|
|
BORDER = NUMBER_START,
|
|
CELLSPACING, // HTML3 Table Model Draft
|
|
CELLPADDING, // HTML3 Table Model Draft
|
|
CHAROFF, // HTML3 Table Model Draft
|
|
COLSPAN,
|
|
FRAMESPACING, // IExplorer 3.0
|
|
GUTTER, // Netscape 3.0b5
|
|
HEIGHT,
|
|
HSPACE, // Netscape
|
|
LEFT,
|
|
LOOP, // IExplorer 2.0
|
|
MARGINWIDTH, // Netscape 2.0
|
|
MARGINHEIGHT, // Netscape 2.0
|
|
MAXLENGTH,
|
|
ROWSPAN,
|
|
SCROLLAMOUNT, // IExplorer 2.0
|
|
SCROLLDELAY, // IExplorer 2.0
|
|
SPAN, // HTML3 Table Model Draft
|
|
TABINDEX,
|
|
VSPACE, // Netscape
|
|
WIDTH,
|
|
ZINDEX,
|
|
NUMBER_END,
|
|
|
|
// attributes with Enum values
|
|
ENUM_START = NUMBER_END,
|
|
BEHAVIOR = ENUM_START, // IExplorer 2.0
|
|
CLEAR,
|
|
DIR,
|
|
DIRECTION, // IExplorer 2.0
|
|
FORMAT,
|
|
FRAME, // HTML3 Table Model Draft
|
|
LANG,
|
|
METHOD,
|
|
REL,
|
|
REV,
|
|
RULES, // HTML3 Table Model Draft
|
|
SCROLLING, // Netscape 2.0
|
|
SDREADONLY,
|
|
SUBTYPE,
|
|
TYPE,
|
|
VALIGN,
|
|
VALUETYPE,
|
|
WRAP,
|
|
XML_SPACE,
|
|
ENUM_END,
|
|
|
|
// attributes with script code as value
|
|
SCRIPT_START = ENUM_END,
|
|
ONABORT = SCRIPT_START, // JavaScript
|
|
ONBLUR, // JavaScript
|
|
ONCHANGE, // JavaScript
|
|
ONCLICK, // JavaScript
|
|
ONERROR, // JavaScript
|
|
ONFOCUS, // JavaScript
|
|
ONLOAD, // JavaScript
|
|
ONMOUSEOUT, // JavaScript
|
|
ONMOUSEOVER, // JavaScript
|
|
ONRESET, // JavaScript
|
|
ONSELECT, // JavaScript
|
|
ONSUBMIT, // JavaScript
|
|
ONUNLOAD, // JavaScript
|
|
|
|
SDONABORT, // StarBasic
|
|
SDONBLUR, // StarBasic
|
|
SDONCHANGE, // StarBasic
|
|
SDONCLICK, // StarBasic
|
|
SDONERROR, // StarBasic
|
|
SDONFOCUS, // StarBasic
|
|
SDONLOAD, // StarBasic
|
|
SDONMOUSEOUT, // StarBasic
|
|
SDONMOUSEOVER, // StarBasic
|
|
SDONRESET, // StarBasic
|
|
SDONSELECT, // StarBasic
|
|
SDONSUBMIT, // StarBasic
|
|
SDONUNLOAD, // StarBasic
|
|
SCRIPT_END,
|
|
|
|
// attributes with context dependent values
|
|
CONTEXT_START = SCRIPT_END,
|
|
ALIGN = CONTEXT_START,
|
|
COLS, // Netscape 2.0 vs HTML 2.0
|
|
ROWS, // Netscape 2.0 vs HTML 2.0
|
|
SIZE,
|
|
START,
|
|
CONTEXT_END,
|
|
|
|
// an unknown option
|
|
UNKNOWN = CONTEXT_END,
|
|
END
|
|
};
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|