code: function(node) {
  			var placeholderMemo = {};
  			return function(str, varName) {
  				// do not mark `child` variable as placeholder – it‘s a reserved
  				// variable name
  				if (varName == 'child') {
  					return str;
  				}
  				
  				if (varName == 'cursor') {
  					return utils.getCaretPlaceholder();
  				}
  				
  				var attr = node.attribute(varName);
  				if (typeof attr !== 'undefined' && attr !== str) {
  					return attr;
  				}
  				
  				var varValue = resources.getVariable(varName);
  				if (varValue) {
  					return varValue;
  				}
  				
  				// output as placeholder
  				if (!placeholderMemo[varName]) {
  					placeholderMemo[varName] = startPlaceholderNum++;
  				}
  					
  				return '${' + placeholderMemo[varName] + ':' + varName + '}';
  			};
  		}
docs: Helper function that produces a callback function for
  <code>replaceVariables()</code> method from {@link utils}
  module. This callback will replace variable definitions (like
  ${var_name}) with their value defined in <i>resource</i> module,
  or outputs tabstop with variable name otherwise.
  @param {AbbreviationNode} node Context node
  @returns {Function}