File indexing completed on 2024-04-21 03:58:30

0001 /*
0002  *   SPDX-FileCopyrightText: 2009 Petri Damstén <damu@iki.fi>
0003  *   SPDX-FileCopyrightText: 2014 John Layt <jlayt@kde.org>
0004  *
0005  *   SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 
0008 #include "energy_p.h"
0009 #include "unit_p.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 namespace KUnitConversion
0014 {
0015 class PhotoUnitPrivate : public UnitPrivate
0016 {
0017 public:
0018     PhotoUnitPrivate(CategoryId categoryId,
0019                      UnitId id,
0020                      qreal multiplier,
0021                      const QString &symbol,
0022                      const QString &description,
0023                      const QString &matchString,
0024                      const KLocalizedString &symbolString,
0025                      const KLocalizedString &realString,
0026                      const KLocalizedString &integerString)
0027         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0028     {
0029     }
0030 
0031     qreal toDefault(qreal value) const override
0032     {
0033         return (2.99792458e+08 * 6.62606896e-34) / (value * 1e-09);
0034     }
0035 
0036     qreal fromDefault(qreal value) const override
0037     {
0038         return ((2.99792458e+08 * 6.62606896e-34) / value) / 1e-09;
0039     }
0040 };
0041 
0042 UnitCategory Energy::makeCategory()
0043 {
0044     auto c = UnitCategoryPrivate::makeCategory(EnergyCategory, i18n("Energy"), i18n("Energy"));
0045     auto d = UnitCategoryPrivate::get(c);
0046     KLocalizedString symbolString = ki18nc("%1 value, %2 unit symbol (energy)", "%1 %2");
0047 
0048     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0049                        Yottajoule,
0050                        1e+24,
0051                        i18nc("energy unit symbol", "YJ"),
0052                        i18nc("unit description in lists", "yottajoules"),
0053                        i18nc("unit synonyms for matching user input", "yottajoule;yottajoules;YJ"),
0054                        symbolString,
0055                        ki18nc("amount in units (real)", "%1 yottajoules"),
0056                        ki18ncp("amount in units (integer)", "%1 yottajoule", "%1 yottajoules")));
0057 
0058     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0059                        Zettajoule,
0060                        1e+21,
0061                        i18nc("energy unit symbol", "ZJ"),
0062                        i18nc("unit description in lists", "zettajoules"),
0063                        i18nc("unit synonyms for matching user input", "zettajoule;zettajoules;ZJ"),
0064                        symbolString,
0065                        ki18nc("amount in units (real)", "%1 zettajoules"),
0066                        ki18ncp("amount in units (integer)", "%1 zettajoule", "%1 zettajoules")));
0067 
0068     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0069                        Exajoule,
0070                        1e+18,
0071                        i18nc("energy unit symbol", "EJ"),
0072                        i18nc("unit description in lists", "exajoules"),
0073                        i18nc("unit synonyms for matching user input", "exajoule;exajoules;EJ"),
0074                        symbolString,
0075                        ki18nc("amount in units (real)", "%1 exajoules"),
0076                        ki18ncp("amount in units (integer)", "%1 exajoule", "%1 exajoules")));
0077 
0078     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0079                        Petajoule,
0080                        1e+15,
0081                        i18nc("energy unit symbol", "PJ"),
0082                        i18nc("unit description in lists", "petajoules"),
0083                        i18nc("unit synonyms for matching user input", "petajoule;petajoules;PJ"),
0084                        symbolString,
0085                        ki18nc("amount in units (real)", "%1 petajoules"),
0086                        ki18ncp("amount in units (integer)", "%1 petajoule", "%1 petajoules")));
0087 
0088     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0089                        Terajoule,
0090                        1e+12,
0091                        i18nc("energy unit symbol", "TJ"),
0092                        i18nc("unit description in lists", "terajoules"),
0093                        i18nc("unit synonyms for matching user input", "terajoule;terajoules;TJ"),
0094                        symbolString,
0095                        ki18nc("amount in units (real)", "%1 terajoules"),
0096                        ki18ncp("amount in units (integer)", "%1 terajoule", "%1 terajoules")));
0097 
0098     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0099                        Gigajoule,
0100                        1e+09,
0101                        i18nc("energy unit symbol", "GJ"),
0102                        i18nc("unit description in lists", "gigajoules"),
0103                        i18nc("unit synonyms for matching user input", "gigajoule;gigajoules;GJ"),
0104                        symbolString,
0105                        ki18nc("amount in units (real)", "%1 gigajoules"),
0106                        ki18ncp("amount in units (integer)", "%1 gigajoule", "%1 gigajoules")));
0107 
0108     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0109                        Megajoule,
0110                        1e+06,
0111                        i18nc("energy unit symbol", "MJ"),
0112                        i18nc("unit description in lists", "megajoules"),
0113                        i18nc("unit synonyms for matching user input", "megajoule;megajoules;MJ"),
0114                        symbolString,
0115                        ki18nc("amount in units (real)", "%1 megajoules"),
0116                        ki18ncp("amount in units (integer)", "%1 megajoule", "%1 megajoules")));
0117 
0118     d->addCommonUnit(UnitPrivate::makeUnit(EnergyCategory,
0119                              Kilojoule,
0120                              1000,
0121                              i18nc("energy unit symbol", "kJ"),
0122                              i18nc("unit description in lists", "kilojoules"),
0123                              i18nc("unit synonyms for matching user input", "kilojoule;kilojoules;kJ"),
0124                              symbolString,
0125                              ki18nc("amount in units (real)", "%1 kilojoules"),
0126                              ki18ncp("amount in units (integer)", "%1 kilojoule", "%1 kilojoules")));
0127 
0128     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0129                        Hectojoule,
0130                        100,
0131                        i18nc("energy unit symbol", "hJ"),
0132                        i18nc("unit description in lists", "hectojoules"),
0133                        i18nc("unit synonyms for matching user input", "hectojoule;hectojoules;hJ"),
0134                        symbolString,
0135                        ki18nc("amount in units (real)", "%1 hectojoules"),
0136                        ki18ncp("amount in units (integer)", "%1 hectojoule", "%1 hectojoules")));
0137 
0138     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0139                        Decajoule,
0140                        10,
0141                        i18nc("energy unit symbol", "daJ"),
0142                        i18nc("unit description in lists", "decajoules"),
0143                        i18nc("unit synonyms for matching user input", "decajoule;decajoules;daJ"),
0144                        symbolString,
0145                        ki18nc("amount in units (real)", "%1 decajoules"),
0146                        ki18ncp("amount in units (integer)", "%1 decajoule", "%1 decajoules")));
0147 
0148     d->addDefaultUnit(UnitPrivate::makeUnit(EnergyCategory,
0149                               Joule,
0150                               1,
0151                               i18nc("energy unit symbol", "J"),
0152                               i18nc("unit description in lists", "joules"),
0153                               i18nc("unit synonyms for matching user input", "joule;joules;J"),
0154                               symbolString,
0155                               ki18nc("amount in units (real)", "%1 joules"),
0156                               ki18ncp("amount in units (integer)", "%1 joule", "%1 joules")));
0157 
0158     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0159                        Decijoule,
0160                        0.1,
0161                        i18nc("energy unit symbol", "dJ"),
0162                        i18nc("unit description in lists", "decijoules"),
0163                        i18nc("unit synonyms for matching user input", "decijoule;decijoules;dJ"),
0164                        symbolString,
0165                        ki18nc("amount in units (real)", "%1 decijoules"),
0166                        ki18ncp("amount in units (integer)", "%1 decijoule", "%1 decijoules")));
0167 
0168     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0169                        Centijoule,
0170                        0.01,
0171                        i18nc("energy unit symbol", "cJ"),
0172                        i18nc("unit description in lists", "centijoules"),
0173                        i18nc("unit synonyms for matching user input", "centijoule;centijoules;cJ"),
0174                        symbolString,
0175                        ki18nc("amount in units (real)", "%1 centijoules"),
0176                        ki18ncp("amount in units (integer)", "%1 centijoule", "%1 centijoules")));
0177 
0178     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0179                        Millijoule,
0180                        0.001,
0181                        i18nc("energy unit symbol", "mJ"),
0182                        i18nc("unit description in lists", "millijoules"),
0183                        i18nc("unit synonyms for matching user input", "millijoule;millijoules;mJ"),
0184                        symbolString,
0185                        ki18nc("amount in units (real)", "%1 millijoules"),
0186                        ki18ncp("amount in units (integer)", "%1 millijoule", "%1 millijoules")));
0187 
0188     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0189                        Microjoule,
0190                        1e-06,
0191                        i18nc("energy unit symbol", "µJ"),
0192                        i18nc("unit description in lists", "microjoules"),
0193                        i18nc("unit synonyms for matching user input", "microjoule;microjoules;µJ;uJ"),
0194                        symbolString,
0195                        ki18nc("amount in units (real)", "%1 microjoules"),
0196                        ki18ncp("amount in units (integer)", "%1 microjoule", "%1 microjoules")));
0197 
0198     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0199                        Nanojoule,
0200                        1e-09,
0201                        i18nc("energy unit symbol", "nJ"),
0202                        i18nc("unit description in lists", "nanojoules"),
0203                        i18nc("unit synonyms for matching user input", "nanojoule;nanojoules;nJ"),
0204                        symbolString,
0205                        ki18nc("amount in units (real)", "%1 nanojoules"),
0206                        ki18ncp("amount in units (integer)", "%1 nanojoule", "%1 nanojoules")));
0207 
0208     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0209                        Picojoule,
0210                        1e-12,
0211                        i18nc("energy unit symbol", "pJ"),
0212                        i18nc("unit description in lists", "picojoules"),
0213                        i18nc("unit synonyms for matching user input", "picojoule;picojoules;pJ"),
0214                        symbolString,
0215                        ki18nc("amount in units (real)", "%1 picojoules"),
0216                        ki18ncp("amount in units (integer)", "%1 picojoule", "%1 picojoules")));
0217 
0218     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0219                        Femtojoule,
0220                        1e-15,
0221                        i18nc("energy unit symbol", "fJ"),
0222                        i18nc("unit description in lists", "femtojoules"),
0223                        i18nc("unit synonyms for matching user input", "femtojoule;femtojoules;fJ"),
0224                        symbolString,
0225                        ki18nc("amount in units (real)", "%1 femtojoules"),
0226                        ki18ncp("amount in units (integer)", "%1 femtojoule", "%1 femtojoules")));
0227 
0228     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0229                        Attojoule,
0230                        1e-18,
0231                        i18nc("energy unit symbol", "aJ"),
0232                        i18nc("unit description in lists", "attojoules"),
0233                        i18nc("unit synonyms for matching user input", "attojoule;attojoules;aJ"),
0234                        symbolString,
0235                        ki18nc("amount in units (real)", "%1 attojoules"),
0236                        ki18ncp("amount in units (integer)", "%1 attojoule", "%1 attojoules")));
0237 
0238     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0239                        Zeptojoule,
0240                        1e-21,
0241                        i18nc("energy unit symbol", "zJ"),
0242                        i18nc("unit description in lists", "zeptojoules"),
0243                        i18nc("unit synonyms for matching user input", "zeptojoule;zeptojoules;zJ"),
0244                        symbolString,
0245                        ki18nc("amount in units (real)", "%1 zeptojoules"),
0246                        ki18ncp("amount in units (integer)", "%1 zeptojoule", "%1 zeptojoules")));
0247 
0248     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0249                        Yoctojoule,
0250                        1e-24,
0251                        i18nc("energy unit symbol", "yJ"),
0252                        i18nc("unit description in lists", "yoctojoules"),
0253                        i18nc("unit synonyms for matching user input", "yoctojoule;yoctojoules;yJ"),
0254                        symbolString,
0255                        ki18nc("amount in units (real)", "%1 yoctojoules"),
0256                        ki18ncp("amount in units (integer)", "%1 yoctojoule", "%1 yoctojoules")));
0257 
0258     d->addCommonUnit(UnitPrivate::makeUnit(EnergyCategory,
0259                              GuidelineDailyAmount,
0260                              8.3736e+06,
0261                              i18nc("energy unit symbol", "GDA"),
0262                              i18nc("unit description in lists", "guideline daily amount"),
0263                              i18nc("unit synonyms for matching user input", "guideline daily amount;guideline daily amount;GDA"),
0264                              symbolString,
0265                              ki18nc("amount in units (real)", "%1 guideline daily amount"),
0266                              ki18ncp("amount in units (integer)", "%1 guideline daily amount", "%1 guideline daily amount")));
0267 
0268     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0269                        Electronvolt,
0270                        1.60218e-19,
0271                        i18nc("energy unit symbol", "eV"),
0272                        i18nc("unit description in lists", "electronvolts"),
0273                        i18nc("unit synonyms for matching user input", "electronvolt;electronvolts;eV"),
0274                        symbolString,
0275                        ki18nc("amount in units (real)", "%1 electronvolts"),
0276                        ki18ncp("amount in units (integer)", "%1 electronvolt", "%1 electronvolts")));
0277 
0278     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0279                        JoulePerMole,
0280                        1.66054238581e-24,
0281                        i18nc("energy unit symbol", "J/mol"),
0282                        i18nc("unit description in lists", "joule per mole"),
0283                        i18nc("unit synonyms for matching user input", "joule per mole;joulepermole;joulemol;jmol;j/mol"),
0284                        symbolString,
0285                        ki18nc("amount in units (real)", "%1 joules per mole"),
0286                        ki18ncp("amount in units (integer)", "%1 joule per mole", "%1 joules per mole")));
0287 
0288     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0289                        KiloJoulePerMole,
0290                        1.66054238581e-21,
0291                        i18nc("energy unit symbol", "kJ/mol"),
0292                        i18nc("unit description in lists", "kilojoule per mole"),
0293                        i18nc("unit synonyms for matching user input", "kilojoule per mole;kilojoulepermole;kilojoule per mole;kilojoulemol;kjmol;kj/mol"),
0294                        symbolString,
0295                        ki18nc("amount in units (real)", "%1 kilojoules per mole"),
0296                        ki18ncp("amount in units (integer)", "%1 kilojoule per mole", "%1 kilojoules per mole")));
0297 
0298     d->addUnit(UnitPrivate::makeUnit(EnergyCategory,
0299                        Rydberg,
0300                        2.17987e-18,
0301                        i18nc("energy unit symbol", "Ry"),
0302                        i18nc("unit description in lists", "rydbergs"),
0303                        i18nc("unit synonyms for matching user input", "rydberg;rydbergs;Ry"),
0304                        symbolString,
0305                        ki18nc("amount in units (real)", "%1 rydbergs"),
0306                        ki18ncp("amount in units (integer)", "%1 rydberg", "%1 rydbergs")));
0307 
0308     d->addCommonUnit(UnitPrivate::makeUnit(EnergyCategory,
0309                              Kilocalorie,
0310                              4186.8,
0311                              i18nc("energy unit symbol", "kcal"),
0312                              i18nc("unit description in lists", "kilocalories"),
0313                              i18nc("unit synonyms for matching user input", "kilocalorie;kilocalories;kcal"),
0314                              symbolString,
0315                              ki18nc("amount in units (real)", "%1 kilocalories"),
0316                              ki18ncp("amount in units (integer)", "%1 kilocalorie", "%1 kilocalories")));
0317 
0318     d->addCommonUnit(UnitPrivate::makeUnit(EnergyCategory,
0319                              Btu,
0320                              1055.05585,
0321                              i18nc("energy unit symbol", "BTU"),
0322                              i18nc("unit description in lists", "British Thermal Unit"),
0323                              i18nc("unit synonyms for matching user input", "Btu;BTU;Btus;BTUs"),
0324                              symbolString,
0325                              ki18nc("amount in units (real)", "%1 BTU"),
0326                              ki18ncp("amount in units (integer)", "%1 BTU", "%1 BTU")));
0327 
0328     d->addCommonUnit(UnitPrivate::makeUnit(EnergyCategory,
0329                              Erg,
0330                              1.0e-7,
0331                              i18nc("energy unit symbol", "Erg"),
0332                              i18nc("unit description in lists", "ergs"),
0333                              i18nc("unit synonyms for matching user input", "Erg;erg;Ergs;ergs"),
0334                              symbolString,
0335                              ki18nc("amount in units (real)", "%1 ergs"),
0336                              ki18ncp("amount in units (integer)", "%1 erg", "%1 erg")));
0337 
0338     d->addUnit(UnitPrivate::makeUnit(new PhotoUnitPrivate(EnergyCategory,
0339                                             PhotonWavelength,
0340                                             1.0,
0341                                             i18nc("energy unit symbol", "nm"),
0342                                             i18nc("unit description in lists", "photon wavelength in nanometers"),
0343                                             i18nc("unit synonyms for matching user input", "nm;photon wavelength"),
0344                                             symbolString,
0345                                             ki18nc("amount in units (real)", "%1 nanometers"),
0346                                             ki18ncp("amount in units (integer)", "%1 nanometer", "%1 nanometers"))));
0347 
0348     return c;
0349 }
0350 
0351 } // KUnitConversion namespace