示例#1
0
def init_names_auto(fname=os.path.join(
    os.path.dirname(os.path.dirname(__file__)),
    'festival/data/period_names/translation_table.json')):
    """Read various nakShatra, samvatsara, mAsa and such names from a file return a dict with all of that.

  :returns a dict like { "YEAR_NAMES": {"hk": } ...}
  """
    with open(fname) as f:
        import json
        names_dict = json.load(f)
        for dictionary in names_dict:
            if dictionary in ("SHUULAM", "SA_TO_TAMIL", "ARAB_MONTH_NAMES",
                              "TIPU_ABJAD_MONTH_NAMES",
                              "TIPU_ABTATH_MONTH_NAMES", "GRAHA_NAMES"):
                continue
            if not dictionary.startswith('VARA_NAMES'):
                # Vara Names follow zero indexing, rest don't
                names_dict[dictionary]['sa'].insert(0, 'अस्पष्टम्')

            names_dict[dictionary]['sa'] = {
                xsanscript.DEVANAGARI: names_dict[dictionary]['sa']
            }
            for scr in scripts:
                names_dict[dictionary]['sa'][scr] = [
                    xsanscript.transliterate(name, xsanscript.DEVANAGARI,
                                             scr).title()
                    if scr == xsanscript.IAST else xsanscript.transliterate(
                        name, xsanscript.DEVANAGARI, scr) for name in
                    names_dict[dictionary]['sa'][xsanscript.DEVANAGARI]
                ]
        #
        #   new_names_dict[dictionary] = {"sa": names_dict[dictionary]['sa'][xsanscript.HK]}
        # with codecs.open(fname + ".new",  "w") as f:
        #   json.dump(new_names_dict, f, ensure_ascii=False, indent=2)
        return names_dict
def tr(text, script, titled=True):
    """
  
  NOTE: Please don't put your custom tex/ md/ ics whatever code here and pollute core library functions. Wrap this in your own functions if you must. Functions should be atomic."""
    if script == 'hk':
        script = sanscript.HK
    if text == '':
        return ''
    # TODO: Fix this ugliness.
    t = text.replace('~',
                     '##~##')  # Simple fix to prevent transliteration of ~
    # logging.debug(transliterated_text)
    transliterated_text = sanscript.transliterate(data=t,
                                                  _from=sanscript.HK,
                                                  _to=script).replace(
                                                      'C',
                                                      'Ch').replace('c', 'ch')
    if titled:
        transliterated_text = transliterated_text.title()

    if script == sanscript.TAMIL:
        transliterated_text = sanscript.SCHEMES[
            sanscript.TAMIL].apply_roman_numerals(transliterated_text)
    if script == 'iast':
        transliterated_text = transliterated_text.replace('ṉ', 'n')
    return transliterated_text
def tr(text, script, titled=True, source_script=sanscript.HK):
    """
  
  NOTE: Please don't put your custom tex/ md/ ics whatever code here and pollute core library functions. Wrap this in your own functions if you must. Functions should be atomic."""
    if script == 'hk':
        script = sanscript.HK
    if text == '':
        return ''
    # TODO: Fix this ugliness.
    t = text.replace('~',
                     '##~##')  # Simple fix to prevent transliteration of ~
    transliterated_text = sanscript.transliterate(data=t,
                                                  _from=source_script,
                                                  _to=script).replace(
                                                      'C',
                                                      'Ch').replace('c', 'ch')
    if titled:
        transliterated_text = transliterated_text.title()

    if script == sanscript.TAMIL:
        transliterated_text = sanscript.SCHEMES[
            sanscript.TAMIL].apply_roman_numerals(transliterated_text)
        # transliterated_text = clean_tamil_Na(transliterated_text)
    if script == 'iast':
        transliterated_text = transliterated_text.replace('ṉ', 'n')
        caret_accent = '̂'
        for _match in re.findall(caret_accent + '.', transliterated_text):
            transliterated_text = transliterated_text.replace(
                _match, _match.lower())
    if script == 'telugu' or script == sanscript.TELUGU:
        transliterated_text = transliterated_text.replace('ऩ', 'న')
    return transliterated_text
def transliterate_from_language(text, language, script):
    if language == "ta":
        # Tamil names are stored in HK (because the latter differentiates between vargIya consonants!)
        transliterated_text = tr(text, script)
    else:
        source_script = language_code_to_script[language]
        transliterated_text = xsanscript.transliterate(text, source_script,
                                                       script)
    return transliterated_text
示例#5
0
 def file_namer(row):
     # logging.debug(row['प्रारम्भः'])
     post_date = date_format_converter_us_to_yyyy_mm_dd(row['प्रारम्भः'])
     file_name = xsanscript.transliterate(row['लिङ्गम्'].strip(),
                                          xsanscript.DEVANAGARI,
                                          xsanscript.OPTITRANS)
     file_name = post_date + "_" + re.sub("[^a-zA-Z0-9\-_]", "_",
                                          file_name) + ".md"
     return file_name
