From 2614d278ed5350ac422ed5a6a5daa12f0769673b Mon Sep 17 00:00:00 2001 From: Edgar Date: Thu, 16 Apr 2026 13:52:30 -0600 Subject: [PATCH 1/8] =?UTF-8?q?Agregar=20la=20app=20markup=5Fdoc=20para=20?= =?UTF-8?q?gesti=C3=B3n=20y=20marcaci=C3=B3n=20de=20documentos=20DOCX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markup_doc/__init__.py | 0 markup_doc/admin.py | 3 + markup_doc/apps.py | 6 + markup_doc/choices.py | 121 + markup_doc/forms.py | 1 + markup_doc/migrations/0001_initial.py | 2291 +++++++++++++++++ ...0002_alter_articledocx_estatus_and_more.py | 23 + markup_doc/migrations/__init__.py | 0 markup_doc/models.py | 521 ++++ markup_doc/sync_api.py | 128 + markup_doc/tasks.py | 9 + markup_doc/tests.py | 3 + markup_doc/wagtail_hooks.py | 229 ++ 13 files changed, 3335 insertions(+) create mode 100644 markup_doc/__init__.py create mode 100644 markup_doc/admin.py create mode 100644 markup_doc/apps.py create mode 100644 markup_doc/choices.py create mode 100644 markup_doc/forms.py create mode 100644 markup_doc/migrations/0001_initial.py create mode 100644 markup_doc/migrations/0002_alter_articledocx_estatus_and_more.py create mode 100644 markup_doc/migrations/__init__.py create mode 100644 markup_doc/models.py create mode 100644 markup_doc/sync_api.py create mode 100644 markup_doc/tasks.py create mode 100644 markup_doc/tests.py create mode 100644 markup_doc/wagtail_hooks.py diff --git a/markup_doc/__init__.py b/markup_doc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/markup_doc/admin.py b/markup_doc/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/markup_doc/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/markup_doc/apps.py b/markup_doc/apps.py new file mode 100644 index 0000000..87efcb1 --- /dev/null +++ b/markup_doc/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MarkupDocConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "markup_doc" diff --git a/markup_doc/choices.py b/markup_doc/choices.py new file mode 100644 index 0000000..d113911 --- /dev/null +++ b/markup_doc/choices.py @@ -0,0 +1,121 @@ +front_labels = [ + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('

', '

'), + ('', ''), + ('', ''), + ('', ''), + ('', '
'), + ('', ''), + ('', '<title>'), + ('<trans-abstract>', '<trans-abstract>'), + ('<trans-title>', '<trans-title>'), + ('<translate-front>', '<translate-front>'), + ('<translate-body>', '<translate-body>'), + ('<disp-formula>', '<disp-formula>'), + ('<inline-formula>', '<inline-formula>'), + ('<formula>', '<formula>'), + +] + +order_labels = { + '<article-id>':{ + 'pos' : 1, + 'next' : '<subject>' + }, + '<subject>':{ + 'pos' : 2, + 'next' : '<article-title>' + }, + '<article-title>':{ + 'pos' : 3, + 'next' : '<trans-title>', + 'lan' : True + }, + '<trans-title>':{ + 'size' : 14, + 'bold' : True, + 'lan' : True, + 'next' : '<contrib>' + }, + '<contrib>':{ + 'reset' : True, + 'size' : 12, + 'next' : '<aff>' + }, + '<aff>':{ + 'reset' : True, + 'size' : 12, + }, + '<abstract>':{ + 'size' : 12, + 'bold' : True, + 'lan' : True, + 'next' : '<p>' + }, + '<p>':{ + 'size' : 12, + 'next' : '<p>', + 'repeat' : True + }, + '<trans-abstract>':{ + 'size' : 12, + 'bold' : True, + 'lan' : True, + 'next' : '<p>' + }, + '<kwd-group>':{ + 'size' : 12, + 'regex' : r'(?i)(palabra.*clave.*:|keyword.*:)', + }, + '<history>':{ + 'size' : 12, + 'regex' : r'\d{2}/\d{2}/\d{4}', + }, + '<corresp>':{ + 'size' : 12, + 'regex' : r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' + }, + '<sec>':{ + 'size' : 16, + 'bold' : True, + 'next' : None + }, + '<sub-sec>':{ + 'size' : 12, + 'italic' : True, + 'next' : None + }, + '<sub-sec-2>':{ + 'size' : 14, + 'bold' : True, + 'next' : None + }, +} + +order_labels_body = { + '<sec>':{ + 'size' : 16, + 'bold' : True, + }, + '<sub-sec>':{ + 'size' : 12, + 'italic' : True, + }, + '<p>':{ + 'size' : 12, + }, +} \ No newline at end of file diff --git a/markup_doc/forms.py b/markup_doc/forms.py new file mode 100644 index 0000000..e8abe2e --- /dev/null +++ b/markup_doc/forms.py @@ -0,0 +1 @@ +from wagtail.admin.forms.models import WagtailAdminModelForm diff --git a/markup_doc/migrations/0001_initial.py b/markup_doc/migrations/0001_initial.py new file mode 100644 index 0000000..74340ef --- /dev/null +++ b/markup_doc/migrations/0001_initial.py @@ -0,0 +1,2291 @@ +# Generated by Django 5.0.3 on 2025-09-07 17:04 + +import django.db.models.deletion +import markup_doc.models +import wagtail.blocks +import wagtail.fields +import wagtail.images.blocks +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="CollectionValuesModel", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("acron", models.CharField(max_length=10, unique=True)), + ("name", models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name="ArticleDocx", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created", + models.DateTimeField( + auto_now_add=True, verbose_name="Creation date" + ), + ), + ( + "updated", + models.DateTimeField( + auto_now=True, verbose_name="Last update date" + ), + ), + ( + "title", + models.TextField( + blank=True, null=True, verbose_name="Document Title" + ), + ), + ( + "file", + models.FileField( + blank=True, + null=True, + upload_to="uploads_docx/", + verbose_name="Document", + ), + ), + ("estatus", models.IntegerField(default=0)), + ( + "creator", + models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_creator", + to=settings.AUTH_USER_MODEL, + verbose_name="Creator", + ), + ), + ( + "updated_by", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_last_mod_user", + to=settings.AUTH_USER_MODEL, + verbose_name="Updater", + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.CreateModel( + name="ArticleDocxMarkup", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created", + models.DateTimeField( + auto_now_add=True, verbose_name="Creation date" + ), + ), + ( + "updated", + models.DateTimeField( + auto_now=True, verbose_name="Last update date" + ), + ), + ( + "title", + models.TextField( + blank=True, null=True, verbose_name="Document Title" + ), + ), + ( + "file", + models.FileField( + blank=True, + null=True, + upload_to="uploads_docx/", + verbose_name="Document", + ), + ), + ("estatus", models.IntegerField(default=0)), + ( + "collection", + models.CharField( + default=markup_doc.models.get_default_collection_acron, + max_length=10, + ), + ), + ( + "journal_title", + models.TextField( + blank=True, null=True, verbose_name="Journal Title" + ), + ), + ( + "acronym", + models.TextField(blank=True, null=True, verbose_name="Acronym"), + ), + ( + "short_title", + models.TextField(blank=True, null=True, verbose_name="Short Title"), + ), + ( + "title_nlm", + models.TextField(blank=True, null=True, verbose_name="NLM Title"), + ), + ( + "issn", + models.TextField( + blank=True, null=True, verbose_name="ISSN (id SciELO)" + ), + ), + ( + "pissn", + models.TextField(blank=True, null=True, verbose_name="Print ISSN"), + ), + ( + "eissn", + models.TextField( + blank=True, null=True, verbose_name="Electronic ISSN" + ), + ), + ( + "nimtitle", + models.TextField(blank=True, null=True, verbose_name="Nimtitle"), + ), + ( + "pubname", + models.TextField( + blank=True, null=True, verbose_name="Publisher Name" + ), + ), + ( + "license", + models.URLField( + blank=True, + max_length=500, + null=True, + verbose_name="License (URL)", + ), + ), + ( + "vol", + models.IntegerField(blank=True, null=True, verbose_name="Volume"), + ), + ( + "supplvol", + models.IntegerField( + blank=True, null=True, verbose_name="Suppl Volume" + ), + ), + ( + "issue", + models.IntegerField(blank=True, null=True, verbose_name="Issue"), + ), + ( + "supplno", + models.IntegerField( + blank=True, null=True, verbose_name="Suppl Num" + ), + ), + ( + "issid_part", + models.TextField(blank=True, null=True, verbose_name="Isid Part"), + ), + ( + "dateiso", + models.TextField(blank=True, null=True, verbose_name="Dateiso"), + ), + ( + "month", + models.TextField( + blank=True, null=True, verbose_name="Month/Season" + ), + ), + ( + "fpage", + models.TextField(blank=True, null=True, verbose_name="First Page"), + ), + ("seq", models.TextField(blank=True, null=True, verbose_name="@Seq")), + ( + "lpage", + models.TextField(blank=True, null=True, verbose_name="Last Page"), + ), + ( + "elocatid", + models.TextField( + blank=True, null=True, verbose_name="Elocation ID" + ), + ), + ( + "order", + models.TextField( + blank=True, null=True, verbose_name="Order (In TOC)" + ), + ), + ( + "pagcount", + models.TextField(blank=True, null=True, verbose_name="Pag count"), + ), + ( + "doctopic", + models.TextField(blank=True, null=True, verbose_name="Doc Topic"), + ), + ( + "language", + models.CharField( + blank=True, + choices=[ + ("aa", "Afar"), + ("af", "Afrikaans"), + ("ak", "Akan"), + ("sq", "Albanian"), + ("am", "Amharic"), + ("ar", "Arabic"), + ("an", "Aragonese"), + ("hy", "Armenian"), + ("as", "Assamese"), + ("av", "Avaric"), + ("ae", "Avestan"), + ("ay", "Aymara"), + ("az", "Azerbaijani"), + ("bm", "Bambara"), + ("ba", "Bashkir"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bi", "Bislama"), + ("bs", "Bosnian"), + ("br", "Breton"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan, Valencian"), + ("ch", "Chamorro"), + ("ce", "Chechen"), + ("ny", "Chichewa, Chewa, Nyanja"), + ("zh", "Chinese"), + ( + "cu", + "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic", + ), + ("cv", "Chuvash"), + ("kw", "Cornish"), + ("co", "Corsican"), + ("cr", "Cree"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ("dv", "Divehi, Dhivehi, Maldivian"), + ("nl", "Dutch, Flemish"), + ("dz", "Dzongkha"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("ee", "Ewe"), + ("fo", "Faroese"), + ("fj", "Fijian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Western Frisian"), + ("ff", "Fulah"), + ("gd", "Gaelic, Scottish Gaelic"), + ("gl", "Galician"), + ("lg", "Ganda"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek, Modern (1453–)"), + ("kl", "Kalaallisut, Greenlandic"), + ("gn", "Guarani"), + ("gu", "Gujarati"), + ("ht", "Haitian, Haitian Creole"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hz", "Herero"), + ("hi", "Hindi"), + ("ho", "Hiri Motu"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ( + "ia", + "Interlingua (International Auxiliary Language Association)", + ), + ("ie", "Interlingue, Occidental"), + ("iu", "Inuktitut"), + ("ik", "Inupiaq"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("jv", "Javanese"), + ("kn", "Kannada"), + ("kr", "Kanuri"), + ("ks", "Kashmiri"), + ("kk", "Kazakh"), + ("km", "Central Khmer"), + ("ki", "Kikuyu, Gikuyu"), + ("rw", "Kinyarwanda"), + ("ky", "Kirghiz, Kyrgyz"), + ("kv", "Komi"), + ("kg", "Kongo"), + ("ko", "Korean"), + ("kj", "Kuanyama, Kwanyama"), + ("ku", "Kurdish"), + ("lo", "Lao"), + ("la", "Latin"), + ("lv", "Latvian"), + ("li", "Limburgan, Limburger, Limburgish"), + ("ln", "Lingala"), + ("lt", "Lithuanian"), + ("lu", "Luba-Katanga"), + ("lb", "Luxembourgish, Letzeburgesch"), + ("mk", "Macedonian"), + ("mg", "Malagasy"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mt", "Maltese"), + ("gv", "Manx"), + ("mi", "Maori"), + ("mr", "Marathi"), + ("mh", "Marshallese"), + ("mn", "Mongolian"), + ("na", "Nauru"), + ("nv", "Navajo, Navaho"), + ("nd", "North Ndebele"), + ("nr", "South Ndebele"), + ("ng", "Ndonga"), + ("ne", "Nepali"), + ("no", "Norwegian"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("ii", "Sichuan Yi, Nuosu"), + ("oc", "Occitan"), + ("oj", "Ojibwa"), + ("or", "Oriya"), + ("om", "Oromo"), + ("os", "Ossetian, Ossetic"), + ("pi", "Pali"), + ("ps", "Pashto, Pushto"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Português"), + ("pa", "Punjabi, Panjabi"), + ("qu", "Quechua"), + ("ro", "Romanian, Moldavian, Moldovan"), + ("rm", "Romansh"), + ("rn", "Rundi"), + ("ru", "Russian"), + ("se", "Northern Sami"), + ("sm", "Samoan"), + ("sg", "Sango"), + ("sa", "Sanskrit"), + ("sc", "Sardinian"), + ("sr", "Serbian"), + ("sn", "Shona"), + ("sd", "Sindhi"), + ("si", "Sinhala, Sinhalese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("so", "Somali"), + ("st", "Southern Sotho"), + ("es", "Español"), + ("su", "Sundanese"), + ("sw", "Swahili"), + ("ss", "Swati"), + ("sv", "Swedish"), + ("tl", "Tagalog"), + ("ty", "Tahitian"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("bo", "Tibetan"), + ("ti", "Tigrinya"), + ("to", "Tonga (Tonga Islands)"), + ("ts", "Tsonga"), + ("tn", "Tswana"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("tw", "Twi"), + ("ug", "Uighur, Uyghur"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("ve", "Venda"), + ("vi", "Vietnamese"), + ("vo", "Volapük"), + ("wa", "Walloon"), + ("cy", "Welsh"), + ("wo", "Wolof"), + ("xh", "Xhosa"), + ("yi", "Yiddish"), + ("yo", "Yoruba"), + ("za", "Zhuang, Chuang"), + ("zu", "Zulu"), + ], + max_length=10, + null=True, + verbose_name="Language", + ), + ), + ( + "spsversion", + models.TextField(blank=True, null=True, verbose_name="Sps version"), + ), + ( + "artdate", + models.DateField(blank=True, null=True, verbose_name="Artdate"), + ), + ( + "ahpdate", + models.DateField(blank=True, null=True, verbose_name="Ahpdate"), + ), + ( + "file_xml", + models.FileField( + blank=True, + null=True, + upload_to="generate_xml/", + verbose_name="Document xml", + ), + ), + ( + "text_xml", + models.TextField(blank=True, null=True, verbose_name="Text XML"), + ), + ( + "content", + wagtail.fields.StreamField( + [ + ( + "paragraph_with_language", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "language", + wagtail.blocks.ChoiceBlock( + choices=[ + ("aa", "Afar"), + ("af", "Afrikaans"), + ("ak", "Akan"), + ("sq", "Albanian"), + ("am", "Amharic"), + ("ar", "Arabic"), + ("an", "Aragonese"), + ("hy", "Armenian"), + ("as", "Assamese"), + ("av", "Avaric"), + ("ae", "Avestan"), + ("ay", "Aymara"), + ("az", "Azerbaijani"), + ("bm", "Bambara"), + ("ba", "Bashkir"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bi", "Bislama"), + ("bs", "Bosnian"), + ("br", "Breton"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan, Valencian"), + ("ch", "Chamorro"), + ("ce", "Chechen"), + ("ny", "Chichewa, Chewa, Nyanja"), + ("zh", "Chinese"), + ( + "cu", + "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic", + ), + ("cv", "Chuvash"), + ("kw", "Cornish"), + ("co", "Corsican"), + ("cr", "Cree"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ( + "dv", + "Divehi, Dhivehi, Maldivian", + ), + ("nl", "Dutch, Flemish"), + ("dz", "Dzongkha"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("ee", "Ewe"), + ("fo", "Faroese"), + ("fj", "Fijian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Western Frisian"), + ("ff", "Fulah"), + ("gd", "Gaelic, Scottish Gaelic"), + ("gl", "Galician"), + ("lg", "Ganda"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek, Modern (1453–)"), + ("kl", "Kalaallisut, Greenlandic"), + ("gn", "Guarani"), + ("gu", "Gujarati"), + ("ht", "Haitian, Haitian Creole"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hz", "Herero"), + ("hi", "Hindi"), + ("ho", "Hiri Motu"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ( + "ia", + "Interlingua (International Auxiliary Language Association)", + ), + ("ie", "Interlingue, Occidental"), + ("iu", "Inuktitut"), + ("ik", "Inupiaq"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("jv", "Javanese"), + ("kn", "Kannada"), + ("kr", "Kanuri"), + ("ks", "Kashmiri"), + ("kk", "Kazakh"), + ("km", "Central Khmer"), + ("ki", "Kikuyu, Gikuyu"), + ("rw", "Kinyarwanda"), + ("ky", "Kirghiz, Kyrgyz"), + ("kv", "Komi"), + ("kg", "Kongo"), + ("ko", "Korean"), + ("kj", "Kuanyama, Kwanyama"), + ("ku", "Kurdish"), + ("lo", "Lao"), + ("la", "Latin"), + ("lv", "Latvian"), + ( + "li", + "Limburgan, Limburger, Limburgish", + ), + ("ln", "Lingala"), + ("lt", "Lithuanian"), + ("lu", "Luba-Katanga"), + ( + "lb", + "Luxembourgish, Letzeburgesch", + ), + ("mk", "Macedonian"), + ("mg", "Malagasy"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mt", "Maltese"), + ("gv", "Manx"), + ("mi", "Maori"), + ("mr", "Marathi"), + ("mh", "Marshallese"), + ("mn", "Mongolian"), + ("na", "Nauru"), + ("nv", "Navajo, Navaho"), + ("nd", "North Ndebele"), + ("nr", "South Ndebele"), + ("ng", "Ndonga"), + ("ne", "Nepali"), + ("no", "Norwegian"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("ii", "Sichuan Yi, Nuosu"), + ("oc", "Occitan"), + ("oj", "Ojibwa"), + ("or", "Oriya"), + ("om", "Oromo"), + ("os", "Ossetian, Ossetic"), + ("pi", "Pali"), + ("ps", "Pashto, Pushto"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Português"), + ("pa", "Punjabi, Panjabi"), + ("qu", "Quechua"), + ( + "ro", + "Romanian, Moldavian, Moldovan", + ), + ("rm", "Romansh"), + ("rn", "Rundi"), + ("ru", "Russian"), + ("se", "Northern Sami"), + ("sm", "Samoan"), + ("sg", "Sango"), + ("sa", "Sanskrit"), + ("sc", "Sardinian"), + ("sr", "Serbian"), + ("sn", "Shona"), + ("sd", "Sindhi"), + ("si", "Sinhala, Sinhalese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("so", "Somali"), + ("st", "Southern Sotho"), + ("es", "Español"), + ("su", "Sundanese"), + ("sw", "Swahili"), + ("ss", "Swati"), + ("sv", "Swedish"), + ("tl", "Tagalog"), + ("ty", "Tahitian"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("bo", "Tibetan"), + ("ti", "Tigrinya"), + ("to", "Tonga (Tonga Islands)"), + ("ts", "Tsonga"), + ("tn", "Tswana"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("tw", "Twi"), + ("ug", "Uighur, Uyghur"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("ve", "Venda"), + ("vi", "Vietnamese"), + ("vo", "Volapük"), + ("wa", "Walloon"), + ("cy", "Welsh"), + ("wo", "Wolof"), + ("xh", "Xhosa"), + ("yi", "Yiddish"), + ("yo", "Yoruba"), + ("za", "Zhuang, Chuang"), + ("zu", "Zulu"), + ], + label="Language", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ] + ), + ), + ( + "paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ] + ), + ), + ( + "author_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ( + "surname", + wagtail.blocks.TextBlock( + label="Surname", required=False + ), + ), + ( + "given_names", + wagtail.blocks.TextBlock( + label="Given names", required=False + ), + ), + ( + "orcid", + wagtail.blocks.TextBlock( + label="Orcid", required=False + ), + ), + ( + "affid", + wagtail.blocks.TextBlock( + label="Aff id", required=False + ), + ), + ( + "char", + wagtail.blocks.TextBlock( + label="Char link", required=False + ), + ), + ] + ), + ), + ( + "aff_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ( + "affid", + wagtail.blocks.TextBlock( + label="Aff id", required=False + ), + ), + ( + "text_aff", + wagtail.blocks.TextBlock( + label="Full text Aff", required=False + ), + ), + ( + "char", + wagtail.blocks.TextBlock( + label="Char link", required=False + ), + ), + ( + "orgname", + wagtail.blocks.TextBlock( + label="Orgname", required=False + ), + ), + ( + "orgdiv2", + wagtail.blocks.TextBlock( + label="Orgdiv2", required=False + ), + ), + ( + "orgdiv1", + wagtail.blocks.TextBlock( + label="Orgdiv1", required=False + ), + ), + ( + "zipcode", + wagtail.blocks.TextBlock( + label="Zipcode", required=False + ), + ), + ( + "city", + wagtail.blocks.TextBlock( + label="City", required=False + ), + ), + ( + "state", + wagtail.blocks.TextBlock( + label="State", required=False + ), + ), + ( + "country", + wagtail.blocks.TextBlock( + label="Country", required=False + ), + ), + ( + "code_country", + wagtail.blocks.TextBlock( + label="Code country", required=False + ), + ), + ( + "original", + wagtail.blocks.TextBlock( + label="Original", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + ), + ), + ( + "content_body", + wagtail.fields.StreamField( + [ + ( + "paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ] + ), + ), + ( + "paragraph_with_language", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "language", + wagtail.blocks.ChoiceBlock( + choices=[ + ("aa", "Afar"), + ("af", "Afrikaans"), + ("ak", "Akan"), + ("sq", "Albanian"), + ("am", "Amharic"), + ("ar", "Arabic"), + ("an", "Aragonese"), + ("hy", "Armenian"), + ("as", "Assamese"), + ("av", "Avaric"), + ("ae", "Avestan"), + ("ay", "Aymara"), + ("az", "Azerbaijani"), + ("bm", "Bambara"), + ("ba", "Bashkir"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bi", "Bislama"), + ("bs", "Bosnian"), + ("br", "Breton"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan, Valencian"), + ("ch", "Chamorro"), + ("ce", "Chechen"), + ("ny", "Chichewa, Chewa, Nyanja"), + ("zh", "Chinese"), + ( + "cu", + "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic", + ), + ("cv", "Chuvash"), + ("kw", "Cornish"), + ("co", "Corsican"), + ("cr", "Cree"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ( + "dv", + "Divehi, Dhivehi, Maldivian", + ), + ("nl", "Dutch, Flemish"), + ("dz", "Dzongkha"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("ee", "Ewe"), + ("fo", "Faroese"), + ("fj", "Fijian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Western Frisian"), + ("ff", "Fulah"), + ("gd", "Gaelic, Scottish Gaelic"), + ("gl", "Galician"), + ("lg", "Ganda"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek, Modern (1453–)"), + ("kl", "Kalaallisut, Greenlandic"), + ("gn", "Guarani"), + ("gu", "Gujarati"), + ("ht", "Haitian, Haitian Creole"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hz", "Herero"), + ("hi", "Hindi"), + ("ho", "Hiri Motu"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ( + "ia", + "Interlingua (International Auxiliary Language Association)", + ), + ("ie", "Interlingue, Occidental"), + ("iu", "Inuktitut"), + ("ik", "Inupiaq"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("jv", "Javanese"), + ("kn", "Kannada"), + ("kr", "Kanuri"), + ("ks", "Kashmiri"), + ("kk", "Kazakh"), + ("km", "Central Khmer"), + ("ki", "Kikuyu, Gikuyu"), + ("rw", "Kinyarwanda"), + ("ky", "Kirghiz, Kyrgyz"), + ("kv", "Komi"), + ("kg", "Kongo"), + ("ko", "Korean"), + ("kj", "Kuanyama, Kwanyama"), + ("ku", "Kurdish"), + ("lo", "Lao"), + ("la", "Latin"), + ("lv", "Latvian"), + ( + "li", + "Limburgan, Limburger, Limburgish", + ), + ("ln", "Lingala"), + ("lt", "Lithuanian"), + ("lu", "Luba-Katanga"), + ( + "lb", + "Luxembourgish, Letzeburgesch", + ), + ("mk", "Macedonian"), + ("mg", "Malagasy"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mt", "Maltese"), + ("gv", "Manx"), + ("mi", "Maori"), + ("mr", "Marathi"), + ("mh", "Marshallese"), + ("mn", "Mongolian"), + ("na", "Nauru"), + ("nv", "Navajo, Navaho"), + ("nd", "North Ndebele"), + ("nr", "South Ndebele"), + ("ng", "Ndonga"), + ("ne", "Nepali"), + ("no", "Norwegian"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("ii", "Sichuan Yi, Nuosu"), + ("oc", "Occitan"), + ("oj", "Ojibwa"), + ("or", "Oriya"), + ("om", "Oromo"), + ("os", "Ossetian, Ossetic"), + ("pi", "Pali"), + ("ps", "Pashto, Pushto"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Português"), + ("pa", "Punjabi, Panjabi"), + ("qu", "Quechua"), + ( + "ro", + "Romanian, Moldavian, Moldovan", + ), + ("rm", "Romansh"), + ("rn", "Rundi"), + ("ru", "Russian"), + ("se", "Northern Sami"), + ("sm", "Samoan"), + ("sg", "Sango"), + ("sa", "Sanskrit"), + ("sc", "Sardinian"), + ("sr", "Serbian"), + ("sn", "Shona"), + ("sd", "Sindhi"), + ("si", "Sinhala, Sinhalese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("so", "Somali"), + ("st", "Southern Sotho"), + ("es", "Español"), + ("su", "Sundanese"), + ("sw", "Swahili"), + ("ss", "Swati"), + ("sv", "Swedish"), + ("tl", "Tagalog"), + ("ty", "Tahitian"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("bo", "Tibetan"), + ("ti", "Tigrinya"), + ("to", "Tonga (Tonga Islands)"), + ("ts", "Tsonga"), + ("tn", "Tswana"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("tw", "Twi"), + ("ug", "Uighur, Uyghur"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("ve", "Venda"), + ("vi", "Vietnamese"), + ("vo", "Volapük"), + ("wa", "Walloon"), + ("cy", "Welsh"), + ("wo", "Wolof"), + ("xh", "Xhosa"), + ("yi", "Yiddish"), + ("yo", "Yoruba"), + ("za", "Zhuang, Chuang"), + ("zu", "Zulu"), + ], + label="Language", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ] + ), + ), + ( + "compound_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "eid", + wagtail.blocks.TextBlock( + label="Equation id", required=False + ), + ), + ( + "content", + wagtail.blocks.StreamBlock( + [ + ( + "text", + wagtail.blocks.TextBlock( + label="Text" + ), + ), + ( + "formula", + wagtail.blocks.TextBlock( + label="Formula" + ), + ), + ], + label="Content", + required=True, + ), + ), + ] + ), + ), + ( + "image", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "figid", + wagtail.blocks.TextBlock( + label="Fig id", required=False + ), + ), + ( + "figlabel", + wagtail.blocks.TextBlock( + label="Fig label", required=False + ), + ), + ( + "title", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ( + "alttext", + wagtail.blocks.TextBlock( + label="Alt text", required=False + ), + ), + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + required=True + ), + ), + ] + ), + ), + ( + "table", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "tabid", + wagtail.blocks.TextBlock( + label="Table id", required=False + ), + ), + ( + "tablabel", + wagtail.blocks.TextBlock( + label="Table label", required=False + ), + ), + ( + "title", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ( + "content", + wagtail.blocks.TextBlock( + label="Content", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + ), + ), + ( + "content_back", + wagtail.fields.StreamField( + [ + ( + "paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ] + ), + ), + ( + "ref_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ( + "reftype", + wagtail.blocks.TextBlock( + label="Ref type", required=False + ), + ), + ( + "refid", + wagtail.blocks.TextBlock( + label="Ref id", required=False + ), + ), + ( + "authors", + wagtail.blocks.StreamBlock( + [ + ( + "Author", + wagtail.blocks.StructBlock( + [ + ( + "surname", + wagtail.blocks.TextBlock( + label="Surname", + required=False, + ), + ), + ( + "given_names", + wagtail.blocks.TextBlock( + label="Given names", + required=False, + ), + ), + ] + ), + ) + ], + label="Authors", + required=False, + ), + ), + ( + "date", + wagtail.blocks.TextBlock( + label="Date", required=False + ), + ), + ( + "title", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ( + "chapter", + wagtail.blocks.TextBlock( + label="Chapter", required=False + ), + ), + ( + "edition", + wagtail.blocks.TextBlock( + label="Edition", required=False + ), + ), + ( + "source", + wagtail.blocks.TextBlock( + label="Source", required=False + ), + ), + ( + "vol", + wagtail.blocks.TextBlock( + label="Vol", required=False + ), + ), + ( + "issue", + wagtail.blocks.TextBlock( + label="Issue", required=False + ), + ), + ( + "pages", + wagtail.blocks.TextBlock( + label="Pages", required=False + ), + ), + ( + "fpage", + wagtail.blocks.TextBlock( + label="First page", required=False + ), + ), + ( + "lpage", + wagtail.blocks.TextBlock( + label="Last page", required=False + ), + ), + ( + "doi", + wagtail.blocks.TextBlock( + label="DOI", required=False + ), + ), + ( + "access_id", + wagtail.blocks.TextBlock( + label="Access id", required=False + ), + ), + ( + "degree", + wagtail.blocks.TextBlock( + label="Degree", required=False + ), + ), + ( + "organization", + wagtail.blocks.TextBlock( + label="Organization", required=False + ), + ), + ( + "location", + wagtail.blocks.TextBlock( + label="Location", required=False + ), + ), + ( + "org_location", + wagtail.blocks.TextBlock( + label="Org location", required=False + ), + ), + ( + "num_pages", + wagtail.blocks.TextBlock( + label="Num pages", required=False + ), + ), + ( + "uri", + wagtail.blocks.TextBlock( + label="Uri", required=False + ), + ), + ( + "version", + wagtail.blocks.TextBlock( + label="Version", required=False + ), + ), + ( + "access_date", + wagtail.blocks.TextBlock( + label="Access date", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + ), + ), + ( + "creator", + models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_creator", + to=settings.AUTH_USER_MODEL, + verbose_name="Creator", + ), + ), + ( + "updated_by", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_last_mod_user", + to=settings.AUTH_USER_MODEL, + verbose_name="Updater", + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.CreateModel( + name="MarkupXML", + fields=[], + options={ + "proxy": True, + "indexes": [], + "constraints": [], + }, + bases=("markup_doc.articledocxmarkup",), + ), + migrations.CreateModel( + name="UploadDocx", + fields=[], + options={ + "proxy": True, + "indexes": [], + "constraints": [], + }, + bases=("markup_doc.articledocxmarkup",), + ), + migrations.CreateModel( + name="CollectionModel", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "collection", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="markup_doc.collectionvaluesmodel", + ), + ), + ], + ), + migrations.CreateModel( + name="JournalModel", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "title", + models.TextField(blank=True, null=True, verbose_name="Title"), + ), + ( + "short_title", + models.TextField(blank=True, null=True, verbose_name="Short Title"), + ), + ( + "title_nlm", + models.TextField(blank=True, null=True, verbose_name="NLM Title"), + ), + ( + "acronym", + models.TextField(blank=True, null=True, verbose_name="Acronym"), + ), + ( + "issn", + models.TextField( + blank=True, null=True, verbose_name="ISSN (id SciELO)" + ), + ), + ( + "pissn", + models.TextField(blank=True, null=True, verbose_name="Print ISSN"), + ), + ( + "eissn", + models.TextField( + blank=True, null=True, verbose_name="Electronic ISSN" + ), + ), + ( + "pubname", + models.TextField( + blank=True, null=True, verbose_name="Publisher Name" + ), + ), + ], + options={ + "unique_together": {("title",)}, + }, + ), + migrations.AddField( + model_name="articledocxmarkup", + name="journal", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="markup_doc.journalmodel", + ), + ), + ] diff --git a/markup_doc/migrations/0002_alter_articledocx_estatus_and_more.py b/markup_doc/migrations/0002_alter_articledocx_estatus_and_more.py new file mode 100644 index 0000000..600fba0 --- /dev/null +++ b/markup_doc/migrations/0002_alter_articledocx_estatus_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.8 on 2025-09-21 23:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('markup_doc', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='articledocx', + name='estatus', + field=models.IntegerField(blank=True, choices=[(1, 'Processing'), (2, 'Processed')], default=1, verbose_name='Process estatus'), + ), + migrations.AlterField( + model_name='articledocxmarkup', + name='estatus', + field=models.IntegerField(blank=True, choices=[(1, 'Processing'), (2, 'Processed')], default=1, verbose_name='Process estatus'), + ), + ] diff --git a/markup_doc/migrations/__init__.py b/markup_doc/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/markup_doc/models.py b/markup_doc/models.py new file mode 100644 index 0000000..bfd4722 --- /dev/null +++ b/markup_doc/models.py @@ -0,0 +1,521 @@ +import os +import sys +import requests + +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django import forms +from django.utils.html import format_html +from django.urls import reverse + +from modelcluster.fields import ParentalKey +from modelcluster.models import ClusterableModel +from wagtail.admin.panels import FieldPanel, InlinePanel, ObjectList, TabbedInterface +from wagtailautocomplete.edit_handlers import AutocompletePanel +from wagtail.documents.models import Document + +from core.forms import CoreAdminModelForm +from core.choices import LANGUAGE +from core.models import ( + CommonControlField, + Language, + TextWithLang +) +from wagtail.fields import StreamField +from wagtail.blocks import StructBlock, TextBlock, CharBlock, ChoiceBlock, ListBlock, StreamBlock +from wagtail.images.blocks import ImageChooserBlock +from .choices import front_labels + + +class ProcessStatus(models.IntegerChoices): + PROCESSING = 1, _("Processing") + PROCESSED = 2, _("Processed") + + +class ReadOnlyFileWidget(forms.Widget): + def render(self, name, value, attrs=None, renderer=None): + if value: + # Muestra el archivo como un enlace de descarga + #return format_html('<a href="{}" target="_blank" download>{}</a>', value.url, value.name.split('/')[-1]) + instance = value.instance + url = reverse('generate_xml', args=[instance.pk]) + return format_html('<a href="{}" target="_blank" download>Download XML</a>', url) + return "" + +# Create your models here. +class ArticleDocx(CommonControlField): + title = models.TextField(_("Document Title"), null=True, blank=True) + file = models.FileField( + null=True, + blank=True, + verbose_name=_("Document"), + upload_to='uploads_docx/', + ) + estatus = models.IntegerField( + _("Process estatus"), + choices=ProcessStatus.choices, + blank=True, + default=ProcessStatus.PROCESSING + ) + + panels = [ + FieldPanel("title"), + FieldPanel("file"), + ] + + base_form_class = CoreAdminModelForm + + def __unicode__(self): + return f"{self.title} | {self.estatus}" + + def __str__(self): + return f"{self.title} | {self.estatus}" + + @classmethod + def get( + cls, + title): + return cls.objects.get(title=title) + + @classmethod + def update(cls, title, estatus): + try: + obj = cls.get(title=title) + except (cls.DoesNotExist, ValueError): + pass + + obj.estatus = estatus + obj.save() + return obj + + +class ParagraphWithLanguageBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + language = ChoiceBlock( + choices=LANGUAGE, + required=False, + label="Language" + ) + paragraph = TextBlock(required=False, label=_("Title")) + + class Meta: + label = _("Paragraph with Language") + + +class ParagraphBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + paragraph = TextBlock(required=False, label=_("Paragraph")) + + class Meta: + label = _("Paragraph") + + +class CompoundParagraphBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + eid = TextBlock(required=False, label=_("Equation id")) + content = StreamBlock([ + ('text', TextBlock(label=_("Text"))), + ('formula', TextBlock(label=_("Formula"))), + ], label=_("Content"), required=True) + + class Meta: + label = _("Compound paragraph") + + +class ImageBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + figid = TextBlock(required=False, label=_("Fig id")) + figlabel = TextBlock(required=False, label=_("Fig label")) + title = TextBlock(required=False, label=_("Title")) + alttext = TextBlock(required=False, label=_("Alt text")) + image = ImageChooserBlock(required=True) + + class Meta: + label = _("Image") + + +class TableBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + tabid = TextBlock(required=False, label=_("Table id")) + tablabel = TextBlock(required=False, label=_("Table label")) + title = TextBlock(required=False, label=_("Title")) + content = TextBlock(required=False, label=_("Content")) + + class Meta: + label = _("Table") + + +class AuthorParagraphBlock(ParagraphBlock): + surname = TextBlock(required=False, label=_("Surname")) + given_names = TextBlock(required=False, label=_("Given names")) + orcid = TextBlock(required=False, label=_("Orcid")) + affid = TextBlock(required=False, label=_("Aff id")) + char = TextBlock(required=False, label=_("Char link")) + + class Meta: + label = _("Author Paragraph") + + +class AffParagraphBlock(ParagraphBlock): + affid = TextBlock(required=False, label=_("Aff id")) + text_aff = TextBlock(required=False, label=_("Full text Aff")) + char = TextBlock(required=False, label=_("Char link")) + orgname = TextBlock(required=False, label=_("Orgname")) + orgdiv2 = TextBlock(required=False, label=_("Orgdiv2")) + orgdiv1 = TextBlock(required=False, label=_("Orgdiv1")) + zipcode = TextBlock(required=False, label=_("Zipcode")) + city = TextBlock(required=False, label=_("City")) + state = TextBlock(required=False, label=_("State")) + country = TextBlock(required=False, label=_("Country")) + code_country = TextBlock(required=False, label=_("Code country")) + original = TextBlock(required=False, label=_("Original")) + + class Meta: + label = _("Aff Paragraph") + + +class RefNameBlock(StructBlock): + surname = TextBlock(required=False, label=_("Surname")) + given_names = TextBlock(required=False, label=_("Given names")) + + +class RefParagraphBlock(ParagraphBlock): + reftype = TextBlock(required=False, label=_("Ref type")) + refid = TextBlock(required=False, label=_("Ref id")) + #authors = ListBlock(RefNameBlock(), label=_("Authors")) + authors = StreamBlock([ + ('Author', RefNameBlock()), + ], label=_("Authors"), required=False) + date = TextBlock(required=False, label=_("Date")) + title = TextBlock(required=False, label=_("Title")) + chapter = TextBlock(required=False, label=_("Chapter")) + edition = TextBlock(required=False, label=_("Edition")) + source = TextBlock(required=False, label=_("Source")) + vol = TextBlock(required=False, label=_("Vol")) + issue = TextBlock(required=False, label=_("Issue")) + pages = TextBlock(required=False, label=_("Pages")) + fpage = TextBlock(required=False, label=_("First page")) + lpage = TextBlock(required=False, label=_("Last page")) + doi = TextBlock(required=False, label=_("DOI")) + access_id = TextBlock(required=False, label=_("Access id")) + degree = TextBlock(required=False, label=_("Degree")) + organization = TextBlock(required=False, label=_("Organization")) + location = TextBlock(required=False, label=_("Location")) + org_location = TextBlock(required=False, label=_("Org location")) + num_pages = TextBlock(required=False, label=_("Num pages")) + uri = TextBlock(required=False, label=_("Uri")) + version = TextBlock(required=False, label=_("Version")) + access_date = TextBlock(required=False, label=_("Access date")) + + class Meta: + label = _("Ref Paragraph") + + +class CollectionValuesModel(models.Model): + acron = models.CharField(max_length=10, unique=True) + name = models.CharField(max_length=255) + + autocomplete_search_field = "acron" + + def autocomplete_label(self): + return str(self) + + def __str__(self): + return f"{self.acron.upper()} - {self.name}" + + +class CollectionModel(models.Model): + collection = models.ForeignKey(CollectionValuesModel, null=True, blank=True, on_delete=models.SET_NULL) + + autocomplete_search_field = "collection.acron" + + def autocomplete_label(self): + return str(self) + + panels = [ + AutocompletePanel('collection'), + ] + + def __str__(self): + return f"{self.collection.acron.upper()} - {self.collection.acron}" + + +class JournalModel(models.Model): + title = models.TextField(_("Title"), null=True, blank=True) + short_title = models.TextField(_("Short Title"), null=True, blank=True) + title_nlm = models.TextField(_("NLM Title"), null=True, blank=True) + acronym = models.TextField(_("Acronym"), null=True, blank=True) + issn = models.TextField(_("ISSN (id SciELO)"), null=True, blank=True) + pissn = models.TextField(_("Print ISSN"), null=True, blank=True) + eissn = models.TextField(_("Electronic ISSN"), null=True, blank=True) + pubname = models.TextField(_("Publisher Name"), null=True, blank=True) + + autocomplete_search_field = "title" + + class Meta: + unique_together = ('title',) + + def autocomplete_label(self): + return str(self) + + def __str__(self): + return self.title + + +def get_default_collection_acron(): + try: + obj = CollectionModel.objects.select_related('collection').first() + return obj.collection.acron if obj and obj.collection else '' + except Exception: + return '' + + +class ArticleDocxMarkup(CommonControlField, ClusterableModel): + title = models.TextField(_("Document Title"), null=True, blank=True) + file = models.FileField( + null=True, + blank=True, + verbose_name=_("Document"), + upload_to='uploads_docx/', + ) + estatus = models.IntegerField( + _("Process estatus"), + choices=ProcessStatus.choices, + blank=True, + default=ProcessStatus.PROCESSING + ) + + collection = models.CharField(max_length=10, default=get_default_collection_acron) + journal = models.ForeignKey(JournalModel, null=True, blank=True, on_delete=models.SET_NULL) + + journal_title = models.TextField(_("Journal Title"), null=True, blank=True) + acronym = models.TextField(_("Acronym"), null=True, blank=True) + short_title = models.TextField(_("Short Title"), null=True, blank=True) + title_nlm = models.TextField(_("NLM Title"), null=True, blank=True) + issn = models.TextField(_("ISSN (id SciELO)"), null=True, blank=True) + pissn = models.TextField(_("Print ISSN"), null=True, blank=True) + eissn = models.TextField(_("Electronic ISSN"), null=True, blank=True) + nimtitle = models.TextField(_("Nimtitle"), null=True, blank=True) + pubname = models.TextField(_("Publisher Name"), null=True, blank=True) + license = models.URLField( + max_length=500, + blank=True, + null=True, + verbose_name=_("License (URL)") + ) + vol = models.IntegerField( + verbose_name=_("Volume"), + null=True, + blank=True + ) + supplvol = models.IntegerField( + verbose_name=_("Suppl Volume"), + null=True, + blank=True + ) + issue = models.IntegerField( + verbose_name=_("Issue"), + null=True, + blank=True + ) + supplno = models.IntegerField( + verbose_name=_("Suppl Num"), + null=True, + blank=True + ) + issid_part = models.TextField(_("Isid Part"), null=True, blank=True) + dateiso = models.TextField(_("Dateiso"), null=True, blank=True) + month = models.TextField(_("Month/Season"), null=True, blank=True) + fpage = models.TextField(_("First Page"), null=True, blank=True) + seq = models.TextField(_("@Seq"), null=True, blank=True) + lpage = models.TextField(_("Last Page"), null=True, blank=True) + elocatid = models.TextField(_("Elocation ID"), null=True, blank=True) + order = models.TextField(_("Order (In TOC)"), null=True, blank=True) + pagcount = models.TextField(_("Pag count"), null=True, blank=True) + doctopic = models.TextField(_("Doc Topic"), null=True, blank=True) + language = models.CharField( + _("Language"), + max_length=10, + choices=LANGUAGE, + null=True, + blank=True + ) + spsversion = models.TextField(_("Sps version"), null=True, blank=True) + artdate = models.DateField(_("Artdate"), null=True, blank=True) + ahpdate = models.DateField(_("Ahpdate"), null=True, blank=True) + + file_xml = models.FileField( + null=True, + blank=True, + verbose_name=_("Document xml"), + upload_to='generate_xml/', + ) + + text_xml = models.TextField(_("Text XML"), null=True, blank=True) + + content = StreamField([ + ('paragraph_with_language', ParagraphWithLanguageBlock()), + ('paragraph', ParagraphBlock()), + ('author_paragraph', AuthorParagraphBlock()), + ('aff_paragraph', AffParagraphBlock()), + ], blank=True, use_json_field=True) + + content_body = StreamField([ + ('paragraph', ParagraphBlock()), + ('paragraph_with_language', ParagraphWithLanguageBlock()), + ('compound_paragraph', CompoundParagraphBlock()), + ('image', ImageBlock()), + ('table', TableBlock()), + ], blank=True, use_json_field=True) + + content_back = StreamField([ + ('paragraph', ParagraphBlock()), + ('ref_paragraph', RefParagraphBlock()), + ], blank=True, use_json_field=True) + + panels = [ + FieldPanel("title"), + FieldPanel("file"), + FieldPanel("collection"), + AutocompletePanel("journal") + ] + + def __unicode__(self): + return f"{self.title} | {self.estatus}" + + def __str__(self): + return f"{self.title} | {self.estatus}" + + @property + def url_download(self): + return self.file_xml.url if self.file_xml else None + + @classmethod + def create(cls, title, doi): + obj = cls() + obj.title = title + obj.doi = doi + obj.save() + return obj + + @classmethod + def get( + cls, + title): + return cls.objects.get(title=title) + + @classmethod + def update(cls, title, estatus): + try: + obj = cls.get(title=title) + except (cls.DoesNotExist, ValueError): + pass + + obj.estatus = estatus + obj.save() + return obj + + base_form_class = CoreAdminModelForm + + +class UploadDocx(ArticleDocxMarkup): + panels_doc = [ + FieldPanel("title"), + FieldPanel("file"), + ] + + edit_handler = TabbedInterface( + [ + ObjectList(panels_doc, heading=_("Document")), + ] + ) + + class Meta: + proxy = True + + +class MarkupXML(ArticleDocxMarkup): + panels_front = [ + FieldPanel('content'), + #InlinePanel("element_docx", label=_("Elements Docx")), + ] + + panels_body = [ + FieldPanel('content_body'), + ] + + panels_back = [ + FieldPanel('content_back'), + ] + + panels_xml = [ + FieldPanel('file_xml', widget=ReadOnlyFileWidget()), + FieldPanel('text_xml'), + ] + + panels_details = [ + FieldPanel('collection'), + AutocompletePanel('journal'), + FieldPanel('journal_title'), + FieldPanel('short_title'), + FieldPanel('title_nlm'), + FieldPanel('acronym'), + FieldPanel('issn'), + FieldPanel('pissn'), + FieldPanel('eissn'), + FieldPanel('nimtitle'), + FieldPanel('pubname'), + FieldPanel('license'), + FieldPanel('vol'), + FieldPanel('supplvol'), + FieldPanel('issue'), + FieldPanel('supplno'), + FieldPanel('issid_part'), + + FieldPanel('dateiso'), + FieldPanel('month'), + FieldPanel('fpage'), + FieldPanel('seq'), + FieldPanel('lpage'), + FieldPanel('elocatid'), + FieldPanel('order'), + FieldPanel('pagcount'), + FieldPanel('doctopic'), + FieldPanel('language'), + FieldPanel('spsversion'), + FieldPanel('artdate'), + FieldPanel('ahpdate'), + ] + + edit_handler = TabbedInterface( + [ + ObjectList(panels_xml, heading="XML"), + ObjectList(panels_details, heading=_("Details")), + ObjectList(panels_front, heading="Front"), + ObjectList(panels_body, heading="Body"), + ObjectList(panels_back, heading="Back"), + ] + ) + + class Meta: + proxy = True \ No newline at end of file diff --git a/markup_doc/sync_api.py b/markup_doc/sync_api.py new file mode 100644 index 0000000..0eb945d --- /dev/null +++ b/markup_doc/sync_api.py @@ -0,0 +1,128 @@ +import requests +from django.db import transaction +from markup_doc.models import CollectionValuesModel, JournalModel, CollectionModel + +def sync_collection_from_api(): + url = "https://core.scielo.org/api/v2/pid/collection/" + all_results = [] + + while url: + print(url) + response = requests.get(url, headers={"Accept": "application/json"}, timeout=(10, 60)) + data = response.json() + all_results.extend(data['results']) + url = data['next'] + + # Borra todo + print('Borrando...') + CollectionModel.objects.all().delete() + deleted_count, _ = CollectionValuesModel.objects.all().delete() + print('Borrado...') + + for item in all_results: + acron = item.get('acron3') + name = item.get('main_name', '').strip() + if acron and name: + print(name) + CollectionValuesModel.objects.update_or_create( + acron=acron, + defaults={'name': name} + ) + + +def sync_journals_from_api(): + journals = JournalModel.objects.all() + if journals.exists(): + deleted_count, _ = journals.delete() + + obj = CollectionModel.objects.select_related('collection').first() + + acron_selected = obj.collection.acron if obj and obj.collection else None + + new_journals = [] + + if acron_selected: + + url = "https://core.scielo.org/api/v2/pid/journal/" + retries = 3 + + while url: + try: + response = requests.get(url, headers={"Accept": "application/json"}, timeout=(10, 60)) + response.raise_for_status() + data = response.json() + retries = 3 + + for item in data["results"]: + title = item.get("title", None) + short_title = item.get("short_title", None) + acronym = item.get("acronym", None) + pissn = item.get("official", {}).get("issn_print", None) + eissn = item.get("official", {}).get("issn_electronic", None) + acronym = item.get("acronym", None) + pubname = item.get("publisher", []) + title_in_database = item.get("title_in_database", []) + title_nlm = None + + if title_in_database: + for t in title_in_database: + if t.get("name", None) == 'MEDLINE': + title_nlm = t.get("title", None) + + if pubname: + pubname = pubname[0].get("name", None) + + scielo_journals = item.get("scielo_journal", []) + + # Obtener la primera colección asociada, si existe + collection_acron = None + if scielo_journals: + collection_acron = scielo_journals[0].get("collection_acron") + issn_scielo = scielo_journals[0].get("issn_scielo", None) + + if not title or acron_selected != collection_acron: + continue # Saltar si falta el título + + #collection_instance = None + #if collection_acron: + # collection_instance, _ = CollectionModel.objects.get_or_create( + # acron=collection_acron, + # defaults={'name': collection_acron.upper()} + # ) + + # Crear o actualizar el journal + print(title) + print(item) + journal = JournalModel( + title=title, + short_title=short_title or None, + title_nlm = title_nlm or None, + acronym=acronym or None, + issn=issn_scielo or None, + pissn=pissn or None, + eissn=eissn or None, + pubname=pubname or None, + # collection=collection_instance, + # defaults={} + ) + new_journals.append(journal) + + url = data.get("next") + except requests.exceptions.ChunkedEncodingError as e: + print("ERROR:", e) + retries -= 1 + if retries == 0: + break + continue + except Exception as e: + print("**ERROR url") + print("URL:", url) + print("TIPO:", type(e).__name__) + print("ERROR:", str(e)) + url = None + + # Guardar todo junto + if new_journals: + with transaction.atomic(): + JournalModel.objects.bulk_create(new_journals, ignore_conflicts=True) + diff --git a/markup_doc/tasks.py b/markup_doc/tasks.py new file mode 100644 index 0000000..9121a25 --- /dev/null +++ b/markup_doc/tasks.py @@ -0,0 +1,9 @@ +# Local application imports +from config import celery_app + +from markup_doc.sync_api import sync_journals_from_api + + +@celery_app.task() +def task_sync_journals_from_api(): + sync_journals_from_api() diff --git a/markup_doc/tests.py b/markup_doc/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/markup_doc/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/markup_doc/wagtail_hooks.py b/markup_doc/wagtail_hooks.py new file mode 100644 index 0000000..d3f1428 --- /dev/null +++ b/markup_doc/wagtail_hooks.py @@ -0,0 +1,229 @@ +from django.http import HttpResponseRedirect +from django.utils.translation import gettext_lazy as _ +from django.contrib import messages +from django.template.response import TemplateResponse +from wagtail_modeladmin.options import ModelAdmin + +from wagtail.snippets.views.snippets import ( + CreateView, + EditView, + SnippetViewSet, + SnippetViewSetGroup +) + +from markup_doc.models import ( + ArticleDocx, + ArticleDocxMarkup, + UploadDocx, + MarkupXML, + CollectionModel, + JournalModel, + ProcessStatus +) + +from config.menu import get_menu_order +from markup_doc.tasks import task_sync_journals_from_api +from django.urls import path, reverse +from django.utils.html import format_html +from wagtail.admin import messages +from wagtail.admin.views import generic + +from django.shortcuts import redirect, get_object_or_404 +from django.views import View + +from wagtail.snippets.models import register_snippet +from django.db.models.signals import post_save +from django.dispatch import receiver +from django.db import transaction + +from wagtail import hooks +from django.templatetags.static import static +from markup_doc.sync_api import sync_collection_from_api, sync_journals_from_api + + +class ArticleDocxCreateView(CreateView): + #def get_form_class(self): + def dispatch(self, request, *args, **kwargs): + if not CollectionModel.objects.exists(): + messages.warning(request, "Debes seleccionar primero una colección.") + return HttpResponseRedirect(self.get_success_url()) + if not JournalModel.objects.exists(): + messages.warning(request, "Espera un momento, aún no existen elementos en Journal.") + return HttpResponseRedirect(self.get_success_url()) + return super().dispatch(request, *args, **kwargs) + + def form_valid(self, form): + self.object = form.save_all(self.request.user) + self.object.estatus = ProcessStatus.PROCESSING + self.object.save() + return HttpResponseRedirect(self.get_success_url()) + + +class ArticleDocxEditView(EditView): + def form_valid(self, form): + form.instance.updated_by = self.request.user + form.instance.save() + return HttpResponseRedirect(self.get_success_url()) + + +class ArticleDocxAdmin(ModelAdmin): + model = ArticleDocx + create_view_class = ArticleDocxCreateView + menu_label = _("Documents") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + list_per_page = 20 + list_display = ( + "title", + "get_estatus_display" + ) + + +class ArticleDocxMarkupCreateView(CreateView): + def form_valid(self, form): + self.object = form.save_all(self.request.user) + return HttpResponseRedirect(self.get_success_url()) + + +class ArticleDocxMarkupAdmin(ModelAdmin): + model = ArticleDocxMarkup + create_view_class = ArticleDocxMarkupCreateView + menu_label = _("Documents Markup") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + list_per_page = 20 + + +class UploadDocxViewSet(SnippetViewSet): + model = UploadDocx + add_view_class = ArticleDocxCreateView + menu_label = _("Carregar DOCX") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + list_per_page = 20 + list_display = ( + "title", + "get_estatus_display" # Usar estatus, não status + ) + search_fields = ("title",) + list_filter = ("estatus",) # Usar estatus, não status + + +class MarkupXMLViewSet(SnippetViewSet): + model = MarkupXML + add_view_class = ArticleDocxMarkupCreateView + edit_view_class = ArticleDocxEditView + menu_label = _("XML marcado") # Alterado de "MarkupXML" + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + list_display=("title", ) + list_per_page = 20 + search_fields = ("title",) + +""" +class MarkupAdminGroup(ModelAdminGroup): + menu_label = _("Markup") + menu_icon = "folder-open-inverse" + menu_order = 1 + items = (UploadDocxAdmin, MarkupXMLAdmin) + +modeladmin_register(MarkupAdminGroup) +""" + +class CollectionModelCreateView(CreateView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + sync_collection_from_api() + return context + + def form_valid(self, form): + form.instance.save() + task_sync_journals_from_api.delay() + return HttpResponseRedirect(self.get_success_url()) + + """ + def get_initial(self): + initial = super().get_initial() + initial["campo"] = "valor inicial dinámico" + return initial + """ + + +class CollectionModelViewSet(SnippetViewSet): + model = CollectionModel + add_view_class = CollectionModelCreateView + menu_label = _("Modelo de Coleções") # Alterado de "CollectionModel" + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + list_per_page = 20 + list_display = ( + "collection", + ) + + +class JournalModelCreateView(CreateView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + task_sync_journals_from_api + return context + + +class JournalModelViewSet(SnippetViewSet): + model = JournalModel + menu_label = _("Modelo de Revistas") # Alterado de "JournalModel" + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + list_per_page = 20 + list_display = ( + "title", + ) + + def index_view(self, request): + response = super().index_view(request) + + if isinstance(response, TemplateResponse): + if not CollectionModel.objects.exists(): + messages.warning(request, "Debes seleccionar primero una colección.") + response.context_data["can_add"] = False + response.context_data["can_add_snippet"] = False + return response + + if not JournalModel.objects.exists(): + messages.warning(request, "Sincronizando journals desde la API, espera unos momentos…") + response.context_data["can_add"] = False + response.context_data["can_add_snippet"] = False + return response + + return response + + +class MarkupSnippetViewSetGroup(SnippetViewSetGroup): + menu_name = 'docx_files' # Renomeado de 'docx_processor' + menu_label = _('DOCX Files') + menu_icon = "folder-open-inverse" + menu_order = 0 # Mudado de 1 para 0 para ficar na primeira posição + items = ( + UploadDocxViewSet, + MarkupXMLViewSet, + CollectionModelViewSet, + JournalModelViewSet + ) + + +register_snippet(MarkupSnippetViewSetGroup) \ No newline at end of file From e5a6783761675c856907bd51171a2b11694abf40 Mon Sep 17 00:00:00 2001 From: Edgar <eduranm@dgb.unam.mx> Date: Thu, 16 Apr 2026 13:53:38 -0600 Subject: [PATCH 2/8] =?UTF-8?q?Agregar=20archivos=20DOCX=20de=20ejemplo=20?= =?UTF-8?q?para=20pruebas=20del=20flujo=20de=20marcaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fixtures/Artigo 5.docx | Bin 0 -> 121332 bytes fixtures/e14790.docx | Bin 0 -> 31924 bytes fixtures/e740.docx | Bin 0 -> 84371 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 fixtures/Artigo 5.docx create mode 100644 fixtures/e14790.docx create mode 100644 fixtures/e740.docx diff --git a/fixtures/Artigo 5.docx b/fixtures/Artigo 5.docx new file mode 100644 index 0000000000000000000000000000000000000000..5fbf5929f19aaf5623575fe7d730562d5f820746 GIT binary patch literal 121332 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 literal 0 HcmV?d00001 diff --git a/fixtures/e14790.docx b/fixtures/e14790.docx new file mode 100644 index 0000000000000000000000000000000000000000..36bb9d08a64a8a3826456e51a881c5f0ed8785f3 GIT binary patch literal 31924 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 G>3;#;$3M{k literal 0 HcmV?d00001 diff --git a/fixtures/e740.docx b/fixtures/e740.docx new file mode 100644 index 0000000000000000000000000000000000000000..25240d4aeeccbfaf61d5976f6f1a173eceb6cb21 GIT binary patch literal 84371 zcmaf&b95$6*Y0E6&cwEDTNB&1lZkEHwrv{|C-<F9tcf}Cnde#G`PRWY@9Dp~s=I5g z`qgz+?_FD24jcjl1O^5M<W|g27vz7r(Ei?gI=YxKIk?-Kn7ddzSTcIq+g;|&#BVWU zgclTE2a>w~97}{JnJNs@c4OD5QQ@$uKsG`XqxXxl17~wIq$1f<L>H!wX@TQ;`g%*? zx$OvwnDCV3gQv$t^|R{IpEx%niV3|rTYSBL^2639EJIa7!6ZPgL$0lz_*oHg6u7X7 zBgfWYO5cgs=w(%=V+juU?i`J)s-I-+07WIrS~^#kyM-{d$=?$LIg?0fDjN0KC@=wA zn-+(o<2nUR7sDrMLX(<#s>h0w0vmOEu1aH;;x0Fp5_y8)s$Xj*C$9iCq#?_y(beR- zJ!_<sMXx9@8vN5{ht;-OhxF&t1zX9Hs2oX(d^8T7d9~7!(d8*GA}4c4C8h$YU4u4- zapcVw<#jw^iO*%dwr`tt*y^juns1R+%D1CMcw9Mhp(nLMwkKD$f+R`(-UB0bAI9I| z{1c>#Nh@if0uw>eUg0SXkxa_lvs0}qeAnC*5DF9~zbQ59`nA_LtuubnOy6wT`(y#Q zXpT3#w?ABgoIAoDzvc%4Y%p86;%`taKZF)WIHwhelUwg$ZHQI#pyv?SRoT+`fPkrU z40_o|y2b!%;s+LDS9^yeo?~H2XXkIaWZ*dL-*vKw7kGZ#ZToX6onfh+24|C)FpAC4 z(1vTM=4^re^h*|?m3f>!HwiW!Mq!AEy+a&WH!av^a{rLh)1b*eZO-kRei!vJ8Na(* zgcAsvJ^Ci$r^DQW&HbX+lTUAG?(N9$$<~9&rq(oi2WcC3v<Eckuy<I0W`enDgZ-3a z9z{O6BAjNJVizC+x`tftI;@a-UE}HRckI|RMKf;Lf9cpSIT8X7d%t;o$=ai}I-(Dp z=r2+Zacq&>^#S}(k~3I)zvqZwhC~cO4wcZgP5HlZ!oF8(<ZS4YzfzU+4`LX>F+*m8 z$%B?VV5<rI?@ht~eg>k}5mWVlG(rCBI}o+ND!`aJ%)f*DZO{y^1dL%Y-HdVt1on?r z*HJacWcjjQch2&W{3gtJRGfT2VEqcM4bWQ?B7u*e2}W<e>7)myZsLFO;D10W%R$3X zAjcE1frEf_ae{y-|358<`adn_YVPLt*Kn@?IIb*RE_sU?C0r?yPkAeZ7~D)WE=!`E zQrql%BKTyoUCm+*IWBTXf|)L7g8FnK=F+ci!x@F1ql|T>c?+px#57XyDN-ml(!^2q zRNOy(0R=)KSxw4DlcnEqxlzFlIt&f6<4D$cnb=$*j5!I+3!A^&7f%*OJ6U0=qVC0p ztq|yRteTG&39i`0lWQ(6<+9o+so+i6E}EJ_*)VVln9S2GElm!;CdSdjMN5C7lRl*O z>QCl~b5ISp<B}<4@`YfO7f(ar1*9IwY6KE|J)%g>2OE}@n~mUc)-UF|N8wd9Euo>B z=Dx1sLYtr|Q5Q-fpsK|?WwGUkiqS&FI>ys2Ci?EVJWJTB9E8NSG22ax@GdiD+g2)d zR0JZg-18g!l+pK-a8hYs6B82*7RFrR1lb^ip!^xMd#y~cw>aCGyE3myE^k~#LY%V# zd|aTs)#$mPt(=sm`$~8co6(88?Dq@xc!Hv=c>_5^H1a3jeZdNxJTZ-(l*o6b?oVhT z;%1)>u?B&k8}b_NfO%GHObgfC^`QPrJ4hE?D_Pn=G>hB{LTJDGLBdbv)nMB!M03ZO zw_dwRP=t>T8`%p^30a%9J>q9s1~=Yd4b1A{v(UTjezOUz4b+93+y-`c#tV{D?x@@H z_GJs2yCtQZ<sp+2D_1ev8&KjJwbt70zpPz0_8<Wi49fc$?Cq^BZMjfLG|5i3nIsty zx3YezE#^zw<F+1E)&;lYwYe{@8Pw=)bCm4wPNSq7Fp--!ll(cc8c2He33Uv;B>qQ@ zZK4KTN?;%$RxtlbjsN`vuyAy6Q#UrTGyhkPX$r16f8`h;@&#VfgZR{%p9(uql6AbK zo3g`|3=;RqL1(-lU>Nk`q(B)m1-p1B*pqBfcSXFD78_5H$IMHX<1R{CUu7(cjqC0I z($-CubYF-oUE(dN2uzCj=y>Cui+f^(bGcNNU{m#RT;}#@J%j^pY1NA{b5#yTDAAih zdR1OT<Czb|aFK)wjRD9vlaNeVRf`n)MrC26$FqQ3$t#Clg}uHHaJebZ^xmwks(Npn zrm=eAc(ER3jrA2(WvwXmzLU2tG6ZQCUp1Gxb_hjCzD0*TD)x!m?5TX%k_GcaL7g%d z^hO~#7_PE^ge(oCz>1*d4`Tn3BB6_C%v$kyRIKgZVXo+W(XV|(P^D#Bqah!I^SaEV zeL7L)7dU7!Mv+Cd#b=PN&~JzWPERneFd<pmEHi(FNLeVXTq3irz}F*Fe{oj<F(ajO z%dy3lJst1y)gS8N48|qo0B%PWxNRTULlb!SY#z%^&BPPDJ-&%Z@bfvu8wB}k7jJkW z(_O!j5HEhPl_p>kwjr)v#6D#)F{m9e>!N3dqFN1+)-7Esac>qLO^GyshjsBr<S+}` zHHH(-({uInUk$i3k9dxPf`D8?{U;3||M!mM=51&G?|yWttL*~dMiCeS29-5rAxo{8 zXnTywY|0W;&`x#ITfXE3OG^*qKyZVcUUIqy@<=dpf^<5f$;cq3sQ#d*-v-(F?Z6Il zeDoU{8s9U~S$xX6;(7Q2CsAuf(#(15#n085`3gr5!~|R(mj9ApbjSPSyd&e8N{`=U z5|KvfPn2n%N4jVy)iz^C`XcB%q&rDcoa;2fH?t&$ZX~0Qd|xA#2}rOx6v_Q20N0!f zm9m%;9}yW<P&7EScB~68w(Mc({K;hSP=Ru=2JSkxw;01hkoYNT4}u8~wCo?WF8-Bc z_Ek#!jH2WojhIeXr;Y2KI@avD!9Mblp-<uG)J?_`tV6xE{#$&qIDr<hKv@ZL6?3>V zmXR!OkR<6i*0|VWs|#$G3lR1?S_A1=$O#R~eJ+1tHmD8LA6SK;`7++v8qNE$P&5?$ zSh!~Bm}_XvsI-F$>_#@*qP}30gpskE2I{OQv6T2hkl>1TrM*}!0&J#?%M?z=wf0R} z?Vhnd4t7@~lv`*-8+^4Dg#~KN)fGm$nnptr7QEf6tX0sPj}Nh=0@Sh4s~9kYj$KPm zz_t+T${JGaN$4X{fxC)ijq2BOgvr4r(5`#gD@N5@d~RqWEIrIkO!#OKnXj%w)vZn; zP@w2(D;ua*IMhlK2bK~h$?kqESz@(bK5BmAIc?gz3?~p2H}3VL(PFs89Vbyj3;Jbf z!m+v=f3_wkuP%qdx{a|haSiMkOm?vJzDmZpRMh&*3InTNfSxXp%8EG>A0b&CFb7)h zX;~%8->s?_h#M|jQvZVq@knyjPt_Qt#s`3%h8rkZ00JEjFaNYsgUxo)Ao7_h94iDi zAg)hC%9WaL-M?siJJC)o9Eg`2vnpVr4s%|6HL_^ZrK-Rs(B#0r=g|1h&(CN?d)hUF zA)dBKg39c^YA9ORT-!Tc_RHu2Oc^BNses&0fmLKTgt{8p?gC5nS*=*EP+21&F@22f zkx^^V^(?I8MEMH&r`zlxax)a*x9x>x_r0|xH>YNf-C=vnY-fv%2W1mB(u6nD!*8^! zHHfDlG#4KpBZ7)Wf;g98k3-Z6-G&_`=OL;q&_d|vA9))-1A}XCfW}8-n)4A$$v)nC zcX_@XXuqIYD2PyR;bNQ<(5UHe$S}4K;tbI=@Ki!eUoLKl@TYhVLG>f5-AI5-@)7o| zk34P}Yn^tI^Agn+DIv`BV?|{ycx5gwkq;=?tfXTX1$}@`X92|}4{hUJN%Z%6M)X4& zxMqwU?0kM}5&Z7hARhOucU(8^Bp?(t+yQOrqH@w&L3TtvPBB8%#070(2xF4HShDra zB--Z9Z?xov<Slj67n^7$#z6I{Ie!5218BM3(!|7^Wu72hA60t*J&j;TDna@haoV_T zf-EMItb{BcL2Bg5?6+mEcv#8uNTX3mExCwW5f1<)x_jTAq*o>qmGHU_QHHXjhVI_W z^IJf52MfFUSMi4WzOG<OBv3N@p%RpjKthgrPNabg7kZ{PeI=LW5D<{NB(9;WWL1ox z;Ke+Nyralx%%%S-$83b&E0fwS&S>U2n#_IV)tTxdKct-#;-ag22DFZzkB5@NF2RtX zkym(e6kJzq4@JtY<jfK)rMe93Th%WoPR({GRBKDCnuFc&t}U%m_=vMrX#6}8{RPpW z=e@)|<Is@osX4;IXL6}7a&?rd462v9fODJ*w+V$v;#)UIpt_T(jPL!_&K0>$imScv z!P=Irl{Hi)I;xHqj>b|tdu+@$6`+>BHV)7i^+G&xk#vCsX=pWuI!P2U!K@gZ69u+k zat8iJVs#GxNxC#GfP2<CmPp45Ypdzw%=v&GO|MED5ZUsx?J8f&oEhi<{2iD4>Eoq$ z(eO+qO%*{~rxw+Vdo?94!GOGLUCNcVTnn2)(bc4G>pf`Uf;~r8nPPlEDCR-pGj-UF zFnn+VYd-~i&1Kcq(ah!1{d}q}LkOV8K^QDJtfHTm-;d**uEw8|eDNSVW5#wQk2T}8 z9GRIL9biYlF5hc#k<@C6(Ngbw2DMgp=S<eJ;nS6=ZMf{2iuR*!ilny*tgMq1DC3lm zUSe+}XOflL`fes^2_zG})NsGt!e%cu!#rR-AfM75QunX~3OyY+T2;~M1^TuO6lq*Q zhV6ax?$O#XM!XUlw4}XjRvB#C16$T6I(H3ZN#p*-4#yF+hBcNYsY2<i%@zg^7q@Ud z0?0Pw>CB6&W<^@2^Mbt4@PpKAdZY}j@4ntzTx11ox{JMSYOCA8LXR;%q-z;L6+~az ztgxZeLv_x&o7iI#Sh9U3S|Sj=Bfe=zyW2}Lrgb7k^cj_k6X)GX>W?3YL>g2&N^wb# z5hae>_I*rzaJ7Fx+}e84mJ~n1;#FBQpiB{eu1JU}sKvBhD%3?+mEGz%+B6TqwO&03 zq|J^Wr+*9hecXQRgR<L2fVJLF3bC;m4CtXku(<Qno%0alXPC>3DKHlN0ocX0n2Ym` zG)othzCdK!Mqj(5qxdn9P4S2SM_5bq#N#h>05Kw?Nk@zMp(E`3f}z`)d@`1sGG5%D zlDNVQ!&y(j3XDS{c-JlL4*vQIC^>t0@Ofr`@c1BiGlMo+)r(Een^xaWO$irznBkQ; z;&1sPi2`TNui+cQQoEqyi9g~j<Gd=k%(!cR)|<1^3V{@|VN`Dlf(eW-LZF`p`Zx3- z@EcqEm;;KK^=BVE-<~i8h7fR!6JW=V1b%!X+sR6wUCUS#(}W1nT#}i0QkD6a5?uY$ zQSwj6k(H9{n>6mfZ%p{AZb`{509)>2YeNVA)O>;d6P7wTv%!D=8<I{+{il!w=Wj@2 z>h9|1Xs@Lp&t&apZm;a(=;X@sPjH%-IAk-zj1XR6bZzA3nCoU5t6Gu4dfH~!SmT^J zYNR`)IzGM8vrzQgnCF5y2qJm0!f=aN&_ww<b5o6VQJsTYKAyJ#3cP`7A%{wtp3|LE zSri=GjJwtIE#5N^b4C<bDOd$lk(Ps#Ia;2tZZi&tL6hB>b}rwgRdtEq>fHDGM%p1h zQ{3_Qt4dE-<GwCJAshhv@XTtr<)ulXr7u7$EGIyu=d_EF-*jPMIgHEl%g`7%B<+rn z=wr0-%fhhX8!Zr!9b^Tg#S`t5wMJLw^D*^={|_641M|SOzcWw$8?ybs6G-&`i_O1S z(vtL*hM94~0)oDb&+3v``XNN6C}C^{CoRK0=eFF_+OC&8EZ%)*-lJIzyf&Y6pC5QG zt@NgVzUEsn$~cg5ly{l3fpB9iTlSWk{)f177!*9z;Xk8r*^!te3Bvv0qOwxQgJaDF zDbnret%kEsSkrJ_2B}-xabAC@_JHIXCCAE`;1L9#)FuT!{G15>ybH)KG@7=iv689f zv$+z>jt=drk()|=)Sa_fSf{62!(`5)M!1t@V9s8D`4wr||KYoU1-J125b+dXg;-Yn zJ*K#xv6HlY<tnPUtgfCSV2i0;Mfk{~Z87i3UMQ0=A>(OJI01E>I`_uB%`1xc=eB=) zEOCrRPWkV(Z~7B8=ihn=v9K#nwhJdbK(*y)CwqNcvW_Z}zTgFFEdzc?{ek+2xSZ)o z0?S|8NB@yH(f>x=(8b)&^<Pc?%boF`X57M1^e{6D)GpNx;V{r%2bok(jVWeVp>)_l zjMsjIGb<5S;@8fub(nxxF7D^G<<^G){dstnfCRXLM#%7~)r~W&(;4z_LTW60=pJQp zaAdO$&zh&$n6%`*O{(vZQFcaHGKM-WIV@WB)W-A~NiL15<NRl4+YNcjj^{o#_lDrz zTxx{S;4j?lg|AY>N_Kcs*Ecyp4x`in+SZ<C<v*}9G-}rBeRJs1piDRhHRZIFr}e9j zU+zl(P_WfuU+n%nN2>ow;h%#GGe^^ZjmTu`=<;u-XrH8@IKqq~sWeDPdY$5ohKWfh zgI!oJEUFA)Vwp?Q78ziMzqCU{We*;FWf$PM6MJdXrsjVaHZNCVn{1g%UKwUxc4c$d zs$C(M{AbX8#<!%2()Yn^RZo4G)tF$1&-5o`lwcI;WmY4{X1Eb<AhxbL&@yR}#g9wz z7Nw&ed}a*#8U;?4NyK=U0hvJ3*v68KhgO$`?y}-Hl?WY(uX<%j1pmxl1mbC`kS;UD zfHcL(&c5~o#{9$l3@$-93H~%}-2KUoi{~4+K1Z65A8k-+ReT8ZULv$z3bj#$N5x@R zZ~tbkjM`$c{240)7Jhci7-q>sTd>e$$xS0?z4ss&hM(DS3EZc@^gZG~Fnc-`sFD7H z1pa?v{(JEHm#DkFxr5t3JKIIyTs*!^GvgnKdn6<dJZTPU%KNVh#qH%P^=jFZ%4)Z? za~mM;>@e=0SvLmiyhlQzc%6?svC)-Hpet6_3MqEn7J`jy&<NKV6)u}=0x@d<tpp_< z8P1MyMzUGxL_!Y0(!$|sbKw1V1-FT5QJnfzhf;fYAC)|L5S%&d`_q)+PM@F0pU|vS zDv|_s(tdwd)Z?jv&yKGHLqVbl+DVh7QUpoqS!V*jw?k3|sfnB%%1#s(E`1I(*mrJa z-eVfSm65s3-^iP%+J*b5O6G==ta)}0&pvNTK<0A*RhDA>Hp+qtu9f-9w=uQ&Rikg< zd!JJai_cy40!Lvz=H2_{Sg61d+1W6HEWcK-pFejeV*C<s^^sZPOWr#ZO5XGsR^G|v zr3g0R{ndF1tTACscLCT>6DFf|I|2sZkW_M=3v@I4EPhb2WXP}}z)b*!$J%<F?4Osc zD(^(5J&lXsfRP_(Z5OunRO{ElOgDlxCkcmrrCtsY+;nqpB#AKysCrI$$Kc{Iu_#r$ zAuvkbtjA%@5hK1)_dw~QL$SF7Rp~j+xr^_PihA=*f231O5Hs*E`RbZgXs&u<V!vw# z>G~RS4L-GjJ`Feoj{F9P*k3j=wHwY_bvFCsesF<(FsVljbPP<*L57mz-kLQI?59m1 zbT9Ke;J%^Cj}fzf7ACn5#JEfOg8H+hxd-t@*px5<qO=EaEO-EZ<##q1M4rB8IMxR| zK84}j(91ghIf~1Faj|{&8s!MU#QNp%b1rtr>ixtY<Rp$qPh)0J;?)d&VC9MHp6AQn zcm2~yupoQ$nsfVS&RFDYy;Rp;lBMGxIwoZ33YAZd1|Kov1lWm$xk%{3NhuwiqKW;f z0KmDsXFD>oPmZIY+sm3_b00up<8sftN&p}zk4S0LvyJ|Eb@6!iO!Z|jk+s?7Z2_kB zBDx^2AoOKF^JAOIaQ6FWeKeQ5*9d@5@Agn&7Lk#;&#@KH9E{!>3oe~vRyrlvU`&Y> z)_hP5a)Q<Go_?Pm>n1PvGkF*EhDUiy`0kL+5}lHi`8L9jdeR3Q76IfwF|u_=Q4$rw zTq&11U!I8!R&zMS3Z-$Y;w#g@`AIZeTz(^Kh{=mE%wZjVI|L?=mEXjOfpvZs!aTkz z2)#?)dPEg+cpPzKfPOVgM#N^g+OI0K3_G~5dJ+c~7fc`)JmTIem=$V-w~CiINM>G9 zWh+^R(A@UgV)LBN3Dh=}y<^U^Zs+I++s;w6@|y<Q{kIse$xY;4P{jtcr@loUt52%% zjvIu}fsczDE6<b7tD(;ygxDh@HB=}Th_^StQnP*xRiVp#<KdgzHT<mD<N@w@d$_Ft zst*W=zMr5Jpc2?~XCVt)2fUdTNJf)~d$oJUAUn3e^zUj{U-Z;m1Gz*|iRzvSYOOv# zqWY9UaYza5SJY%?7Pw2E>1T6U0Fak(?J?yc>bVrnfA-oCPD>Ldy~tYCi`bjaSsQ;q z4eu_p;)a|tL|B<E8z-^aRqm1L+gOM<=2!|1B#LFZw08Zx6NJo>rhCc|S6vi1auV>E zM}LAd$X}`+@v;JA7^)=|6BJ@TB=H@2OB#m%#JFujkch~OX^JJ?nL@l})Kh?e6TIMC zbb|0fWYakTt<ad)F1}*~JdjX*a#(32USsdD30C`}*Z9n03P3~>3->po=}O~H&9UHP zHp2vir`Qx=k&|PJ6q9m@@1jy4R1uVzPLzON$Eg4CNRCk4ePA8qVmB_r9AT8E+Q4oR zBVxl1c_c{@f+o)or&@|O)y(AGUzMq`M{1<&2R};T$#XC1uCnPJz=`LxuM{0L{|a?6 zpTj`u9>_${P|om&Za!HV?+PX+djgL{9?%sf%Xit5VeayST{hPC?n@|6K#j<<m2?X1 zIgM+^85sD+NBefqe9SuR<xFUP<E;TD1jF*G;wNiKx%A@$&uDAbUkL2_PZ!qvh%0D= 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ʅ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 KkaY#dAOiqD1bmVJ literal 0 HcmV?d00001 From 3ddf5ca80d8a72500d30ce047db8f55d26c963f1 Mon Sep 17 00:00:00 2001 From: Edgar <eduranm@dgb.unam.mx> Date: Thu, 16 Apr 2026 13:54:38 -0600 Subject: [PATCH 3/8] Registrar markup_doc --- config/settings/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/config/settings/base.py b/config/settings/base.py index b6977c6..1e70c7a 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -82,6 +82,7 @@ "reference", "xml_manager", "model_ai", + "markup_doc", ] INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS + WAGTAIL From a4d2fa6be0055e44888c489a5dd2d60d18c6c086 Mon Sep 17 00:00:00 2001 From: Edgar <eduranm@dgb.unam.mx> Date: Sat, 18 Apr 2026 19:17:22 -0600 Subject: [PATCH 4/8] Registrar markuplib y agregar utilidades base para lectura estructural de DOCX --- config/settings/base.py | 1 + markuplib/__init__.py | 0 markuplib/function_docx.py | 422 ++++++++ markuplib/omml2mml.xsl | 2068 ++++++++++++++++++++++++++++++++++++ 4 files changed, 2491 insertions(+) create mode 100644 markuplib/__init__.py create mode 100644 markuplib/function_docx.py create mode 100644 markuplib/omml2mml.xsl diff --git a/config/settings/base.py b/config/settings/base.py index 1e70c7a..4d9ce5d 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -83,6 +83,7 @@ "xml_manager", "model_ai", "markup_doc", + "markuplib", ] INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS + WAGTAIL diff --git a/markuplib/__init__.py b/markuplib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/markuplib/function_docx.py b/markuplib/function_docx.py new file mode 100644 index 0000000..eb94132 --- /dev/null +++ b/markuplib/function_docx.py @@ -0,0 +1,422 @@ +import docx +from docx.oxml.table import CT_Tbl +from docx.oxml.text.paragraph import CT_P +from docx.oxml.ns import qn +from lxml import etree, objectify +from django.core.files.base import ContentFile +import re, zipfile +import os + + +class functionsDocx: + + def openDocx(filename): + doc = docx.Document(filename) + return doc + + # Función: solo reemplaza mfenced que NO tengan atributos open/close y que usen | + def replace_mfenced_pipe_only(self, mathml_root): + mml_ns = "http://www.w3.org/1998/Math/MathML" + for mfenced in mathml_root.xpath(".//mml:mfenced", namespaces={"mml": mml_ns}): + has_open = mfenced.get("open") + has_close = mfenced.get("close") + separators = mfenced.get("separators", "") + + # Solo reemplazar si: no tiene open/close y usa barra + if not has_open and not has_close and separators == "|": + mrow = etree.Element(f"{{{mml_ns}}}mrow") + + mo_open = etree.Element(f"{{{mml_ns}}}mo") + mo_open.text = "(" + mo_close = etree.Element(f"{{{mml_ns}}}mo") + mo_close.text = ")" + + mrow.append(mo_open) + for child in list(mfenced): + mrow.append(child) + mrow.append(mo_close) + + parent = mfenced.getparent() + if parent is not None: + parent.replace(mfenced, mrow) + return mathml_root + + + def extract_numbering_info(self, docx_path): + # Diccionario para mapear numId a su tipo (numerada o viñeta) + numbering_map = {} + namespaces = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' + + # Abrir el archivo DOCX como un archivo ZIP + with zipfile.ZipFile(docx_path, 'r') as docx: + # Verificar si existe el archivo numbering.xml + if 'word/numbering.xml' in docx.namelist(): + # Extraer el archivo numbering.xml + numbering_xml = docx.read('word/numbering.xml') + # Parsear el XML + numbering_tree = etree.fromstring(numbering_xml) + + # Buscar todas las definiciones abstractas de numeración + for abstract_num in numbering_tree.findall('.//w:abstractNum', namespaces=numbering_tree.nsmap): + abstract_num_id = abstract_num.get(namespaces+'abstractNumId') + # Revisar los niveles dentro de la definición abstracta + for lvl in abstract_num.findall('.//w:lvl', namespaces=abstract_num.nsmap): + num_fmt = lvl.find('.//w:numFmt', lvl.nsmap).get(namespaces+'val') + ilvl = lvl.get(namespaces+'ilvl') + + # Asignar el tipo según el valor de numFmt + if abstract_num_id not in numbering_map: + numbering_map[abstract_num_id] = {} + + numbering_map[abstract_num_id][ilvl] = num_fmt + + # Relacionar numId con su abstractNumId + for num in numbering_tree.findall('.//w:num', namespaces=numbering_tree.nsmap): + num_id = num.get(namespaces+'numId') + abstract_num_id = num.find('.//w:abstractNumId', namespaces=num.nsmap).get(namespaces+'val') + if abstract_num_id in numbering_map: + numbering_map[abstract_num_id]['numId'] = num_id + else: + numbering_map = None + + return numbering_map + + + def extract_hiperlinks_info(self, docx_path): + hiperlinks = [] + with zipfile.ZipFile(docx_path, 'r') as docx: + # Leer relaciones del documento + rels_path = 'word/_rels/document.xml.rels' + if rels_path in docx.namelist(): + rels_data = docx.read(rels_path) + rels_root = etree.fromstring(rels_data) + + # Buscar hipervínculos + for rel in rels_root.findall('{http://schemas.openxmlformats.org/package/2006/relationships}Relationship'): + r_id = rel.attrib['Id'] + target = rel.attrib['Target'] + if rel.attrib['Type'].endswith('/hyperlink'): + hiperlinks.append((r_id, target)) + + return dict(hiperlinks) + + + def extract_hiperlink(self, element, rels_map, namespaces): + links = [] + + # 1. Buscar hipervínculos de texto (recursivo con .//) + for hyperlink in element.findall('.//w:hyperlink', namespaces=namespaces): + r_id = hyperlink.attrib.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id') + if r_id and r_id in rels_map: + links.append(rels_map[r_id]) + + # 2. Buscar hipervínculos en imágenes (recursivo con .//) + for hlink in element.findall('.//a:hlinkClick', namespaces=namespaces): + r_id = hlink.attrib.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id') + if r_id and r_id in rels_map: + links.append(rels_map[r_id]) + + return ' '.join(links) if links else None + + + def extractContent(self, doc, doc_path): + + list_types = self.extract_numbering_info(doc_path) + + hiperlinks_info = self.extract_hiperlinks_info(doc_path) + + found_hiperlinks = True + + # Obtener el directorio actual del archivo .py + BASE_DIR = os.path.dirname(os.path.abspath(__file__)) + + # Construir la ruta completa al archivo XSLT + xslt_path = os.path.join(BASE_DIR, "omml2mml.xsl") + + # Cargar XSLT y prepararlo + xslt = etree.parse(xslt_path) + transform = etree.XSLT(xslt) + + def match_paragraph(text): + keywords = r'(?im)^\s*(?:<italic>)?\s*(palabra(?:s)?\s*clave|palavras?\s*-?\s*chave|keywords?)\s*(?:</italic>)?\s*(?::|<italic>\s*:\s*</italic>)\s*(.+)$' + #history = r'\d{2}/\d{2}/\d{4}' + #corresp = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' + abstract = r'(?i)^resumen|^resumo|^abstract' + accepted = r'(?i)aceptado|accepted|aceited|aprovado' + received = r'(?i)recibido|received|recebido' + + if re.search(keywords, text): + return '<kwd-group>' + #if re.search(history, text): + #return '<history>' + #if re.search(corresp, text): + #return '<corresp>' + if re.search(abstract, text): + return '<abstract>' + if re.search(accepted, text): + return '<date-accepted>' + if re.search(received, text): + return '<date-received>' + return False + + def matches_section(a, b): + try: + return ( + a.get('size') == b.get('size') and + a.get('bold') == b.get('bold') and + a.get('isupper') == b.get('isupper') + ) + except Exception as e: + print(f"Error comparando secciones: {e}") + return False + + def section_priority(sections): + return (-sections['size'], not sections['bold'], not sections['isupper']) + + def identify_section(sections, size, bold, text): + if size == 0: + return sections + + isupper = text.isupper() + s_id = {'size': size, 'bold': bold, 'isupper': isupper, 'count': 0} + + if len(sections) == 0: + sections.append(s_id) + return sections + + for section in sections: + if matches_section(s_id, section): + section['count'] += 1 + return sections + + sections.append(s_id) + return sections + + def clean_labels(text): + # Eliminar etiquetas cuadradas tipo [ ... ] con espacios opcionales + extract_label = re.sub(r'\[\s*/?\s*[\w-]+(?:\s+[^\]]+)?\s*\]', '', text) + + # Reemplazar múltiples espacios por uno solo + clean_text = re.sub(r'\s+', ' ', extract_label) + + # Eliminar espacio antes de signos de puntuación + clean_text = re.sub(r'\s+([;:,.])', r'\1', clean_text) + + return clean_text.strip() + + content = [] + sections = [] + found_fb = False + review_fb = True + #Palabras a buscar como indicador del primer bloque + start_text = ['introducción', 'introduction', 'introdução'] + + current_list = [] + current_num_id = None + numId = None + namespaces_p = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' + + for element in doc.element.body: + if isinstance(element, CT_P): + obj = {} + + namespaces = { + 'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main', + 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main', + 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' + } + + hiperlinks = self.extract_hiperlink(element, hiperlinks_info, namespaces) if found_hiperlinks else None + + paragraph = element + text_paragraph = [] + + # Determina si es parte de una lista + is_numPr = paragraph.find('.//w:numPr', namespaces=paragraph.nsmap) is not None + + # obtiene id y nivel + if is_numPr: + numPr = paragraph.find('.//w:numPr', namespaces=paragraph.nsmap) + numId = numPr.find('.//w:numId', namespaces=paragraph.nsmap).get(namespaces_p + 'val') + type = [(key, objt) for key, objt in list_types.items() if objt['numId'] == numId] + + #Es una lista diferente + if numId != current_num_id: + current_num_id = numId + if len(current_list) > 0: + current_list.append('[/list]') + objl = {} + objl['type'] = 'list' + objl['list'] = '\n'.join(current_list) + current_list = [] + content.append(objl) + list_type = 'bullet' + if type[0][1][str(0)] == 'decimal': + list_type = 'order' + + current_list.append(f'[list list-type="{list_type}"]') + else: + #Se terminaron de agregar elementos a la lista + if len(current_list) > 0: + current_list.append('[/list]') + objl = {} + objl['type'] = 'list' + objl['list'] = '\n'.join(current_list) + current_list = [] + content.append(objl) + + for child in paragraph: + if child.tag == '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}hyperlink': + for r in child.findall('w:r', namespaces=child.nsmap): + t_elem = r.find('w:t', namespaces=child.nsmap) + if t_elem is not None and t_elem.text: + text_paragraph.append(t_elem.text) + + elif child.tag == '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r': + namespaces = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' + sz_element = child.find('.//w:sz', namespaces=child.nsmap) + obj['font_size'] = 0 + + if sz_element is None: + p_pr = paragraph.find('.//w:rPr/w:sz', namespaces=child.nsmap) + if p_pr is not None: + sz_element = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if sz_element is not None: + xml_string = etree.tostring(sz_element, pretty_print=True, encoding='unicode') + size_element = objectify.fromstring(xml_string) + font_size_value = size_element.get(namespaces+'val') + obj['font_size'] = int(font_size_value)/2 + + color_element = child.find('.//w:color', namespaces=child.nsmap) + + if color_element is None: + p_pr = paragraph.find('.//w:pPr', namespaces=child.nsmap) + if p_pr is not None: + color_element = p_pr.find('.//w:rPr/w:color', namespaces=child.nsmap) + + if color_element is not None: + xml_string_color = etree.tostring(color_element, pretty_print=True, encoding='unicode') + object_element = objectify.fromstring(xml_string_color) + color_value = object_element.get(namespaces + 'val') + obj['color'] = color_value + + b_tag = child.find('.//w:b', namespaces=child.nsmap) + + if b_tag is None: + p_pr = paragraph.find('.//w:rPr/w:b', namespaces=child.nsmap) + if p_pr is not None: + b_tag = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if b_tag is not None: + val = b_tag.get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val') + obj['bold'] = (val is None or val in ['1', 'true', 'True']) + else: + obj['bold'] = False + + i_tag = child.find('.//w:i', namespaces=child.nsmap) + + if i_tag is None: + p_pr = paragraph.find('.//w:rPr/w:i', namespaces=child.nsmap) + if p_pr is not None: + i_tag = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if i_tag is not None: + val = i_tag.get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val') + obj['italic'] = (val is None or val in ['1', 'true', 'True']) + else: + obj['italic'] = False + + s_tag = child.find('.//w:spacing', namespaces=child.nsmap) + + if s_tag is None: + p_pr = paragraph.find('.//w:rPr/w:spacing', namespaces=child.nsmap) + if p_pr is not None: + s_tag = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if s_tag is not None: + val = s_tag.get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}before') + obj['spacing'] = not (val is None) + else: + obj['spacing'] = False + + clean_text = clean_labels(child.text) + + #identifica sección + sections = identify_section(sections, obj['font_size'], obj['bold'] , clean_text) + + if obj['italic']: + text_paragraph.append('<italic>' + clean_text + '</italic>' + (f" {hiperlinks}" if hiperlinks else "")) + else: + text_paragraph.append(clean_text + (f" {hiperlinks}" if hiperlinks else "")) + + paraph = match_paragraph(clean_text) + if paraph: + obj['paraph'] = paraph + obj['type'] = paraph + + if review_fb: + found_fb = any(word in clean_text.lower() for word in start_text) + + #Si se encontró alguna palabra, incluye todo lo anterior en un sólo bloque + if found_fb: + found_fb = False + review_fb = False + found_hiperlinks = False + sections = [sections[-1]] + first_block = '' + tmp_content = [] + abstract_mode = False + + for c in content: + if abstract_mode: + if c['text'] == '' or c['spacing'] is True: + abstract_mode = False + else: + tmp_content.append(c) + continue + + if 'paraph' in c: + tmp_content.append(c) + abstract_mode = False + if c['paraph'] == '<abstract>': + abstract_mode = True + continue + else: + if 'text' in c: + first_block = first_block + "\n" + c["text"] + if 'table' in c: + first_block = first_block + "\n" + c["table"] + + obj_b = {} + obj_b['type'] = 'first_block' + obj_b['text'] = first_block + tmp_content.append(obj_b) + content = tmp_content + start_text = [] + + if 'text' not in obj: + obj['text'] = (' '.join(text_paragraph)).strip() + clean_text = clean_labels(obj['text']) + obj['text'] = clean_text + + paraph = match_paragraph(obj['text']) + if paraph: + obj['paraph'] = paraph + obj['type'] = paraph + + if is_numPr: + if 'font_size' in obj: + del obj['font_size'] + current_list.append(f'[list-item]{obj["text"]}[/list-item]') + if isinstance(obj['text'], list) and len(text_paragraph) > 0: + obj2 = {} + obj2['type'] = 'text' + obj2['value'] = ' '.join(text_paragraph) + obj['text'].append(obj2) + text_paragraph = [] + + if not is_numPr: + content.append(obj) + sections.sort(key=section_priority) + return sections, content diff --git a/markuplib/omml2mml.xsl b/markuplib/omml2mml.xsl new file mode 100644 index 0000000..dcd23ee --- /dev/null +++ b/markuplib/omml2mml.xsl @@ -0,0 +1,2068 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mml="http://www.w3.org/1998/Math/MathML" + xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"> + <xsl:output method="xml" encoding="UTF-16" /> + + <!-- %% Global Definitions --> + + <!-- Every single unicode character that is recognized by OMML as an operator --> + <xsl:variable name="sOperators" + select="concat( + '¨!"#&()+,-./:', + ';<=>?@[\]^_`{', + '|}~¡¦¬¯°±²³´·¹¿', + '×~÷ˇ˘˙˜˝̀́̂̃̄̅̆̇̈̉', + '̊̋̌̍̎̏̐̑̒̓̔̕', + '̡̛̖̗̘̙̜̝̞̟̠̚', + '̢̧̨̣̤̥̦̩̪̫̬̭', + '̴̵̶̷̸̮̯̰̱̲̳̿', + '         ‐‒–', + '—‖†‡•․‥…′″‴‼', + '⁀⁄⁎⁏⁐⁗⁡⁢⁣⁰⁴⁵', + '⁶⁷⁸⁹⁺⁻⁼⁽⁾₀₁₂', + '₃₄₅₆₇₈₉₊₋₌₍₎', + '⃒⃓⃘⃙⃚⃐⃑⃔⃕⃖⃗⃛', + '⃜⃝⃞⃟⃠⃡⃤⃥⃦⃨⃧⃩', + '⃪⅀ⅆ←↑→↓↔↕↖↗↘↙', + '↚↛↜↝↞↟↠↡↢↣↤↥', + '↦↧↨↩↪↫↬↭↮↯↰↱', + '↲↳↶↷↺↻↼↽↾↿⇀⇁', + '⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍', + '⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙', + '⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥', + '⇦⇧⇨⇩⇳⇴⇵⇶⇷⇸⇹⇺', + '⇻⇼⇽⇾⇿∀∁∂∃∄∆∇', + '∈∉∊∋∌∍∏∐∑−∓∔', + '∕∖∗∘∙√∛∜∝∣∤∥', + '∦∧∨∩∪∫∬∭∮∯∰∱', + '∲∳∴∵∶∷∸∹∺∻∼∽', + '∾≀≁≂≃≄≅≆≇≈≉≊', + '≋≌≍≎≏≐≑≒≓≔≕≖', + '≗≘≙≚≛≜≝≞≟≠≡≢', + '≣≤≥≦≧≨≩≪≫≬≭≮', + '≯≰≱≲≳≴≵≶≷≸≹≺', + '≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆', + '⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒', + '⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞', + '⊟⊠⊡⊢⊣⊥⊦⊧⊨⊩⊪⊫', + '⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷', + '⊸⊹⊺⊻⊼⊽⋀⋁⋂⋃⋄⋅', + '⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑', + '⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝', + '⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩', + '⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵', + '⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌅⌆', + '⌈⌉⌊⌋⌜⌝⌞⌟⌢⌣〈〉', + '⌽⌿⎰⎱⏜⏝⏞⏟⏠│├┤', + '┬┴▁█▒■□▭▲△▴▵', + '▶▷▸▹▼▽▾▿◀◁◂◃', + '◄◅◊○◦◫◬◸◹◺◻◼', + '◽◾◿★☆❲❳⟑⟒⟓⟔⟕', + '⟖⟗⟘⟙⟚⟛⟜⟝⟞⟟⟠⟡', + '⟢⟣⟤⟥⟦⟧⟨⟩⟪⟫⟰⟱', + '⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽', + '⟾⟿⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉', + '⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕', + '⤖⤗⤘⤙⤚⤛⤜⤝⤞⤟⤠⤡', + '⤢⤣⤤⤥⤦⤧⤨⤩⤪⤫⤬⤭', + '⤮⤯⤰⤱⤲⤳⤴⤵⤶⤷⤸⤹', + '⤺⤻⤼⤽⤾⤿⥀⥁⥂⥃⥄⥅', + '⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑', + '⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝', + '⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩', + '⥪⥫⥬⥭⥮⥯⥰⥱⥲⥳⥴⥵', + '⥶⥷⥸⥹⥺⥻⥼⥽⥾⥿⦀⦂', + '⦃⦄⦅⦆⦇⦈⦉⦊⦋⦌⦍⦎', + '⦏⦐⦑⦒⦓⦔⦕⦖⦗⦘⦙⦚', + '⦶⦷⦸⦹⧀⧁⧄⧅⧆⧇⧈⧎', + '⧏⧐⧑⧒⧓⧔⧕⧖⧗⧘⧙⧚', + '⧛⧟⧡⧢⧣⧤⧥⧦⧫⧴⧵⧶', + '⧷⧸⧹⧺⧻⧼⧽⧾⧿⨀⨁⨂', + '⨃⨄⨅⨆⨇⨈⨉⨊⨋⨌⨍⨎', + '⨏⨐⨑⨒⨓⨔⨕⨖⨗⨘⨙⨚', + '⨛⨜⨝⨞⨟⨠⨡⨢⨣⨤⨥⨦', + '⨧⨨⨩⨪⨫⨬⨭⨮⨯⨰⨱⨲', + '⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⨾', + '⨿⩀⩁⩂⩃⩄⩅⩆⩇⩈⩉⩊', + '⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖', + '⩗⩘⩙⩚⩛⩜⩝⩞⩟⩠⩡⩢', + '⩣⩤⩥⩦⩧⩨⩩⩪⩫⩬⩭⩮', + '⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺', + '⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆', + '⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒', + '⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞', + '⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪', + '⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶', + '⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂', + '⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎', + '⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫚', + '⫛⫝̸⫝⫞⫟⫠⫢⫣⫤⫥⫦⫧', + '⫨⫩⫪⫫⫬⫭⫮⫯⫰⫲⫳⫴', + '⫵⫶⫷⫸⫹⫺⫻⫼⫽⫾⫿⬄', + '⬆⬇⬌⬍〔〕〖〗〘〙!&', + '()+,-./:;<=>', + '?@[\]^_{|}')" /> + + <!-- A string of '-'s repeated exactly as many times as the operators above --> + <xsl:variable name="sMinuses"> + <xsl:call-template name="SRepeatChar"> + <xsl:with-param name="cchRequired" select="string-length($sOperators)" /> + <xsl:with-param name="ch" select="'-'" /> + </xsl:call-template> + </xsl:variable> + + <!-- Every single unicode character that is recognized by OMML as a number --> + <xsl:variable name="sNumbers" select="'0123456789'" /> + + <!-- A string of '0's repeated exactly as many times as the list of numbers above --> + <xsl:variable name="sZeros"> + <xsl:call-template name="SRepeatChar"> + <xsl:with-param name="cchRequired" select="string-length($sNumbers)" /> + <xsl:with-param name="ch" select="'0'" /> + </xsl:call-template> + </xsl:variable> + + <!-- %%Template: SReplace + + Replace all occurences of sOrig in sInput with sReplacement + and return the resulting string. --> + <xsl:template name="SReplace"> + <xsl:param name="sInput" /> + <xsl:param name="sOrig" /> + <xsl:param name="sReplacement" /> + + <xsl:choose> + <xsl:when test="not(contains($sInput, $sOrig))"> + <xsl:value-of select="$sInput" /> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="sBefore" select="substring-before($sInput, $sOrig)" /> + <xsl:variable name="sAfter" select="substring-after($sInput, $sOrig)" /> + <xsl:variable name="sAfterProcessed"> + <xsl:call-template name="SReplace"> + <xsl:with-param name="sInput" select="$sAfter" /> + <xsl:with-param name="sOrig" select="$sOrig" /> + <xsl:with-param name="sReplacement" select="$sReplacement" /> + </xsl:call-template> + </xsl:variable> + + <xsl:value-of select="concat($sBefore, concat($sReplacement, $sAfterProcessed))" /> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- Templates --> + <xsl:template match="/"> + <mml:math> + <xsl:apply-templates select="*" /> + </mml:math> + </xsl:template> + + <xsl:template match="m:borderBox"> + + <!-- Get Lowercase versions of properties --> + <xsl:variable name="sLowerCaseHideTop" select="translate(m:borderBoxPr[last()]/m:hideTop[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseHideBot" select="translate(m:borderBoxPr[last()]/m:hideBot[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseHideLeft" select="translate(m:borderBoxPr[last()]/m:hideLeft[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseHideRight" select="translate(m:borderBoxPr[last()]/m:hideRight[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseStrikeH" select="translate(m:borderBoxPr[last()]/m:strikeH[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseStrikeV" select="translate(m:borderBoxPr[last()]/m:strikeV[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseStrikeBLTR" select="translate(m:borderBoxPr[last()]/m:strikeBLTR[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseStrikeTLBR" select="translate(m:borderBoxPr[last()]/m:strikeTLBR[last()]/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="fHideTop"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseHideTop" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fHideBot"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseHideBot" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fHideLeft"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseHideLeft" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fHideRight"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseHideRight" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fStrikeH"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseStrikeH" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fStrikeV"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseStrikeV" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fStrikeBLTR"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseStrikeBLTR" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="fStrikeTLBR"> + <xsl:call-template name="ForceTrueStrVal"> + <xsl:with-param name="str" select="$sLowerCaseStrikeTLBR" /> + </xsl:call-template> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$fHideTop=1 + and $fHideBot=1 + and $fHideLeft=1 + and $fHideRight=1 + and $fStrikeH=0 + and $fStrikeV=0 + and $fStrikeBLTR=0 + and $fStrikeTLBR=0"> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + </xsl:when> + <xsl:otherwise> + <mml:menclose> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideTop" select="$fHideTop" /> + <xsl:with-param name="fHideBot" select="$fHideBot" /> + <xsl:with-param name="fHideLeft" select="$fHideLeft" /> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + </xsl:call-template> + <xsl:apply-templates select="m:e[1]" /> + </mml:menclose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="*"> + <xsl:apply-templates select="*" /> + </xsl:template> + + <!-- + { Non-combining, Upper-combining, Lower-combining } + {U+02D8, U+0306, U+032E}, // BREVE + {U+00B8, U+0312, U+0327}, // CEDILLA + {U+0060, U+0300, U+0316}, // GRAVE ACCENT + {U+002D, U+0305, U+0332}, // HYPHEN-MINUS/OVERLINE + {U+2212, U+0305, U+0332}, // MINUS SIGN/OVERLINE + {U+002E, U+0305, U+0323}, // FULL STOP/DOT ABOVE + {U+02D9, U+0307, U+0323}, // DOT ABOVE + {U+02DD, U+030B, U+02DD}, // DOUBLE ACUTE ACCENT + {U+00B4, U+0301, U+0317}, // ACUTE ACCENT + {U+007E, U+0303, U+0330}, // TILDE + {U+02DC, U+0303, U+0330}, // SMALL TILDE + {U+00A8, U+0308, U+0324}, // DIAERESIS + {U+02C7, U+030C, U+032C}, // CARON + {U+005E, U+0302, U+032D}, // CIRCUMFLEX ACCENT + {U+00AF, U+0305, ::::::}, // MACRON + {U+005F, ::::::, U+0332}, // LOW LINE + {U+2192, U+20D7, U+20EF}, // RIGHTWARDS ARROW + {U+27F6, U+20D7, U+20EF}, // LONG RIGHTWARDS ARROW + {U+2190, U+20D6, U+20EE}, // LEFT ARROW + --> + <xsl:template name="ToNonCombining"> + <xsl:param name="ch" /> + <xsl:choose> + <!-- BREVE --> + <xsl:when test="$ch='̆' or $ch='̮'">˘</xsl:when> + <!-- CEDILLA --> + <xsl:when test="$ch='̒' or $ch='̧'">¸</xsl:when> + <!-- GRAVE ACCENT --> + <xsl:when test="$ch='̀' or $ch='̖'">`</xsl:when> + <!-- HYPHEN-MINUS/OVERLINE --> + <xsl:when test="$ch='̅' or $ch='̲'">-</xsl:when> + <!-- MINUS SIGN/OVERLINE --> + <xsl:when test="$ch='̅' or $ch='̲'">−</xsl:when> + <!-- FULL STOP/DOT ABOVE --> + <xsl:when test="$ch='̅' or $ch='̣'">.</xsl:when> + <!-- DOT ABOVE --> + <xsl:when test="$ch='̇' or $ch='̣'">˙</xsl:when> + <!-- DOUBLE ACUTE ACCENT --> + <xsl:when test="$ch='̋' or $ch='˝'">˝</xsl:when> + <!-- ACUTE ACCENT --> + <xsl:when test="$ch='́' or $ch='̗'">´</xsl:when> + <!-- TILDE --> + <xsl:when test="$ch='̃' or $ch='̰'">~</xsl:when> + <!-- SMALL TILDE --> + <xsl:when test="$ch='̃' or $ch='̰'">˜</xsl:when> + <!-- DIAERESIS --> + <xsl:when test="$ch='̈' or $ch='̤'">¨</xsl:when> + <!-- CARON --> + <xsl:when test="$ch='̌' or $ch='̬'">ˇ</xsl:when> + <!-- CIRCUMFLEX ACCENT --> + <xsl:when test="$ch='̂' or $ch='̭'">^</xsl:when> + <!-- MACRON --> + <xsl:when test="$ch='̅' ">¯</xsl:when> + <!-- LOW LINE --> + <xsl:when test=" $ch='̲'">_</xsl:when> + <!-- RIGHTWARDS ARROW --> + <xsl:when test="$ch='⃗' or $ch='⃯'">→</xsl:when> + <!-- LONG RIGHTWARDS ARROW --> + <xsl:when test="$ch='⃗' or $ch='⃯'">⟶</xsl:when> + <!-- LEFT ARROW --> + <xsl:when test="$ch='⃖' or $ch='⃮'">←</xsl:when> + <xsl:otherwise> + <xsl:value-of select="$ch"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="m:acc"> + <mml:mover> + <xsl:attribute name="accent">true</xsl:attribute> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <xsl:variable name="chAcc"> + <xsl:choose> + <xsl:when test="not(m:accPr[last()]/m:chr)"> + <xsl:value-of select="'̂'" /> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="substring(m:accPr/m:chr/@m:val,1,1)" /> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="chNonComb"> + <xsl:call-template name="ToNonCombining"> + <xsl:with-param name="ch" select="$chAcc" /> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="string-length($chAcc)=0"> + <mml:mo/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="ParseMt"> + <xsl:with-param name="sToParse" select="$chNonComb" /> + <xsl:with-param name="scr" select="m:e[1]/*/m:rPr[last()]/m:scr/@m:val" /> + <xsl:with-param name="sty" select="m:e[1]/*/m:rPr[last()]/m:sty/@m:val" /> + <xsl:with-param name="nor"> + <xsl:choose> + <xsl:when test="count(m:e[1]/*/m:rPr[last()]/m:nor) = 0">0</xsl:when> + <xsl:otherwise> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="translate(m:e[1]/*/m:rPr[last()]/m:nor/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:with-param> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </mml:mover> + </xsl:template> + + <xsl:template name="OutputScript"> + <xsl:param name="ndCur" select="." /> + <xsl:choose> + <!-- Only output contents of $ndCur if $ndCur exists + and $ndCur has children --> + <xsl:when test="count($ndCur/*) > 0"> + <mml:mrow> + <xsl:apply-templates select="$ndCur" /> + </mml:mrow> + </xsl:when> + <xsl:otherwise> + <mml:none /> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="m:sPre"> + <mml:mmultiscripts> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mprescripts /> + <xsl:call-template name="OutputScript"> + <xsl:with-param name="ndCur" select="m:sub[1]"/> + </xsl:call-template> + <xsl:call-template name="OutputScript"> + <xsl:with-param name="ndCur" select="m:sup[1]" /> + </xsl:call-template> + </mml:mmultiscripts> + </xsl:template> + + <xsl:template match="m:m"> + <mml:mtable> + <xsl:call-template name="CreateMathMLMatrixAttr"> + <xsl:with-param name="mcJc" select="m:mPr[last()]/m:mcs/m:mc/m:mcPr[last()]/m:mcJc/@m:val" /> + </xsl:call-template> + <xsl:for-each select="m:mr"> + <mml:mtr> + <xsl:for-each select="m:e"> + <mml:mtd> + <xsl:apply-templates select="." /> + </mml:mtd> + </xsl:for-each> + </mml:mtr> + </xsl:for-each> + </mml:mtable> + </xsl:template> + + <xsl:template name="CreateMathMLMatrixAttr"> + <xsl:param name="mcJc" /> + <xsl:variable name="sLowerCaseMcjc" select="translate($mcJc, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:choose> + <xsl:when test="$sLowerCaseMcjc='left'"> + <xsl:attribute name="columnalign">left</xsl:attribute> + </xsl:when> + <xsl:when test="$sLowerCaseMcjc='right'"> + <xsl:attribute name="columnalign">right</xsl:attribute> + </xsl:when> + </xsl:choose> + </xsl:template> + + <xsl:template match="m:phant"> + <xsl:variable name="sLowerCaseZeroWidVal" select="translate(m:phantPr[last()]/m:zeroWid[last()]/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseZeroAscVal" select="translate(m:phantPr[last()]/m:zeroAsc[last()]/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseZeroDescVal" select="translate(m:phantPr[last()]/m:zeroDesc[last()]/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="sLowerCaseShowVal" select="translate(m:phantPr[last()]/m:show[last()]/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + + + <!-- The following properties default to 'yes' unless the last value equals 'no' or there isn't any node for + the property --> + + <xsl:variable name="fZeroWid"> + <xsl:choose> + <xsl:when test="count(m:phantPr[last()]/m:zeroWid[last()]) = 0">0</xsl:when> + <xsl:otherwise> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="$sLowerCaseZeroWidVal" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="fZeroAsc"> + <xsl:choose> + <xsl:when test="count(m:phantPr[last()]/m:zeroAsc[last()]) = 0">0</xsl:when> + <xsl:otherwise> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="$sLowerCaseZeroAscVal" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="fZeroDesc"> + <xsl:choose> + <xsl:when test="count(m:phantPr[last()]/m:zeroDesc[last()]) = 0">0</xsl:when> + <xsl:otherwise> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="$sLowerCaseZeroDescVal" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- The show property defaults to 'on' unless there exists a show property and its value is 'off' --> + + <xsl:variable name="fShow"> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="$sLowerCaseShowVal" /> + </xsl:call-template> + </xsl:variable> + + <xsl:choose> + <!-- Show the phantom contents, therefore, just use mpadded. --> + <xsl:when test="$fShow = 1"> + <xsl:element name="mml:mpadded"> + <xsl:call-template name="CreateMpaddedAttributes"> + <xsl:with-param name="fZeroWid" select="$fZeroWid" /> + <xsl:with-param name="fZeroAsc" select="$fZeroAsc" /> + <xsl:with-param name="fZeroDesc" select="$fZeroDesc" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:e" /> + </mml:mrow> + </xsl:element> + </xsl:when> + <!-- Don't show phantom contents, but don't smash anything, therefore, just + use mphantom --> + <xsl:when test="$fZeroWid=0 and $fZeroAsc=0 and $fZeroDesc=0"> + <xsl:element name="mml:mphantom"> + <mml:mrow> + <xsl:apply-templates select="m:e" /> + </mml:mrow> + </xsl:element> + </xsl:when> + <!-- Combination --> + <xsl:otherwise> + <xsl:element name="mml:mphantom"> + <xsl:element name="mml:mpadded"> + <xsl:call-template name="CreateMpaddedAttributes"> + <xsl:with-param name="fZeroWid" select="$fZeroWid" /> + <xsl:with-param name="fZeroAsc" select="$fZeroAsc" /> + <xsl:with-param name="fZeroDesc" select="$fZeroDesc" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:e" /> + </mml:mrow> + </xsl:element> + </xsl:element> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template name="CreateMpaddedAttributes"> + <xsl:param name="fZeroWid" /> + <xsl:param name="fZeroAsc" /> + <xsl:param name="fZeroDesc" /> + + <xsl:if test="$fZeroWid=1"> + <xsl:attribute name="width">0in</xsl:attribute> + </xsl:if> + <xsl:if test="$fZeroAsc=1"> + <xsl:attribute name="height">0in</xsl:attribute> + </xsl:if> + <xsl:if test="$fZeroDesc=1"> + <xsl:attribute name="depth">0in</xsl:attribute> + </xsl:if> + </xsl:template> + + + + <xsl:template match="m:rad"> + <xsl:variable name="fDegHide"> + <xsl:choose> + <xsl:when test="count(m:radPr[last()]/m:degHide)=0">0</xsl:when> + <xsl:otherwise> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="translate(m:radPr[last()]/m:degHide/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + <xsl:when test="$fDegHide=1"> + <mml:msqrt> + <xsl:apply-templates select="m:e[1]" /> + </mml:msqrt> + </xsl:when> + <xsl:otherwise> + <mml:mroot> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:deg[1]" /> + </mml:mrow> + </mml:mroot> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template name="OutputNaryMo"> + <xsl:param name="ndCur" select="." /> + <xsl:param name="fGrow" select="0" /> + <mml:mo> + <xsl:choose> + <xsl:when test="$fGrow=1"> + <xsl:attribute name="stretchy">true</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="stretchy">false</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <xsl:choose> + <xsl:when test="not($ndCur/m:naryPr[last()]/m:chr/@m:val) or + $ndCur/m:naryPr[last()]/m:chr/@m:val=''"> + <xsl:text>∫</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$ndCur/m:naryPr[last()]/m:chr/@m:val" /> + </xsl:otherwise> + </xsl:choose> + </mml:mo> + </xsl:template> + + <!-- %%Template match m:nary + Process an n-ary. + + Decides, based on which arguments are supplied, between + using an mo, msup, msub, or msubsup for the n-ary operator + --> + <xsl:template match="m:nary"> + <xsl:variable name="sLowerCaseSubHide"> + <xsl:choose> + <xsl:when test="count(m:naryPr[last()]/m:subHide) = 0"> + <xsl:text>off</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="translate(m:naryPr[last()]/m:subHide/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="sLowerCaseSupHide"> + <xsl:choose> + <xsl:when test="count(m:naryPr[last()]/m:supHide) = 0"> + <xsl:text>off</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="translate(m:naryPr[last()]/m:supHide/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="sLowerCaseLimLoc"> + <xsl:value-of select="translate(m:naryPr[last()]/m:limLoc/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:variable> + + <xsl:variable name="sLowerGrow"> + <xsl:choose> + <xsl:when test="count(m:naryPr[last()]/m:grow)=0">off</xsl:when> + <xsl:otherwise> + <xsl:value-of select="translate(m:naryPr[last()]/m:grow/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="fLimLocSubSup"> + <xsl:choose> + <xsl:when test="count(m:naryPr[last()]/m:limLoc)=0 or $sLowerCaseLimLoc='subsup'">1</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="fGrow"> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="$sLowerGrow" /> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="fSupHide"> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="$sLowerCaseSupHide" /> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="fSubHide"> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="$sLowerCaseSubHide" /> + </xsl:call-template> + </xsl:variable> + + <mml:mrow> + <xsl:choose> + <xsl:when test="$fSupHide=1 and $fSubHide=1"> + <xsl:call-template name="OutputNaryMo"> + <xsl:with-param name="ndCur" select="." /> + <xsl:with-param name="fGrow" select="$fGrow" /> + </xsl:call-template> + </xsl:when> + <xsl:when test="$fSubHide=1"> + <xsl:choose> + <xsl:when test="$fLimLocSubSup=1"> + <mml:msup> + <xsl:call-template name="OutputNaryMo"> + <xsl:with-param name="ndCur" select="." /> + <xsl:with-param name="fGrow" select="$fGrow" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:sup[1]" /> + </mml:mrow> + </mml:msup> + </xsl:when> + <xsl:otherwise> + <mml:mover> + <xsl:call-template name="OutputNaryMo"> + <xsl:with-param name="ndCur" select="." /> + <xsl:with-param name="fGrow" select="$fGrow" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:sup[1]" /> + </mml:mrow> + </mml:mover> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="$fSupHide=1"> + <xsl:choose> + <xsl:when test="$fLimLocSubSup=1"> + <mml:msub> + <xsl:call-template name="OutputNaryMo"> + <xsl:with-param name="ndCur" select="." /> + <xsl:with-param name="fGrow" select="$fGrow" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:sub[1]" /> + </mml:mrow> + </mml:msub> + </xsl:when> + <xsl:otherwise> + <mml:munder> + <xsl:call-template name="OutputNaryMo"> + <xsl:with-param name="ndCur" select="." /> + <xsl:with-param name="fGrow" select="$fGrow" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:sub[1]" /> + </mml:mrow> + </mml:munder> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$fLimLocSubSup=1"> + <mml:msubsup> + <xsl:call-template name="OutputNaryMo"> + <xsl:with-param name="ndCur" select="." /> + <xsl:with-param name="fGrow" select="$fGrow" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:sub[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:sup[1]" /> + </mml:mrow> + </mml:msubsup> + </xsl:when> + <xsl:otherwise> + <mml:munderover> + <xsl:call-template name="OutputNaryMo"> + <xsl:with-param name="ndCur" select="." /> + <xsl:with-param name="fGrow" select="$fGrow" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:sub[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:sup[1]" /> + </mml:mrow> + </mml:munderover> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + </mml:mrow> + </xsl:template> + + <xsl:template match="m:limLow"> + <mml:munder> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:lim[1]" /> + </mml:mrow> + </mml:munder> + </xsl:template> + + <xsl:template match="m:limUpp"> + <mml:mover> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:lim[1]" /> + </mml:mrow> + </mml:mover> + </xsl:template> + + <xsl:template match="m:sSub"> + <mml:msub> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:sub[1]" /> + </mml:mrow> + </mml:msub> + </xsl:template> + + <xsl:template match="m:sSup"> + <mml:msup> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:sup[1]" /> + </mml:mrow> + </mml:msup> + </xsl:template> + + <xsl:template match="m:sSubSup"> + <mml:msubsup> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:sub[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:sup[1]" /> + </mml:mrow> + </mml:msubsup> + </xsl:template> + + <xsl:template match="m:groupChr"> + <xsl:variable name="ndLastGroupChrPr" select="m:groupChrPr[last()]" /> + <xsl:variable name="sLowerCasePos" select="translate($ndLastGroupChrPr/m:pos/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + + <xsl:variable name="sLowerCaseVertJc" select="translate($ndLastGroupChrPr/m:vertJc/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:variable name="ndLastChr" select="$ndLastGroupChrPr/m:chr" /> + + <xsl:variable name="chr"> + <xsl:choose> + <xsl:when test="$ndLastChr and (not($ndLastChr/@m:val) or string-length($ndLastChr/@m:val) = 0)"></xsl:when> + <xsl:when test="string-length($ndLastChr/@m:val) >= 1"> + <xsl:value-of select="substring($ndLastChr/@m:val,1,1)" /> + </xsl:when> + <xsl:otherwise> + <xsl:text>⏟</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + <xsl:when test="$sLowerCasePos = 'top'"> + <xsl:choose> + <xsl:when test="$sLowerCaseVertJc = 'bot'"> + <mml:mover accent="false"> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mo> + <xsl:value-of select="$chr" /> + </mml:mo> + </mml:mover> + </xsl:when> + <xsl:otherwise> + <mml:munder accentunder="false"> + <mml:mo> + <xsl:value-of select="$chr" /> + </mml:mo> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + </mml:munder> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$sLowerCaseVertJc = 'bot'"> + <mml:mover accent="false"> + <mml:mo> + <xsl:value-of select="$chr" /> + </mml:mo> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + </mml:mover> + </xsl:when> + <xsl:otherwise> + <mml:munder accentunder="false"> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mo> + <xsl:value-of select="$chr" /> + </mml:mo> + </mml:munder> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template name="fName"> + <xsl:for-each select="m:fName/*"> + <xsl:apply-templates select="." /> + </xsl:for-each> + </xsl:template> + + <xsl:template match="m:func"> + <mml:mrow> + <mml:mrow> + <xsl:call-template name="fName" /> + </mml:mrow> + <mml:mo>⁡</mml:mo> + <mml:mrow> + <xsl:apply-templates select="m:e" /> + </mml:mrow> + </mml:mrow> + </xsl:template> + + <!-- %%Template: match m:f + + m:f maps directly to mfrac. + --> + <xsl:template match="m:f"> + <xsl:variable name="sLowerCaseType" select="translate(m:fPr[last()]/m:type/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" /> + <xsl:choose> + <xsl:when test="$sLowerCaseType='lin'"> + <mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:num[1]" /> + </mml:mrow> + <mml:mo>/</mml:mo> + <mml:mrow> + <xsl:apply-templates select="m:den[1]" /> + </mml:mrow> + </mml:mrow> + </xsl:when> + <xsl:otherwise> + <mml:mfrac> + <xsl:call-template name="CreateMathMLFracProp"> + <xsl:with-param name="type" select="$sLowerCaseType" /> + </xsl:call-template> + <mml:mrow> + <xsl:apply-templates select="m:num[1]" /> + </mml:mrow> + <mml:mrow> + <xsl:apply-templates select="m:den[1]" /> + </mml:mrow> + </mml:mfrac> + </xsl:otherwise> + </xsl:choose> + + </xsl:template> + + + <!-- %%Template: CreateMathMLFracProp + + Make fraction properties based on supplied parameters. + OMML differentiates between a linear fraction and a skewed + one. For MathML, we write both as bevelled. + --> + <xsl:template name="CreateMathMLFracProp"> + <xsl:param name="type" /> + <xsl:variable name="sLowerCaseType" select="translate($type, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" /> + + <xsl:if test="$sLowerCaseType='skw' or $sLowerCaseType='lin'"> + <xsl:attribute name="bevelled">true</xsl:attribute> + </xsl:if> + <xsl:if test="$sLowerCaseType='nobar'"> + <xsl:attribute name="linethickness">0pt</xsl:attribute> + </xsl:if> + <xsl:choose> + <xsl:when test="sLowerCaseNumJc='right'"> + <xsl:attribute name="numalign">right</xsl:attribute> + </xsl:when> + <xsl:when test="sLowerCaseNumJc='left'"> + <xsl:attribute name="numalign">left</xsl:attribute> + </xsl:when> + </xsl:choose> + <xsl:choose> + <xsl:when test="sLowerCaseDenJc='right'"> + <xsl:attribute name="numalign">right</xsl:attribute> + </xsl:when> + <xsl:when test="sLowerCaseDenJc='left'"> + <xsl:attribute name="numalign">left</xsl:attribute> + </xsl:when> + </xsl:choose> + </xsl:template> + + <!-- %%Template: match m:e | m:den | m:num | m:lim | m:sup | m:sub + + These element delinate parts of an expression (like the numerator). --> + <xsl:template match="m:e | m:den | m:num | m:lim | m:sup | m:sub"> + <xsl:choose> + + <!-- If there is no scriptLevel specified, just call through --> + <xsl:when test="not(m:argPr[last()]/m:scrLvl/@m:val)"> + <xsl:apply-templates select="*" /> + </xsl:when> + + <!-- Otherwise, create an mstyle and set the script level --> + <xsl:otherwise> + <mml:mstyle> + <xsl:attribute name="scriptlevel"> + <xsl:value-of select="m:argPr[last()]/m:scrLvl/@m:val" /> + </xsl:attribute> + <xsl:apply-templates select="*" /> + </mml:mstyle> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="m:bar"> + <xsl:variable name="sLowerCasePos" select="translate(m:barPr/m:pos/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + + <xsl:variable name="fTop"> + + <xsl:choose> + <xsl:when test="$sLowerCasePos='top'">1</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + <xsl:when test="$fTop=1"> + <mml:mover accent="false"> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mo> + <xsl:text>¯</xsl:text> + </mml:mo> + </mml:mover> + </xsl:when> + <xsl:otherwise> + <mml:munder underaccent="false"> + <mml:mrow> + <xsl:apply-templates select="m:e[1]" /> + </mml:mrow> + <mml:mo> + <xsl:text>_</xsl:text> + </mml:mo> + </mml:munder> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- %%Template match m:d + + Process a delimiter. + --> + <xsl:template match="m:d"> + <mml:mfenced> + <!-- open: default is '(' for both OMML and MathML --> + <xsl:if test="m:dPr[1]/m:begChr/@m:val and not(m:dPr[1]/m:begChr/@m:val ='(')"> + <xsl:attribute name="open"> + <xsl:value-of select="m:dPr[1]/m:begChr/@m:val" /> + </xsl:attribute> + </xsl:if> + + <!-- close: default is ')' for both OMML and MathML --> + <xsl:if test="m:dPr[1]/m:endChr/@m:val and not(m:dPr[1]/m:endChr/@m:val =')')"> + <xsl:attribute name="close"> + <xsl:value-of select="m:dPr[1]/m:endChr/@m:val" /> + </xsl:attribute> + </xsl:if> + + <!-- separator: the default is ',' for MathML, and '|' for OMML --> + <xsl:choose> + <!-- Matches MathML default. Write nothing --> + <xsl:when test="m:dPr[1]/m:sepChr/@m:val = ','" /> + + <!-- OMML default: | --> + <xsl:when test="not(m:dPr[1]/m:sepChr/@m:val)"> + <xsl:attribute name="separators"> + <xsl:value-of select="'|'" /> + </xsl:attribute> + </xsl:when> + + <xsl:otherwise> + <xsl:attribute name="separators"> + <xsl:value-of select="m:dPr[1]/m:sepChr/@m:val" /> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + + <!-- now write all the children. Put each one into an mrow + just in case it produces multiple runs, etc --> + <xsl:for-each select="m:e"> + <mml:mrow> + <xsl:apply-templates select="." /> + </mml:mrow> + </xsl:for-each> + </mml:mfenced> + </xsl:template> + + <xsl:template match="m:r"> + <xsl:variable name="fNor"> + <xsl:choose> + <xsl:when test="count(child::m:rPr[last()]/m:nor) = 0">0</xsl:when> + <xsl:otherwise> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="translate(child::m:rPr[last()]/m:nor/@m:val, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$fNor=1"> + <mml:mtext> + <xsl:variable name="sOutput" select="translate(.//m:t, ' ', ' ')" /> + <xsl:value-of select="$sOutput" /> + </mml:mtext> + </xsl:when> + <xsl:otherwise> + <xsl:for-each select=".//m:t"> + <xsl:call-template name="ParseMt"> + <xsl:with-param name="sToParse" select="text()" /> + <xsl:with-param name="scr" select="../m:rPr[last()]/m:scr/@m:val" /> + <xsl:with-param name="sty" select="../m:rPr[last()]/m:sty/@m:val" /> + <xsl:with-param name="nor">0</xsl:with-param> + </xsl:call-template> + </xsl:for-each> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + + <xsl:template name="CreateTokenAttributes"> + <xsl:param name="scr" /> + <xsl:param name="sty" /> + <xsl:param name="nor" /> + <xsl:param name="nCharToPrint" /> + <xsl:param name="sTokenType" /> + + <xsl:choose> + <xsl:when test="$nor=1"> + <xsl:attribute name="mathvariant">normal</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="mathvariant"> + <xsl:choose> + <!-- numbers don't care --> + <xsl:when test="$sTokenType='mn'" /> + + <xsl:when test="$scr='monospace'">monospace</xsl:when> + <xsl:when test="$scr='sans-serif' and $sty='i'">sans-serif-italic</xsl:when> + <xsl:when test="$scr='sans-serif' and $sty='b'">bold-sans-serif</xsl:when> + <xsl:when test="$scr='sans-serif' and $sty='bi'">sans-serif-bold-italic</xsl:when> + <xsl:when test="$scr='sans-serif'">sans-serif</xsl:when> + <xsl:when test="$scr='fraktur' and ($sty='b' or $sty='bi')">bold-fraktur</xsl:when> + <xsl:when test="$scr='fraktur'">fraktur</xsl:when> + <xsl:when test="$scr='double-struck'">double-struck</xsl:when> + <xsl:when test="$scr='script' and ($sty='b' or $sty='bi')">bold-script</xsl:when> + <xsl:when test="$scr='script'">script</xsl:when> + <xsl:when test="($scr='roman' or not($scr) or $scr='') and $sty='b'">bold</xsl:when> + <xsl:when test="($scr='roman' or not($scr) or $scr='') and $sty='i'">italic</xsl:when> + <xsl:when test="($scr='roman' or not($scr) or $scr='') and $sty='p'">normal</xsl:when> + <xsl:when test="($scr='roman' or not($scr) or $scr='') and $sty='bi'">bold-italic</xsl:when> + <xsl:otherwise /> + </xsl:choose> + </xsl:variable> + <xsl:variable name="fontweight"> + <xsl:choose> + <xsl:when test="$sty='b' or $sty='bi'">bold</xsl:when> + <xsl:otherwise>normal</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="fontstyle"> + <xsl:choose> + <xsl:when test="$sty='p' or $sty='b'">normal</xsl:when> + <xsl:otherwise>italic</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- Writing of attributes begins here --> + <xsl:choose> + <!-- Don't write mathvariant for operators unless they want to be normal --> + <xsl:when test="$sTokenType='mo' and $mathvariant!='normal'" /> + + <!-- A single character within an mi is already italics, don't write --> + <xsl:when test="$sTokenType='mi' and $nCharToPrint=1 and ($mathvariant='' or $mathvariant='italic')" /> + + <xsl:when test="$sTokenType='mi' and $nCharToPrint > 1 and ($mathvariant='' or $mathvariant='italic')"> + <xsl:attribute name="mathvariant"> + <xsl:value-of select="'italic'" /> + </xsl:attribute> + </xsl:when> + <xsl:when test="$mathvariant!='italic' and $mathvariant!=''"> + <xsl:attribute name="mathvariant"> + <xsl:value-of select="$mathvariant" /> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:if test="not($sTokenType='mi' and $nCharToPrint=1) and $fontstyle='italic'"> + <xsl:attribute name="fontstyle">italic</xsl:attribute> + </xsl:if> + <xsl:if test="$fontweight='bold'"> + <xsl:attribute name="fontweight">bold</xsl:attribute> + </xsl:if> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="m:eqArr"> + <mml:mtable> + <xsl:for-each select="m:e"> + <mml:mtr> + <mml:mtd> + <xsl:choose> + <xsl:when test="m:argPr[last()]/m:scrLvl/@m:val!='0' or + not(m:argPr[last()]/m:scrLvl/@m:val) or + m:argPr[last()]/m:scrLvl/@m:val=''"> + <mml:mrow> + <mml:maligngroup /> + <xsl:call-template name="CreateEqArrRow"> + <xsl:with-param name="align" select="1" /> + <xsl:with-param name="ndCur" select="*[1]" /> + </xsl:call-template> + </mml:mrow> + </xsl:when> + <xsl:otherwise> + <mml:mstyle> + <xsl:attribute name="scriptlevel"> + <xsl:value-of select="m:argPr[last()]/m:scrLvl/@m:val" /> + </xsl:attribute> + <mml:maligngroup /> + <xsl:call-template name="CreateEqArrRow"> + <xsl:with-param name="align" select="1" /> + <xsl:with-param name="ndCur" select="*[1]" /> + </xsl:call-template> + </mml:mstyle> + </xsl:otherwise> + </xsl:choose> + </mml:mtd> + </mml:mtr> + </xsl:for-each> + </mml:mtable> + </xsl:template> + + <xsl:template name="CreateEqArrRow"> + <xsl:param name="align" /> + <xsl:param name="ndCur" /> + <xsl:variable name="sAllMt"> + <xsl:for-each select="$ndCur/m:t"> + <xsl:value-of select="." /> + </xsl:for-each> + </xsl:variable> + <xsl:choose> + <xsl:when test="$ndCur/self::m:r"> + <xsl:call-template name="ParseEqArrMr"> + <xsl:with-param name="sToParse" select="$sAllMt" /> + <xsl:with-param name="scr" select="../m:rPr[last()]/m:scr/@m:val" /> + <xsl:with-param name="sty" select="../m:rPr[last()]/m:sty/@m:val" /> + <xsl:with-param name="nor"> + <xsl:choose> + <xsl:when test="count($ndCur/m:rPr[last()]/m:nor) = 0">0</xsl:when> + <xsl:otherwise> + <xsl:call-template name="ForceFalseStrVal"> + <xsl:with-param name="str" select="translate($ndCur/m:rPr[last()]/m:nor/@m:val, + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'abcdefghijklmnopqrstuvwxyz')" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:with-param> + <xsl:with-param name="align" select="$align" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="$ndCur" /> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="count($ndCur/following-sibling::*) > 0"> + <xsl:variable name="cAmp"> + <xsl:call-template name="CountAmp"> + <xsl:with-param name="sAllMt" select="$sAllMt" /> + <xsl:with-param name="cAmp" select="0" /> + </xsl:call-template> + </xsl:variable> + <xsl:call-template name="CreateEqArrRow"> + <xsl:with-param name="align" select="($align+($cAmp mod 2)) mod 2" /> + <xsl:with-param name="ndCur" select="$ndCur/following-sibling::*[1]" /> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <xsl:template name="CountAmp"> + <xsl:param name="sAllMt" /> + <xsl:param name="cAmp" /> + <xsl:choose> + <xsl:when test="string-length(substring-after($sAllMt, '&')) > 0 or + substring($sAllMt, string-length($sAllMt))='&'"> + <xsl:call-template name="CountAmp"> + <xsl:with-param name="sAllMt" select="substring-after($sAllMt, '&')" /> + <xsl:with-param name="cAmp" select="$cAmp+1" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$cAmp" /> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- %%Template: ParseEqArrMr + + Similar to ParseMt, but this one has to do more for an equation array. + In equation arrays & is a special character which denotes alignment. + + The & in an equation works by alternating between meaning insert alignment spacing + and insert alignment mark. For each equation in the equation array + there is an implied align space at the beginning of the equation. Within each equation, + the first & means alignmark, the second, align space, the third, alignmark, etc. + + For this reason when parsing m:r's in equation arrays it is important to keep track of what + the next ampersand will mean. + + $align=0 => Omml's align space, which is similar to MathML's maligngroup. + $align=1 => Omml's alignment mark, which is similar to MathML's malignmark. + --> + <xsl:template name="ParseEqArrMr"> + <xsl:param name="sToParse" /> + <xsl:param name="sty" /> + <xsl:param name="scr" /> + <xsl:param name="nor" /> + <xsl:param name="align" /> + + <xsl:if test="string-length($sToParse) > 0"> + <xsl:choose> + <xsl:when test="substring($sToParse,1,1) = '&'"> + <xsl:choose> + <xsl:when test="$align='0'"> + <mml:maligngroup /> + </xsl:when> + <xsl:when test="$align='1'"> + <mml:malignmark /> + </xsl:when> + </xsl:choose> + <xsl:call-template name="ParseEqArrMr"> + <xsl:with-param name="sToParse" select="substring($sToParse,2)" /> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="align"> + <xsl:choose> + <xsl:when test="$align='1'">0</xsl:when> + <xsl:otherwise>1</xsl:otherwise> + </xsl:choose> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="sRepNumWith0"> + <xsl:call-template name="SReplaceNumWithZero"> + <xsl:with-param name="sToParse" select="$sToParse" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="sRepOperWith-"> + <xsl:call-template name="SReplaceOperWithMinus"> + <xsl:with-param name="sToParse" select="$sRepNumWith0" /> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="iFirstOper" select="string-length($sRepOperWith-) - string-length(substring-after($sRepOperWith-, '-'))" /> + <xsl:variable name="iFirstNum" select="string-length($sRepOperWith-) - string-length(substring-after($sRepOperWith-, '0'))" /> + <xsl:variable name="iFirstAmp" select="string-length($sRepOperWith-) - string-length(substring-after($sRepOperWith-, '&'))" /> + <xsl:variable name="fNumAtPos1"> + <xsl:choose> + <xsl:when test="substring($sRepOperWith-,1,1)='0'">1</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="fOperAtPos1"> + <xsl:choose> + <xsl:when test="substring($sRepOperWith-,1,1)='-'">1</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + + <!-- Case I: The string begins with neither a number, nor an operator --> + <xsl:when test="$fNumAtPos1='0' and $fOperAtPos1='0'"> + <xsl:choose> + <xsl:when test="$nor = 0"> + <mml:mi> + <xsl:call-template name="CreateTokenAttributes"> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="nCharToPrint" select="1" /> + <xsl:with-param name="sTokenType" select="'mi'" /> + </xsl:call-template> + <xsl:variable name="sOutput" select="translate(substring($sToParse, 1, 1), ' ', ' ')" /> + <xsl:value-of select="$sOutput" /> + </mml:mi> + </xsl:when> + <xsl:otherwise> + <mml:mtext> + <xsl:variable name="sOutput" select="translate(substring($sToParse, 1, 1), ' ', ' ')" /> + <xsl:value-of select="$sOutput" /> + </mml:mtext> + </xsl:otherwise> + </xsl:choose> + <xsl:call-template name="ParseEqArrMr"> + <xsl:with-param name="sToParse" select="substring($sToParse, 2)" /> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="align" select="$align" /> + </xsl:call-template> + </xsl:when> + + <!-- Case II: There is an operator at position 1 --> + <xsl:when test="$fOperAtPos1='1'"> + <xsl:choose> + <xsl:when test="$nor = 0"> + <mml:mo> + <xsl:call-template name="CreateTokenAttributes"> + <xsl:with-param name="scr" /> + <xsl:with-param name="sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="sTokenType" select="'mo'" /> + </xsl:call-template> + <xsl:value-of select="substring($sToParse,1,1)" /> + </mml:mo> + </xsl:when> + <xsl:otherwise> + <mml:mtext> + <xsl:value-of select="substring($sToParse,1,1)" /> + </mml:mtext> + </xsl:otherwise> + </xsl:choose> + <xsl:call-template name="ParseEqArrMr"> + <xsl:with-param name="sToParse" select="substring($sToParse, 2)" /> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="align" select="$align" /> + </xsl:call-template> + </xsl:when> + + <!-- Case III: There is a number at position 1 --> + <xsl:otherwise> + <xsl:variable name="sConsecNum"> + <xsl:call-template name="SNumStart"> + <xsl:with-param name="sToParse" select="$sToParse" /> + <xsl:with-param name="sPattern" select="$sRepNumWith0" /> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$nor = 0"> + <mml:mn> + <xsl:call-template name="CreateTokenAttributes"> + <xsl:with-param name="scr" /> + <xsl:with-param name="sty" select="'p'"/> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="sTokenType" select="'mn'" /> + </xsl:call-template> + <xsl:value-of select="$sConsecNum" /> + </mml:mn> + </xsl:when> + <xsl:otherwise> + <mml:mtext> + <xsl:value-of select="$sConsecNum" /> + </mml:mtext> + </xsl:otherwise> + </xsl:choose> + <xsl:call-template name="ParseEqArrMr"> + <xsl:with-param name="sToParse" select="substring-after($sToParse, $sConsecNum)" /> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="align" select="$align" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:template> + + <!-- %%Template: ParseMt + + Produce a run of text. Technically, OMML makes no distinction + between numbers, operators, and other characters in a run. For + MathML we need to break these into mi, mn, or mo elements. + + See also ParseEqArrMr + --> + <xsl:template name="ParseMt"> + <xsl:param name="sToParse" /> + <xsl:param name="sty" /> + <xsl:param name="scr" /> + <xsl:param name="nor" /> + <xsl:if test="string-length($sToParse) > 0"> + <xsl:variable name="sRepNumWith0"> + <xsl:call-template name="SReplaceNumWithZero"> + <xsl:with-param name="sToParse" select="$sToParse" /> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="sRepOperWith-"> + <xsl:call-template name="SReplaceOperWithMinus"> + <xsl:with-param name="sToParse" select="$sRepNumWith0" /> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="iFirstOper" select="string-length($sRepOperWith-) - string-length(substring-after($sRepOperWith-, '-'))" /> + <xsl:variable name="iFirstNum" select="string-length($sRepOperWith-) - string-length(substring-after($sRepOperWith-, '0'))" /> + <xsl:variable name="fNumAtPos1"> + <xsl:choose> + <xsl:when test="substring($sRepOperWith-,1,1)='0'">1</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="fOperAtPos1"> + <xsl:choose> + <xsl:when test="substring($sRepOperWith-,1,1)='-'">1</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:choose> + + <!-- Case I: The string begins with neither a number, nor an operator --> + <xsl:when test="$fOperAtPos1='0' and $fNumAtPos1='0'"> + <xsl:variable name="nCharToPrint"> + <xsl:choose> + <xsl:when test="ancestor::m:fName"> + <xsl:choose> + <xsl:when test="($iFirstOper=$iFirstNum) and + ($iFirstOper=string-length($sToParse)) and + (substring($sRepOperWith-, string-length($sRepOperWith-))!='0') and + (substring($sRepOperWith-, string-length($sRepOperWith-))!='-')"> + <xsl:value-of select="string-length($sToParse)" /> + </xsl:when> + <xsl:when test="$iFirstOper < $iFirstNum"> + <xsl:value-of select="$iFirstOper - 1" /> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$iFirstNum - 1" /> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise>1</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <mml:mi> + <xsl:call-template name="CreateTokenAttributes"> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="nCharToPrint" select="$nCharToPrint" /> + <xsl:with-param name="sTokenType" select="'mi'" /> + </xsl:call-template> + <xsl:variable name="sWrite" select="translate(substring($sToParse, 1, $nCharToPrint), ' ', ' ')" /> + <xsl:value-of select="$sWrite" /> + </mml:mi> + <xsl:call-template name="ParseMt"> + <xsl:with-param name="sToParse" select="substring($sToParse, $nCharToPrint+1)" /> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + </xsl:call-template> + </xsl:when> + + <!-- Case II: There is an operator at position 1 --> + <xsl:when test="$fOperAtPos1='1'"> + <mml:mo> + <xsl:call-template name="CreateTokenAttributes"> + <xsl:with-param name="scr" /> + <xsl:with-param name="sty" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="sTokenType" select="'mo'" /> + </xsl:call-template> + <xsl:value-of select="substring($sToParse,1,1)" /> + </mml:mo> + <xsl:call-template name="ParseMt"> + <xsl:with-param name="sToParse" select="substring($sToParse, 2)" /> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + </xsl:call-template> + </xsl:when> + + <!-- Case III: There is a number at position 1 --> + <xsl:otherwise> + <xsl:variable name="sConsecNum"> + <xsl:call-template name="SNumStart"> + <xsl:with-param name="sToParse" select="$sToParse" /> + <xsl:with-param name="sPattern" select="$sRepNumWith0" /> + </xsl:call-template> + </xsl:variable> + <mml:mn> + <xsl:call-template name="CreateTokenAttributes"> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="'p'" /> + <xsl:with-param name="nor" select="$nor" /> + <xsl:with-param name="sTokenType" select="'mn'" /> + </xsl:call-template> + <xsl:value-of select="$sConsecNum" /> + </mml:mn> + <xsl:call-template name="ParseMt"> + <xsl:with-param name="sToParse" select="substring-after($sToParse, $sConsecNum)" /> + <xsl:with-param name="scr" select="$scr" /> + <xsl:with-param name="sty" select="$sty" /> + <xsl:with-param name="nor" select="$nor" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:template> + + <!-- %%Template: SNumStart + + Return the longest substring of sToParse starting from the + start of sToParse that is a number. In addition, it takes the + pattern string, which is sToParse with all of its numbers + replaced with a 0. sPattern should be the same length + as sToParse + --> + <xsl:template name="SNumStart"> + <xsl:param name="sToParse" select="''" /> + <!-- if we don't get anything, take the string itself --> + <xsl:param name="sPattern" select="'$sToParse'" /> + + + <xsl:choose> + <!-- the pattern says this is a number, recurse with the rest --> + <xsl:when test="substring($sPattern, 1, 1) = '0'"> + <xsl:call-template name="SNumStart"> + <xsl:with-param name="sToParse" select="$sToParse" /> + <xsl:with-param name="sPattern" select="substring($sPattern, 2)" /> + </xsl:call-template> + </xsl:when> + + <!-- the pattern says we've run out of numbers. Take as many + characters from sToParse as we shaved off sPattern --> + <xsl:otherwise> + <xsl:value-of select="substring($sToParse, 1, string-length($sToParse) - string-length($sPattern))" /> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- %%Template SRepeatCharAcc + + The core of SRepeatChar with an accumulator. The current + string is in param $acc, and we will double and recurse, + if we're less than half of the required length or else just + add the right amount of characters to the accumulator and + return + --> + <xsl:template name="SRepeatCharAcc"> + <xsl:param name="cchRequired" select="1" /> + <xsl:param name="ch" select="'-'" /> + <xsl:param name="acc" select="$ch" /> + + <xsl:variable name="cchAcc" select="string-length($acc)" /> + <xsl:choose> + <xsl:when test="(2 * $cchAcc) < $cchRequired"> + <xsl:call-template name="SRepeatCharAcc"> + <xsl:with-param name="cchRequired" select="$cchRequired" /> + <xsl:with-param name="ch" select="$ch" /> + <xsl:with-param name="acc" select="concat($acc, $acc)" /> + </xsl:call-template> + </xsl:when> + + <xsl:otherwise> + <xsl:value-of select="concat($acc, substring($acc, 1, $cchRequired - $cchAcc))" /> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + + <!-- %%Template SRepeatChar + + Generates a string nchRequired long by repeating the given character ch + --> + <xsl:template name="SRepeatChar"> + <xsl:param name="cchRequired" select="1" /> + <xsl:param name="ch" select="'-'" /> + + <xsl:call-template name="SRepeatCharAcc"> + <xsl:with-param name="cchRequired" select="$cchRequired" /> + <xsl:with-param name="ch" select="$ch" /> + <xsl:with-param name="acc" select="$ch" /> + </xsl:call-template> + </xsl:template> + + <!-- %%Template SReplaceOperWithMinus + + Go through the given string and replace every instance + of an operator with a minus '-'. This helps quickly identify + the first instance of an operator. + --> + <xsl:template name="SReplaceOperWithMinus"> + <xsl:param name="sToParse" select="''" /> + + <xsl:value-of select="translate($sToParse, $sOperators, $sMinuses)" /> + </xsl:template> + + <!-- %%Template SReplaceNumWithZero + + Go through the given string and replace every instance + of an number with a zero '0'. This helps quickly identify + the first occurence of a number. + + Considers the '.' and ',' part of a number iff they are sandwiched + between two other numbers. 0.3 will be recognized as a number, + x.3 will not be. Since these characters can also be an operator, this + should be called before SReplaceOperWithMinus. + --> + <xsl:template name="SReplaceNumWithZero"> + <xsl:param name="sToParse" select="''" /> + + <!-- First do a simple replace. Numbers will all be come 0's. + After this point, the pattern involving the . or , that + we are looking for will become 0.0 or 0,0 --> + <xsl:variable name="sSimpleReplace" select="translate($sToParse, $sNumbers, $sZeros)" /> + + <!-- And then, replace 0.0 with just 000. This means that the . will + become part of the number --> + <xsl:variable name="sReplacePeriod"> + <xsl:call-template name="SReplace"> + <xsl:with-param name="sInput" select="$sSimpleReplace" /> + <xsl:with-param name="sOrig" select="'0.0'" /> + <xsl:with-param name="sReplacement" select="'000'" /> + </xsl:call-template> + </xsl:variable> + + <!-- And then, replace 0,0 with just 000. This means that the , will + become part of the number --> + <xsl:call-template name="SReplace"> + <xsl:with-param name="sInput" select="$sReplacePeriod" /> + <xsl:with-param name="sOrig" select="'0,0'" /> + <xsl:with-param name="sReplacement" select="'000'" /> + </xsl:call-template> + </xsl:template> + + <!-- Template to translate Word's borderBox properties into the menclose notation attribute + The initial call to this SHOULD NOT pass an sAttribute. Subsequent calls to + CreateMencloseNotationAttrFromBorderBoxAttr by CreateMencloseNotationAttrFromBorderBoxAttr will + update the sAttribute as appropriate. + + CreateMencloseNotationAttrFromBorderBoxAttr looks at each attribute (fHideTop, fHideBot, etc.) one at a time + in the order they are listed and passes a modified sAttribute to CreateMencloseNotationAttrFromBorderBoxAttr. + Each successive call to CreateMencloseNotationAttrFromBorderBoxAttr knows which attribute to look at because + the previous call should have omitted passing the attribute it just analyzed. This is why as you read lower + and lower in the template that each call to CreateMencloseNotationAttrFromBorderBoxAttr has fewer and fewer attributes. + --> + <xsl:template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:param name="fHideTop" /> + <xsl:param name="fHideBot" /> + <xsl:param name="fHideLeft" /> + <xsl:param name="fHideRight" /> + <xsl:param name="fStrikeH" /> + <xsl:param name="fStrikeV" /> + <xsl:param name="fStrikeBLTR" /> + <xsl:param name="fStrikeTLBR" /> + <xsl:param name="sAttribute" /> + + <xsl:choose> + <xsl:when test="string-length($sAttribute) = 0"> + <xsl:choose> + <xsl:when test="string-length($fHideTop) > 0 + and string-length($fHideBot) > 0 + and string-length($fHideLeft) > 0 + and string-length($fHideRight) > 0"> + + <xsl:choose> + <xsl:when test="$fHideTop = 0 + and $fHideBot = 0 + and $fHideLeft = 0 + and $fHideRight = 0"> + <!-- We can use 'box' instead of top, bot, left, and right. Therefore, + replace sAttribute with 'box' and begin analyzing params fStrikeH + and below. --> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute"> + <xsl:text>box</xsl:text> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <!-- Can't use 'box', theremore, must analyze all attributes --> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideTop" select="$fHideTop" /> + <xsl:with-param name="fHideBot" select="$fHideBot" /> + <xsl:with-param name="fHideLeft" select="$fHideLeft" /> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute"> + <!-- Assume using all four (left right top bottom). Subsequent calls + will remove the sides which aren't to be includes. --> + <xsl:text>left right top bottom</xsl:text> + </xsl:with-param> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="string-length($fHideTop) > 0"> + <xsl:choose> + <xsl:when test="$fHideTop=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideBot" select="$fHideBot" /> + <xsl:with-param name="fHideLeft" select="$fHideLeft" /> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute"> + <xsl:call-template name="SReplace"> + <xsl:with-param name="sInput" select="$sAttribute" /> + <xsl:with-param name="sOrig" select="'top'" /> + <xsl:with-param name="sReplacement" select="''" /> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideBot" select="$fHideBot" /> + <xsl:with-param name="fHideLeft" select="$fHideLeft" /> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($fHideBot) > 0"> + <xsl:choose> + <xsl:when test="$fHideBot=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideLeft" select="$fHideLeft" /> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute"> + <xsl:call-template name="SReplace"> + <xsl:with-param name="sInput" select="$sAttribute" /> + <xsl:with-param name="sOrig" select="'bottom'" /> + <xsl:with-param name="sReplacement" select="''" /> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideLeft" select="$fHideLeft" /> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($fHideLeft) > 0"> + <xsl:choose> + <xsl:when test="$fHideLeft=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute"> + <xsl:call-template name="SReplace"> + <xsl:with-param name="sInput" select="$sAttribute" /> + <xsl:with-param name="sOrig" select="'left'" /> + <xsl:with-param name="sReplacement" select="''" /> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fHideRight" select="$fHideRight" /> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($fHideRight) > 0"> + <xsl:choose> + <xsl:when test="$fHideRight=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute"> + <xsl:call-template name="SReplace"> + <xsl:with-param name="sInput" select="$sAttribute" /> + <xsl:with-param name="sOrig" select="'right'" /> + <xsl:with-param name="sReplacement" select="''" /> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeH" select="$fStrikeH" /> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($fStrikeH) > 0"> + <xsl:choose> + <xsl:when test="$fStrikeH=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="concat($sAttribute, ' horizontalstrike')" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeV" select="$fStrikeV" /> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($fStrikeV) > 0"> + <xsl:choose> + <xsl:when test="$fStrikeV=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="concat($sAttribute, ' verticalstrike')" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeBLTR" select="$fStrikeBLTR" /> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($fStrikeBLTR) > 0"> + <xsl:choose> + <xsl:when test="$fStrikeBLTR=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="concat($sAttribute, ' updiagonalstrike')" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="fStrikeTLBR" select="$fStrikeTLBR" /> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:when test="string-length($fStrikeTLBR) > 0"> + <xsl:choose> + <xsl:when test="$fStrikeTLBR=1"> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="sAttribute" select="concat($sAttribute, ' downdiagonalstrike')" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="CreateMencloseNotationAttrFromBorderBoxAttr"> + <xsl:with-param name="sAttribute" select="$sAttribute" /> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="notation"> + <xsl:value-of select="normalize-space($sAttribute)" /> + </xsl:attribute> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- Tristate (true, false, neither) from string value --> + <xsl:template name="TFromStrVal"> + <xsl:param name="str" /> + <xsl:choose> + <xsl:when test="$str = 'on' or $str = '1' or $str = 'true'">1</xsl:when> + <xsl:when test="$str = 'off' or $str = '0' or $str = 'false'">0</xsl:when> + <xsl:otherwise>-1</xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- Return 0 iff $str is explicitly set to a false value. + Return true otherwise --> + <xsl:template name="ForceFalseStrVal"> + <xsl:param name="str" /> + <xsl:variable name="tValue"> + <xsl:call-template name="TFromStrVal"> + <xsl:with-param name="str" select="$str"/> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$tValue = '0'">0</xsl:when> + <xsl:otherwise>1</xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- Return 1 iff $str is explicitly set to a true value. + Return false otherwise --> + <xsl:template name="ForceTrueStrVal"> + <xsl:param name="str" /> + <xsl:variable name="tValue"> + <xsl:call-template name="TFromStrVal"> + <xsl:with-param name="str" select="$str"/> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$tValue = '1'">1</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:template> +</xsl:stylesheet> \ No newline at end of file From adbb38d717fb9f227f0e68f9280e7b2c2376b7ca Mon Sep 17 00:00:00 2001 From: Edgar <eduranm@dgb.unam.mx> Date: Sat, 18 Apr 2026 19:18:16 -0600 Subject: [PATCH 5/8] =?UTF-8?q?Agregar=20utilidades=20de=20etiquetado=20y?= =?UTF-8?q?=20marcaci=C3=B3n=20autom=C3=A1tica=20de=20referencias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markup_doc/labeling_utils.py | 782 +++++++++++++++++++++++++++++++++++ markup_doc/marker.py | 46 +++ 2 files changed, 828 insertions(+) create mode 100644 markup_doc/labeling_utils.py create mode 100644 markup_doc/marker.py diff --git a/markup_doc/labeling_utils.py b/markup_doc/labeling_utils.py new file mode 100644 index 0000000..6f0f99e --- /dev/null +++ b/markup_doc/labeling_utils.py @@ -0,0 +1,782 @@ +# Standard library imports +import json +import re +import requests + +from lxml import etree + +# Third-party imports +from django.contrib.auth import get_user_model +from rest_framework_simplejwt.tokens import RefreshToken + +# Local application imports +from model_ai.models import LlamaModel + + +MODEL_NAME_GEMINI = 'GEMINI' +MODEL_NAME_LLAMA = 'LLAMA' + + +def get_llm_model_name(): + # FIXME: This function always fetches the first LlamaModel instance. + model_ai = LlamaModel.objects.first() + + if model_ai.api_key_gemini: + return MODEL_NAME_GEMINI + else: + return MODEL_NAME_LLAMA + + +def split_in_three(obj_reference, chunk_size=5): + if not obj_reference: + return [] + return [obj_reference[i:i + chunk_size] + for i in range(0, len(obj_reference), chunk_size)] + + +User = get_user_model() + + +def process_reference(num_ref, obj, user_id): + payload = { + 'reference': obj['value']['paragraph'] + } + + # FIXME: This function always fetches the first LlamaModel instance. + model = LlamaModel.objects.first() + + if model.name_file: + user = User.objects.get(pk=user_id) + refresh = RefreshToken.for_user(user) + access_token = refresh.access_token + + #url = "http://172.17.0.1:8400/api/v1/mix_citation/reference/" + #url = "http://172.17.0.1:8009/api/v1/mix_citation/reference/" + + # FIXME: Hardcoded URL + url = "http://django:8000/api/v1/reference/" + + headers = { + 'Authorization': f'Bearer {access_token}', + 'Content-Type': 'application/json' + } + + response = requests.post(url, json=payload, headers=headers) + + if response.status_code == 200: + response_json = response.json() + message_str = response_json['message'] + + json_str = message_str.replace('reference: ', '', 1) + + ref_json = json.loads(json_str) + + #ref_json = json.loads(response) + obj['type'] = 'ref_paragraph' + obj['value'] = { + 'paragraph': ref_json.get('full_text', None), + 'label': '<p>', + 'reftype': ref_json.get('reftype', None), + 'refid': 'B'+str(num_ref), + 'date': ref_json.get('date', None), + 'title': ref_json.get('title', None), + 'chapter': ref_json.get('chapter', None), + 'edition': ref_json.get('edition', None), + 'source': ref_json.get('source', None), + 'vol': ref_json.get('vol', None), + 'issue': ref_json.get('num', None), + 'pages': ref_json.get('pages', None), + 'lpage': ref_json.get('lpage', None), + 'fpage': ref_json.get('fpage', None), + 'doi': ref_json.get('doi', None), + 'access_id': ref_json.get('access_id', None), + 'degree': ref_json.get('degree', None), + 'organization': ref_json.get('organization', None), + 'location': ref_json.get('location', None), + 'org_location': ref_json.get('org_location', None), + 'num_pages': ref_json.get('num_pages', None), + 'uri': ref_json.get('uri', None), + 'version': ref_json.get('version', None), + 'access_date': ref_json.get('access_date', None), + 'authors': [] + } + authors = ref_json.get('authors', []) + for author in authors: + obj_auth = {} + obj_auth['type'] = 'Author' + obj_auth['value'] = {} + obj_auth['value']['surname'] = author.get('surname', None) + obj_auth['value']['given_names'] = author.get('fname', None) + obj['value']['authors'].append(obj_auth) + + return obj + + +def process_references(num_refs, references): + arr_references = [] + + for i, ref_json in enumerate(references): + obj = {} + obj['type'] = 'ref_paragraph' + obj['value'] = { + 'paragraph': ref_json.get('full_text', None), + 'label': '<p>', + 'reftype': ref_json.get('reftype', None), + 'refid': 'B'+str(num_refs[i] if i < len(num_refs) else ''), + 'date': ref_json.get('date', None), + 'title': ref_json.get('title', None), + 'chapter': ref_json.get('chapter', None), + 'edition': ref_json.get('edition', None), + 'source': ref_json.get('source', None), + 'vol': ref_json.get('vol', None), + 'issue': ref_json.get('num', None), + 'pages': ref_json.get('pages', None), + 'lpage': ref_json.get('lpage', None), + 'fpage': ref_json.get('fpage', None), + 'doi': ref_json.get('doi', None), + 'access_id': ref_json.get('access_id', None), + 'degree': ref_json.get('degree', None), + 'organization': ref_json.get('organization', None), + 'location': ref_json.get('location', None), + 'org_location': ref_json.get('org_location', None), + 'num_pages': ref_json.get('num_pages', None), + 'uri': ref_json.get('uri', None), + 'version': ref_json.get('version', None), + 'access_date': ref_json.get('access_date', None), + 'authors': [] + } + authors = ref_json.get('authors', []) + for author in authors: + obj_auth = {} + obj_auth['type'] = 'Author' + obj_auth['value'] = {} + obj_auth['value']['surname'] = author.get('surname', None) + obj_auth['value']['given_names'] = author.get('fname', None) + obj['value']['authors'].append(obj_auth) + arr_references.append(obj) + + return arr_references + + +def buscar_refid_por_surname_y_date(data_back, surname_buscado, date_buscado): + """ + Busca un bloque RefParagraphBlock que contenga un author con el surname especificado + y que coincida con la fecha dada. Retorna el refid si encuentra una coincidencia. + """ + for bloque in data_back: # Reemplaza 'contenido' con el nombre de tu StreamField + if bloque['type'] == 'ref_paragraph': # o el nombre que usaste en el StreamField + data = bloque['value'] + + # Verificar la fecha + if str(data.get('date')) != str(date_buscado[:4]): + continue + + # Revisar autores + authors = data.get('authors', []) + + surname_buscados = surname_buscado.split(',') + + for surname_buscado in surname_buscados: + if ' y ' in surname_buscado or ' and ' in surname_buscado or ' e ' in surname_buscado or ' & ' in surname_buscado: + if ' y ' in surname_buscado: + surname1 = surname_buscado.split(' y ')[0].strip().lower() + surname2 = surname_buscado.split(' y ')[1].strip().lower() + + if ' and ' in surname_buscado: + surname1 = surname_buscado.split(' and ')[0].strip().lower() + surname2 = surname_buscado.split(' and ')[1].strip().lower() + + if ' & ' in surname_buscado: + surname1 = surname_buscado.split(' & ')[0].strip().lower() + surname2 = surname_buscado.split(' & ')[1].strip().lower() + + if ' e ' in surname_buscado: + surname1 = surname_buscado.split(' e ')[0].strip().lower() + surname2 = surname_buscado.split(' e ')[1].strip().lower() + + for author_bloque in authors: + if author_bloque['type'] == 'Author': + author_data = author_bloque['value'] + if surname1 in (author_data.get('surname') or '').lower() + ' ' + (author_data.get('given_names') or '').lower(): + for author_bloque2 in authors: + if author_bloque2['type'] == 'Author': + author_data = author_bloque2['value'] + if surname2 in (author_data.get('surname') or '').lower() + ' ' + (author_data.get('given_names') or '').lower(): + return data.get('refid') + + for author_bloque in authors: + if author_bloque['type'] == 'Author': + author_data = author_bloque['value'] + + if surname_buscado.strip().lower() in (author_data.get('surname') or '').lower() + ' ' + (author_data.get('given_names') or '').lower(): + return data.get('refid') + + if surname_buscado.strip().lower() in (data.get('paragraph') or '').lower(): + return data.get('refid') + + return None + + +def extract_citation_apa(texto, data_back): + """ + Extrae citas en formato APA dentro de un texto y devuelve: + - la cita completa, + - el primer autor, + - el año. + Acepta múltiples espacios entre palabras y símbolos. + """ + + # Preposiciones comunes en apellidos + preposiciones = r'(?:de|del|la|los|las|da|do|dos|das|van|von)' + # Apellido compuesto o con preposición (incluye caracteres portugueses: ç, ã, õ, etc.) + apellido = rf'[A-ZÁÉÍÓÚÑÇÃÕÂÊÎÔÛ][a-záéíóúñçãõâêîôû]+(?:[-‐\s]+(?:{preposiciones})?\s*[A-ZÁÉÍÓÚÑÇÃÕÂÊÎÔÛ]?[a-záéíóúñçãõâêîôû]+)*' + resultados = [] + + # 1. Buscar todas las citas dentro de paréntesis + for paren in re.finditer(r'\(([^)]+)\)', texto): + contenido_completo = paren.group(1) + + # Si hay punto y coma, dividir las citas + if ';' in contenido_completo: + partes = [parte for parte in contenido_completo.split(';')] + else: + partes = [contenido_completo] + + # Variable para rastrear el contexto de autores dentro del mismo paréntesis + autores_en_parentesis = [] + + for i, parte in enumerate(partes): + parte = parte # Agregar strip aquí para limpiar espacios + if not parte: + continue + + # Caso especial: solo año (para citas como "2017" después de "2014;") + # MEJORADO: Solo aplicar si hay citas previas EN EL MISMO PARÉNTESIS + if re.match(r'^\s*\d{4}[a-z]?\s*$', parte): + # Solo usar el último autor si hay autores en el mismo paréntesis + if autores_en_parentesis: + ultimo_autor = autores_en_parentesis[-1] + refid = buscar_refid_por_surname_y_date(data_back, ultimo_autor, parte) + resultados.append({ + "cita": parte, + "autor": ultimo_autor, + "anio": parte, + "refid": refid + }) + # Si no hay autores previos en el paréntesis, ignorar (posible error) + continue + + # Patrones para diferentes tipos de citas + cita_encontrada = False + + # Patrón 1: Múltiples autores con & y coma antes del año + # Ejemplo: "Porta, Lopez-De-Silanes, & Shleifer, 1999" + pattern1 = rf'(?P<autores>{apellido}(?:\s*,\s*{apellido})*\s*,?\s*&\s*{apellido})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern1, parte) + if match: + autores_completos = match.group("autores") + anio = match.group("anio") + primer_autor = re.split(r'\s*,\s*', autores_completos)[0] + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 2: Múltiples autores con & SIN coma antes del año + # Ejemplo: "Silva, Peixoto, & Tizziotti 2021" + if not cita_encontrada: + pattern2 = rf'(?P<autores>{apellido}(?:\s*,\s*{apellido})*\s*,?\s*&\s*{apellido})\s+(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern2, parte) + if match: + autores_completos = match.group("autores") + anio = match.group("anio") + primer_autor = re.split(r'\s*,\s*', autores_completos)[0] + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 3: Dos autores con & (simple) + # Ejemplo: "Crisóstomo & Brandão, 2019" + if not cita_encontrada: + pattern3 = rf'(?P<autor1>{apellido})\s*&\s*(?P<autor2>{apellido})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern3, parte) + if match: + primer_autor = match.group("autor1") + anio = match.group("anio") + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 4: Autor con "et al." con coma + # Ejemplo: "Brandão et al., 2019" + if not cita_encontrada: + pattern4 = rf'(?P<autor>{apellido})\s+et\s+al\s*\.?\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern4, parte) + if match: + autor = match.group("autor") + anio = match.group("anio") + autores_en_parentesis.append(autor) + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": parte, + "autor": autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 5: Autor con "et al." sin coma + # Ejemplo: "Brandão et al. 2019" + if not cita_encontrada: + pattern5 = rf'(?P<autor>{apellido})\s+et\s+al\s*\.?\s+(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern5, parte) + if match: + autor = match.group("autor") + anio = match.group("anio") + autores_en_parentesis.append(autor) + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": parte, + "autor": autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 6: Múltiples autores solo con comas (sin &) + # Ejemplo: "Adam, Tene, Mucci, Beck, 2020" o "Correia, Amaral, Louvet, 2014a" + if not cita_encontrada: + pattern6 = rf'(?P<autores>{apellido}(?:\s*,\s*{apellido}){{2,}})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern6, parte) + if match: + autores_completos = match.group("autores") + anio = match.group("anio") + primer_autor = re.split(r'\s*,\s*', autores_completos)[0] + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 7: Autor simple con coma + # Ejemplo: "Smith, 2020" + if not cita_encontrada: + pattern7 = rf'(?P<autor>{apellido})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern7, parte) + if match: + autor = match.group("autor") + anio = match.group("anio") + autores_en_parentesis.append(autor) + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": parte, + "autor": autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # 2. Citas fuera del paréntesis: Nombre (2000) o Nombre et al. (2000) + # MEJORADO: Filtrar citas que están precedidas por preposiciones + + # Lista de preposiciones a evitar + preposiciones_evitar = ['de', 'del', 'la', 'los', 'las', 'da', 'do', 'dos', 'das', 'van', 'von'] + + # Patrón para citas con múltiples años: Autor (2018, 2019) + patron_multiples_años = rf'(?P<autor>{apellido})(?:\s*[-‐]\s*{apellido})*(?:\s+et\s+al\s*\.?|\s+(?:y|and|&)\s+{apellido})?\s*\(\s*(?P<años>\d{{4}}[a-z]?(?:\s*,\s*\d{{4}}[a-z]?)+)\s*\)' + + for match in re.finditer(patron_multiples_años, texto): + # Verificar que no haya preposición antes de la cita + inicio_match = match.start() + texto_anterior = texto[:inicio_match].split() + + # Si hay palabras antes y la última es una preposición, saltarse esta cita + if texto_anterior and texto_anterior[-1].lower() in preposiciones_evitar: + continue + + autor = match.group("autor") + años_str = match.group("años") + # Separar los años y crear una cita para cada uno + años = [año for año in años_str.split(',')] + + for año in años: + refid = buscar_refid_por_surname_y_date(data_back, autor, año) + resultados.append({ + "cita": f"{autor} et al. ({año})" if "et al" in match.group(0) else f"{autor} ({año})", + "autor": autor, + "anio": año, + "refid": refid + }) + + # Patrón para citas simples: Nombre (2000) o Nombre et al. (2000) + patron_afuera = rf'(?P<autor>{apellido})(?:\s*[-‐]\s*{apellido})*(?:\s+et\s+al\s*\.?|\s+(?:y|and|&)\s+{apellido})?\s*\(\s*(?P<anio>\d{{4}}[a-z]?)\s*\)' + + for match in re.finditer(patron_afuera, texto): + # Verificar que no haya preposición antes de la cita + inicio_match = match.start() + texto_anterior = texto[:inicio_match].split() + + # Si hay palabras antes y la última es una preposición, saltarse esta cita + if texto_anterior and texto_anterior[-1].lower() in preposiciones_evitar: + continue + + autor = match.group("autor") + anio = match.group("anio") + + # Verificar que no sea parte de una cita con múltiples años ya procesada + cita_completa = match.group(0) + es_multiple = False + for resultado in resultados: + if resultado["autor"] == autor and resultado["anio"] == anio and "," in cita_completa: + es_multiple = True + break + + if not es_multiple: + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": cita_completa, + "autor": autor, + "anio": anio, + "refid": refid + }) + + return resultados + + +def clean_labels(texto): + """ + Elimina todas las etiquetas XML del texto. + """ + # Patrón para encontrar etiquetas XML (apertura y cierre) + patron_etiquetas = r'<[^>]+>' + texto_limpio = re.sub(patron_etiquetas, '', texto) + + # Limpiar espacios múltiples que puedan haber quedado + #texto_limpio = re.sub(r'\s+', ' ', texto_limpio) + + return texto_limpio#.strip() + + +def map_text(texto): + """ + Crea un mapa de TODO lo que esté etiquetado en el texto. + Clave: texto sin etiquetas, Valor: texto con etiquetas + """ + mapa = {} + + # Buscar TODAS las etiquetas y su contenido + patron = r'<[^>]+>.*?</[^>]+>|<[^/>]+/>' + matches = re.findall(patron, texto, re.DOTALL) + + for match in matches: + contenido_limpio = clean_labels(match)#.strip() + if contenido_limpio: # Solo si hay contenido real + mapa[contenido_limpio] = match#.strip() + + return mapa + + +def search_position(texto, substring): + """ + Encuentra todas las posiciones donde aparece un substring en el texto. + """ + posiciones = [] + inicio = 0 + while True: + pos = texto.find(substring, inicio) + if pos == -1: + break + posiciones.append((pos, pos + len(substring))) + inicio = pos + 1 + return posiciones + + +def extract_labels(texto_original, texto_limpio, pos_inicio, pos_fin): + """ + Extrae un fragmento específico del texto original basado en posiciones del texto limpio. + """ + contador_chars_limpios = 0 + resultado = "" + dentro_del_rango = False + + i = 0 + while i < len(texto_original) and contador_chars_limpios <= pos_fin: + char = texto_original[i] + + if char == '<': + # Encontrar el final de la etiqueta + fin_etiqueta = texto_original.find('>', i) + if fin_etiqueta != -1: + etiqueta = texto_original[i:fin_etiqueta + 1] + + # Si estamos dentro del rango, incluir la etiqueta + if dentro_del_rango: + resultado += etiqueta + + i = fin_etiqueta + 1 + continue + + # Verificar si entramos o salimos del rango + if contador_chars_limpios == pos_inicio: + dentro_del_rango = True + elif contador_chars_limpios == pos_fin: + dentro_del_rango = False + break + + # Si estamos dentro del rango, incluir el caracter + if dentro_del_rango: + resultado += char + + contador_chars_limpios += 1 + i += 1 + + return resultado + + +def restore_labels_ref(ref, mapa_etiquetado, texto_original, texto_limpio): + """ + Restaura las etiquetas en una referencia específica usando el mapa y verificando posición. + Solo reemplaza si el contenido estaba realmente etiquetado en esa posición específica. + """ + # Encontrar todas las posiciones donde aparece esta ref en el texto limpio + posiciones_ref = search_position(texto_limpio, ref) + + if not posiciones_ref: + return ref + + # Para cada posición, extraer el fragmento original y ver si contiene etiquetas + mejores_candidatos = [] + + for pos_inicio, pos_fin in posiciones_ref: + fragmento_original = extract_labels( + texto_original, texto_limpio, pos_inicio, pos_fin + ) + + # Si el fragmento original es diferente al ref, significa que tenía etiquetas + if fragmento_original != ref: + mejores_candidatos.append(fragmento_original) + + # Si encontramos candidatos con etiquetas, devolver el primero + if mejores_candidatos: + return mejores_candidatos[0] + + # Si no hay candidatos con etiquetas, devolver el ref original sin modificar + return ref + + +def proccess_labeled_text(texto, data_back): + """ + Procesa un texto eliminando etiquetas XML, extrae citas APA y las devuelve + con sus etiquetas originales restauradas. + + Args: + texto (str): Texto original con etiquetas XML + extraer_citas_apa (function): Función que extrae citas del texto limpio + + Returns: + list: Lista de citas con etiquetas XML restauradas + """ + + # Crear mapa de transformaciones + mapa_transformaciones = map_text(texto) + #print(f"mapa: {mapa_transformaciones}") + + # Limpiar texto eliminando etiquetas + texto_limpio = clean_labels(texto) + + # Extraer citas del texto limpio + refs = extract_citation_apa(texto_limpio, data_back) + #print(f"refs: {refs}") + + # 4. Para cada ref, usar posición para restaurar solo lo que realmente estaba etiquetado + refs_con_etiquetas = [] + for ref in refs: + ref_restaurada = ref + ref_restaurada['cita'] = restore_labels_ref(ref['cita'], mapa_transformaciones, texto, texto_limpio) + refs_con_etiquetas.append(ref_restaurada) + + return refs_con_etiquetas + + +def match_by_regex(text, order_labels): + return next( + (key_obj for key_obj in order_labels.items() + if "regex" in key_obj[1] and re.search(key_obj[1]["regex"], text)), + None + ) + + +def match_by_style_and_size(item, order_labels, style='bold'): + return next( + (key_obj for key_obj in order_labels.items() + if "size" in key_obj[1] and style in key_obj[1] and + key_obj[1]["size"] == item.get('font_size') and + key_obj[1][style] == item.get(style)), + None + ) + + +def match_next_label(item, label_next, order_labels): + return next( + (key_obj for key_obj in order_labels.items() + if "size" in key_obj[1] and key_obj[1]["size"] == item.get('font_size') + and key_obj[0] == label_next), + None + ) + + +def match_paragraph(item, order_labels): + return next( + (key_obj for key_obj in order_labels.items() + if "size" in key_obj[1] and + "next" in key_obj[1] and + key_obj[1]["size"] == item.get('font_size') and + key_obj[1]["next"] == "<p>"), + None + ) + + +def match_section(item, sections): + return {'label': '<sec>', 'body': True} if ( + item.get('font_size') == sections[0].get('size') and + item.get('bold') == sections[0].get('bold') and + item.get('text', '').isupper() == sections[0].get('isupper') + ) else None + + +def match_subsection(item, sections): + return {'label': '<sub-sec>', 'body': True} if ( + item.get('font_size') == sections[1].get('size') and + item.get('bold') == sections[1].get('bold') and + item.get('text', '').isupper() == sections[1].get('isupper') + ) else None + + +def create_labeled_object2(i, item, state, sections): + obj = {} + result = None + + if match_section(item, sections): + result = match_section(item, sections) + state['label'] = result.get('label') + state['body'] = result.get('body') + + if match_subsection(item, sections): + result = match_subsection(item, sections) + state['label'] = result.get('label') + state['body'] = result.get('body') + + if state.get('body') and re.search(r"^(refer)", item.get('text').lower()) and match_section(item, sections): + state['label'] = '<sec>' + state['body'] = False + state['back'] = True + obj['type'] = 'paragraph' + obj['value'] = { + 'label': state['label'], + 'paragraph': item.get('text') + } + + if not result: + result = {'label': '<p>', 'body': state['body'], 'back': state['back']} + state['label'] = result.get('label') + state['body'] = result.get('body') + state['back'] = result.get('back') + + if result: + pass + else: + if state.get('label_next'): + if state.get('repeat'): + result = match_by_regex(item.get('text'), order_labels) + if result: + state['label'] = result[0] + else: + result = match_by_style_and_size(item, order_labels, style='bold') + if result: + state['label'] = result[0] + state['repeat'] = None + state['reset'] = None + state['label_next'] = result[1].get("next") + state['body'] = result[1].get("size") == 16 + if state['body'] and re.search(r"^(refer)", item.get('text').lower()): + state['body'] = False + state['back'] = True + if not result: + result = match_next_label(item, state['label_next'], order_labels) + if result: + state['label'] = result[0] + state['label_next_reset'] = result[1].get("next") + state['reset'] = result[1].get("reset", False) + state['repeat'] = result[1].get("repeat", False) + else: + result = match_by_style_and_size(item, order_labels, style='bold') + if result: + state['label'] = result[0] + state['label_next'] = result[1].get("next") + if state.get('body') and re.search(r"^(refer)", item.get('text').lower()): + state['body'] = False + state['back'] = True + else: + result = match_by_style_and_size(item, order_labels, style='italic') + if result: + state['label'] = re.sub(r"-\d+", "", result[0]) + state['label_next'] = result[1].get("next") + else: + result = match_by_regex(item.get('text'), order_labels) + if result: + state['label'] = result[0] + else: + result = match_paragraph(item, order_labels) + if result: + state['label'] = result[0] + + if result: + if state['label'] in ['<abstract>']: + order_labels.pop(state['label'], None) + + #label_info = result[1] + #obj['type'] = 'paragraph_with_language' if label_info.get("lan") else 'paragraph' + obj['type'] = 'paragraph' + + obj['value'] = { + 'label': state['label'], + 'paragraph': item.get('text') + } + + if state['label'] == '<contrib>': + obj['type'] = 'author_paragraph' + elif state['label'] == '<aff>': + obj['type'] = 'aff_paragraph' + + if re.search(r"^(translation)", item.get('text').lower()): + state['label'] = '<translate-fron>' + state['body'] = False + state['back'] = False + obj['type'] = 'paragraph_with_language' + obj['value'] = { + 'label': state['label'], + 'paragraph': item.get('text') + } + + return obj, result, state diff --git a/markup_doc/marker.py b/markup_doc/marker.py new file mode 100644 index 0000000..20a49a0 --- /dev/null +++ b/markup_doc/marker.py @@ -0,0 +1,46 @@ +# Standard library imports +import re + +# Local application imports +from model_ai.llama import LlamaService, LlamaInputSettings + + +def mark_article(text, metadata): + if metadata == 'author': + messages, response_format = LlamaInputSettings.get_author_config() + if metadata == 'affiliation': + messages, response_format = LlamaInputSettings.get_affiliations() + if metadata == 'doi': + messages, response_format = LlamaInputSettings.get_doi_and_section() + if metadata == 'title': + messages, response_format = LlamaInputSettings.get_titles() + + gll = LlamaService(messages, response_format) + output = gll.run(text) + output = output['choices'][0]['message']['content'] + if metadata == 'doi': + output = re.search(r'\{.*\}', output, re.DOTALL) + else: + output = re.search(r'\[.*\]', output, re.DOTALL) + if output: + output = output.group(0) + return output + +def mark_reference(reference_text): + messages, response_format = LlamaInputSettings.get_messages_and_response_format_for_reference(reference_text) + reference_marker = LlamaService(messages, response_format) + output = reference_marker.run(reference_text) + + for item in output["choices"]: + yield item["message"]["content"] + + +def mark_references(reference_block): + for ref_row in reference_block.split("\n"): + ref_row = ref_row.strip() + if ref_row: + choices = mark_reference(ref_row) + yield { + "reference": ref_row, + "choices": list(choices) + } From b3a5141df9dd2a08fe2804d4699ba41101461678 Mon Sep 17 00:00:00 2001 From: Edgar <eduranm@dgb.unam.mx> Date: Sat, 18 Apr 2026 19:19:20 -0600 Subject: [PATCH 6/8] =?UTF-8?q?Integrar=20procesamiento=20autom=C3=A1tico?= =?UTF-8?q?=20de=20referencias=20en=20las=20tareas=20de=20markup=5Fdoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markup_doc/tasks.py | 136 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/markup_doc/tasks.py b/markup_doc/tasks.py index 9121a25..ebc65a8 100644 --- a/markup_doc/tasks.py +++ b/markup_doc/tasks.py @@ -1,9 +1,145 @@ # Local application imports from config import celery_app +# Standard library imports +import json +import re + +from markup_doc.models import UploadDocx +from markup_doc.labeling_utils import ( + split_in_three, + process_reference, + process_references, + create_labeled_object2, + get_llm_model_name +) + +from markup_doc.models import ProcessStatus +from markup_doc.labeling_utils import MODEL_NAME_GEMINI, MODEL_NAME_LLAMA +from markuplib.function_docx import functionsDocx +from model_ai.llama import LlamaService +from reference.config_gemini import create_prompt_reference from markup_doc.sync_api import sync_journals_from_api @celery_app.task() def task_sync_journals_from_api(): sync_journals_from_api() + + +@celery_app.task() +def get_labels(title, user_id): + article_docx = UploadDocx.objects.get(title=title) + doc = functionsDocx.openDocx(article_docx.file.path) + sections, content = functionsDocx().extractContent(doc, article_docx.file.path) + article_docx_markup = article_docx + text_title = '' + text_paragraph = '' + stream_data = [] + stream_data_body = [] + stream_data_back = [] + num_ref=0 + state = { + 'label': None, + 'label_next': None, + 'label_next_reset': None, + 'reset': False, + 'repeat': None, + 'body_trans': False, + 'body': False, + 'back': False, + 'references': False + } + counts = { + 'numref': 0, + 'numtab': 0, + 'numfig': 0, + 'numeq': 0 + } + + next_item = None + obj_reference = [] + llama_model = False + + for i, item in enumerate(content): + if next_item: + next_item = None + continue + + obj = {} + + if item.get('text') is None or item.get('text') == '': + state['label_next'] = state['label_next_reset'] if state['reset'] else state['label_next'] + if state['back']: + state['back'] = False + state['body'] = False + state['references'] = True + else: + + obj, result, state = create_labeled_object2(i, item, state, sections) + + if result: + if item.get('text').lower() in ['introducción', 'introduction', 'introdução'] and state['references']: + state['body_trans'] = True + obj_trans = { + 'type': 'paragraph_with_language', + 'value': { + 'label': '<translate-body>', + 'paragraph': 'Translate' + } + } + stream_data_body.append(obj_trans) + if state['body']: + if state['references']: + if state['body_trans']: + stream_data_body.append(obj) + else: + stream_data.append(obj) + else: + stream_data_body.append(obj) + elif state['back']: + if state['label'] == '<sec>': + stream_data_back.append(obj) + if state['label'] == '<p>': + num_ref = num_ref + 1 + #obj = {}#process_reference(num_ref, obj, user_id) + obj_reference.append({"num_ref": num_ref, "obj": obj, "text": obj['value']['paragraph'],}) + #stream_data_back.append(obj) + else: + stream_data.append(obj) + + num_refs = [item["num_ref"] for item in obj_reference] + + if get_llm_model_name() == 'LLAMA': + for obj_ref in obj_reference: + obj = process_reference(obj_ref['num_ref'], obj_ref['obj'], user_id) + stream_data_back.append(obj) + + else: + chunks = split_in_three(obj_reference) + output=[] + + llm_first_block = LlamaService(mode='prompt', temperature=0.1) + + for chunk in chunks: + if len(chunk) > 0: + text_references = "\n".join([item["text"] for item in chunk]).replace('<italic>', '').replace('</italic>', '') + prompt_reference = create_prompt_reference(text_references) + + result = llm_first_block.run(prompt_reference) + + match = re.search(r'\[.*\]', result, re.DOTALL) + if match: + parsed = json.loads(match.group(0)) + output.extend(parsed) # Agrega a la lista de salida + + stream_data_back.extend(process_references(num_refs, output)) + + article_docx_markup.content = stream_data + article_docx_markup.content_body = stream_data_body + article_docx_markup.content_back = stream_data_back + article_docx_markup.save() + + article_docx.estatus = ProcessStatus.PROCESSED + article_docx.save() + From fc28a0bd17dda55eb108dccd7a1cd47bc96b8a5f Mon Sep 17 00:00:00 2001 From: Edgar <eduranm@dgb.unam.mx> Date: Sat, 18 Apr 2026 19:20:02 -0600 Subject: [PATCH 7/8] =?UTF-8?q?Disparar=20el=20procesamiento=20autom=C3=A1?= =?UTF-8?q?tico=20del=20DOCX=20desde=20el=20flujo=20de=20creaci=C3=B3n=20e?= =?UTF-8?q?n=20Wagtail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- markup_doc/wagtail_hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/markup_doc/wagtail_hooks.py b/markup_doc/wagtail_hooks.py index d3f1428..044022a 100644 --- a/markup_doc/wagtail_hooks.py +++ b/markup_doc/wagtail_hooks.py @@ -22,7 +22,7 @@ ) from config.menu import get_menu_order -from markup_doc.tasks import task_sync_journals_from_api +from markup_doc.tasks import get_labels, task_sync_journals_from_api from django.urls import path, reverse from django.utils.html import format_html from wagtail.admin import messages @@ -56,6 +56,7 @@ def form_valid(self, form): self.object = form.save_all(self.request.user) self.object.estatus = ProcessStatus.PROCESSING self.object.save() + transaction.on_commit(lambda: get_labels.delay(self.object.title, self.request.user.id)) return HttpResponseRedirect(self.get_success_url()) From 40ee0cbf7e637a47ba34f60dcdf10d7c1e4df00d Mon Sep 17 00:00:00 2001 From: Edgar <eduranm@dgb.unam.mx> Date: Sat, 18 Apr 2026 19:20:36 -0600 Subject: [PATCH 8/8] Ajustar la respuesta de Gemini en el servicio de inferencia de model_ai --- model_ai/llama.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/model_ai/llama.py b/model_ai/llama.py index 9d69082..5d38f16 100644 --- a/model_ai/llama.py +++ b/model_ai/llama.py @@ -1,6 +1,7 @@ # Standard library imports import logging import os +import time from config.settings.base import ( LLAMA_ENABLED, @@ -97,7 +98,9 @@ def _run_as_content_generation(self, user_input): model = genai.GenerativeModel('models/gemini-3.1-flash-lite-preview') # Generate content using Gemini - return model.generate_content(user_input).text + response_gemini = model.generate_content(user_input).text + time.sleep(15) + return response_gemini # Gemini not configured, fallback to LLaMA else: