% \iffalse 
%<*internal>
\iffalse
%</internal>
%<*readme>
_______________________
The showcharinbox package
v0.1

Show charcters inside a box display its height, depth, and width information.

____________________________________________________________
How to file bug reports and follow development of showcharinbox package

The showcharinbox package is developed on <https://github.com/vafa/showcharinbox>. 

Users are encouraged to offer suggestions and file bug reports on 
the github issue tracker: <https://github.com/vafa/showcharinbox/issues>.

______________
Vafa Khalighi
vafakhlg@gmail.com

Copyright © 2012
Distributed under the LaTeX Project Public License
It may be distributed and/or modified under the LaTeX Project Public License,
version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt

This work is “author-maintained” (as per LPPL maintenance status) 
by Vafa Khalighi.
%</readme>
%<*internal>
\fi
\begingroup
%</internal>
%<*batchfile>
\input docstrip.tex
\keepsilent
\preamble

  ______________________________________
  Copyright © 2012  Vafa Khalighi

  License information appended.


\endpreamble
\postamble

Copyright © 2012  Vafa Khalighi <vafakhlg@gmail.com>

It may be distributed and/or modified under the LaTeX Project Public License,
version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt

This work is “author-maintained” (as per LPPL maintenance status) 
by Vafa Khalighi.



\endpostamble
\askforoverwritefalse
\generate{\file{showcharinbox.sty}{\from{\jobname.dtx}{showcharinbox.sty}}}
%</batchfile>
%<batchfile>\endbatchfile
%<*internal>
\generate{\file{\jobname.ins}{\from{\jobname.dtx}{batchfile}}}
\nopreamble\nopostamble
\generate{\file{README.txt}{\from{\jobname.dtx}{readme}}}
\endgroup
\immediate\write18{mv README.txt README}
\immediate\write18{makeindex -s gind.ist -o \jobname.ind  \jobname.idx}
\immediate\write18{makeindex -s gglo.ist -o \jobname.gls  \jobname.glo}
%</internal>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{bidicode,framed,fontspec}
\usepackage{calc}
\usepackage{pifont}
\usepackage{bbding}
\setlength\columnseprule{.4pt}
\setmainfont[Mapping=tex-text,Numbers=OldStyle]{Minion Pro}
\setsansfont[Mapping=tex-text,Numbers=OldStyle]{Myriad Pro}
\setmonofont{Andale Mono}
\newfontfamily\testfont{XB Yas}
\usepackage[numbered]{hypdoc}
\usepackage{showcharinbox}
\definecolor{myblue}{rgb}{0.1,0.2,0.8}
\definecolor{TFFrameColor}{rgb}{0.1,0.2,0.8}
\definecolor{TFTitleColor}{rgb}{1,1,1}
\hypersetup{linkcolor=myblue,urlcolor=myblue,citecolor=myblue}
\makeatletter
\renewcommand\tableofcontents{\relax
  \begin{multicols}{2}[\section*{\contentsname}]\small
    \@starttoc{toc}\relax
  \end{multicols}}
\makeatother
\newcounter{local}
\renewcommand\theenumi{\protect\setcounter{local}%
  {201+\the\value{enumi}}\protect\ding{\value{local}}}
\renewcommand\labelenumi{\theenumi}
\renewcommand\labelitemi{\HandRight}
\renewcommand\labelitemii{\HandRightUp}
\renewcommand\labelitemiii{\HandCuffRight}
\renewcommand\labelitemiv{\HandPencilLeft}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
%\OnlyDescription
\begin{document}
  \DocInput{\jobname.dtx}
  \PrintIndex
  \PrintChanges