def test_from_devanagari(test_conversions):
    logging.debug(str(test_conversions))
    dev_string = test_conversions["dev"]
    for (script, text) in test_conversions.items():
        if script in SCRIPT_NAME_MAP.keys():
            script = SCRIPT_NAME_MAP[script]
        if script == "dev" or (script not in xsanscript.SCHEMES.keys()):
            logging.debug("Skipping over script - " + script)
            continue
        transliteration = xsanscript.transliterate(dev_string, xsanscript.DEVANAGARI, script)
        assert transliteration == text, "Failed to convert to " + script + " from devanAgarI. Compare: " + transliteration + " vs " + text
示例#7
0
 def get_human_names(self, fest_details_dict):
     from jyotisha.panchaanga.temporal.festival import rules
     fest_details = fest_details_dict.get(
         self.name, rules.HinduCalendarEvent(id=self.name))
     if fest_details.names is None:
         sa_name = xsanscript.transliterate(self.name.replace("~", " "),
                                            sanscript.HK,
                                            sanscript.DEVANAGARI)
         sa_name = rules.inverse_clean_id(sa_name)
         fest_details.names = {"sa": [sa_name]}
     import copy
     names = copy.deepcopy(fest_details.names)
     return names
示例#8
0
def tr(text, scr, titled=True):
    # titled = True seems to be primarily for NOT TitleCasing IAST Shlokas...
    if scr == 'hk':
        scr = sanscript.HK
    if text == '':
        return ''
    text = text.replace('~', '##~##')  # Simple fix to prevent transliteration of ~
    text_bits = text.split('|')
    transliterated_text = []

    if titled:
        for t in text_bits:
            t = t.rstrip('#~0123456789 ')
            if t[:3] == 'ta:':
                # Force Tamil!
                if scr == sanscript.DEVANAGARI:
                    scr = sanscript.TAMIL
                t = t[3:]
                if scr == sanscript.TAMIL:
                    transliterated_text.append('\\tamil{%s}' % 
                        sanscript.transliterate(data=t, _from=sanscript.HK, _to=scr).replace('C','Ch').replace('c','ch').title())
                else:
                    transliterated_text.append(
                        sanscript.transliterate(data=t, _from=sanscript.HK, _to=scr).replace('C','Ch').replace('c','ch').title())

            else:
                if t.find('RIGHTarrow') == -1:
                    transliterated_text.append(
                        sanscript.transliterate(data=t, _from=sanscript.HK, _to=scr).replace('C','Ch').replace('c','ch').title())
                else:
                    [txt, t1, arrow, t2] = t.split('\\')
                    transliterated_text.append(
                        '\\'.join([sanscript.transliterate(data=txt, _from=sanscript.HK, _to=scr).replace('C','Ch').replace('c','ch').title(),
                                   t1, arrow, t2]))
    else:
        for t in text_bits:
            t = t.rstrip('~0123456789 ')
            if t[:3] == 'ta:':
                # Force Tamil!
                if scr == sanscript.DEVANAGARI:
                    scr = sanscript.TAMIL
                t = t[3:]
                transliterated_text.append(
                    sanscript.transliterate(data=t, _from=sanscript.HK, _to=scr).replace('C','Ch').replace('c','ch').strip("{}").title())
            else:
                if t.find('RIGHTarrow') == -1:
                    transliterated_text.append(sanscript.transliterate(data=t, _from=sanscript.HK, _to=scr))
                else:
                    [txt, t1, arrow, t2] = t.split('\\')
                    transliterated_text.append(
                        '\\'.join([sanscript.transliterate(txt, _from=sanscript.HK, _to=scr),
                                   t1, arrow, t2]))

    return '|'.join(transliterated_text)
def init_names_auto(fname=os.path.join(CODE_ROOT, 'names/data/translation_table_HK.json')):
  """Read various nakShatra, samvatsara, mAsa and such names from a file return a dict with all of that.

  :returns a dict like { "YEAR_NAMES": {"hk": } ...}
  """
  with open(fname) as f:
    import json
    names_dict = json.load(f)
    for dictionary in names_dict:
      if dictionary != 'VARA_NAMES':
        # Vara Names follow zero indexing, rest don't
        names_dict[dictionary]['hk'].insert(0, '')

      for scr in scripts:
        names_dict[dictionary][scr] = [sanscript.transliterate(name, 'hk', scr).title() for name in names_dict[dictionary]['hk']]
    return names_dict
示例#10
0
def get_names(fname='./names.json'):
    scripts = [
        sanscript.DEVANAGARI, sanscript.IAST, sanscript.TAMIL, sanscript.TELUGU
    ]
    with open(fname) as f:
        names_dict = json.load(f)
        for dictionary in names_dict:
            if dictionary != 'VARA_NAMES':
                # Vara Names follow zero indexing, rest don't
                names_dict[dictionary]['hk'].insert(0, 'aspaShTam')

            for scr in scripts:
                names_dict[dictionary][scr] = [
                    sanscript.transliterate(name, 'hk', scr)
                    for name in names_dict[dictionary]['hk']
                ]
        return names_dict
