"""A file handler for Cioarticle XML files."""
from os.path import join, dirname, normpath
from ciowarehouse.lib.handler import LAYOUT_VIEW_PT, LAYOUT_EDIT_PT
from ciowarehouse.lib.handler import CHRYSALIO_JS
from ...lib.i18n import _, translate
from ..handler_xml import HANDLER_CSS, HANDLER_XML_CSS, CODEMIRROR_CSS
from ..handler_xml import KATEX_CSS, KATEX_JS, CIOKATEX_JS
from ..handler_ciomemo import HandlerCiomemo
CIOARTICLE_CSS = ('/cioxml/css/handler_cioarticle.css',)
CIOARTICLE_PROOFING_CSS = ('/cioxml/css/handler_cioarticle_proofing.css',)
CIOARTICLE_CXE_CSS = ('/cioxml/css/handler_cioarticle_cxe.css',)
CIOARTICLE_CXE_JS = ('/cioxml/js/cxe4cioarticle.js',)
CODEMIRROR_JS = ('/cioxml/js/cm4cioarticle.js',)
IMAGE_PATHS = ('{directory}/Images', '{directory}')
RELAXNG_CIOARTICLE = {
'root': 'cioarticle', 'version': '1.0', 'file': join(
dirname(__file__), '..', '..', 'Processors', 'CioarticleValidate',
'RelaxNG', 'cioarticle.rng')}
# =============================================================================
[docs]def includeme(configurator):
"""Function to include WBWarehouse a handler.
:type configurator: pyramid.config.Configurator
:param configurator:
Object used to do configuration declaration within the application.
"""
HandlerCiomemo.register(configurator, HandlerCioarticle)
# =============================================================================
[docs]class HandlerCioarticle(HandlerCiomemo):
"""Class to manage a Cioarticle XML file."""
uid = 'cioarticle'
label = _('Cioarticle XML file handling')
extensions = ('.xml',)
content_regex = b'<cioarticle '
imports = (('../handler_ciomemo/Seeds', 'Seeds'),
('cioxml:handlers/handler_ciomemo/Xsl', 'Xsl'))
seeds = {
'cioarticle': (
'/cioxml/images/seed_cioarticle.png', _('Article'),
join('Seeds', 'cioarticle.xml'))}
viewings = (
{'name': 'preview', 'label': _('Cioarticle Preview'),
'template': LAYOUT_VIEW_PT,
'css': HANDLER_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': HANDLER_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': HANDLER_XML_CSS,
'js': CHRYSALIO_JS})
editings = (
{'name': 'cxe', 'label': _('Wysiwym'),
'template': LAYOUT_EDIT_PT,
'css': HANDLER_CSS + KATEX_CSS + CIOARTICLE_CXE_CSS,
'js': CHRYSALIO_JS + KATEX_JS + CIOARTICLE_CXE_JS,
'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})
thumbnailing = {
'css': normpath(join(
dirname(__file__), '..', '..', 'Static', 'Css',
'handler_cioarticle_thumbnail.css')),
'xsl': join('Xsl', 'cioarticle_thumbnail.xsl'),
'image_paths': IMAGE_PATHS}
relaxng = RELAXNG_CIOARTICLE
_home = dirname(__file__)
# -------------------------------------------------------------------------
@classmethod
def _edit_cxe_i18n(cls, request):
"""Return a string of data-i18n_* attributes for translations in
CioXmlEditor.
See: :meth:.handlers.handler_xml.HandlerXml._edit_cse_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_metadata="{tag_metadata}"'\
' 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=HandlerCiomemo._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_metadata=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))