Skip to content

Commit

Permalink
feat: add parser impl.
Browse files Browse the repository at this point in the history
  • Loading branch information
andycall committed Sep 25, 2024
1 parent 1fd5d67 commit d1ba75c
Show file tree
Hide file tree
Showing 67 changed files with 5,245 additions and 1,589 deletions.
8 changes: 8 additions & 0 deletions bridge/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,9 @@ if ($ENV{WEBF_JS_ENGINE} MATCHES "quickjs")
core/css/parser/css_parser_idioms.cc
core/css/parser/css_parser_impl.cc
core/css/parser/css_lazy_parsing_state.cc
core/css/parser/at_rule_descriptor_parser.cc
core/css/parser/css_variable_parser.cc
core/css/parser/css_supports_parser.cc
core/css/parser/css_parser_token.cc
core/css/parser/css_parser_fast_path.cc
core/css/parser/font_variant_alternates_parser.cc
Expand All @@ -344,12 +347,14 @@ if ($ENV{WEBF_JS_ENGINE} MATCHES "quickjs")
core/css/css_reflect_value.cc
core/css/css_border_image.cc
core/css/css_axis_value.cc
core/css/css_font_face_src_value.cc
core/css/properties/longhand.cc
core/css/properties/shorthands/shorthands_custom.cc
core/css/properties/longhands/longhands_custom.cc
core/css/abstract_property_set_css_style_declaration.cc
core/css/property_set_css_style_declaration.cc
core/css/style_rule.cc
core/animation/timeline_offset.cc
core/css/css_property_value_set.cc
core/css/css_property_name.cc
core/css/css_property_value.cc
Expand Down Expand Up @@ -383,6 +388,9 @@ if ($ENV{WEBF_JS_ENGINE} MATCHES "quickjs")
core/css/css_scroll_value.cc
core/css/css_basic_shape_value.cc
core/css/css_math_function_value.cc
core/css/css_unparsed_declaration_value.cc
core/css/css_variable_data.cc
core/css/style_rule_keyframe.cc
core/css/css_math_operator.cc
core/css/css_ratio_value.cc
core/css/css_unset_value.cc
Expand Down
32 changes: 31 additions & 1 deletion bridge/core/animation/timeline_offset.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,36 @@

// Copyright (C) 2022-present The WebF authors. All rights reserved.

#include <string>
#include "timeline_offset.h"

namespace webf {} // namespace webf
namespace webf {

/* static */
std::string TimelineOffset::TimelineRangeNameToString(
TimelineOffset::NamedRange range_name) {
switch (range_name) {
case NamedRange::kNone:
return "none";

case NamedRange::kCover:
return "cover";

case NamedRange::kContain:
return "contain";

case NamedRange::kEntry:
return "entry";

case NamedRange::kEntryCrossing:
return "entry-crossing";

case NamedRange::kExit:
return "exit";

case NamedRange::kExitCrossing:
return "exit-crossing";
}
}

} // namespace webf
3 changes: 3 additions & 0 deletions bridge/core/animation/timeline_offset.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ enum class Enum : size_t {

struct TimelineOffset {
using NamedRange = Enum;

static std::string TimelineRangeNameToString(NamedRange range_name);

};

} // namespace webf
Expand Down
2 changes: 1 addition & 1 deletion bridge/core/base/memory/shared_ptr.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

#include <memory>