示例#11
0
def get_description_str_with_shlokas(include_shlokas, rule, script):
  # Get the description
  description_string = ''
  descriptions = {}
  if rule.description is not None:
    # description_string = json.dumps(rule.description)
    for language in rule.description:
      if language == "en":
        descriptions["en"] = get_english_description(description_string, rule)
      else:
        descriptions[language] = rule.description[language]
  description_items = sorted(descriptions.items(), key=lambda pair: ["en", "sa", "ta"].index(pair[0]))
  description_string = "\n\n".join([x[1].strip() for x in description_items])
  if rule.shlokas is not None and include_shlokas:
    shlokas = xsanscript.transliterate(rule.shlokas.strip().replace("\n", "  \n"), xsanscript.DEVANAGARI, script)
    description_string = description_string + '\n\n' + shlokas + '\n\n'
  return description_string
示例#12
0
 def to_hour_text(self, tz, script=xsanscript.IAST, reference_date=None):
     if self.jd_start is not None:
         start_time = '%s' % default_if_none(
             tz.julian_day_to_local_time(
                 julian_day=self.jd_start).get_hour_str(
                     reference_date=reference_date), "")
     else:
         start_time = ''
     if self.jd_end is not None:
         end_time = '%s' % default_if_none(
             tz.julian_day_to_local_time(
                 julian_day=self.jd_end).get_hour_str(
                     reference_date=reference_date), "")
     else:
         end_time = ''
     hour_text = "%s►%s" % (start_time, end_time)
     return xsanscript.transliterate(hour_text,
                                     _from=xsanscript.IAST,
                                     _to=script)
示例#13
0
    def get_description_dict(self, script):
        from jyotisha.panchaanga.temporal.festival.rules import summary

        description_dict = {}

        description_dict['blurb'] = summary.get_timing_summary(self)
        description_dict[
            'detailed'] = summary.get_description_str_with_shlokas(
                False, self, script)
        if self.image is None:
            description_dict['image'] = ''
        else:
            description_dict['image'] = self.image

        description_dict['references'] = summary.get_references_md(self)

        if self.shlokas is not None:
            description_dict['shlokas'] = xsanscript.transliterate(
                self.shlokas.replace("\n", "  \n"), xsanscript.DEVANAGARI,
                script)
        else:
            description_dict['shlokas'] = ''

        return description_dict
    with open(os.path.join(CODE_ROOT, 'panchangam/data/kanchi_aradhana_rules.json')) as aradhana_data:
        aradhana_rules = json.load(aradhana_data, object_pairs_hook=OrderedDict)

    for script in [sanscript.DEVANAGARI, sanscript.IAST]:
        with open(os.path.join(CODE_ROOT, 'kanchi_aradhana_days_%s.md' % script), 'w') as f:
            f.write('## Sri Kanchi Matham Guru Aaradhana Days\n\n')
            f.write('(obtained from [kamakoti.org](http://kamakoti.org/peeth/origin.html#appendix2), ')
            f.write('and corrected using [@kamakoti twitter feed](https://twitter.com/kamakoti)!)\n\n')
            f.write('| # | Jagadguru | Mukti Year (Kali) | Mukti Year Name | Month | Tithi |\n')
            f.write('| - | --------- | ----------------- | --------------- | ----- | ----- |\n')
            for guru in aradhana_rules.keys():
                if guru[:5] == 'kAJcI':
                    name = str(' '.join(guru.split()[3:-1])).replace('-', ' ')
                    num = int(guru.split()[1])
                    kali_year = str(aradhana_rules[guru]['Start Year'] - 1)
                    year_name = NAMES['YEAR_NAMES']['hk'][((int(kali_year) + 12) % 60)]
                else:
                    name = guru[:-9]
                    num = '-'
                    kali_year = '-'
                    year_name = '-'
                tithi = NAMES['TITHI_NAMES']['hk'][aradhana_rules[guru]['Angam Number']-1]
                month_name = "UNKNOWN"
                if aradhana_rules[guru]['Month Type'] == 'lunar_month':
                    month_name = NAMES['CHANDRA_MASA_NAMES']['hk'][aradhana_rules[guru]['Month Number']-1]
                elif aradhana_rules[guru]['Month Type'] == 'solar_month':
                    month_name = NAMES['MASA_NAMES']['hk'][aradhana_rules[guru]['Month Number']-1]
                f.write('| %s | %s | %s | %s | %s | %s |\n' %
                        (num, sanscript.transliterate(name, sanscript.HK, script).title(),
                         kali_year, sanscript.transliterate(year_name, sanscript.HK, script), sanscript.transliterate(month_name, sanscript.HK, script), tithi.replace('-', ' ')))
