NebulaMgr.cpp   NebulaMgr.cpp 
skipping to change at line 64 skipping to change at line 64
void NebulaMgr::setCirclesColor(const Vec3f& c) {Nebula::circleColor = c;} void NebulaMgr::setCirclesColor(const Vec3f& c) {Nebula::circleColor = c;}
const Vec3f &NebulaMgr::getCirclesColor(void) const {return Nebula::circleC olor;} const Vec3f &NebulaMgr::getCirclesColor(void) const {return Nebula::circleC olor;}
void NebulaMgr::setGalaxyColor(const Vec3f& c) {Nebula::galaxyColor = c;} void NebulaMgr::setGalaxyColor(const Vec3f& c) {Nebula::galaxyColor = c;}
const Vec3f &NebulaMgr::getGalaxyColor(void) const {return Nebula::galaxyCo lor;} const Vec3f &NebulaMgr::getGalaxyColor(void) const {return Nebula::galaxyCo lor;}
void NebulaMgr::setRadioGalaxyColor(const Vec3f& c) {Nebula::radioGalaxyCol or = c;} void NebulaMgr::setRadioGalaxyColor(const Vec3f& c) {Nebula::radioGalaxyCol or = c;}
const Vec3f &NebulaMgr::getRadioGalaxyColor(void) const {return Nebula::rad ioGalaxyColor;} const Vec3f &NebulaMgr::getRadioGalaxyColor(void) const {return Nebula::rad ioGalaxyColor;}
void NebulaMgr::setActiveGalaxyColor(const Vec3f& c) {Nebula::activeGalaxyC olor = c;} void NebulaMgr::setActiveGalaxyColor(const Vec3f& c) {Nebula::activeGalaxyC olor = c;}
const Vec3f &NebulaMgr::getActiveGalaxyColor(void) const {return Nebula::ac tiveGalaxyColor;} const Vec3f &NebulaMgr::getActiveGalaxyColor(void) const {return Nebula::ac tiveGalaxyColor;}
void NebulaMgr::setInteractingGalaxyColor(const Vec3f& c) {Nebula::interact ingGalaxyColor = c;} void NebulaMgr::setInteractingGalaxyColor(const Vec3f& c) {Nebula::interact ingGalaxyColor = c;}
const Vec3f &NebulaMgr::getInteractingGalaxyColor(void) const {return Nebul a::interactingGalaxyColor;} const Vec3f &NebulaMgr::getInteractingGalaxyColor(void) const {return Nebul a::interactingGalaxyColor;}
void NebulaMgr::setBrightNebulaColor(const Vec3f& c) {Nebula::brightNebulaC void NebulaMgr::setQuasarColor(const Vec3f& c) {Nebula::quasarColor = c;}
olor = c;} const Vec3f &NebulaMgr::getQuasarColor(void) const {return Nebula::quasarCo
const Vec3f &NebulaMgr::getBrightNebulaColor(void) const {return Nebula::br lor;}
ightNebulaColor;} void NebulaMgr::setBrightNebulaColor(const Vec3f& c) {Nebula::nebulaColor =
c;}
const Vec3f &NebulaMgr::getBrightNebulaColor(void) const {return Nebula::ne
bulaColor;}
void NebulaMgr::setNebulaColor(const Vec3f& c) {Nebula::nebulaColor = c;}
const Vec3f &NebulaMgr::getNebulaColor(void) const {return Nebula::nebulaCo
lor;}
void NebulaMgr::setPlanetaryNebulaColor(const Vec3f& c) {Nebula::planetaryN
ebulaColor = c;}
const Vec3f &NebulaMgr::getPlanetaryNebulaColor(void) const {return Nebula:
:planetaryNebulaColor;}
void NebulaMgr::setReflectionNebulaColor(const Vec3f& c) {Nebula::reflectio
nNebulaColor = c;}
const Vec3f &NebulaMgr::getReflectionNebulaColor(void) const {return Nebula
::reflectionNebulaColor;}
void NebulaMgr::setBipolarNebulaColor(const Vec3f& c) {Nebula::bipolarNebul
aColor = c;}
const Vec3f &NebulaMgr::getBipolarNebulaColor(void) const {return Nebula::b
ipolarNebulaColor;}
void NebulaMgr::setEmissionNebulaColor(const Vec3f& c) {Nebula::emissionNeb
ulaColor = c;}
const Vec3f &NebulaMgr::getEmissionNebulaColor(void) const {return Nebula::
emissionNebulaColor;}
void NebulaMgr::setDarkNebulaColor(const Vec3f& c) {Nebula::darkNebulaColor = c;} void NebulaMgr::setDarkNebulaColor(const Vec3f& c) {Nebula::darkNebulaColor = c;}
const Vec3f &NebulaMgr::getDarkNebulaColor(void) const {return Nebula::dark NebulaColor;} const Vec3f &NebulaMgr::getDarkNebulaColor(void) const {return Nebula::dark NebulaColor;}
void NebulaMgr::setHydrogenRegionColor(const Vec3f& c) {Nebula::hydrogenReg ionColor= c;} void NebulaMgr::setHydrogenRegionColor(const Vec3f& c) {Nebula::hydrogenReg ionColor= c;}
const Vec3f &NebulaMgr::getHydrogenRegionColor(void) const {return Nebula:: hydrogenRegionColor;} const Vec3f &NebulaMgr::getHydrogenRegionColor(void) const {return Nebula:: hydrogenRegionColor;}
void NebulaMgr::setSupernovaRemnantColor(const Vec3f& c) {Nebula::supernova RemnantColor = c;} void NebulaMgr::setSupernovaRemnantColor(const Vec3f& c) {Nebula::supernova RemnantColor = c;}
const Vec3f &NebulaMgr::getSupernovaRemnantColor(void) const {return Nebula ::supernovaRemnantColor;} const Vec3f &NebulaMgr::getSupernovaRemnantColor(void) const {return Nebula ::supernovaRemnantColor;}
void NebulaMgr::setInterstellarMatterColor(const Vec3f& c) {Nebula::interst
ellarMatterColor = c;}
const Vec3f &NebulaMgr::getInterstellarMatterColor(void) const {return Nebu
la::interstellarMatterColor;}
void NebulaMgr::setClusterWithNebulosityColor(const Vec3f& c) {Nebula::clus
terWithNebulosityColor= c;}
const Vec3f &NebulaMgr::getClusterWithNebulosityColor(void) const {return N
ebula::clusterWithNebulosityColor;}
void NebulaMgr::setClusterColor(const Vec3f& c) {Nebula::clusterColor= c;} void NebulaMgr::setClusterColor(const Vec3f& c) {Nebula::clusterColor= c;}
const Vec3f &NebulaMgr::getClusterColor(void) const {return Nebula::cluster Color;} const Vec3f &NebulaMgr::getClusterColor(void) const {return Nebula::cluster Color;}
void NebulaMgr::setOpenClusterColor(const Vec3f& c) {Nebula::openClusterCol
or = c;}
const Vec3f &NebulaMgr::getOpenClusterColor(void) const {return Nebula::ope
nClusterColor;}
void NebulaMgr::setGlobularClusterColor(const Vec3f& c) {Nebula::globularCl
usterColor = c;}
const Vec3f &NebulaMgr::getGlobularClusterColor(void) const {return Nebula:
:globularClusterColor;}
void NebulaMgr::setStellarAssociationColor(const Vec3f& c) {Nebula::stellar
AssociationColor = c;}
const Vec3f &NebulaMgr::getStellarAssociationColor(void) const {return Nebu
la::stellarAssociationColor;}
void NebulaMgr::setStarCloudColor(const Vec3f& c) {Nebula::starCloudColor =
c;}
const Vec3f &NebulaMgr::getStarCloudColor(void) const {return Nebula::starC
loudColor;}
void NebulaMgr::setEmissionObjectColor(const Vec3f& c) {Nebula::emissionObj
ectColor = c;}
const Vec3f &NebulaMgr::getEmissionObjectColor(void) const {return Nebula::
emissionObjectColor;}
void NebulaMgr::setBlLacObjectColor(const Vec3f& c) {Nebula::blLacObjectCol
or = c;}
const Vec3f &NebulaMgr::getBlLacObjectColor(void) const {return Nebula::blL
acObjectColor;}
void NebulaMgr::setBlazarColor(const Vec3f& c) {Nebula::blazarColor = c;}
const Vec3f &NebulaMgr::getBlazarColor(void) const {return Nebula::blazarCo
lor;}
void NebulaMgr::setMolecularCloudColor(const Vec3f& c) {Nebula::molecularCl
oudColor = c;}
const Vec3f &NebulaMgr::getMolecularCloudColor(void) const {return Nebula::
molecularCloudColor;}
void NebulaMgr::setYoungStellarObjectColor(const Vec3f& c) {Nebula::youngSt
ellarObjectColor = c;}
const Vec3f &NebulaMgr::getYoungStellarObjectColor(void) const {return Nebu
la::youngStellarObjectColor;}
void NebulaMgr::setPossibleQuasarColor(const Vec3f& c) {Nebula::possibleQua
sarColor = c;}
const Vec3f &NebulaMgr::getPossibleQuasarColor(void) const {return Nebula::
possibleQuasarColor;}
void NebulaMgr::setPossiblePlanetaryNebulaColor(const Vec3f& c) {Nebula::po
ssiblePlanetaryNebulaColor = c;}
const Vec3f &NebulaMgr::getPossiblePlanetaryNebulaColor(void) const {return
Nebula::possiblePlanetaryNebulaColor;}
void NebulaMgr::setProtoplanetaryNebulaColor(const Vec3f& c) {Nebula::proto
planetaryNebulaColor = c;}
const Vec3f &NebulaMgr::getProtoplanetaryNebulaColor(void) const {return Ne
bula::protoplanetaryNebulaColor;}
void NebulaMgr::setStarColor(const Vec3f& c) {Nebula::starColor = c;}
const Vec3f &NebulaMgr::getStarColor(void) const {return Nebula::starColor;
}
void NebulaMgr::setCircleScale(float scale) {Nebula::circleScale = scale;} void NebulaMgr::setCircleScale(float scale) {Nebula::circleScale = scale;}
float NebulaMgr::getCircleScale(void) const {return Nebula::circleScale;} float NebulaMgr::getCircleScale(void) const {return Nebula::circleScale;}
void NebulaMgr::setHintsProportional(const bool proportional) {Nebula::draw HintProportional=proportional;} void NebulaMgr::setHintsProportional(const bool proportional) {Nebula::draw HintProportional=proportional;}
bool NebulaMgr::getHintsProportional(void) const {return Nebula::drawHintPr oportional;} bool NebulaMgr::getHintsProportional(void) const {return Nebula::drawHintPr oportional;}
NebulaMgr::NebulaMgr(void) NebulaMgr::NebulaMgr(void)
: nebGrid(200) : nebGrid(200)
, hintsAmount(0) , hintsAmount(0)
, labelsAmount(0) , labelsAmount(0)
, flagConverter(false) , flagConverter(false)
skipping to change at line 352 skipping to change at line 394
sPainter.drawSprite2dMode(pos[0]+size/2, pos[1]+size/2, 10, -90); sPainter.drawSprite2dMode(pos[0]+size/2, pos[1]+size/2, 10, -90);
sPainter.drawSprite2dMode(pos[0]+size/2, pos[1]-size/2, 10, -180); sPainter.drawSprite2dMode(pos[0]+size/2, pos[1]-size/2, 10, -180);
} }
} }
void NebulaMgr::setStelStyle(const QString& section) void NebulaMgr::setStelStyle(const QString& section)
{ {
// Load colors from config file // Load colors from config file
QSettings* conf = StelApp::getInstance().getSettings(); QSettings* conf = StelApp::getInstance().getSettings();
QString defaultColor = conf->value(section+"/default_color").toStrin // Upgrade config keys
g(); if (conf->contains(section+"/nebula_label_color"))
setLabelsColor(StelUtils::strToVec3f(conf->value(section+"/nebula_la {
bel_color", defaultColor).toString())); conf->setValue(section+"/dso_label_color", conf->value(secti
setCirclesColor(StelUtils::strToVec3f(conf->value(section+"/nebula_c on+"/nebula_label_color", "0.4,0.3,0.5").toString());
ircle_color", defaultColor).toString())); conf->remove(section+"/nebula_label_color");
setGalaxyColor(StelUtils::strToVec3f(conf->value(section+"/nebula_ga }
laxy_color", "1.0,0.2,0.2").toString())); if (conf->contains(section+"/nebula_circle_color"))
setBrightNebulaColor(StelUtils::strToVec3f(conf->value(section+"/neb {
ula_brightneb_color", "0.1,1.0,0.1").toString())); conf->setValue(section+"/dso_circle_color", conf->value(sect
setDarkNebulaColor(StelUtils::strToVec3f(conf->value(section+"/nebul ion+"/nebula_circle_color", "0.8,0.8,0.1").toString());
a_darkneb_color", "0.3,0.3,0.3").toString())); conf->remove(section+"/nebula_circle_color");
setClusterColor(StelUtils::strToVec3f(conf->value(section+"/nebula_c }
luster_color", "1.0,1.0,0.1").toString())); if (conf->contains(section+"/nebula_galaxy_color"))
setRadioGalaxyColor(StelUtils::strToVec3f(conf->value(section+"/nebu {
la_radioglx_color", "0.3,0.3,0.3").toString())); conf->setValue(section+"/dso_galaxy_color", conf->value(sect
setActiveGalaxyColor(StelUtils::strToVec3f(conf->value(section+"/neb ion+"/nebula_galaxy_color", "1.0,0.2,0.2").toString());
ula_activeglx_color", "1.0,0.5,0.2").toString())); conf->remove(section+"/nebula_galaxy_color");
setInteractingGalaxyColor(StelUtils::strToVec3f(conf->value(section+ }
"/nebula_intglx_color", "0.2,0.5,1.0").toString())); if (conf->contains(section+"/nebula_radioglx_color"))
setHydrogenRegionColor(StelUtils::strToVec3f(conf->value(section+"/n {
ebula_hregion_color", "0.1,1.0,0.1").toString())); conf->setValue(section+"/dso_radio_galaxy_color", conf->valu
setSupernovaRemnantColor(StelUtils::strToVec3f(conf->value(section+" e(section+"/nebula_radioglx_color", "0.3,0.3,0.3").toString());
/nebula_snr_color", "0.1,1.0,0.1").toString())); conf->remove(section+"/nebula_radioglx_color");
}
if (conf->contains(section+"/nebula_activeglx_color"))
{
conf->setValue(section+"/dso_active_galaxy_color", conf->val
ue(section+"/nebula_activeglx_color", "1.0,0.5,0.2").toString());
conf->remove(section+"/nebula_activeglx_color");
}
if (conf->contains(section+"/nebula_intglx_color"))
{
conf->setValue(section+"/dso_interacting_galaxy_color", conf
->value(section+"/nebula_intglx_color", "0.2,0.5,1.0").toString());
conf->remove(section+"/nebula_intglx_color");
}
if (conf->contains(section+"/nebula_brightneb_color"))
{
conf->setValue(section+"/dso_nebula_color", conf->value(sect
ion+"/nebula_brightneb_color", "0.1,1.0,0.1").toString());
conf->remove(section+"/nebula_brightneb_color");
}
if (conf->contains(section+"/nebula_darkneb_color"))
{
conf->setValue(section+"/dso_dark_nebula_color", conf->value
(section+"/nebula_darkneb_color", "0.3,0.3,0.3").toString());
conf->remove(section+"/nebula_darkneb_color");
}
if (conf->contains(section+"/nebula_hregion_color"))
{
conf->setValue(section+"/dso_hydrogen_region_color", conf->v
alue(section+"/nebula_hregion_color", "0.1,1.0,0.1").toString());
conf->remove(section+"/nebula_hregion_color");
}
if (conf->contains(section+"/nebula_snr_color"))
{
conf->setValue(section+"/dso_supernova_remnant_color", conf-
>value(section+"/nebula_snr_color", "0.1,1.0,0.1").toString());
conf->remove(section+"/nebula_snr_color");
}
if (conf->contains(section+"/nebula_cluster_color"))
{
conf->setValue(section+"/dso_cluster_color", conf->value(sec
tion+"/nebula_cluster_color", "0.8,0.8,0.1").toString());
conf->remove(section+"/nebula_cluster_color");
}
// Set colors for markers
setLabelsColor(StelUtils::strToVec3f(conf->value(section+"/dso_label
_color", "0.2,0.6,0.7").toString()));
setCirclesColor(StelUtils::strToVec3f(conf->value(section+"/dso_circ
le_color", "1.0,0.7,0.2").toString()));
QString defaultGalaxyColor = conf->value(section+"/dso_galaxy_color"
, "1.0,0.2,0.2").toString();
setGalaxyColor(StelUtils::strToVec3f(defaultGalaxyColor));
setRadioGalaxyColor(StelUtils::strToVec3f(conf->value(section+"/dso_
radio_galaxy_color", "0.3,0.3,0.3").toString()));
setActiveGalaxyColor(StelUtils::strToVec3f(conf->value(section+"/dso
_active_galaxy_color", "1.0,0.5,0.2").toString()));
setInteractingGalaxyColor(StelUtils::strToVec3f(conf->value(section+
"/dso_interacting_galaxy_color", "0.2,0.5,1.0").toString()));
setQuasarColor(StelUtils::strToVec3f(conf->value(section+"/dso_quasa
r_color", defaultGalaxyColor).toString()));
setPossibleQuasarColor(StelUtils::strToVec3f(conf->value(section+"/d
so_possible_quasar_color", defaultGalaxyColor).toString()));
setBlLacObjectColor(StelUtils::strToVec3f(conf->value(section+"/dso_
bl_lac_color", defaultGalaxyColor).toString()));
setBlazarColor(StelUtils::strToVec3f(conf->value(section+"/dso_blaza
r_color", defaultGalaxyColor).toString()));
QString defaultNebulaColor = conf->value(section+"/dso_nebula_color"
, "0.1,1.0,0.1").toString();
setNebulaColor(StelUtils::strToVec3f(defaultNebulaColor));
setPlanetaryNebulaColor(StelUtils::strToVec3f(conf->value(section+"/
dso_planetary_nebula_color", defaultNebulaColor).toString()));
setReflectionNebulaColor(StelUtils::strToVec3f(conf->value(section+"
/dso_reflection_nebula_color", defaultNebulaColor).toString()));
setBipolarNebulaColor(StelUtils::strToVec3f(conf->value(section+"/ds
o_bipolar_nebula_color", defaultNebulaColor).toString()));
setEmissionNebulaColor(StelUtils::strToVec3f(conf->value(section+"/d
so_emission_nebula_color", defaultNebulaColor).toString()));
setDarkNebulaColor(StelUtils::strToVec3f(conf->value(section+"/dso_d
ark_nebula_color", "0.3,0.3,0.3").toString()));
setHydrogenRegionColor(StelUtils::strToVec3f(conf->value(section+"/d
so_hydrogen_region_color", defaultNebulaColor).toString()));
setSupernovaRemnantColor(StelUtils::strToVec3f(conf->value(section+"
/dso_supernova_remnant_color", defaultNebulaColor).toString()));
setInterstellarMatterColor(StelUtils::strToVec3f(conf->value(section
+"/dso_interstellar_matter_color", defaultNebulaColor).toString()));
setClusterWithNebulosityColor(StelUtils::strToVec3f(conf->value(sect
ion+"/dso_cluster_with_nebulosity_color", defaultNebulaColor).toString()));
setMolecularCloudColor(StelUtils::strToVec3f(conf->value(section+"/d
so_molecular_cloud_color", defaultNebulaColor).toString()));
setPossiblePlanetaryNebulaColor(StelUtils::strToVec3f(conf->value(se
ction+"/dso_possible_planetary_nebula_color", defaultNebulaColor).toString(
)));
setProtoplanetaryNebulaColor(StelUtils::strToVec3f(conf->value(secti
on+"/dso_protoplanetary_nebula_color", defaultNebulaColor).toString()));
QString defaultClusterColor = conf->value(section+"/dso_cluster_colo
r", "1.0,1.0,0.1").toString();
setClusterColor(StelUtils::strToVec3f(defaultClusterColor));
setOpenClusterColor(StelUtils::strToVec3f(conf->value(section+"/dso_
open_cluster_color", defaultClusterColor).toString()));
setGlobularClusterColor(StelUtils::strToVec3f(conf->value(section+"/
dso_globular_cluster_color", defaultClusterColor).toString()));
setStellarAssociationColor(StelUtils::strToVec3f(conf->value(section
+"/dso_stellar_association_color", defaultClusterColor).toString()));
setStarCloudColor(StelUtils::strToVec3f(conf->value(section+"/dso_st
ar_cloud_color", defaultClusterColor).toString()));
QString defaultStellarColor = conf->value(section+"/dso_star_color",
"1.0,0.7,0.2").toString();
setStarColor(StelUtils::strToVec3f(defaultStellarColor));
setEmissionObjectColor(StelUtils::strToVec3f(conf->value(section+"/d
so_emission_object_color", defaultStellarColor).toString()));
setYoungStellarObjectColor(StelUtils::strToVec3f(conf->value(section
+"/dso_young_stellar_object_color", defaultStellarColor).toString()));
} }
// Search by name // Search by name
NebulaP NebulaMgr::search(const QString& name) NebulaP NebulaMgr::search(const QString& name)
{ {
QString uname = name.toUpper(); QString uname = name.toUpper();
foreach (const NebulaP& n, dsoArray) foreach (const NebulaP& n, dsoArray)
{ {
QString testName = n->getEnglishName().toUpper(); QString testName = n->getEnglishName().toUpper();
skipping to change at line 952 skipping to change at line 1079
QRegExp transRx("_[(]\"(.*)\"[)]"); QRegExp transRx("_[(]\"(.*)\"[)]");
while (!dsoNameFile.atEnd()) while (!dsoNameFile.atEnd())
{ {
record = QString::fromUtf8(dsoNameFile.readLine()); record = QString::fromUtf8(dsoNameFile.readLine());
lineNumber++; lineNumber++;
if (commentRx.exactMatch(record)) if (commentRx.exactMatch(record))
continue; continue;
totalRecords++; totalRecords++;
ref = record.left(4).trimmed(); // bytes 1 - 5, designator for catalogue (prefix)
cdes = record.mid(5, 10).trimmed().toUpper(); ref = record.left(5).trimmed();
// get name, trimmed of whitespace // bytes 6 -20, identificator for object in the catalog
name = record.mid(20).trimmed(); cdes = record.mid(5, 15).trimmed().toUpper();
// bytes 21-80, proper name of the object (translatable)
name = record.mid(21).trimmed(); // Let gets the name with t
rimmed whitespaces
nb = cdes.toInt(); nb = cdes.toInt();
QStringList catalogs; QStringList catalogs;
catalogs << "IC" << "M" << "C" << "CR" << "MEL" << "B" << "S H2" << "VDB" << "RCW" << "LDN" << "LBN" catalogs << "IC" << "M" << "C" << "CR" << "MEL" << "B" << "S H2" << "VDB" << "RCW" << "LDN" << "LBN"
<< "NGC" << "PGC" << "UGC" << "CED"; << "NGC" << "PGC" << "UGC" << "CED";
switch (catalogs.indexOf(ref.toUpper())) switch (catalogs.indexOf(ref.toUpper()))
{ {
case 0: case 0:
skipping to change at line 2141 skipping to change at line 2270
result << QString("Cr %1").arg(n->Cr _nb); result << QString("Cr %1").arg(n->Cr _nb);
} }
break; break;
case 107: // Melotte Catalogue case 107: // Melotte Catalogue
foreach(const NebulaP& n, dsoArray) foreach(const NebulaP& n, dsoArray)
{ {
if (n->Mel_nb>0) if (n->Mel_nb>0)
result << QString("Mel %1").arg(n->M el_nb); result << QString("Mel %1").arg(n->M el_nb);
} }
break; break;
case 150: // Dwarf galaxies
{
QStringList dwarfGalaxies;
dwarfGalaxies << "PGC 3589" << "PGC 3792" << "PGC 6
830" << "PGC 10074" << "PGC 19441"
<< "PGC 28913" << "PGC 29194" << "PGC
29653" << "PGC 50779" << "PGC 54074"
<< "PGC 60095" << "PGC 63287" << "PGC
69519" << "PGC 88608" << "PGC 2807155"
<< "PGC 3097691";
result = dwarfGalaxies;
}
break;
default: default:
foreach(const NebulaP& n, dsoArray) foreach(const NebulaP& n, dsoArray)
{ {
if (n->nType==type) if (n->nType==type)
{ {
if (!n->getEnglishName().isEmpty()) if (!n->getEnglishName().isEmpty())
{ {
if (inEnglish) if (inEnglish)
result << n->getEngl ishName(); result << n->getEngl ishName();
else else
 End of changes. 6 change blocks. 
32 lines changed or deleted 244 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/