Как закомментировать содержимое XML-файла с помощью sed?

Помимо использования форка rxvt -unicode -sixel , можно было бы реализовать sixel, написав расширение на Perl. Документация для этого находится на справочной странице urxvtperl (3 ). Я мало что знаю о шестёрке, но думаю, что дело в:

  • перехватывая шесть управляющих последовательностей, интерпретируя их и не пропуская к основному интерпретатору управляющих последовательностей. Вы можете заменить последовательность символами новой строки, чтобы сместить правильное количество строк, чтобы соответствовать высоте изображения, возможно, масштабировать, чтобы соответствовать ширине.

  • рисование изображения. Вы можете получить правильный идентификатор окна через API, который urxvt предоставляет расширениям, и использовать обычные функции xlib или xcb для рисования изображения, если это необходимо.

  • Следите за такими событиями, как прокрутка, чтобы перерисовать изображение по мере необходимости.

Я вижу здесь много возможностей, которые можно было бы настроить, хотя я не знаю, существуют ли стандарты для реализации sixel. Например, что происходит с изображениями при изменении размера терминала? Он обрезан? Это масштабируется? только при создании или при каждом изменении размера? что происходит, когда курсор затем перемещается по изображению и пишется достаточно, чтобы текст переносился? что происходит с изображением и обернутым текстом при изменении размера? и т. д.

Я думаю, что в идеале было бы сначала нарисовать его в масштабе, который меньше между шириной терминала и размером изображения, и установить это как максимальный размер изображения. Измените масштаб изображения при изменении размера терминала, соблюдая установленный максимальный размер. Что касается текста, нарисованного поверх него,может быть немного сложно сохранить этот текст поверх изображения при перерисовке изображения...

Извините, кажется, я немного погорячился и не смог ответить на ваш вопрос. Как бы хотелось, чтобы у меня было время поработать над этим.

РЕДАКТИРОВАТЬ :Чтобы ответить на скептицизм в комментариях по поводу возможности работы с пикселями из Perl-расширения urxvt, вот доказательство концепции. Он устанавливает белый цвет пикселя по координате (10, 10 )сверху -слева:

use strict;
use warnings;
use X11::Protocol;

my $X = X11::Protocol->new;

sub on_refresh_end {
  my $term = shift(@_);
  my $gc = $X->new_rsrc;
  $X->CreateGC($gc, $term->vt,
    foreground => $X->white_pixel);
  $X->PolyPoint($term->vt, $gc, 0, (10,10));
  $X->flush;
}

Чтобы установить это расширение, поместите его в ~/.urxvt/ext/sixel-proof-of-concept, добавьте в ~/.Xresources (или ~/.Xdefaults, если вы используете это ), добавив строку URxvt.perl-ext-common: sixel-proof-of-concept, загрузите для этого выполните xrdb ~/.Xresourcesи убедитесь, что у вас установлен модуль perl X11::Protocol.

1
28.05.2020, 10:20
2 ответа

Попробуйте это:

sed -r '/^\s*<Valve className\s*=\s*"org\.apache\.catalina\.valves\.RemoteAddrValve"\s*$/{h;z;N;s:^\n::;H;/^\s*allow\s*=\s*"127\\\.\\d\+\\\.\\d\+\\\.\\d\+\|::1\|0:0:0:0:0:0:0:1"\s*\/>\s*$/{g;s/.*/<!--\n&\n-->/}}' context.xml

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
      http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
2
18.03.2021, 23:32

Попробуйте:

sed '{$!{N;s/<Valve.*\n.*allow.* \/>/<!-- & -->/;ty;P;D;:y}}' content.xml

Выводит:

...
<Context antiResourceLocking="false" privileged="true" >
  <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

Можно легко изменить, чтобы поместить теги комментариев в отдельные строки, если это необходимо, т.е.

sed '{$!{N;s/<Valve.*\n.*allow.* \/>/<!--\n&\n-->/;ty;P;D;:y}}' content.xml
3
18.03.2021, 23:32

Теги

Похожие вопросы