示例#15
0
def compute_calendar(panchangam):
    festival_rules_main = read_old_festival_rules_dict(os.path.join(CODE_ROOT, 'panchangam/data/festival_rules.json'))
    festival_rules_rel = read_old_festival_rules_dict(os.path.join(CODE_ROOT, 'panchangam/data/relative_festival_rules.json'))
    festival_rules_desc_only = read_old_festival_rules_dict(os.path.join(CODE_ROOT, 'panchangam/data/festival_rules_desc_only.json'))

    festival_rules = {**festival_rules_main, **festival_rules_rel, **festival_rules_desc_only}

    ics_calendar = Calendar()
    # uid_list = []

    alarm = Alarm()
    alarm.add('action', 'DISPLAY')
    alarm.add('trigger', timedelta(hours=-4))  # default alarm, with a 4 hour reminder

    for d in range(1, jyotisha.panchangam.temporal.MAX_SZ - 1):
        [y, m, dt, t] = swe.revjul(panchangam.jd_start + d - 1)

        if len(panchangam.festivals[d]) > 0:
            # Eliminate repeat festivals on the same day, and keep the list arbitrarily sorted
            panchangam.festivals[d] = sorted(list(set(panchangam.festivals[d])))
            summary_text = panchangam.festivals[d]
            # this will work whether we have one or more events on the same day
            for stext in sorted(summary_text):
                desc = ''
                event = Event()
                if stext == 'kRttikA-maNDala-pArAyaNam':
                    event.add('summary', jyotisha.custom_transliteration.tr(stext.replace('-', ' '), panchangam.script))
                    fest_num_loc = stext.find('~\#')
                    if fest_num_loc != -1:
                        stext = stext[:fest_num_loc]
                    event.add('dtstart', date(y, m, dt))
                    event.add('dtend', (datetime(y, m, dt) + timedelta(48)).date())

                    if stext in festival_rules:
                        desc = festival.HinduCalendarEventOld.make_from_dict(festival_rules[stext]).get_description_string(script=panchangam.script, include_url=True)
                    else:
                        logging.warning('No description found for festival %s!' % stext)

                    event.add_component(alarm)
                    event.add('description', desc.strip())
                    event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                    event['TRANSP'] = 'TRANSPARENT'
                    event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                    ics_calendar.add_component(event)
                elif stext.find('RIGHTarrow') != -1:
                    # It's a grahanam/yogam, with a start and end time
                    if stext.find('{}') != -1:
                        # Starting or ending time is empty, e.g. harivasara, so no ICS entry
                        continue
                    [stext, t1, arrow, t2] = stext.split('\\')
                    stext = stext.strip('-~')
                    event.add('summary', jyotisha.custom_transliteration.tr(stext, panchangam.script))
                    # we know that t1 is something like 'textsf{hh:mm(+1)}{'
                    # so we know the exact positions of min and hour
                    if t1[12] == '(':  # (+1), next day
                        event.add('dtstart', datetime(y, m, dt, int(t1[7:9]), int(t1[10:12]),
                                                      tzinfo=tz(panchangam.city.timezone)) + timedelta(1))
                    else:
                        event.add('dtstart', datetime(y, m, dt, int(t1[7:9]), int(t1[10:12]),
                                                      tzinfo=tz(panchangam.city.timezone)))
                    if t2[12] == '(':  # (+1), next day
                        event.add('dtend', datetime(y, m, dt, int(t2[7:9]), int(t2[10:12]),
                                                    tzinfo=tz(panchangam.city.timezone)) + timedelta(1))
                    else:
                        event.add('dtend', datetime(y, m, dt, int(t2[7:9]), int(t2[10:12]),
                                                    tzinfo=tz(panchangam.city.timezone)))

                    if stext in festival_rules:
                        festival_event = festival.HinduCalendarEventOld.make_from_dict(festival_rules[stext])
                        desc = festival_event.get_description_string(script=panchangam.script, include_url=True)
                    else:
                        logging.warning('No description found for festival %s!\n' % stext)
                    event.add('description', desc.strip())
                    event.add_component(alarm)
                    ics_calendar.add_component(event)
                elif stext.find('samApanam') != -1:
                    # It's an ending event
                    event.add('summary', jyotisha.custom_transliteration.tr(stext, panchangam.script))
                    event.add('dtstart', date(y, m, dt))
                    event.add('dtend', (datetime(y, m, dt) + timedelta(1)).date())

                    if stext in festival_rules:
                        festival_event = festival.HinduCalendarEventOld.make_from_dict(festival_rules[stext])
                        desc = festival_event.get_description_string(script=panchangam.script, include_url=True)
                    else:
                        logging.warning('No description found for festival %s!' % stext)

                    event.add_component(alarm)
                    event.add('description', desc.strip())
                    event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                    event['TRANSP'] = 'TRANSPARENT'
                    event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                    ics_calendar.add_component(event)

                    # Find start and add entire event as well
                    event = Event()
                    check_d = d
                    stext_start = stext.replace('samApanam', 'ArambhaH')
                    start_d = None
                    while check_d > 1:
                        check_d -= 1
                        if stext_start in panchangam.festivals[check_d]:
                            start_d = check_d
                            break

                    if start_d is None:
                        logging.error('Unable to find start date for %s' % stext_start)
                    else:
                        # logging.debug(stext)
                        event_summary_text = stext
                        REPLACEMENTS = {'samApanam': '',
                                        'rAtri-': 'rAtriH',
                                        'nakSatra-': 'nakSatram',
                                        'pakSa-': 'pakSaH',
                                        'puSkara-': 'puSkaram',
                                        'dIpa-': 'dIpaH',
                                        'snAna-': 'snAnam',
                                        'tsava-': 'tsavaH',
                                        'vrata-': 'vratam'}
                        for _orig, _repl in REPLACEMENTS.items():
                            event_summary_text = event_summary_text.replace(_orig, _repl)
                        event.add('summary', jyotisha.custom_transliteration.tr(event_summary_text, panchangam.script))
                        event.add('dtstart', (datetime(y, m, dt) - timedelta(d - start_d)).date())
                        event.add('dtend', (datetime(y, m, dt) + timedelta(1)).date())

                        # print(event)
                        event.add_component(alarm)
                        event.add('description', desc.strip())
                        event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                        event['TRANSP'] = 'TRANSPARENT'
                        event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                        ics_calendar.add_component(event)
                else:
                    summary = jyotisha.custom_transliteration.tr(stext.replace('~', ' ').replace('\#', '#').replace('\\To{}', '▶'), panchangam.script)
                    summary = re.sub('.tamil{(.*)}', '\\1', summary)
                    summary = re.sub('{(.*)}', '\\1', summary)  # strip braces around numbers
                    event.add('summary', summary)
                    fest_num_loc = stext.find('~\#')
                    if fest_num_loc != -1:
                        stext = stext[:fest_num_loc]
                    event.add('dtstart', date(y, m, dt))
                    event.add('dtend', (datetime(y, m, dt) + timedelta(1)).date())

                    if re.match('.*-.*-EkAdazI', stext) is None and stext.find('saGkrAntiH') == -1:
                        if stext in festival_rules:
                            desc = festival.HinduCalendarEventOld.make_from_dict(festival_rules[stext]).get_description_string(script=panchangam.script, include_url=True)
                        else:
                            if re.match('aGgArakI.*saGkaTahara-caturthI-vratam', stext):
                                stext = stext.replace('aGgArakI~', '')
                                if stext in festival_rules:
                                    desc = festival.HinduCalendarEventOld.make_from_dict(festival_rules[stext]).get_description_string(script=panchangam.script)
                                    desc += 'When `caturthI` occurs on a Tuesday, it is known as `aGgArakI` and is even more sacred.'
                                else:
                                    logging.warning('No description found for caturthI festival %s!' % stext)
                            else:
                                logging.warning('No description found for festival %s!' % stext)
                    elif stext.find('saGkrAntiH') != -1:
                        # Handle Sankranti descriptions differently
                        planet_trans = stext.split('~')[0]  # get rid of ~(rAshi name) etc.
                        if planet_trans in festival_rules:
                            desc = festival.HinduCalendarEventOld.make_from_dict(festival_rules[planet_trans]).get_description_string(script=panchangam.script, include_url=True)
                        else:
                            logging.warning('No description found for festival %s!' % planet_trans)
                    else:
                        # logging.debug(stext)
                        # Handle ekadashi descriptions differently
                        ekad = '-'.join(stext.split('-')[1:])  # get rid of sarva etc. prefix!
                        if ekad in festival_rules:
                            desc = festival.HinduCalendarEventOld.make_from_dict(festival_rules[ekad]).get_description_string(script=panchangam.script, include_url=True)
                        else:
                            logging.warning('No description found for Ekadashi festival %s (%s)!' % (ekad, stext))
                        pref = jyotisha.custom_transliteration.romanise(sanscript.transliterate(
                            stext.split('-')[0],
                            sanscript.HK, sanscript.IAST)) + "-"
                    event.add_component(alarm)
                    event.add('description', desc.strip())
                    event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                    event['TRANSP'] = 'TRANSPARENT'
                    event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                    ics_calendar.add_component(event)

        if m == 12 and dt == 31:
            break

    return ics_calendar
