5d445f2002-03-20Martin Nilsson // // This file needs to support old pikes that e.g. don't understand // "#pike". Some of them fail when they see an unknown cpp directive. // // #pike __REAL_VERSION__ //
19cbfb2005-03-24Martin Nilsson // $Id: Pike.pmod,v 1.38 2005/03/24 16:52:56 nilsson Exp $
916c022002-06-28Martin Nilsson 
e1e2d12003-06-18Martin Stjernholm //! This module parses and tokenizes Pike source code.
a20af62000-09-26Fredrik Hübinette (Hubbe) 
74c57a2000-07-14Andreas Lange inherit "C.pmod";
19cbfb2005-03-24Martin Nilsson array(string) low_split(string data, void|mapping state) { if(state && state->remains) data = m_delete(state, "remains") + data; array ret; string rem; [ret, rem] = Parser._parser._Pike.tokenize(data); if(sizeof(rem)) { if(rem[0]=='"') error("Unterminated string.\n"); if(state) state->remains=rem; } return ret; }
ba7b0a2001-01-18David Norlin 
916c022002-06-28Martin Nilsson //! Splits the @[data] string into an array of tokens. An additional //! element with a newline will be added to the resulting array of //! tokens. If the optional argument @[state] is provided the split //! function is able to pause and resume splitting inside #"" and //! /**/ tokens. The @[state] argument should be an initially empty //! mapping, in which split will store its state between successive //! calls.
19cbfb2005-03-24Martin Nilsson array(string) split(string data, void|mapping state) { array r = low_split(data, state); array new = ({}); for(int i; i<sizeof(r); i++) if(r[i][..2]=="//") { new += ({ r[i]+"\n" }); i++;
9ee9322002-03-03Martin Nilsson  }
19cbfb2005-03-24Martin Nilsson  else new += ({ r[i] }); if(sizeof(new) && (< "\n", " " >)[new[-1]]) new[-1] += "\n"; else new += ({ "\n" }); return new;
74c57a2000-07-14Andreas Lange }