String completion framework