示例#16
0
from indic_transliteration import xsanscript as sanscript

from jyotisha.panchaanga.temporal.names.init_names_auto import init_names_auto

logging.basicConfig(
  level=logging.DEBUG,
  format="%(levelname)s: %(asctime)s {%(filename)s:%(lineno)d}: %(message)s "
)

if __name__ == '__main__':
  NAMES = init_names_auto()

  # TODO: Verify the below.
  with open('README.md', 'w') as f:
    for anga in NAMES:
      f.write('## ' + anga + '\n')
      f.write('(as initialised from `init_names_auto.py`)\n\n')
      f.write('| # | ' + ' | '.join(sorted(list(NAMES[anga]['sa'].keys()))) + ' |\n')
      f.write('|---| ' + ' | '.join(['-' * len(scr)
                                     for scr in sorted(list(NAMES[anga]['sa'].keys()))]) + ' |\n')
      if anga == 'VARA_NAMES':
        amin = 0  # min anga for VARA alone is 0, rest 1
      else:
        amin = 1
      for num in range(amin, len(NAMES[anga]['sa']['hk'])):
        line = '| %d' % (num)
        for script in sorted(list(NAMES[anga]['sa'].keys())):
          line += ' | ' + sanscript.transliterate(NAMES[anga]['sa']['hk'][num], sanscript.HK, script)
        f.write(line + ' |\n')
      f.write('\n\n')
