rv = aCellContent->GetAttribute(kNameSpaceID_None, atom, value);
rv = aCellContent->GetAttr(kNameSpaceID_None, atom, value);
MapAlignAttributesInto(nsIPresContext* aPresContext,                       nsIContent*     aCellContent,                       nsIFrame*       aCellFrame,                       nsIFrame*       aCellInnerFrame){  nsresult rv;  PRInt32 index;  nsAutoString value;  nsTableCellFrame* cellFrame;  cellFrame = NS_STATIC_CAST(nsTableCellFrame*, aCellFrame);  nsIFrame* tableFrame;  nsIFrame* rowgroupFrame;  nsIFrame* rowFrame;  cellFrame->GetParent(&rowFrame);  rowFrame->GetParent(&rowgroupFrame);  rowgroupFrame->GetParent(&tableFrame);  //////////////////////////////////////  // update rowalign on the cell  PRUnichar* rowalign = nsnull;  rv = cellFrame->GetRowIndex(index);  if (NS_SUCCEEDED(rv)) {    // see if the rowalign attribute is not already set    nsIAtom* atom = nsMathMLAtoms::rowalign_;    rv = aCellContent->GetAttribute(kNameSpaceID_None, atom, value);    if (NS_CONTENT_ATTR_NOT_THERE == rv) {      // see if the rowalign attribute is specified on the row      rowalign = GetAlignValueAt(aPresContext, rowFrame, atom, index);      if (!rowalign) {      	// see if the rowalign attribute is specified on the table        rowalign = GetAlignValueAt(aPresContext, tableFrame, atom, index);      }    }  }  //////////////////////////////////////  // update column on the cell  PRUnichar* columnalign = nsnull;  rv = cellFrame->GetColIndex(index);  if (NS_SUCCEEDED(rv)) {    // see if the columnalign attribute is not already set    nsIAtom* atom = nsMathMLAtoms::columnalign_;    rv = aCellContent->GetAttribute(kNameSpaceID_None, atom, value);    if (NS_CONTENT_ATTR_NOT_THERE == rv) {      // see if the columnalign attribute is specified on the row      columnalign = GetAlignValueAt(aPresContext, rowFrame, atom, index);      if (!columnalign) {      	// see if the columnalign attribute is specified on the table        columnalign = GetAlignValueAt(aPresContext, tableFrame, atom, index);      }    }  }  // set the attributes without notifying that we want a reflow  if (rowalign) {    value.Assign(rowalign);    aCellContent->SetAttribute(kNameSpaceID_None, nsMathMLAtoms::rowalign_,                               value, PR_FALSE);  }  if (columnalign) {    value.Assign(columnalign);    aCellContent->SetAttribute(kNameSpaceID_None, nsMathMLAtoms::columnalign_,                               value, PR_FALSE);  }  // then, re-resolve the style contexts in our subtree  if (rowalign || columnalign) {    nsCOMPtr<nsIStyleContext> parentContext;    nsCOMPtr<nsIStyleContext> newContext;    rowFrame->GetStyleContext(getter_AddRefs(parentContext));    aPresContext->ResolveStyleContextFor(aCellContent, parentContext,                                         PR_FALSE, getter_AddRefs(newContext));    nsCOMPtr<nsIStyleContext> oldContext;    aCellFrame->GetStyleContext(getter_AddRefs(oldContext));    if (oldContext != newContext) {      aCellFrame->SetStyleContext(aPresContext, newContext);      aPresContext->ReParentStyleContext(aCellInnerFrame, newContext);    }  }}