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__ //
c7bca92005-04-10Martin Nilsson // $Id: Pike.pmod,v 1.39 2005/04/10 17:53:22 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++)
c7bca92005-04-10Martin Nilsson  if(r[i][..1]=="//" && r[i][-1]=='\n') new += ({ r[i][..<1], "\n" });
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 }