\end{document}
%</driver>
%
%
% \fi
%
% \GetFileInfo{\jobname.cls}
% \CheckSum{0}
% \makeatletter
%\title{The \textsf{showcharinbox} package\\
%\href{https://github.com/vafa/showcharinbox}{\texttt{https://github.com/vafa/showcharinbox}}}
%\author{Vafa Khalighi\\ \href{mailto:vafakhlg@gmail.com}{\texttt{vafakhlg@gmail.com}}}
%\date{Version 0.1\qquad\today}
%\maketitle
%\begin{titled-frame}{\parbox{\dimexpr(\textwidth-2\fboxsep-2\fboxrule)}{How to file bug reports and follow development of \textsf{showcharinbox} package}}
%The \textsf{showcharinbox} package is developed on: \url{https://github.com/vafa/showcharinbox}. Users are encouraged to offer suggestions and file bug reports on the github issue tracker: \url{https://github.com/vafa/showcharinbox/issues}.
%\end{titled-frame}
%\tableofcontents
%\section{What does the \textsf{showcharinbox} package do?}
% This package defines the command \Lcs{ShowCharInBox} which has the following syntax:
%\begin{BDef}
%\Lcs{ShowCharInBox}\Largb{\Larga{charcter}}
%\end{BDef}
% This will show \Larga{charcter} inside a box showing its height, depth, and width information. 
%\begin{LTXexample}[morekeywords={ShowCharInBox,testfont,newfontfamily},pos=b]
%\documentclass{article}
%\usepackage{fontspec}
%\newfontfamily\testfont{XB Yas}
%\usepackage{showcharinbox}
%\begin{document}
%\begin{center}
%\ShowCharInBox{\fontsize{200}{210}\testfont \char"FEA5}
%\end{center}
%\end{document}
%\end{LTXexample}
% \StopEventually{}
%
% \section{Implementation of \textsf{showcharinbox} package}
%\iffalse
%<*showcharinbox.sty>
%\fi
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\newcommand*{\showcharinbox@date}{2012/07/25}
\newcommand*{\showcharinbox@version}{v0.1}
\ProvidesPackage{showcharinbox}
          [\showcharinbox@date\space \showcharinbox@version\space 
          Showing characters inside a box]
\newdimen\showcharinbox@charwidth
\newdimen\showcharinbox@charheight
\newdimen\showcharinbox@chardepth
\newbox\showcharinbox@bigdot
\newbox\showcharinbox@smalldot
%    \end{macrocode}
% Macros for drawing figures:
%    \begin{macrocode}
\newcommand*{\showcharinbox@hidehrule}[2]{%
\kern-#1\hrule height#1 depth#2 \kern-#2 }
\newcommand*{\showcharinbox@hidevrule}[2]{\kern-#1{\dimen0=#1
    \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 }
%    \end{macrocode}
% \Lcs{showcharinbox@makeblankbox} puts rules at the edges of a blank box
% whose dimensions are those of \Lcs{box0} (assuming nonnegative wdith, height, and depth). 
% Argument 1 is rule thickness outside, and argument 2 is rule thickness inside:
%    \begin{macrocode}
\newcommand*{\showcharinbox@makeblankbox}[2]{\hbox{\lower\dp0\vbox{\showcharinbox@hidehrule{#1}{#2}%
%    \end{macrocode}
%overlap the rules at the corners:
%    \begin{macrocode}
    \kern-#1% 
    \hbox to\wd0{\showcharinbox@hidevrule{#1}{#2}%
%    \end{macrocode}
%set the vrule height:
%    \begin{macrocode}
      \raise\ht0\vbox to #1{}% 
%    \end{macrocode}
%set the vrule depth:
%    \begin{macrocode}
      \lower\dp0\vtop to #1{}% 
      \hfil\showcharinbox@hidevrule{#2}{#1}}%
    \kern-#1\showcharinbox@hidehrule{#2}{#1}}}}
\newcommand*{\showcharinbox@maketypebox}{\showcharinbox@makeblankbox{0pt}{1pt}}
\newcommand*{\showcharinbox@makelightbox}{\showcharinbox@makeblankbox{.2pt}{.2pt}}
%    \end{macrocode}
% \Lcs{box}\Lcs{showcharinbox@bigdot} is a null box with a bullet at its reference point. \Lcs{ht0} is the axis height:
%    \begin{macrocode}
\setbox0=\hbox{$\vcenter{}$} % 
%    \end{macrocode}
%bullet is centered on the axis:
%    \begin{macrocode}
\setbox1=\hbox to\z@{$\hss\bullet\hss$} % 
\setbox\showcharinbox@bigdot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
%    \end{macrocode}
%\Lcs{cdot} is centered on the axis:
%    \begin{macrocode}
\setbox1=\hbox to\z@{$\hss\cdot\hss$} % 
\setbox\showcharinbox@smalldot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
%    \end{macrocode}
% \Lcs{showcharinbox@arrows} makes things like $\leftarrow\hbox{ text }\rightarrow$:
%    \begin{macrocode}
\newcommand*{\showcharinbox@arrows}[2]{% 
%    \end{macrocode}
%Argument 1 is width and argument 2 is text:
%    \begin{macrocode}
  {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}
    \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$%
      \cleaders\copy0\hfil
      \kern.4em #2\kern.4em
      \cleaders\copy0\hfil
      $\mkern-6mu\rightarrow$\kern-.055556em}}}
%    \end{macrocode}
% \Lcs{showcharinbox@samplebox} makes the outline of a box, with big dot at reference point. Argument 1 is height, argument 2 is depth, argument 3 is width, and argument4 is text:
%    \begin{macrocode}
\newcommand*{\showcharinbox@samplebox}[4]{% 
  {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss}
      \nointerlineskip
%    \end{macrocode}
%Now \Lcs{box0} has the desired height, depth, and width:
%    \begin{macrocode}
      \vbox to #2{}}% 
    \hbox{\copy\showcharinbox@bigdot
      \vrule height.2pt depth.2pt width#3%
      \kern-#3%
      \showcharinbox@makelightbox
      \kern-#3%
      \raise#1\vbox{\hbox to #3{\hss#4\hss}
        \kern 3pt}}}}
        
\newcommand{\ShowCharInBox}[1]{%
\setbox9=\hbox{#1}
\setlength{\showcharinbox@chardepth}{\dp9}
\setlength{\showcharinbox@charheight}{\ht9}
\setlength{\showcharinbox@charwidth}{\wd9}
\setbox0=\hbox{$\uparrow$}
%    \end{macrocode}
% With luck, they'll line up:
%    \begin{macrocode}
\setbox1=\hbox to \wd0{$\hss\mid\hss$} % 
\setbox2=\vbox to \showcharinbox@charheight{\copy0
  \nointerlineskip \kern-.5pt \copy1
  \nointerlineskip \kern-.5pt \copy1
  \vfil
  \moveleft 1em\hbox{height$=$\the\showcharinbox@charheight}
  \vfil
  \copy1 \nointerlineskip \kern-.5pt
  \copy1 \nointerlineskip \kern-.5pt
  \hbox{$\downarrow$}
  \kern.2pt}
\setbox3=\vbox to \showcharinbox@chardepth{\kern.2pt\copy0
  \vfil
  \moveleft 1em\hbox{depth$=$\the\showcharinbox@chardepth}
  \vfil
  \hbox{$\downarrow$}
  \kern0pt}
%    \end{macrocode}
%This cancels the null text above the \Lcs{showcharinbox@samplebox}:
%    \begin{macrocode}
\setbox4=\vtop{\kern-3pt % 
  \hbox{\showcharinbox@samplebox{\showcharinbox@charheight}{\showcharinbox@chardepth}{\showcharinbox@charwidth}{}%
    \kern-\showcharinbox@charwidth
 \hbox to \showcharinbox@charwidth{\hss \unhbox9\hss}}
  \kern3pt
  \showcharinbox@arrows{\showcharinbox@charwidth}{width$=$\the\showcharinbox@charwidth}}
\medskip\indent
%    \end{macrocode}
%\Lcs{ht0} is the axis height:
%    \begin{macrocode}
\setbox0=\hbox{$\vcenter{}$}% 
\lower\ht0\hbox{Reference point$-$\kern-.2em$\rightarrow$\kern2pt}%
\raise\ht2\box4
\kern1.5em
\raise\ht2\vtop{\kern0pt\box2\nointerlineskip\box3}}
%    \end{macrocode}
% \iffalse
%</showcharinbox.sty>
%\fi
%
%
% \typeout{*************************************************************}
% \typeout{*}
% \typeout{* To finish the installation you have to move the following}
% \typeout{* file into a directory searched by TeX:}
% \typeout{*}
% \typeout{* \space\space\space showcharinbox.sty  file}
% \typeout{*}
% \typeout{*************************************************************}
%
\endinput