示例#17
0
    sys.exit(1)

model = markovify.combine(models)

for i in range(args.count):
    if args.words > 0:
        word_tries = args.tries
    else:
        word_tries = 1

    mantra = None
    for k in range(word_tries):
        mantra = model.make_short_sentence(min_chars=args.min,
                                           max_chars=args.max,
                                           tries=args.tries,
                                           test_output=args.no_output_test)
        if args.words == 0:
            break
        if len(mantra.split()) == args.words:
            break
        mantra = None

    if mantra is None:
        print('Error: could not generate mantra with given constraints')
        sys.exit(1)

    if args.format == 'IAST':
        mantra = transliterate(mantra, DEVANAGARI, IAST)

    print(mantra)
示例#18
0
def compute_calendar(panchangam):
    festival_rules_main = read_old_festival_rules_dict(
        os.path.join(CODE_ROOT, 'panchangam/data/festival_rules.json'))
    festival_rules_rel = read_old_festival_rules_dict(
        os.path.join(CODE_ROOT,
                     'panchangam/data/relative_festival_rules.json'))
    festival_rules_desc_only = read_old_festival_rules_dict(
        os.path.join(CODE_ROOT,
                     'panchangam/data/festival_rules_desc_only.json'))

    festival_rules = {
        **festival_rules_main,
        **festival_rules_rel,
        **festival_rules_desc_only
    }

    ics_calendar = Calendar()
    uid_list = []

    alarm = Alarm()
    alarm.add('action', 'DISPLAY')
    alarm.add('trigger',
              timedelta(hours=-4))  # default alarm, with a 4 hour reminder

    for d in range(1, jyotisha.panchangam.temporal.MAX_SZ - 1):
        [y, m, dt, t] = swe.revjul(panchangam.jd_start + d - 1)

        if len(panchangam.festivals[d]) > 0:
            # Eliminate repeat festivals on the same day, and keep the list arbitrarily sorted
            panchangam.festivals[d] = sorted(list(set(
                panchangam.festivals[d])))
            summary_text = panchangam.festivals[d]
            # this will work whether we have one or more events on the same day
            for stext in sorted(summary_text):
                desc = ''
                page_id = ''
                event = Event()
                if stext == 'kRttikA-maNDala-pArAyaNam':
                    event.add(
                        'summary',
                        jyotisha.custom_transliteration.tr(
                            stext.replace('-', ' '), panchangam.script))
                    fest_num_loc = stext.find('~\#')
                    if fest_num_loc != -1:
                        stext = stext[:fest_num_loc]
                    event.add('dtstart', date(y, m, dt))
                    event.add('dtend',
                              (datetime(y, m, dt) + timedelta(48)).date())

                    if stext in festival_rules:
                        desc = json.dumps(festival_rules[stext].get('description_short'), sort_keys=True, indent = 2) + '\n\n' + \
                            jyotisha.custom_transliteration.tr(festival_rules[stext].get('shlokas'),
                                                               panchangam.script, False) + '\n\n'
                    else:
                        sys.stderr.write(
                            'No description found for festival %s!\n' % stext)
                    uid = '%s-%d' % (page_id, y)

                    event.add_component(alarm)
                    event.add('description', desc.strip())
                    uid_list.append(uid)
                    event.add('uid', uid)
                    event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                    event['TRANSP'] = 'TRANSPARENT'
                    event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                    ics_calendar.add_component(event)
                elif stext.find('RIGHTarrow') != -1:
                    # It's a grahanam/yogam, with a start and end time
                    if stext.find('{}') != -1:
                        # Starting or ending time is empty, e.g. harivasara, so no ICS entry
                        continue
                    [stext, t1, arrow, t2] = stext.split('\\')
                    stext = stext.strip('-')
                    event.add(
                        'summary',
                        jyotisha.custom_transliteration.tr(
                            stext, panchangam.script))
                    # we know that t1 is something like 'textsf{hh:mm(+1)}{'
                    # so we know the exact positions of min and hour
                    if t1[12] == '(':  # (+1), next day
                        event.add(
                            'dtstart',
                            datetime(y,
                                     m,
                                     dt,
                                     int(t1[7:9]),
                                     int(t1[10:12]),
                                     tzinfo=tz(panchangam.city.timezone)) +
                            timedelta(1))
                    else:
                        event.add(
                            'dtstart',
                            datetime(y,
                                     m,
                                     dt,
                                     int(t1[7:9]),
                                     int(t1[10:12]),
                                     tzinfo=tz(panchangam.city.timezone)))
                    if t2[12] == '(':  # (+1), next day
                        event.add(
                            'dtend',
                            datetime(y,
                                     m,
                                     dt,
                                     int(t2[7:9]),
                                     int(t2[10:12]),
                                     tzinfo=tz(panchangam.city.timezone)) +
                            timedelta(1))
                    else:
                        event.add(
                            'dtend',
                            datetime(y,
                                     m,
                                     dt,
                                     int(t2[7:9]),
                                     int(t2[10:12]),
                                     tzinfo=tz(panchangam.city.timezone)))

                    if stext in festival_rules:
                        desc = json.dumps(festival_rules[stext].get('description_short'), sort_keys=True, indent = 2) + '\n\n' + \
                            jyotisha.custom_transliteration.tr(festival_rules[stext].get('shlokas'), panchangam.script, False) + '\n\n'
                    else:
                        sys.stderr.write(
                            'No description found for festival %s!\n' % stext)
                    event.add('description', desc.strip())
                    uid = '%s-%d-%02d' % (page_id, y, m)
                    if uid not in uid_list:
                        uid_list.append(uid)
                    else:
                        uid = '%s-%d-%02d-%02d' % (page_id, y, m, dt)
                        uid_list.append(uid)
                    event.add('uid', uid)
                    event.add_component(alarm)
                    ics_calendar.add_component(event)
                elif stext.find('samApanam') != -1:
                    # It's an ending event
                    event.add(
                        'summary',
                        jyotisha.custom_transliteration.tr(
                            stext, panchangam.script))
                    event.add('dtstart', date(y, m, dt))
                    event.add('dtend',
                              (datetime(y, m, dt) + timedelta(1)).date())

                    if stext in festival_rules:
                        desc = json.dumps(festival_rules[stext].get('description_short'), sort_keys=True, indent = 2) + '\n\n' + \
                            jyotisha.custom_transliteration.tr(festival_rules[stext].get('shlokas'), panchangam.script, False) + '\n\n'
                    else:
                        sys.stderr.write(
                            'No description found for festival %s!\n' % stext)

                    # print(event)
                    event.add_component(alarm)
                    event.add('description', desc.strip())
                    uid = '%s-%d-%02d' % (page_id, y, m)
                    if uid not in uid_list:
                        uid_list.append(uid)
                    else:
                        uid = '%s-%d-%02d-%02d' % (page_id, y, m, dt)
                        uid_list.append(uid)
                    event.add('uid', uid)
                    event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                    event['TRANSP'] = 'TRANSPARENT'
                    event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                    ics_calendar.add_component(event)

                    # Find start and add entire event as well
                    desc = ''
                    page_id = page_id.replace('-samapanam', '')
                    event = Event()
                    check_d = d
                    stext_start = stext.replace('samApanam', 'ArambhaH')
                    # print(stext_start)
                    while check_d > 1:
                        check_d -= 1
                        if stext_start in panchangam.festivals[check_d]:
                            # print(panchangam.festivals[check_d])
                            start_d = check_d
                            break

                    event.add(
                        'summary',
                        jyotisha.custom_transliteration.tr(
                            stext.replace('samApanam', '').replace(
                                'rAtri-', 'rAtriH').replace(
                                    'nakSatra-', 'nakSatram').replace(
                                        'pakSa-',
                                        'pakSaH').replace('kara-',
                                                          'karam').replace(
                                                              'tsava-',
                                                              'tsavaH'),
                            panchangam.script))
                    event.add('dtstart', (datetime(y, m, dt) -
                                          timedelta(d - start_d)).date())
                    event.add('dtend',
                              (datetime(y, m, dt) + timedelta(1)).date())

                    # print(event)
                    event.add_component(alarm)
                    event.add('description', desc.strip())
                    uid = '%s-%d-%02d' % (page_id, y, m)
                    if uid not in uid_list:
                        uid_list.append(uid)
                    else:
                        suff = 0
                        while uid in uid_list:
                            uid = '%s-%d-%02d-%02d-%d' % (page_id, y, m, dt,
                                                          suff)
                            suff += 1
                        uid_list.append(uid)
                    event.add('uid', uid)
                    event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                    event['TRANSP'] = 'TRANSPARENT'
                    event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                    ics_calendar.add_component(event)

                else:
                    summary = jyotisha.custom_transliteration.tr(
                        stext.replace('~',
                                      ' ').replace('\#',
                                                   '#').replace('\\To{}', '▶'),
                        panchangam.script)
                    summary = re.sub('.tamil{(.*)}', '\\1', summary)
                    summary = re.sub('{(.*)}', '\\1',
                                     summary)  # strip braces around numbers
                    event.add('summary', summary)
                    fest_num_loc = stext.find('~\#')
                    if fest_num_loc != -1:
                        stext = stext[:fest_num_loc]
                    event.add('dtstart', date(y, m, dt))
                    event.add('dtend',
                              (datetime(y, m, dt) + timedelta(1)).date())

                    if stext.find('EkAdazI') == -1 and stext.find(
                            'saGkrAntiH') == -1:
                        if stext in festival_rules:
                            desc = json.dumps(festival_rules[stext].get('description_short'), sort_keys=True, indent = 2) + '\n\n' + \
                                jyotisha.custom_transliteration.tr(festival_rules[stext].get('shlokas'), panchangam.script, False) + '\n\n'
                        else:
                            sys.stderr.write(
                                'No description found for festival %s!\n' %
                                stext)
                        uid = '%s-%d-%02d' % (page_id, y, m)
                    elif stext.find('saGkrAntiH') != -1:
                        # Handle Sankranti descriptions differently
                        planet_trans = stext.split('~')[
                            0]  # get rid of ~(rAshi name) etc.
                        if planet_trans in festival_rules:
                            desc = festival_rules[planet_trans].get('description_short') + '\n\n' + \
                                jyotisha.custom_transliteration.tr(festival_rules[planet_trans].get('shlokas'), panchangam.script) + '\n\n'
                        else:
                            sys.stderr.write(
                                'No description found for festival %s!\n' %
                                planet_trans)
                        uid = '%s-%d-%02d' % (page_id, y, m)
                    else:
                        # Handle ekadashi descriptions differently
                        ekad = '-'.join(stext.split('-')
                                        [1:])  # get rid of sarva etc. prefix!
                        if ekad in festival_rules:
                            desc = festival_rules[ekad].get('description_short') + '\n\n' + \
                                jyotisha.custom_transliteration.tr(festival_rules[ekad].get('shlokas'), panchangam.script) + '\n\n'
                        else:
                            sys.stderr.write(
                                'No description found for festival %s!\n' %
                                ekad)
                        pref = jyotisha.custom_transliteration.romanise(
                            sanscript.transliterate(
                                stext.split('-')[0], sanscript.HK,
                                sanscript.IAST)) + "-"
                        uid = '%s-%d-%02d' % (pref + page_id, y, m)
                    # print(page_id)
                    event.add_component(alarm)
                    event.add('description', desc.strip())
                    if uid not in uid_list:
                        uid_list.append(uid)
                    else:
                        suff = 0
                        while uid in uid_list:
                            uid = '%s-%d-%02d-%02d-%d' % (page_id, y, m, dt,
                                                          suff)
                            suff += 1
                        uid_list.append(uid)
                    event.add('uid', uid)
                    event['X-MICROSOFT-CDO-ALLDAYEVENT'] = 'TRUE'
                    event['TRANSP'] = 'TRANSPARENT'
                    event['X-MICROSOFT-CDO-BUSYSTATUS'] = 'FREE'
                    ics_calendar.add_component(event)

        if m == 12 and dt == 31:
            break

    return ics_calendar
