// Token: 0x060040D4 RID: 16596 RVA: 0x000ED26C File Offset: 0x000EB46C
        public float[] GetCharacterWidths(string text, int startIndex, int endIndex, out float totalWidth)
        {
            totalWidth = 0f;
            global::dfFont dfFont = (global::dfFont)base.Font;

            float[] array = new float[text.Length];
            float   num   = base.TextScale * base.PixelRatio;
            float   num2  = (float)base.CharacterSpacing * num;

            for (int i = startIndex; i <= endIndex; i++)
            {
                global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(text[i]);
                if (glyph != null)
                {
                    if (i > 0)
                    {
                        array[i - 1] += num2;
                        totalWidth   += num2;
                    }
                    float num3 = (float)glyph.xadvance * num;
                    array[i]    = num3;
                    totalWidth += num3;
                }
            }
            return(array);
        }
 // Token: 0x060040D1 RID: 16593 RVA: 0x000ED1AC File Offset: 0x000EB3AC
 public static global::dfFontRendererBase Obtain(global::dfFont font)
 {
     global::dfFont.BitmappedFontRenderer bitmappedFontRenderer = (global::dfFont.BitmappedFontRenderer.objectPool.Count <= 0) ? new global::dfFont.BitmappedFontRenderer() : global::dfFont.BitmappedFontRenderer.objectPool.Dequeue();
     bitmappedFontRenderer.Reset();
     bitmappedFontRenderer.Font = font;
     return(bitmappedFontRenderer);
 }
 // Token: 0x060040E0 RID: 16608 RVA: 0x000EE198 File Offset: 0x000EC398
 private void calculateTokenRenderSize(global::dfMarkupToken token)
 {
     try
     {
         global::dfFont dfFont       = (global::dfFont)base.Font;
         int            num          = 0;
         char           previousChar = '\0';
         bool           flag         = token.TokenType == global::dfMarkupTokenType.Whitespace || token.TokenType == global::dfMarkupTokenType.Text;
         if (flag)
         {
             int i = 0;
             while (i < token.Length)
             {
                 char c = token[i];
                 if (c == '\t')
                 {
                     num += base.TabSize;
                 }
                 else
                 {
                     global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(c);
                     if (glyph != null)
                     {
                         if (i > 0)
                         {
                             num += dfFont.GetKerning(previousChar, c);
                             num += base.CharacterSpacing;
                         }
                         num += glyph.xadvance;
                     }
                 }
                 i++;
                 previousChar = c;
             }
         }
         else if (token.TokenType == global::dfMarkupTokenType.StartTag && token.Matches("sprite"))
         {
             if (token.AttributeCount < 1)
             {
                 throw new Exception("Missing sprite name in markup");
             }
             Texture texture    = dfFont.Texture;
             int     lineHeight = dfFont.LineHeight;
             string  value      = token.GetAttribute(0).Value.Value;
             global::dfAtlas.ItemInfo itemInfo = dfFont.atlas[value];
             if (itemInfo != null)
             {
                 float num2 = itemInfo.region.width * (float)texture.width / (itemInfo.region.height * (float)texture.height);
                 num = Mathf.CeilToInt((float)lineHeight * num2);
             }
         }
         token.Height = base.Font.LineHeight;
         token.Width  = num;
     }
     finally
     {
     }
 }
 // Token: 0x060040D9 RID: 16601 RVA: 0x000EDAE0 File Offset: 0x000EBCE0
 private void renderSprite(global::dfMarkupToken token, Color32 color, Vector3 position, global::dfRenderData destination)
 {
     try
     {
         global::dfList <Vector3> vertices  = destination.Vertices;
         global::dfList <int>     triangles = destination.Triangles;
         global::dfList <Color32> colors    = destination.Colors;
         global::dfList <Vector2> uv        = destination.UV;
         global::dfFont           dfFont    = (global::dfFont)base.Font;
         string value = token.GetAttribute(0).Value.Value;
         global::dfAtlas.ItemInfo itemInfo = dfFont.Atlas[value];
         if (!(itemInfo == null))
         {
             float num   = (float)token.Height * base.TextScale * base.PixelRatio;
             float num2  = (float)token.Width * base.TextScale * base.PixelRatio;
             float x     = position.x;
             float y     = position.y;
             int   count = vertices.Count;
             vertices.Add(new Vector3(x, y));
             vertices.Add(new Vector3(x + num2, y));
             vertices.Add(new Vector3(x + num2, y - num));
             vertices.Add(new Vector3(x, y - num));
             triangles.Add(count);
             triangles.Add(count + 1);
             triangles.Add(count + 3);
             triangles.Add(count + 3);
             triangles.Add(count + 1);
             triangles.Add(count + 2);
             Color32 item = (!base.ColorizeSymbols) ? this.applyOpacity(base.DefaultColor) : this.applyOpacity(color);
             colors.Add(item);
             colors.Add(item);
             colors.Add(item);
             colors.Add(item);
             Rect region = itemInfo.region;
             uv.Add(new Vector2(region.x, region.yMax));
             uv.Add(new Vector2(region.xMax, region.yMax));
             uv.Add(new Vector2(region.xMax, region.y));
             uv.Add(new Vector2(region.x, region.y));
         }
     }
     finally
     {
     }
 }
 // Token: 0x060040D8 RID: 16600 RVA: 0x000ED608 File Offset: 0x000EB808
 private void renderText(global::dfMarkupToken token, Color32 color, Vector3 position, global::dfRenderData destination)
 {
     try
     {
         global::dfList <Vector3> vertices  = destination.Vertices;
         global::dfList <int>     triangles = destination.Triangles;
         global::dfList <Color32> colors    = destination.Colors;
         global::dfList <Vector2> uv        = destination.UV;
         global::dfFont           dfFont    = (global::dfFont)base.Font;
         global::dfAtlas.ItemInfo itemInfo  = dfFont.Atlas[dfFont.sprite];
         Texture texture      = dfFont.Texture;
         float   num          = 1f / (float)texture.width;
         float   num2         = 1f / (float)texture.height;
         float   num3         = num * 0.125f;
         float   num4         = num2 * 0.125f;
         float   num5         = base.TextScale * base.PixelRatio;
         char    previousChar = '\0';
         Color32 color2       = this.applyOpacity(this.multiplyColors(color, base.DefaultColor));
         Color32 item         = color2;
         if (base.BottomColor != null)
         {
             item = this.applyOpacity(this.multiplyColors(color, base.BottomColor.Value));
         }
         int i = 0;
         while (i < token.Length)
         {
             char c = token[i];
             if (c != '\0')
             {
                 global::dfFont.GlyphDefinition glyph = dfFont.GetGlyph(c);
                 if (glyph != null)
                 {
                     int     kerning = dfFont.GetKerning(previousChar, c);
                     float   num6    = position.x + (float)(glyph.xoffset + kerning) * num5;
                     float   num7    = position.y - (float)glyph.yoffset * num5;
                     float   num8    = (float)glyph.width * num5;
                     float   num9    = (float)glyph.height * num5;
                     float   num10   = num6 + num8;
                     float   num11   = num7 - num9;
                     Vector3 vector;
                     vector..ctor(num6, num7);
                     Vector3 vector2;
                     vector2..ctor(num10, num7);
                     Vector3 vector3;
                     vector3..ctor(num10, num11);
                     Vector3 vector4;
                     vector4..ctor(num6, num11);
                     float num12 = itemInfo.region.x + (float)glyph.x * num - num3;
                     float num13 = itemInfo.region.yMax - (float)glyph.y * num2 - num4;
                     float num14 = num12 + (float)glyph.width * num - num3;
                     float num15 = num13 - (float)glyph.height * num2 + num4;
                     if (base.Shadow)
                     {
                         global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles);
                         Vector3 vector5 = base.ShadowOffset * num5;
                         vertices.Add(vector + vector5);
                         vertices.Add(vector2 + vector5);
                         vertices.Add(vector3 + vector5);
                         vertices.Add(vector4 + vector5);
                         Color32 item2 = this.applyOpacity(base.ShadowColor);
                         colors.Add(item2);
                         colors.Add(item2);
                         colors.Add(item2);
                         colors.Add(item2);
                         uv.Add(new Vector2(num12, num13));
                         uv.Add(new Vector2(num14, num13));
                         uv.Add(new Vector2(num14, num15));
                         uv.Add(new Vector2(num12, num15));
                     }
                     if (base.Outline)
                     {
                         for (int j = 0; j < global::dfFont.BitmappedFontRenderer.OUTLINE_OFFSETS.Length; j++)
                         {
                             global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles);
                             Vector3 vector6 = global::dfFont.BitmappedFontRenderer.OUTLINE_OFFSETS[j] * (float)base.OutlineSize * num5;
                             vertices.Add(vector + vector6);
                             vertices.Add(vector2 + vector6);
                             vertices.Add(vector3 + vector6);
                             vertices.Add(vector4 + vector6);
                             Color32 item3 = this.applyOpacity(base.OutlineColor);
                             colors.Add(item3);
                             colors.Add(item3);
                             colors.Add(item3);
                             colors.Add(item3);
                             uv.Add(new Vector2(num12, num13));
                             uv.Add(new Vector2(num14, num13));
                             uv.Add(new Vector2(num14, num15));
                             uv.Add(new Vector2(num12, num15));
                         }
                     }
                     global::dfFont.BitmappedFontRenderer.addTriangleIndices(vertices, triangles);
                     vertices.Add(vector);
                     vertices.Add(vector2);
                     vertices.Add(vector3);
                     vertices.Add(vector4);
                     colors.Add(color2);
                     colors.Add(color2);
                     colors.Add(item);
                     colors.Add(item);
                     uv.Add(new Vector2(num12, num13));
                     uv.Add(new Vector2(num14, num13));
                     uv.Add(new Vector2(num14, num15));
                     uv.Add(new Vector2(num12, num15));
                     position.x += (float)(glyph.xadvance + kerning + base.CharacterSpacing) * num5;
                 }
             }
             i++;
             previousChar = c;
         }
     }
     finally
     {
     }
 }