Real-time string matching Task

The task is to golf a real-time exact string matching algorithm of your choice.

Input

Two lines of text supplied on standard input, separated by a new line. The first line contains the "pattern" and will simply be an ASCII string drawn from the letters a-z.

The second line contains the longer "text" and will also simply be an ASCII string drawn from the letters a-z.

Output 

A list of indices of where the exact matches occur.  You should output the position of the start of each match that occurs.

Specification

Your algorithm can spend linear time preprocessing the pattern. It must then read the text from left to right and take constant time for every single character in the text and output any new match as soon as it occurs.  Matches can of course overlap each other.

Algorithm

There are many real-time exact matching algorithms. One is mentioned on the wiki for KMP for example. You can use any one you like but you must always output the right answer. 

I will keep a per language leader table so that those who prefer popular languages can also win in their own way.  Please explain which algorithm you have implemented.

Real-time

It seems there has been a lot of confusion over what real-time means. It doesn't simply mean linear time. So standard KMP is not real-time. The link in the question explicitly points to a part of the wiki page for KMP about a real-time variant of KMP. Neither is Boyer-Moore-Galil real-time.  This cstheory question/answer discusses the issue or one can just google "real-time exact matching" or similar terms.
Python 2, 495 bytes

This one is a real-time KMP, which is a lot shorter and only slightly slower than the BMG algorithm (which is usually sublinear). Call with K(pattern, text); output is identical to the BMG algorithm.

L,R,o=len,range,lambda x:ord(x)-97
def K(P,T):
 M,N=L(P),L(T);Z=[0]*M;Z[0]=M;r=l=0
 for k in R(1,l):
    if k&gt;r:
     n=0
     while n+k&lt;l&lt;P[n]==P[n+k]:n+=1
     Z[k]=n
     if n&gt;0:l,r=k,k+n-1
    else:
     p,_=k-l,r-k+1
     if Z[p]&lt;_:Z[k]=Z[p]
     else:
        i=r+1
        while i&lt;M&lt;P[i]==P[i-k]:i+=1
        Z[k],l,r=i-k,k,i-1
 F=[[0]*26]*M
 for j in R(M-1,0,-1):z=Z[j];i,x=j+z-1,P[z+1];F[i][o(x)]=z
 s=m=0
 while s+m&lt;N:
    c=T[s+m]
    if c==P[m]:
     m+=1
     if m==M:print s,;s+=1;m-=1
    else:
     if m==0:s+=1
     else:f=F[m][o(c)];s+=m-f;m=f