Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* NOTICE: This file has been changed by Plutext Pty Ltd for use in docx4j.
   * The package name has been changed; there may also be other changes.
   * 
   * This notice is included to meet the condition in clause 4(b) of the License. 
   */
  
   /*
   * 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: LazyFont.java 746664 2009-02-22 12:40:44Z jeremias $ */
 
 package org.docx4j.fonts.fop.fonts;
 import java.net.URL;
 import java.util.Map;
 import java.util.Set;
 
 
 
 
This class is used to defer the loading of a font until it is really used.
 
 public class LazyFont extends Typeface implements FontDescriptor {
 
     private static Logger log = LoggerFactory.getLogger(LazyFont.class);
 
     private String metricsFileName = null;
     private String fontEmbedPath = null;
     private boolean useKerning = false;
     private EncodingMode encodingMode = .;
     private boolean embedded = true;
     private String subFontName = null;
 
     private boolean isMetricsLoaded = false;
     private Typeface realFont = null;
     private FontDescriptor realFontDescriptor = null;
 
     private FontResolver resolver = null;

    
Main constructor

Parameters:
fontInfo the font info to embed
resolver the font resolver to handle font URIs
 
     public LazyFont(EmbedFontInfo fontInfoFontResolver resolver) {
 
         this. = fontInfo.getMetricsFile();
         this. = fontInfo.getEmbedFile();
         this. = fontInfo.getKerning();
         this. = fontInfo.getEncodingMode();
         this. = fontInfo.getSubFontName();
         this. = fontInfo.isEmbedded();
         this. = resolver;
     }

    
 
     public String toString() {
         return ( "metrics-url=" +  + ", embed-url=" + 
                 + ", kerning=" +  );
     }
 
     private void load(boolean fail) {
         if (!) {
             try {
                 if ( != null) {
                    

Todo:
Possible thread problem here
 
                     FontReader reader = null;
                     if ( != null) {
                         Source source = .resolve();
                         if (source == null) {
                             String err
                                 = "Cannot load font: failed to create Source from metrics file "
                                     + ;
                             if (fail) {
                                 throw new RuntimeException(err);
                             } else {
                                .error(err);
                            }
                            return;
                        }
                        InputStream in = null;
                        if (source instanceof StreamSource) {
                            in = ((StreamSourcesource).getInputStream();
                        }
                        if (in == null && source.getSystemId() != null) {
                            in = new java.net.URL(source.getSystemId()).openStream();
                        }
                        if (in == null) {
                            String err = "Cannot load font: After URI resolution, the returned"
                                + " Source object does not contain an InputStream"
                                + " or a valid URL (system identifier) for metrics file: "
                                + ;
                            if (fail) {
                                throw new RuntimeException(err);
                            } else {
                                .error(err);
                            }
                            return;
                        }
                        InputSource src = new InputSource(in);
                        src.setSystemId(source.getSystemId());
                        reader = new FontReader(src);
                    } else {
                        reader = new FontReader(new InputSource(
                                    new URL().openStream()));
                    }
                    reader.setKerningEnabled();
                    if (this.) {
                        reader.setFontEmbedPath();
                    }
                    reader.setResolver();
                     = reader.getFont();
                } else {
                    if ( == null) {
                        throw new RuntimeException("Cannot load font. No font URIs available.");
                    }
                     = FontLoader.loadFont(this.,
                            this.this.);
                }
                if ( instanceof FontDescriptor) {
                     = (FontDescriptor;
                }
            } catch (FOPException fopex) {
                .error("Failed to read font metrics file " + fopex);
                if (fail) {
                    throw new RuntimeException(fopex.getMessage());
                }
            } catch (IOException ioex) {
                .error("Failed to read font metrics file " + ioex);
                if (fail) {
                    throw new RuntimeException(ioex.getMessage());
                }
            }
            .setEventListener(this.);
             = true;
        }
    }

    
Gets the real font.

Returns:
the real font
    public Typeface getRealFont() {
        load(false);
        return ;
    }
    // ---- Font ----
    
    public String getEncodingName() {
        load(true);
        return .getEncodingName();
    }

    
    public char mapChar(char c) {
        load(true);
        return .mapChar(c);
    }

    
    public boolean hadMappingOperations() {
        load(true);
        return .hadMappingOperations();
    }

    
    public boolean hasChar(char c) {
        load(true);
        return .hasChar(c);
    }

    
    public boolean isMultiByte() {
        load(true);
        return .isMultiByte();
    }
    // ---- FontMetrics interface ----
    
    public String getFontName() {
        load(true);
        return .getFontName();
    }

    
    public String getEmbedFontName() {
        load(true);
        return .getEmbedFontName();
    }

    
    public String getFullName() {
        load(true);
        return .getFullName();
    }

    
    public Set getFamilyNames() {
        load(true);
        return .getFamilyNames();
    }

    
    public int getMaxAscent(int size) {
        load(true);
        return .getMaxAscent(size);
    }

    
    public int getAscender(int size) {
        load(true);
        return .getAscender(size);
    }

    
    public int getCapHeight(int size) {
        load(true);
        return .getCapHeight(size);
    }

    
    public int getDescender(int size) {
        load(true);
        return .getDescender(size);
    }

    
    public int getXHeight(int size) {
        load(true);
        return .getXHeight(size);
    }

    
    public int getWidth(int iint size) {
        load(true);
        return .getWidth(isize);
    }

    
    public int[] getWidths() {
        load(true);
        return .getWidths();
    }

    
    public boolean hasKerningInfo() {
        load(true);
        return .hasKerningInfo();
    }

    
    public Map getKerningInfo() {
        load(true);
        return .getKerningInfo();
    }
    // ---- FontDescriptor interface ----
    
    public int getCapHeight() {
        load(true);
        return .getCapHeight();
    }

    
    public int getDescender() {
        load(true);
        return .getDescender();
    }

    
    public int getAscender() {
        load(true);
        return .getAscender();
    }

    
    public int getFlags() {
        load(true);
        return .getFlags();
    }

    
    public boolean isSymbolicFont() {
        load(true);
        return .isSymbolicFont();
    }

    
    public int[] getFontBBox() {
        load(true);
        return .getFontBBox();
    }

    
    public int getItalicAngle() {
        load(true);
        return .getItalicAngle();
    }

    
    public int getStemV() {
        load(true);
        return .getStemV();
    }

    
    public FontType getFontType() {
        load(true);
        return .getFontType();
    }

    
    public boolean isEmbeddable() {
        load(true);
        return .isEmbeddable();
    }
New to GrepCode? Check out our FAQ X