コード例 #1
0
 /**
  * The ListCssApplier has the capabilities to change the type of the given {@link List} dependable on the css.
  * This means: <strong>Always replace your list with the returned one and add content to the list after applying!</strong>
  */
 // not implemented: list-style-type:armenian, georgian, decimal-leading-zero.
 public List Apply(List list, Tag t, HtmlPipelineContext htmlPipelineContext)
 {
     float fontSize = FontSizeTranslator.GetInstance().GetFontSize(t);
     List lst = list;
     IDictionary<String, String> css = t.CSS;
     String styleType;
     css.TryGetValue(CSS.Property.LIST_STYLE_TYPE, out styleType);
     if (null != styleType) {
         if (Util.EqualsIgnoreCase(styleType, CSS.Value.NONE)) {
             lst.Lettered = false;
             lst.Numbered = false;
             lst.SetListSymbol("");
         } else if (Util.EqualsIgnoreCase(CSS.Value.DECIMAL, styleType)) {
             lst = new List(List.ORDERED);
             SynchronizeSymbol(fontSize, lst);
         } else if (Util.EqualsIgnoreCase(CSS.Value.DISC, styleType)) {
             lst = new ZapfDingbatsList(108);
             ShrinkSymbol(lst, fontSize);
         } else if (Util.EqualsIgnoreCase(CSS.Value.SQUARE, styleType)) {
             lst = new ZapfDingbatsList(110);
             ShrinkSymbol(lst, fontSize);
         } else if (Util.EqualsIgnoreCase(CSS.Value.CIRCLE, styleType)) {
             lst = new ZapfDingbatsList(109);
             ShrinkSymbol(lst, fontSize);
         } else if (CSS.Value.LOWER_ROMAN.Equals(styleType)) {
             lst = new RomanList(true, 0);
             SynchronizeSymbol(fontSize, lst);
         } else if (CSS.Value.UPPER_ROMAN.Equals(styleType)) {
             lst = new RomanList(false, 0);
             SynchronizeSymbol(fontSize, lst);
         } else if (CSS.Value.LOWER_GREEK.Equals(styleType)) {
             lst = new GreekList(true, 0);
             SynchronizeSymbol(fontSize, lst);
         } else if (CSS.Value.UPPER_GREEK.Equals(styleType)) {
             lst = new GreekList(false, 0);
             SynchronizeSymbol(fontSize, lst);
         } else if (CSS.Value.LOWER_ALPHA.Equals(styleType) || CSS.Value.LOWER_LATIN.Equals(styleType)) {
             lst = new List(List.ORDERED, List.ALPHABETICAL);
             SynchronizeSymbol(fontSize, lst);
             lst.Lowercase = true;
         } else if (CSS.Value.UPPER_ALPHA.Equals(styleType) || CSS.Value.UPPER_LATIN.Equals(styleType)) {
             lst = new List(List.ORDERED, List.ALPHABETICAL);
             SynchronizeSymbol(fontSize, lst);
             lst.Lowercase = false;
         }
     } else if (Util.EqualsIgnoreCase(t.Name, HTML.Tag.OL)) {
         lst = new List(List.ORDERED);
         SynchronizeSymbol(fontSize, lst);
     } else if (Util.EqualsIgnoreCase(t.Name, HTML.Tag.UL)) {
         lst = new List(List.UNORDERED);
         ShrinkSymbol(lst, fontSize);
     }
     if (css.ContainsKey(CSS.Property.LIST_STYLE_IMAGE)
             && !Util.EqualsIgnoreCase(css[CSS.Property.LIST_STYLE_IMAGE], CSS.Value.NONE)) {
         lst = new List();
         String url = utils.ExtractUrl(css[CSS.Property.LIST_STYLE_IMAGE]);
         iTextSharp.text.Image img = null;
         try {
             if (htmlPipelineContext == null) {
                 img = new ImageRetrieve().RetrieveImage(url);
             } else {
                 try {
                     img = new ImageRetrieve(htmlPipelineContext.GetImageProvider()).RetrieveImage(url);
                 } catch (NoImageProviderException) {
                     if (LOG.IsLogging(Level.TRACE)) {
                         LOG.Trace(String.Format(LocaleMessages.GetInstance().GetMessage("pipeline.html.noimageprovider"), htmlPipelineContext.GetType().FullName));
                     }
                     img = new ImageRetrieve().RetrieveImage(url);
                 }
             }
             lst.ListSymbol = new Chunk(img, 0, 0, false);
             lst.SymbolIndent = img.Width;
             if (LOG.IsLogging(Level.TRACE)) {
                 LOG.Trace(String.Format(LocaleMessages.GetInstance().GetMessage("html.tag.list"), url));
             }
         } catch (IOException e) {
             if (LOG.IsLogging(Level.ERROR)) {
                 LOG.Error(String.Format(LocaleMessages.GetInstance().GetMessage("html.tag.list.failed"), url), e);
             }
             lst = new List(List.UNORDERED);
         } catch (NoImageException e) {
             if (LOG.IsLogging(Level.ERROR)) {
                 LOG.Error(e.Message, e);
             }
             lst = new List(List.UNORDERED);
         }
     }
     lst.Alignindent = false;
     lst.Autoindent = false;
     float leftIndent = 0;
     if (css.ContainsKey(CSS.Property.LIST_STYLE_POSITION) && Util.EqualsIgnoreCase(css[CSS.Property.LIST_STYLE_POSITION], CSS.Value.INSIDE)) {
         leftIndent += 30;
     } else {
         leftIndent += 15;
     }
     leftIndent += css.ContainsKey(CSS.Property.MARGIN_LEFT)?utils.ParseValueToPt(css[CSS.Property.MARGIN_LEFT],fontSize):0;
     leftIndent += css.ContainsKey(CSS.Property.PADDING_LEFT)?utils.ParseValueToPt(css[CSS.Property.PADDING_LEFT],fontSize):0;
     lst.IndentationLeft = leftIndent;
     return lst;
 }