namespace webf {
namespace std {

// Patch for NDK 22.1.7171670
#if ANDROID
Expand Down
1 change: 1 addition & 0 deletions bridge/core/base/strings/string_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ bool ContainsOnlyASCIIOrEmpty(const std::string& string) {
std::string ToLowerASCII(const std::string& string) {
std::string result = string;
std::transform(result.begin(), result.end(), result.begin(), tolower);
return result;
}


Expand Down
103 changes: 4 additions & 99 deletions bridge/core/css/css_at_rule_id.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,13 @@
*/

#include "css_at_rule_id.h"
#include <optional>
#include <memory>
#include <optional>
#include "foundation/string_view.h"

namespace webf {


CSSAtRuleID CssAtRuleID(StringView name) {
// if (EqualIgnoringASCIICase(name, "view-transition")) {
// if (RuntimeEnabledFeatures::ViewTransitionOnNavigationEnabled()) {
// return CSSAtRuleID::kCSSAtRuleViewTransition;
// }
// return CSSAtRuleID::kCSSAtRuleInvalid;
// }
CSSAtRuleID CssAtRuleID(const std::string& name) {
if (EqualIgnoringASCIICase(name, "charset")) {
return CSSAtRuleID::kCSSAtRuleCharset;
}
Expand Down Expand Up @@ -69,12 +62,6 @@ CSSAtRuleID CssAtRuleID(StringView name) {
if (EqualIgnoringASCIICase(name, "page")) {
return CSSAtRuleID::kCSSAtRulePage;
}
// if (EqualIgnoringASCIICase(name, "position-try")) {
// if (RuntimeEnabledFeatures::CSSAnchorPositioningEnabled()) {
// return CSSAtRuleID::kCSSAtRulePositionTry;
// }
// return CSSAtRuleID::kCSSAtRuleInvalid;
// }
if (EqualIgnoringASCIICase(name, "property")) {
return CSSAtRuleID::kCSSAtRuleProperty;
}
Expand Down Expand Up @@ -153,7 +140,7 @@ CSSAtRuleID CssAtRuleID(StringView name) {
return CSSAtRuleID::kCSSAtRuleInvalid;
}

StringView CssAtRuleIDToString(CSSAtRuleID id) {
std::string CssAtRuleIDToString(CSSAtRuleID id) {
switch (id) {
case CSSAtRuleID::kCSSAtRuleViewTransition:
return "@view-transition";
Expand Down Expand Up @@ -241,91 +228,9 @@ StringView CssAtRuleIDToString(CSSAtRuleID id) {
return "@function";
case CSSAtRuleID::kCSSAtRuleInvalid:
assert_m(false, 'NOTREACHED_IN_MIGRATION');
// NOTREACHED_IN_MIGRATION();
// NOTREACHED_IN_MIGRATION();
return "";
};
}

namespace {

//std::optional<WebFeature> AtRuleFeature(CSSAtRuleID rule_id) {
// switch (rule_id) {
// case CSSAtRuleID::kCSSAtRuleAnnotation:
// return WebFeature::kCSSAtRuleAnnotation;
// case CSSAtRuleID::kCSSAtRuleViewTransition:
// return WebFeature::kCSSAtRuleViewTransition;
// case CSSAtRuleID::kCSSAtRuleCharset:
// return WebFeature::kCSSAtRuleCharset;
// case CSSAtRuleID::kCSSAtRuleCharacterVariant:
// return WebFeature::kCSSAtRuleCharacterVariant;
// case CSSAtRuleID::kCSSAtRuleFontFace:
// return WebFeature::kCSSAtRuleFontFace;
// case CSSAtRuleID::kCSSAtRuleFontPaletteValues:
// return WebFeature::kCSSAtRuleFontPaletteValues;
// case CSSAtRuleID::kCSSAtRuleFontFeatureValues:
// return WebFeature::kCSSAtRuleFontFeatureValues;
// case CSSAtRuleID::kCSSAtRuleImport:
// return WebFeature::kCSSAtRuleImport;
// case CSSAtRuleID::kCSSAtRuleKeyframes:
// return WebFeature::kCSSAtRuleKeyframes;
// case CSSAtRuleID::kCSSAtRuleLayer:
// return WebFeature::kCSSCascadeLayers;
// case CSSAtRuleID::kCSSAtRuleMedia:
// return WebFeature::kCSSAtRuleMedia;
// case CSSAtRuleID::kCSSAtRuleNamespace:
// return WebFeature::kCSSAtRuleNamespace;
// case CSSAtRuleID::kCSSAtRulePage:
// return WebFeature::kCSSAtRulePage;
// case CSSAtRuleID::kCSSAtRuleTopLeftCorner:
// case CSSAtRuleID::kCSSAtRuleTopLeft:
// case CSSAtRuleID::kCSSAtRuleTopCenter:
// case CSSAtRuleID::kCSSAtRuleTopRight:
// case CSSAtRuleID::kCSSAtRuleTopRightCorner:
// case CSSAtRuleID::kCSSAtRuleBottomLeftCorner:
// case CSSAtRuleID::kCSSAtRuleBottomLeft:
// case CSSAtRuleID::kCSSAtRuleBottomCenter:
// case CSSAtRuleID::kCSSAtRuleBottomRight:
// case CSSAtRuleID::kCSSAtRuleBottomRightCorner:
// case CSSAtRuleID::kCSSAtRuleLeftTop:
// case CSSAtRuleID::kCSSAtRuleLeftMiddle:
// case CSSAtRuleID::kCSSAtRuleLeftBottom:
// case CSSAtRuleID::kCSSAtRuleRightTop:
// case CSSAtRuleID::kCSSAtRuleRightMiddle:
// case CSSAtRuleID::kCSSAtRuleRightBottom:
// return WebFeature::kCSSAtRulePageMargin;
// case CSSAtRuleID::kCSSAtRuleProperty:
// return WebFeature::kCSSAtRuleProperty;
// case CSSAtRuleID::kCSSAtRuleContainer:
// return WebFeature::kCSSAtRuleContainer;
// case CSSAtRuleID::kCSSAtRuleCounterStyle:
// return WebFeature::kCSSAtRuleCounterStyle;
// case CSSAtRuleID::kCSSAtRuleOrnaments:
// return WebFeature::kCSSAtRuleOrnaments;
// case CSSAtRuleID::kCSSAtRuleScope:
// return WebFeature::kCSSAtRuleScope;
// case CSSAtRuleID::kCSSAtRuleStartingStyle:
// return WebFeature::kCSSAtRuleStartingStyle;
// case CSSAtRuleID::kCSSAtRuleStyleset:
// return WebFeature::kCSSAtRuleStylistic;
// case CSSAtRuleID::kCSSAtRuleStylistic:
// return WebFeature::kCSSAtRuleStylistic;
// case CSSAtRuleID::kCSSAtRuleSwash:
// return WebFeature::kCSSAtRuleSwash;
// case CSSAtRuleID::kCSSAtRuleSupports:
// return WebFeature::kCSSAtRuleSupports;
// case CSSAtRuleID::kCSSAtRulePositionTry:
// return WebFeature::kCSSAnchorPositioning;
// case CSSAtRuleID::kCSSAtRuleWebkitKeyframes:
// return WebFeature::kCSSAtRuleWebkitKeyframes;
// case CSSAtRuleID::kCSSAtRuleFunction:
// return WebFeature::kCSSFunctions;
// case CSSAtRuleID::kCSSAtRuleInvalid:
// assert_m(false, "NOTREACHED_IN_MIGRATION");
//// NOTREACHED_IN_MIGRATION();
// return std::nullopt;
// }
//}

} // namespace

} // namespace webf
6 changes: 3 additions & 3 deletions bridge/core/css/css_at_rule_id.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
#ifndef WEBF_CSS_AT_RULE_ID_H
#define WEBF_CSS_AT_RULE_ID_H

#include <string>

namespace webf {

class StringView;
class CSSParserContext;

enum class CSSAtRuleID {
Expand Down Expand Up @@ -64,8 +64,8 @@ enum class CSSAtRuleID {
kCSSAtRuleFunction,
};

CSSAtRuleID CssAtRuleID(StringView name);
StringView CssAtRuleIDToString(CSSAtRuleID id);
CSSAtRuleID CssAtRuleID(const std::string& name);
std::string CssAtRuleIDToString(CSSAtRuleID id);


} // namespace webf
Expand Down
81 changes: 81 additions & 0 deletions bridge/core/css/css_font_face_src_value.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright (C) 2007, 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "core/base/memory/values_equivalent.h"
#include "css_font_face_src_value.h"
#include "core/base/strings/string_util.h"
#include "core/css/css_uri_value.h"
#include "core/platform/url/kurl.h"
#include "core/css/css_markup.h"
#include "foundation/string_builder.h"

namespace webf {

bool CSSFontFaceSrcValue::IsSupportedFormat() const {
// format() syntax is already checked at parse time, see
// AtRuleDescriptorParser.
if (!format_.empty()) {
return true;
}

// Normally we would just check the format, but in order to avoid conflicts
// with the old WinIE style of font-face, we will also check to see if the URL
// ends with .eot. If so, we'll go ahead and assume that we shouldn't load
// it.
const std::string& resolved_url_string = src_value_->UrlData().ResolvedUrl();
return ProtocolIs(resolved_url_string, "data") || !base::EndsWith(resolved_url_string, ".eot");
}

std::string CSSFontFaceSrcValue::CustomCSSText() const {
StringBuilder result;
if (IsLocal()) {
result.Append("local(");
result.Append(SerializeString(LocalResource()));
result.Append(')');
} else {
result.Append(src_value_->CssText());
}

if (!format_.empty()) {
result.Append(" format(");
// Format should be serialized as strings:
// https://github.com/w3c/csswg-drafts/issues/6328#issuecomment-971823790
result.Append(SerializeString(format_));
result.Append(')');
}

return result.ReleaseString();
}

bool CSSFontFaceSrcValue::Equals(const CSSFontFaceSrcValue& other) const {
return format_ == other.format_ && webf::ValuesEquivalent(src_value_, other.src_value_) &&
local_resource_ == other.local_resource_;
}

void CSSFontFaceSrcValue::TraceAfterDispatch(GCVisitor* visitor) const {
CSSValue::TraceAfterDispatch(visitor);
}

} // namespace webf
Loading

0 comments on commit d1ba75c

Please sign in to comment.