*! -spmap_psl-: Auxiliary program for -spmap-
*! Version 1.3.0 - 13 March 2017
*! Version 1.2.0 - 14 March 2008
*! Version 1.1.0 - 7 May 2007
*! Version 1.0.0 - 7 December 2006
*! Author: Maurizio Pisati
*! Department of Sociology and Social Research
*! University of Milano Bicocca (Italy)
*! maurizio.pisati@unimib.it




*  ----------------------------------------------------------------------------
*  1. Define program
*  ----------------------------------------------------------------------------

program spmap_psl, sclass
version 9.2




*  ----------------------------------------------------------------------------
*  2. Define syntax
*  ----------------------------------------------------------------------------

syntax, List(string asis) Max(numlist min=1 max=1 >0 integer)   ///
        Option(string asis) [Default(string)]




*  ----------------------------------------------------------------------------
*  3. Parse list
*  ----------------------------------------------------------------------------

local FIRST : word 1 of `list'
if (inlist("`FIRST'","=","..","...")) {
   di as err `"{p}Option `option' does not accept symbol "`FIRST'" "'   ///
             "as its first argument{p_end}"
   exit 198
}
local NL : word count `list'
forval i = 1/`NL' {
   local ITEM : word `i' of `list'
   if ("`ITEM'" == ".") {
      if ("`default'" != "") {
         local EL "`default'"
         local PL `"`PL'"`EL'" "'
      }
      else {
         di as err `"{p}Option `option' does not accept symbol ".", "'   ///
                   `"since no default value exists for this "'           ///
                   `"option{p_end}"'
         exit 198
      }
   }
   else if ("`ITEM'" == "=") {
      local EL `"`: word `=`i'-1' of `PL''"'
      local PL `"`PL'"`EL'" "'
   }
   else if ("`ITEM'" == ".." | "`ITEM'" == "...") {
      local EL `"`: word `=`i'-1' of `PL''"'
      forval j = `i'/`max' {
         local PL `"`PL'"`EL'" "'
      }
      continue, break
   }
   else {
      local PL `"`PL'"`ITEM'" "'
   }
}
local NL : word count `PL'
if (`NL' < `max') {
   if ("`default'" != "") {
      forval i = `=`NL'+1'/`max' {
         local PL `"`PL'"`default'" "'
      }
   }
   else {
      di as err "{p}Option `option' requires exactly `max' arguments{p_end}"
      exit 198
   }
}
sreturn local pl `"`PL'"'




*  ----------------------------------------------------------------------------
*  4. End program
*  ----------------------------------------------------------------------------

end