123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /*
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.layoutmgr.table;
-
- import org.apache.fop.fo.Constants;
- import org.apache.fop.fo.flow.table.BorderSpecification;
- import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
- import org.apache.fop.fo.properties.CommonBorderPaddingBackground.BorderInfo;
-
- /**
- * Implements the normal "collapse" border model defined in 6.7.10 in XSL 1.0.
- *
- * TODO Column groups are not yet checked in this algorithm!
- */
- public class CollapsingBorderModelEyeCatching extends CollapsingBorderModel {
-
- /** {@inheritDoc} */
- public BorderSpecification determineWinner(BorderSpecification border1,
- BorderSpecification border2, boolean discard) {
- BorderInfo bi1 = border1.getBorderInfo();
- BorderInfo bi2 = border2.getBorderInfo();
- if (discard) {
- if (bi1.getWidth().isDiscard()) {
- if (bi2.getWidth().isDiscard()) {
- return new BorderSpecification(
- CommonBorderPaddingBackground.getDefaultBorderInfo(), 0/*TODO*/);
- } else {
- return border2;
- }
- } else if (bi2.getWidth().isDiscard()) {
- return border1;
- }
- }
- // Otherwise, fall back to the default resolution algorithm
- return determineWinner(border1, border2);
- }
-
- /** {@inheritDoc} */
- public BorderSpecification determineWinner(BorderSpecification border1,
- BorderSpecification border2) {
- BorderInfo bi1 = border1.getBorderInfo();
- BorderInfo bi2 = border2.getBorderInfo();
- // Rule 1
- if (bi1.getStyle() == Constants.EN_HIDDEN) {
- return border1;
- } else if (bi2.getStyle() == Constants.EN_HIDDEN) {
- return border2;
- }
- // Rule 2
- if (bi2.getStyle() == Constants.EN_NONE) {
- return border1;
- } else if (bi1.getStyle() == Constants.EN_NONE) {
- return border2;
- }
- // Rule 3
- int width1 = bi1.getRetainedWidth();
- int width2 = bi2.getRetainedWidth();
- if (width1 > width2) {
- return border1;
- } else if (width1 == width2) {
- int cmp = compareStyles(bi1.getStyle(), bi2.getStyle());
- if (cmp > 0) {
- return border1;
- } else if (cmp < 0) {
- return border2;
- }
- } else {
- return border2;
- }
- // Rule 4
- int cmp = compareFOs(border1.getHolder(), border2.getHolder());
- if (cmp > 0) {
- return border1;
- } else if (cmp < 0) {
- return border2;
- }
- return null;
- }
- }
|