예제 #1
0
        public static bool IsMark(int charPoint)
        {
            int p = JavaUtil.ArraysBinarySearch(markTable, charPoint);

            if (p >= 0)
            {
                return(true);
            }
            p = ~p;
            if (p >= markTable.Length)
            {
                return(false);
            }
            return((p & 1) != 0);
        }
예제 #2
0
        internal String ConsumeToAnySorted(params char[] chars)
        {
            int start     = pos;
            int remaining = length;

            char[] val = input;
            while (pos < remaining)
            {
                if (JavaUtil.ArraysBinarySearch(chars, val[pos]) >= 0)
                {
                    break;
                }
                pos++;
            }
            return(pos > start?CacheString(start, pos - start) : "");
        }
예제 #3
0
 internal bool MatchesAnySorted(char[] seq)
 {
     return(!IsEmpty() && JavaUtil.ArraysBinarySearch(seq, input[pos]) >= 0);
 }
예제 #4
0
        /// <summary>Places the barcode in a <CODE>PdfCanvas</CODE>.</summary>
        /// <remarks>
        /// Places the barcode in a <CODE>PdfCanvas</CODE>. The
        /// barcode is always placed at coordinates (0, 0). Use the
        /// translation matrix to move it elsewhere.<p>
        /// The bars and text are written in the following colors:
        /// <br />
        /// <TABLE BORDER=1 SUMMARY="barcode properties">
        /// <TR>
        /// <TH><P><CODE>barColor</CODE></TH>
        /// <TH><P><CODE>textColor</CODE></TH>
        /// <TH><P>Result</TH>
        /// </TR>
        /// <TR>
        /// <TD><P><CODE>null</CODE></TD>
        /// <TD><P><CODE>null</CODE></TD>
        /// <TD><P>bars and text painted with current fill color</TD>
        /// </TR>
        /// <TR>
        /// <TD><P><CODE>barColor</CODE></TD>
        /// <TD><P><CODE>null</CODE></TD>
        /// <TD><P>bars and text painted with <CODE>barColor</CODE></TD>
        /// </TR>
        /// <TR>
        /// <TD><P><CODE>null</CODE></TD>
        /// <TD><P><CODE>textColor</CODE></TD>
        /// <TD><P>bars painted with current color<br />text painted with <CODE>textColor</CODE></TD>
        /// </TR>
        /// <TR>
        /// <TD><P><CODE>barColor</CODE></TD>
        /// <TD><P><CODE>textColor</CODE></TD>
        /// <TD><P>bars painted with <CODE>barColor</CODE><br />text painted with <CODE>textColor</CODE></TD>
        /// </TR>
        /// </TABLE>
        /// </remarks>
        /// <param name="canvas">the <CODE>PdfCanvas</CODE> where the barcode will be placed</param>
        /// <param name="barColor">the color of the bars. It can be <CODE>null</CODE></param>
        /// <param name="textColor">the color of the text. It can be <CODE>null</CODE></param>
        /// <returns>the dimensions the barcode occupies</returns>
        public override Rectangle PlaceBarcode(PdfCanvas canvas, Color barColor, Color textColor)
        {
            Rectangle rect       = GetBarcodeSize();
            float     barStartX  = 0;
            float     barStartY  = 0;
            float     textStartY = 0;

            if (font != null)
            {
                if (baseline <= 0)
                {
                    textStartY = barHeight - baseline;
                }
                else
                {
                    textStartY = -GetDescender();
                    barStartY  = textStartY + baseline;
                }
            }
            switch (codeType)
            {
            case EAN13:
            case UPCA:
            case UPCE: {
                if (font != null)
                {
                    barStartX += font.GetWidth(code[0], size);
                }
                break;
            }
            }
            byte[] bars;
            int[]  guard = GUARD_EMPTY;
            switch (codeType)
            {
            case EAN13: {
                bars  = GetBarsEAN13(code);
                guard = GUARD_EAN13;
                break;
            }

            case EAN8: {
                bars  = GetBarsEAN8(code);
                guard = GUARD_EAN8;
                break;
            }

            case UPCA: {
                bars  = GetBarsEAN13("0" + code);
                guard = GUARD_UPCA;
                break;
            }

            case UPCE: {
                bars  = GetBarsUPCE(code);
                guard = GUARD_UPCE;
                break;
            }

            case SUPP2: {
                bars = GetBarsSupplemental2(code);
                break;
            }

            case SUPP5: {
                bars = GetBarsSupplemental5(code);
                break;
            }

            default: {
                throw new PdfException("Invalid code type");
            }
            }
            float keepBarX = barStartX;
            bool  print    = true;
            float gd       = 0;

            if (font != null && baseline > 0 && guardBars)
            {
                gd = baseline / 2;
            }
            if (barColor != null)
            {
                canvas.SetFillColor(barColor);
            }
            for (int k = 0; k < bars.Length; ++k)
            {
                float w = bars[k] * x;
                if (print)
                {
                    if (JavaUtil.ArraysBinarySearch(guard, k) >= 0)
                    {
                        canvas.Rectangle(barStartX, barStartY - gd, w - inkSpreading, barHeight + gd);
                    }
                    else
                    {
                        canvas.Rectangle(barStartX, barStartY, w - inkSpreading, barHeight);
                    }
                }
                print      = !print;
                barStartX += w;
            }
            canvas.Fill();
            if (font != null)
            {
                if (textColor != null)
                {
                    canvas.SetFillColor(textColor);
                }
                canvas.BeginText();
                canvas.SetFontAndSize(font, size);
                switch (codeType)
                {
                case EAN13: {
                    canvas.SetTextMatrix(0, textStartY);
                    canvas.ShowText(code.JSubstring(0, 1));
                    for (int k = 1; k < 13; ++k)
                    {
                        String c   = code.JSubstring(k, k + 1);
                        float  len = font.GetWidth(c, size);
                        float  pX  = keepBarX + TEXTPOS_EAN13[k - 1] * x - len / 2;
                        canvas.SetTextMatrix(pX, textStartY);
                        canvas.ShowText(c);
                    }
                    break;
                }

                case EAN8: {
                    for (int k = 0; k < 8; ++k)
                    {
                        String c   = code.JSubstring(k, k + 1);
                        float  len = font.GetWidth(c, size);
                        float  pX  = TEXTPOS_EAN8[k] * x - len / 2;
                        canvas.SetTextMatrix(pX, textStartY);
                        canvas.ShowText(c);
                    }
                    break;
                }

                case UPCA: {
                    canvas.SetTextMatrix(0, textStartY);
                    canvas.ShowText(code.JSubstring(0, 1));
                    for (int k = 1; k < 11; ++k)
                    {
                        String c   = code.JSubstring(k, k + 1);
                        float  len = font.GetWidth(c, size);
                        float  pX  = keepBarX + TEXTPOS_EAN13[k] * x - len / 2;
                        canvas.SetTextMatrix(pX, textStartY);
                        canvas.ShowText(c);
                    }
                    canvas.SetTextMatrix(keepBarX + x * (11 + 12 * 7), textStartY);
                    canvas.ShowText(code.JSubstring(11, 12));
                    break;
                }

                case UPCE: {
                    canvas.SetTextMatrix(0, textStartY);
                    canvas.ShowText(code.JSubstring(0, 1));
                    for (int k = 1; k < 7; ++k)
                    {
                        String c   = code.JSubstring(k, k + 1);
                        float  len = font.GetWidth(c, size);
                        float  pX  = keepBarX + TEXTPOS_EAN13[k - 1] * x - len / 2;
                        canvas.SetTextMatrix(pX, textStartY);
                        canvas.ShowText(c);
                    }
                    canvas.SetTextMatrix(keepBarX + x * (9 + 6 * 7), textStartY);
                    canvas.ShowText(code.JSubstring(7, 8));
                    break;
                }

                case SUPP2:
                case SUPP5: {
                    for (int k = 0; k < code.Length; ++k)
                    {
                        String c   = code.JSubstring(k, k + 1);
                        float  len = font.GetWidth(c, size);
                        float  pX  = (7.5f + (9 * k)) * x - len / 2;
                        canvas.SetTextMatrix(pX, textStartY);
                        canvas.ShowText(c);
                    }
                    break;
                }
                }
                canvas.EndText();
            }
            return(rect);
        }