示例#19
0
  "aashvina" : "आश्विनः",
  "yaamyava" : "याम्यः",
  "aahneya" : "आह्नेयः",
  "vaidhaatra" : "वैधात्रः",
  "chaandra" : "चान्द्रः",
  "aaditeya" : "आदितेयः",
  "jaiva" : "जैवः",
  "vaishnava" : "वैष्णवः",
  "saura" : "सौरः",
  "succeeding_braahma" : "ब्राह्मः",
  "naabhasvata" : "नाभस्वतः",  
} 

devanaagarii_to_python = {python_to_devanaagarii[x]: x for x in python_to_devanaagarii }

sa_to_tamil = dict(**NAMES["SA_TO_TAMIL"], **{xsanscript.transliterate(x, xsanscript.DEVANAGARI, xsanscript.HK):NAMES["SA_TO_TAMIL"][x] for x  in NAMES["SA_TO_TAMIL"]})


def translate_or_transliterate(text, script, source_script=xsanscript.HK):
  if script == "tamil":
    if text in sa_to_tamil:
      return sa_to_tamil[text]
    else:
      return jyotisha.custom_transliteration.tr(text, script, source_script=source_script)
  else:
    return jyotisha.custom_transliteration.tr(text, script, source_script=source_script)

def get_tipu_month_str(month):
  """
  
  Reference: https://toshkhana.wordpress.com/2014/09/19/dawn-of-a-new-era-tipu-sultan-and-his-mauludi-calendar/