Viewing contents of file '../idllib/jhuapls1r/usr/drop_comments.pro'
;-------------------------------------------------------------
;+
; NAME:
;       DROP_COMMENTS
; PURPOSE:
;       Drop comment and null lines from a text array.
; CATEGORY:
; CALLING SEQUENCE:
;       out = drop_comments(in)
; INPUTS:
;       in = input text array.          in
; KEYWORD PARAMETERS:
;       Keywords:
;         IGNORE=ig  Text string of allowed comment characters.
;           Default is ';*', so lines starting with the characters'
;           * or ; in column 1 are considered comments and dropped.
;         /NOTRIM  means don't do a strtrim on text array.
;           By default any line with white space but no text is
;           considered a null line and dropped.  If /NOTRIM is
;           specified only true null lines are dropped.
;         /TRAILING  means drop any trailing comments on each line.
;           Be careful of the default comment characters for this.
;         ERROR=err  Error flag: 0=OK, 1=All lines dropped.
;         /QUIET  Means suppress error messages.
;         INDEX=indx  Indices in original input of retained lines.
; OUTPUTS:
;       out = processed text array.     out
; COMMON BLOCKS:
; NOTES:
; MODIFICATION HISTORY:
;       R. Sterner, 18 May, 1993
;       R. Sterner, 1995 Jun 26 --- added keyword INDEX=indx.
;       R. Sterner, 1995 Oct 27 --- added keyword /TRAILING.
;
; Copyright (C) 1993, Johns Hopkins University/Applied Physics Laboratory
; This software may be used, copied, or redistributed as long as it is not
; sold and this copyright notice is reproduced on each copy made.  This
; routine is provided as is without any express or implied warranties
; whatsoever.  Other limitations apply as described in the file disclaimer.txt.
;-
;-------------------------------------------------------------
 
	function drop_comments, txt0, ignore=ig, error=err, $
	  notrim=notrim, quiet=quiet, index=indx, trailing=trail, help=hlp
 
	if (n_params(0) lt 1) or keyword_set(hlp) then begin
	  print,' Drop comment and null lines from a text array.'
	  print,' out = drop_comments(in)'
	  print,'   in = input text array.          in'
 	  print,'   out = processed text array.     out'
	  print,' Keywords:'
	  print,'   IGNORE=ig  Text string of allowed comment characters.'
	  print,"     Default is ';*', so lines starting with the characters'
	  print,'     * or ; in column 1 are considered comments and dropped.'
	  print,"   /NOTRIM  means don't do a strtrim on text array."
	  print,'     By default any line with white space but no text is'
	  print,'     considered a null line and dropped.  If /NOTRIM is'
	  print,'     specified only true null lines are dropped.'
	  print,'   /TRAILING  means drop any trailing comments on each line.'
	  print,'     Be careful of the default comment characters for this.'
	  print,'   ERROR=err  Error flag: 0=OK, 1=All lines dropped.'
	  print,'   /QUIET  Means suppress error messages.'
	  print,'   INDEX=indx  Indices in original input of retained lines.'
	  return, ''
	endif
 
	if n_elements(ig) eq 0 then ig = '*;'	; Default comment chars.
	txt = txt0				; Copy input text array.
	if not keyword_set(notrim) then txt = strtrim(txt,2)	; trim.
	indx = lindgen(n_elements(txt))		; Indices of input lines.
 
	;---------  Handle null lines  ------------
	w = where(txt ne '', c)			; Look for non-null lines.
	if c gt 0 then begin			; Found some.
	  txt = txt(w)				; Drop null lines.
	  indx = indx(w)			; Drop indices.
	endif else begin			; No non-null lines.
	  if not keyword_set(quiet) then $
	    print,' Error in drop_comments: all lines dropped.'
	  err = 1
	  return, ''
	endelse
 
	;----------  Handle comment lines  ------------
	one = strmid(txt,0,1)			; Pick off first char.
 
	for i = 1, strlen(ig) do begin		; Loop through comment chars.
	  w=where(one ne strmid(ig,i-1,1), c)	; Look for non-comm. lines.
	  if c gt 0 then begin			; Found some.
	    txt = txt(w)			; Drop comments.
	    one = one(w)			; Drop same first chars.
	    indx = indx(w)			; Drop indices.
	  endif else begin			; No non-comm. lines.
            if not keyword_set(quiet) then $
              print,' Error in drop_comments: all lines dropped.'
            err = 1
            return, ''
          endelse
	endfor
 
	;---------  Handle trailing comments  ----------
	if not keyword_set(trail) then begin	; Check if done.
	  err = 0				; Yes, return result.
	  return, txt
	endif
 
	ncc = strlen(ig)			; Number of comment characters.
	cc = strarr(ncc)			; Set up array for characters.
	for i=0,ncc-1 do cc(i)=strmid(ig,i,1)	; Split into an array.
	ntxt = n_elements(txt)			; Number of lines of text.
	for i=0,ntxt-1 do begin			; Loop through text lines.
	  tmp = txt(i)				; Extract line.
	  for j=0,ncc-1 do begin		; Loop through comment chars.
	    p = strpos(tmp,cc(j))		; Search for comm char.
	    if p ge 0 then begin
	      tmp = strmid(tmp,0,p)		; Drop comment.
	      if not keyword_set(notrim) then tmp=strtrim(tmp)	; Trim.
	    endif ; p
	  endfor ; j
	  txt(i) = tmp				; Insert edited line.
	endfor ; i
 
	err = 0
 
	return, txt
 
	end