File: layout_quote.h

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (130 lines) | stat: -rw-r--r-- 3,928 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * Copyright (C) 2011 Nokia Inc. All rights reserved.
 * Copyright (C) 2012 Google Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 *
 */

#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_LAYOUT_QUOTE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_LAYOUT_QUOTE_H_

#include "third_party/blink/renderer/core/layout/layout_inline.h"
#include "third_party/blink/renderer/platform/text/quotes_data.h"

namespace blink {

class StyleContainmentScope;
class LayoutTextFragment;
class PseudoElement;

// LayoutQuote is the layout object associated with generated quotes
// ("content: open-quote | close-quote | no-open-quote | no-close-quote").
// http://www.w3.org/TR/CSS2/generate.html#quotes-insert
//
// This object is generated thus always anonymous.
class LayoutQuote final : public LayoutInline {
 public:
  LayoutQuote(LayoutObject& owner, const QuoteType);
  ~LayoutQuote() override;
  void Trace(Visitor*) const override;

  // Will return nullptr, if this doesn't originate from a pseudo element, but
  // rather an @page margin box.
  PseudoElement* GetOwningPseudo() const {
    NOT_DESTROYED();
    return owning_pseudo_.Get();
  }
  bool IsInScope() const {
    NOT_DESTROYED();
    return !!scope_;
  }
  StyleContainmentScope* GetScope() const {
    NOT_DESTROYED();
    return scope_.Get();
  }
  void SetScope(StyleContainmentScope* scope) {
    NOT_DESTROYED();
    scope_ = scope;
  }

  int GetDepth() const {
    NOT_DESTROYED();
    return depth_;
  }
  int GetNextDepth() const {
    NOT_DESTROYED();
    return type_ == QuoteType::kOpen || type_ == QuoteType::kNoOpen
               ? depth_ + 1
               : std::max(0, depth_ - 1);
  }
  void SetDepth(int depth) {
    NOT_DESTROYED();
    depth_ = depth;
  }

  void UpdateText();

  const char* GetName() const override {
    NOT_DESTROYED();
    return "LayoutQuote";
  }

 private:
  void WillBeDestroyed() override;
  bool IsQuote() const final {
    NOT_DESTROYED();
    return true;
  }
  void StyleDidChange(StyleDifference, const ComputedStyle*) override;
  void WillBeRemovedFromTree() override;

  String ComputeText() const;
  scoped_refptr<const QuotesData> GetQuotesData() const;

  LayoutTextFragment* FindFragmentChild() const;

  // Type of this LayoutQuote: open-quote, close-quote, no-open-quote,
  // no-close-quote.
  QuoteType type_;

  // Number of open quotes in the tree. Also called the nesting level
  // in CSS 2.1.
  // Used to determine if a LayoutQuote is invalid (closing quote without a
  // matching opening quote) and which quote character to use (see the 'quote'
  // property that is used to define quote character pairs).
  int depth_;

  // The pseudo-element that owns us.
  //
  // Lifetime is the same as LayoutObject::m_node, so this is safe.
  Member<PseudoElement> owning_pseudo_;

  // The contain style scope this quote belongs to.
  Member<StyleContainmentScope> scope_;

  // Cached text for this quote.
  String text_;
};

template <>
struct DowncastTraits<LayoutQuote> {
  static bool AllowFrom(const LayoutObject& object) { return object.IsQuote(); }
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_LAYOUT_QUOTE_H_