=== added file 'includes/token.inc'
--- includes/token.inc	1970-01-01 00:00:00 +0000
+++ includes/token.inc	2008-12-02 06:15:14 +0000
@@ -0,0 +1,28 @@
+<?php
+
+define('TOKEN_MACHINE_GENERATED', 0);
+
+define('TOKEN_USER_INPUT_WITHOUT_FORMAT', 1);
+
+define('TOKEN_USER_INPUT_WITH_FORMAT', 2);
+
+function drupal_token($type, $keys, $object) {
+  $return = array();
+  foreach ($keys as $key) {
+    // We have something like created:Y
+    list($key, $date_format) = explode(':', $key);
+    $function = 'token_' . $type . '_' . $key;
+    if (drupal_function_exists($function)) {
+      $replacement = $function($object);
+    }
+    elseif (isset($object->$key) || property_exists(get_class($object), $key)) {
+      $replacement = array('source' => TOKEN_USER_INPUT_WITHOUT_FORMAT, 'value' => $object->$key);
+    }
+    if ($date_format) {
+      $replacement['value'] = date($date_format, $replacement);
+      // TODO -- do we want to change the 'source' attribute here to TOKEN_USER_INPUT_WITHOUT_FORMAT? I think yes.
+    }
+    $return[$key] = $replacement;
+  }
+  return $return;
+}

=== modified file 'modules/node/node.info'
--- modules/node/node.info	2008-10-12 01:23:01 +0000
+++ modules/node/node.info	2008-12-02 04:57:41 +0000
@@ -9,4 +9,5 @@ files[] = content_types.inc
 files[] = node.admin.inc
 files[] = node.pages.inc
 files[] = node.install
+files[] = node.token.inc
 required = TRUE

=== added file 'modules/node/node.token.inc'
--- modules/node/node.token.inc	1970-01-01 00:00:00 +0000
+++ modules/node/node.token.inc	2008-12-02 06:12:43 +0000
@@ -0,0 +1,37 @@
+<?php
+
+function token_node_nid($node) {
+  return array('context' => TOKEN_MACHINE_GENERATED, 'value' => $node->nid);
+}
+
+function token_node_type($node) {
+  return array('context' => TOKEN_MACHINE_GENERATED, 'value' => $node->type);
+}
+
+function token_node_uid($node) {
+  return array('context' => TOKEN_MACHINE_GENERATED, 'value' => $node->uid);
+}
+
+function token_node_created($node) {
+  return array('context' => TOKEN_MACHINE_GENERATED, 'value' => $node->created);
+}
+
+function token_node_changed($node) {
+  return array('context' => TOKEN_MACHINE_GENERATED, 'value' => $node->changed);
+}
+
+function token_node_type_name($node) {
+  return array('context' => TOKEN_USER_INPUT_WITHOUT_FORMAT, 'value' => $node->name);
+}
+
+function token_node_title($node) {
+  return array('context' => TOKEN_USER_INPUT_WITHOUT_FORMAT, 'value' => $node->title);
+}
+
+function token_node_body($node) {
+  return array('context' => TOKEN_USER_INPUT_WITH_FORMAT, 'value' => $node->body, 'format' => $node->format);
+}
+
+function token_node_teaser($node) {
+  return array('context' => TOKEN_USER_INPUT_WITH_FORMAT, 'value' => $node->teaser, 'format' => $node->format);
+}

