-
Notifications
You must be signed in to change notification settings - Fork 474
Expand file tree
/
Copy pathCssNestedAtRule.java
More file actions
134 lines (117 loc) · 4.12 KB
/
CssNestedAtRule.java
File metadata and controls
134 lines (117 loc) · 4.12 KB
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
131
132
133
134
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2026 Apryse Group NV
Authors: Apryse Software.
This program is offered under a commercial and under the AGPL license.
For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
AGPL licensing:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itextpdf.styledxmlparser.css;
import com.itextpdf.commons.utils.MessageFormatUtil;
import com.itextpdf.styledxmlparser.css.media.MediaDeviceDescription;
import com.itextpdf.styledxmlparser.node.INode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Class to store a nested CSS at-rule
* Nested at-rules are a subset of nested statements, which can be used
* as a statement of a style sheet as well as inside of conditional group rules.
*/
public class CssNestedAtRule extends CssAtRule {
/** The rule parameters. */
private String ruleParameters;
/** The body. */
protected List<CssStatement> body;
/**
* Creates a {@link CssNestedAtRule} instance
* with an empty body.
* @param ruleName the rule name
* @param ruleParameters the rule parameters
*/
public CssNestedAtRule(String ruleName, String ruleParameters) {
super(ruleName);
this.ruleParameters = ruleParameters;
this.body = new ArrayList<>();
}
/**
* Adds a CSS statement to body.
*
* @param statement a CSS statement
*/
public void addStatementToBody(CssStatement statement) {
this.body.add(statement);
}
/**
* Adds CSS statements to the body.
*
* @param statements a list of CSS statements
*/
public void addStatementsToBody(Collection<CssStatement> statements) {
this.body.addAll(statements);
}
/**
* Adds the body CSS declarations.
*
* @param cssDeclarations a list of CSS declarations
*/
public void addBodyCssDeclarations(List<CssDeclaration> cssDeclarations) {
// ignore by default
}
/* (non-Javadoc)
* @see com.itextpdf.styledxmlparser.css.CssStatement#getCssRuleSets(com.itextpdf.styledxmlparser.html.node.INode, com.itextpdf.styledxmlparser.css.media.MediaDeviceDescription)
*/
@Override
public List<CssRuleSet> getCssRuleSets(INode node, MediaDeviceDescription deviceDescription) {
List<CssRuleSet> result = new ArrayList<>();
for (CssStatement childStatement : body) {
result.addAll(childStatement.getCssRuleSets(node, deviceDescription));
}
return result;
}
/**
* Gets the list of CSS statements.
*
* @return the list of CSS statements
*/
public List<CssStatement> getStatements() {
return body;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(MessageFormatUtil.format("@{0} {1} ", ruleName, ruleParameters));
sb.append("{");
sb.append("\n");
for (int i = 0; i < body.size(); i++) {
sb.append(" ");
sb.append(body.get(i).toString().replace("\n", "\n "));
if (i != body.size() - 1) {
sb.append("\n");
}
}
sb.append("\n}");
return sb.toString();
}
/**
* Gets the rule parameters.
*
* @return the rule parameters
*/
public String getRuleParameters() {
return ruleParameters;
}
}