%%
%% This is file `lengthconvert.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% lengthconvert.dtx  (with options: `package')
%% ----------------------------------------------------------------
%% The lengthconvert package --- Convert a length to an other unit.
%% E-mail: marco.daniel@mada-nada.de
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ----------------------------------------------------------------
%% 
\RequirePackage{expl3,xparse}

\ProvidesExplPackage
  {lengthconvert}{2013/05/13}{1.0}{Convert length to another unit}
\@ifpackagelater { expl3 } { 2012/11/21 }
  { }
  {
    \PackageError { lengthtconvert } { Support~package~expl3~too~old }
      {
        You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~
        'l3packages'.\MessageBreak
        Loading~lengthtconvert~will~abort!
      }
    \tex_endinput:D
  }
\RequirePackage{ l3keys2e }
\clist_new:N \g__lconv_allowed_shortunits_clist
\clist_gset:Nn \g__lconv_allowed_shortunits_clist
   { pt , pc , in , bp , cm , mm , dd , cc ,sp }
\clist_new:N \g__lconv_allowed_longunits_clist
\clist_gset:Nn \g__lconv_allowed_longunits_clist
   { point , pica , inch , big-point , centimeter , millimeter ,
     didot-point , cicero , scaled-point }
\clist_new:N \g__lconv_allowed_allunits_clist
\clist_gset:NV \g__lconv_allowed_allunits_clist \g__lconv_allowed_shortunits_clist
\clist_gput_right:NV \g__lconv_allowed_allunits_clist \g__lconv_allowed_longunits_clist
\tl_new:N \l__lconv_unit_tl
\keys_define:nn { lengthconvert }
 {
   unit  .tl_set:N = \l__lconv_unit_tl
 }
\keys_set:nn { lengthconvert }
 {
  unit  = cm ,
 }
\tl_new:N \l__lconv_default_unit_tl
\keys_define:nn { lengthconvert }
 {
    pt    .meta:n  =
            {  unit   =   pt     },
    pc    .meta:n  =
            {  unit   =   pc     },
    in    .meta:n  =
            {  unit   =   in     },
    bp    .meta:n  =
            {  unit   =   bp     },
    cm    .meta:n  =
            {  unit   =   cm     },
    mm    .meta:n  =
            {  unit   =   mm     },
    dd    .meta:n  =
            {  unit   =   dd     },
    cc    .meta:n  =
            {  unit   =   cc     },
    sp    .meta:n  =
            {  unit   =   sp     },
    point .meta:n  =
            {  unit   =   pt     },
    pica  .meta:n  =
            {  unit   =   pc     },
    inch  .meta:n  =
            {  unit   =   in     },
    big-point  .meta:n  =
            {  unit   =   bp     },
    centimeter .meta:n  =
            {  unit   =   cm     },
    millimeter .meta:n  =
            {  unit   =   mm     },
    didot-point .meta:n  =
            {  unit   =   dd     },
    cicero .meta:n  =
            {  unit   =   cc     },
    scaled-point .meta:n  =
            {  unit   =   sp     },
 }
\keys_define:nn { lengthconvert } {
  use-siunitx   .bool_set:N = \l__lconv_use_siunitx_bool
}
\keys_define:nn { lengthconvert } {
  precision   .int_set:N = \l__lconv_precision_int
}
\keys_set:nn { lengthconvert }
 {
  precision  = 5 ,
 }
\keys_define:nn { lengthconvert } {
  number-only  .bool_set:N = \l__lconv_only_num_bool
}
\keys_define:nn { lengthconvert } {
  unknown .code:n =
    {
      \msg_error:nnx { lengthconvert } { option-unknown }
            { \exp_not:V \l_keys_key_tl }
    }
}
\NewDocumentCommand \Convertsetup { m }
 {
  \keys_set:nn { lengthconvert } { #1 }
 }
\DeclareExpandableDocumentCommand \Convert { O{} m }
 {
  \group_begin:
    \keys_set:nn { lengthconvert } { #1 }
    \clist_if_in:NVTF \g__lconv_allowed_allunits_clist \l__lconv_unit_tl
     {
      \bool_if:NTF \l__lconv_use_siunitx_bool
       {
        \__lconv_using_siunitx:n { #2 }
       }
       {
        \__lconv_nousing_siunitx:n { #2 }
       }
     }
     {
      \msg_error:nnx { lengthconvert } { unit-unknown }
            { \exp_not:V \l__lconv_unit_tl }
     }
  \group_end:
 }
\cs_new:Npn \__lconv_calc_dim:n #1
 {
  \fp_eval:n
     {
      round( \dim_to_fp:n { #1 } / 1\l__lconv_unit_tl , \l__lconv_precision_int)
     }
 }

\cs_new:Npn \__lconv_using_siunitx:n #1
 {
  \bool_if:NTF \l__lconv_only_num_bool
   {
    \num { \__lconv_calc_dim:n { #1 } }
   }
   {
    \SI { \__lconv_calc_dim:n { #1 } } { \l__lconv_unit_tl }
   }
 }
\cs_new:Npn \__lconv_nousing_siunitx:n #1
 {
  \bool_if:NTF \l__lconv_only_num_bool
   {
    \__lconv_calc_dim:n { #1 }
   }
   {
    \__lconv_calc_dim:n { #1 } \, \l__lconv_unit_tl
   }
 }
\msg_new:nnnn { lengthconvert } { option-unknown }
  { Unknown~option~'#1'~for~package~#2. }
  {
    LaTeX~has~been~asked~to~set~an~option~called~'#1'~
    but~the~#2~package~has~not~created~an~option~with~this~name.
  }
\msg_new:nnnn { lengthconvert } { unit-unknown }
  { Unknown~unit~'#1'~for~package~#2. }
  {
    You~are~setting~an~unit~'#1'~which~
    is~unknonw~for~the~package~#2.
  }
\ProcessKeysOptions { lengthconvert }
%% Copyright (C) 2013 by
%%   Marco Daniel marco.daniel@mada-nada.de
%% 
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version.  The latest
%% version of this license is in the file:
%%    http://www.latex-project.org/lppl.txt
%% 
%% This work is "maintained" (as per LPPL maintenance status) by
%%   Marco Daniel.
%% 
%%
%% End of file `lengthconvert.sty'.
