"""A file manager for Cioarticle XML files."""
from __future__ import annotations
from os.path import join, dirname
from pyramid.config import Configurator
from pyramid.request import Request
from ciowarehouse2.lib.ciotype import CioType
from ciowarehouse2.lib.manager import LAYOUT_VIEW_PT, LAYOUT_EDIT_PT
from ciowarehouse2.lib.manager import CHRYSALIO_JS
from ...lib.i18n import _, translate
from ..xml import MANAGER_CSS, MANAGER_XML_CSS, CODEMIRROR_CSS
from ..xml import KATEX_CSS, KATEX_JS, CIOKATEX_JS
from ..ciomemo import ManagerCiomemo
CIOARTICLE_CSS = ('/cioxml2/css/manager_cioarticle.css', )
CIOARTICLE_PROOFING_CSS = ('/cioxml2/css/manager_cioarticle_proofing.css', )
CIOARTICLE_CXE_CSS = ('/cioxml2/css/manager_cioarticle_cxe.css', )
CIOARTICLE_CXE_JS = ('/cioxml2/js/cxe4cioarticle.js', )
CODEMIRROR_JS = ('/cioxml2/js/cm4cioarticle.js', )
IMAGE_PATHS = (
'Workspace:{directory}/Images/', 'Workspace:Images/', 'Images/', './')
RELAXNG_CIOARTICLE = { # yapf: disable
'root': 'cioarticle',
'version': '1.1',
'file': join(
dirname(__file__), '..', '..', 'Processors', 'CioarticleValidate',
'RelaxNG', 'cioarticle.rng')
}
# =============================================================================
[docs]
def includeme(configurator: Configurator):
"""Function to include a CioWarehouse2 manager.
:type configurator: pyramid.config.Configurator
:param configurator:
Object used to do configuration declaration within the application.
"""
ManagerCiomemo.register(configurator, ManagerCioarticle)
# =============================================================================
[docs]
class ManagerCioarticle(ManagerCiomemo):
"""Class to manage a Cioarticle XML file."""
ciotype = CioType('xml', 'cioarticle')
uid = 'cioarticle'
label = _('Cioarticle XML file manager')
imports = (('cioxml2:managers/ciomemo/Xsl', 'Xsl'), )
viewings = ( # yapf: disable
{'name': 'preview',
'label': _('Cioarticle Preview'),
'template': LAYOUT_VIEW_PT,
'css': MANAGER_CSS + KATEX_CSS + CIOARTICLE_CSS,
'js': CHRYSALIO_JS + KATEX_JS + CIOKATEX_JS,
'xsl': join('Xsl', 'cioarticle_preview.xsl'),
'image_paths': IMAGE_PATHS},
{'name': 'proofing',
'label': _('Cioarticle Proofing'),
'template': LAYOUT_VIEW_PT,
'css': MANAGER_CSS + KATEX_CSS + CIOARTICLE_PROOFING_CSS,
'js': CHRYSALIO_JS + KATEX_JS + CIOKATEX_JS,
'xsl': join('Xsl', 'cioarticle_proofing.xsl'),
'image_paths': IMAGE_PATHS},
{'name': 'xml', 'label': _('XML'),
'template': LAYOUT_VIEW_PT,
'css': MANAGER_XML_CSS,
'js': CHRYSALIO_JS})
editings = ( # yapf: disable
{'name': 'cxe',
'label': _('Wysiwym'),
'template': LAYOUT_EDIT_PT,
'css': MANAGER_CSS + KATEX_CSS + CIOARTICLE_CXE_CSS,
'js': CHRYSALIO_JS + KATEX_JS + CIOARTICLE_CXE_JS,
'regex': (join('Regex', 'cioarticle_cxe_in.regex'),
join('Regex', 'cioarticle_cxe_out.regex')),
'xsl': (join('Xsl', 'cioarticle_cxe_in.xsl'),
join('Xsl', 'cioarticle_cxe_out.xsl')),
'image_paths': IMAGE_PATHS,
'class': 'ciomemo cioarticle',
'only_groups': set(('cxe',))},
{'name': 'xml',
'label': _('XML'),
'template': LAYOUT_EDIT_PT,
'css': CODEMIRROR_CSS,
'js': CHRYSALIO_JS + CODEMIRROR_JS})
relaxng = RELAXNG_CIOARTICLE
class_xpath = 'concat("class-", local-name(/*))'
_home = dirname(__file__)
# -------------------------------------------------------------------------
@classmethod
def _edit_cxe_i18n(cls, request: Request):
"""Return a string of data-i18n_* attributes for translations in
CioXmlEditor.
See: :meth:.managers.xml.ManagerXml._edit_cxe_i18n
"""
return '{data}'\
' data-i18n_attr_lang="{attr_lang}"'\
' data-i18n_val_fr="{val_fr}"'\
' data-i18n_val_fr-FR="{val_fr_fr}"'\
' data-i18n_val_fr-CA="{val_fr_ca}"'\
' data-i18n_val_en="{val_en}"'\
' data-i18n_val_en-US="{val_en_us}"'\
' data-i18n_val_en-GB="{val_en_gb}"'\
' data-i18n_val_es="{val_es}"'\
' data-i18n_val_de="{val_de}"'\
' data-i18n_tag_meta="{tag_meta}"'\
' data-i18n_tag_keywords="{tag_keywords}"'\
' data-i18n_tag_keyword="{tag_keyword}"'\
' data-i18n_tag_section="{tag_section}"'\
' data-i18n_section_splitting="{section_splitting}"'\
' data-i18n_attr_role="{attr_role}"'\
' data-i18n_tag_p="{tag_p}"'\
' data-i18n_tag_list="{tag_list}"'\
' data-i18n_tag_list1="{tag_list1}"'\
' data-i18n_tag_table="{tag_table}"'\
' data-i18n_add_table="{add_table}"'\
' data-i18n_remove_table="{remove_table}"'\
' data-i18n_attr_layout="{attr_layout}"'\
' data-i18n_val_fixed="{val_fixed}"'\
' data-i18n_rows="{rows}"'\
' data-i18n_columns="{columns}"'\
' data-i18n_column_add="{column_add}"'\
' data-i18n_column_remove="{column_remove}"'\
' data-i18n_row_add="{row_add}"'\
' data-i18n_row_remove="{row_remove}"'\
' data-i18n_cell_merge="{cell_merge}"'\
' data-i18n_cell_split="{cell_split}"'\
' data-i18n_cell_status="{cell_status}"'\
' data-i18n_toggle_layout="{toggle_layout}"'\
' data-i18n_tag_media_image="{tag_media_image}"'\
' data-i18n_characters="{characters}"'\
' data-i18n_entities="{entities}"'\
' data-i18n_tag_entity="{tag_entity}"'\
' data-i18n_val_person="{val_person}"'\
' data-i18n_val_place="{val_place}"'\
' data-i18n_val_date="{val_date}"'\
' data-i18n_tag_sub="{tag_sub}"'\
' data-i18n_tag_latex="{tag_latex}"'\
' data-i18n_tag_latex_display="{tag_latex_display}"'\
' data-i18n_tex_frac="{tex_frac}"'\
' data-i18n_tex_sqrt="{tex_sqrt}"'\
' data-i18n_tex_vec="{tex_vec}"'\
' data-i18n_tex_hat="{tex_hat}"'\
' data-i18n_tag_link="{tag_link}"'\
' data-i18n_tag_footnote="{tag_footnote}"'\
' data-i18n_attr_call="{attr_call}"'.format(
data=ManagerCiomemo._edit_cxe_i18n(request),
attr_lang=translate(_('language'), request=request),
val_fr=translate(_('french'), request=request),
val_fr_fr=translate(_('french, France'), request=request),
val_fr_ca=translate(_('french, Canada'), request=request),
val_en=translate(_('english'), request=request),
val_en_us=translate(
_('english, United States'), request=request),
val_en_gb=translate(
_('english, Great Britain'), request=request),
val_es=translate(_('spanish'), request=request),
val_de=translate(_('german'), request=request),
tag_meta=translate(_('Metadata'), request=request),
tag_keywords=translate(_('Keywords'), request=request),
tag_keyword=translate(_('Keyword'), request=request),
tag_section=translate(
_('Section (Alt-Enter, Ctrl- above, Shift- sub-section)'),
request=request),
section_splitting=translate(
_('Section splitting'), request=request),
attr_role=translate(_('role'), request=request),
tag_p=translate(_('Paragraph (Ctrl- above)'), request=request),
tag_list=translate(_('List'), request=request),
tag_list1=translate(_('Ordered list'), request=request),
tag_table=translate(_('Table'), request=request),
add_table=translate(_('Add table'), request=request),
remove_table=translate(_('Remove table'), request=request),
attr_layout=translate(_('layout'), request=request),
val_fixed=translate(_('uniform columns'), request=request),
rows=translate(_('rows'), request=request),
columns=translate(_('columns'), request=request),
column_add=translate(
_('Add column (Ctrl- before)'), request=request),
column_remove=translate(_('Remove column'), request=request),
row_add=translate(_('Add row (Ctrl- above)'), request=request),
row_remove=translate(_('Remove row'), request=request),
cell_merge=translate(_('Merge cells'), request=request),
cell_split=translate(_('Split cell'), request=request),
cell_status=translate(
_('Toggle cell status'), request=request),
toggle_layout=translate(_('Toggle layout'), request=request),
tag_media_image=translate(_('Image block'), request=request),
characters=translate(_('Characters'), request=request),
entities=translate(_('Entities'), request=request),
tag_entity=translate(_('Entity'), request=request),
val_person=translate(_('person'), request=request),
val_place=translate(_('place'), request=request),
val_date=translate(_('date'), request=request),
tag_sub=translate(_('Indice'), request=request),
tag_latex=translate(
_('Mathematical formula (Ctrl-$)'), request=request),
tag_latex_display=translate(
_('Expanded mathematical formula (Alt-$)'),
request=request),
tex_frac=translate(_('Fraction'), request=request),
tex_sqrt=translate(_('Square root'), request=request),
tex_vec=translate(_('Vector'), request=request),
tex_hat=translate(_('Angle cap'), request=request),
tag_link=translate(_('Link'), request=request),
tag_footnote=translate(_('Footnote'), request=request),
attr_call=translate(_('call'), request=request))