[XSLT] выравнивание текста (output=text)

yolki


<?xml version="1.0" encoding="windows-1251"?>
<shelf>
<article>
<title> Боян </title>
<author> Петров </author>
<author> Васечкин </author>
</article>

<article>
<title> Ещё один боян </title>
<author> Пупкин </author>
<author> Владимир Владимирович </author>
</article>
</shelf>

Есть такой XSL:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="windows-1251"/>

<xsl:template match="shelf/article">
<xsl:text>Заголовок=</xsl:text> <xsl:value-of select="title"/> <xsl:text>&#13;&#10;</xsl:text>
<xsl:for-each select="author">
<xsl:text>Автор_</xsl:text>
<xsl:value-of select="position"/>
<xsl:text>=</xsl:text> <xsl:value-of select="."/> <xsl:text>&#13;&#10;</xsl:text>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

результат:

Заголовок= Боян
Автор_1= Петров
Автор_2= Васечкин

хочется:

Заголовок = Боян
Автор_1 = Петров
Автор_2 = Васечкин

Тут наверное надо курить в сторону http://www.w3.org/1999/XSL/Format, но чё-то там не очень понятно..

artimon

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

yolki

ок, всё равно там ещё кучка работы для sed/awk апосля

oleg701

А парсер случаем не MSXML?

kruzer25

Вместо
<xsl:text>Заголовок=</xsl:text> <xsl:value-of select="title"/> <xsl:text> </xsl:text>
не прокатит ли что-нибудь вроде
<xsl:text>Заголовок=</xsl:text> <xsl:value-of select="title"/> <xsl:text> </xsl:text>
?

yolki

msxsl
2penartur: разницы не усмотрел

pitrik2

не прокатит ли что-нибудь вроде
тогда уж нужно код символа табуляции вставить
и потом результат будет зависеть от просмотрщика полученного файла

kruzer25

тогда уж нужно код символа табуляции вставить
А табуляция - это разве не 7?

kruzer25

Блядский форум, он всё распарсил
В общем, вставляешь, куда тебе надо, &#07;

yolki

табы это атавизм.
табы идут лесом.
в одном редакторе они так, в другом - сяк. в третьем вообще неравномерно.
только пробелами.

kruzer25

табы это атавизм.
табы идут лесом.
в одном редакторе они так, в другом - сяк. в третьем вообще неравномерно.
только пробелами.
В хтмле таблицы (и прочие слои) - атавизм, они идут лесом, в одном браузере они так, в другом - сяк, в третьем вообще неравномерно.
Дизайн должен быть только пробелами!
А вообще, табы именно для таких вещей и предназначены.
И, если уж ты заговорил насчёт редакторов - что произойдёт, если я в _любом_ редакторе слово "автор" заменю на "аффтар" (или наоборот)? Если пользоваться пробелами - то вся такая "таблица" у тебя как раз и поедет.
Так что, имхо, тут надо поставить табы.

oleg701

В msxml у нас делалось что-то типа

<msxsl:script language="VBScript" implements-prefix="fun"><![CDATA[
Dim strm

function formFixedString(val,length,filler,align)
al = align
l = Len(val)
if l<length then
if al="r" then
formFixedString=string(length-l,filler)+val
else
formFixedString=val+string(length-l,filler)
end if
else
formFixedString=Left(val,length)
end if
end function

function fixed(node,fld,length,filler,align)
set nd = node.nextNode

val = nd.selectSingleNode(fld).text
fixed = formFixedString(val,length,filler,align)
end function

]]></msxsl:script>


...


<xsl:template match='file'>
<xsl:value-of select="fun:fixed(.,'file_name',8,' ','l')"/>
<xsl:value-of select="fun:fixed(.,'file_type',3,' ','l')"/>
</xsl:template>

yolki

дизайн в текстовом файле должен быть пробелами.
дружочек, если ты не заметил,
<xsl:output method="text"/>

kruzer25

дизайн в текстовом файле должен быть пробелами
Дизайн в текстовом файле должен быть именно табами.
Пробелы в текстовом файле - то же самое, что и пробелы в каком-нибудь ворде, когда люди хотят поместить содержимое ячейки по её центру.

yolki

тогда рядом с каждым текстовым файлом нужно таскать табовую разметку, а то и не одну. и переключать её внутри файла. и будет тогда не текстовый файл, а файл текстового процессора. это бред

kruzer25

тогда рядом с каждым текстовым файлом нужно таскать табовую разметку
Что-что?
Наверное, мы не совсем понимаем друг друга

yolki

табы могут быть и не на 8х позициях расставлены
[ mode]
Narrowness of experience leads to
narrowness of imagination
[/ mode]

pitrik2

что такое табовая разметка?
таб это 8 пробелов в нормальном просмотрщике/редакторе текста
просто я вот встречал не нормальные просмотрщики, которые таб понимали и даже выравнивали, но итог получался кривой
поэтому и говорю: все зависит от того, где ты потом полученный файл будешь использовать

yolki

жаль стёр пост. всё правильно сказал.
более того скажу.
есть среды, где первый табулятор сдвигает позицию на 8, воторой - на 16, а третий - на 40.

kruzer25

таб это 8 пробелов в нормальном просмотрщике/редакторе текста
Таб - это 8 пробелов в каком-то редакторе.
А по идее, он используется именно для такого выравнивания.
http://en.wikipedia.org/wiki/Tab_key
ЗЫ: Вообще, таб - это примерно то же, что и запятая в csv.

Dasar

правильнее и удобнее делать в два прохода
первый проход занимается перестроением данных - формированием данных для таблицы
второй проход занимается форматированием, причем т.к. данные уже подготовлены, то без проблемы можно расчитать ширину каждого столбца, сколько пробелов надо вставить и т.д.

Ivan8209

> таб это 8 пробелов
"Narrowness of experience leads to narrowness of imagination."
> в нормальном просмотрщике/редакторе текста

tab-stop-list is a variable defined in `indent.el'.

...

Documentation:
*List of tab stop positions used by `tab-to-tab-stop'.
This should be a list of integers, ordered from smallest to largest.

You can customize this variable.

---
"Рот фронт, группенфюрер..."

Ivan8209

> только пробелами.
Как быть с немоноширинными шрифтами?
---
...Я работаю антинаучным аферистом...

yolki

не использовать.
если немоноширинные - нужно таскать информацию о шрифтах. питч и кернинг например для каждого значка. а если шрифт проприетарный?
это метаинформация, которую нужно хранить _рядом_ с текстовым файлом.
опять, это будет файл не текстового редактора, но текстового процессора

Ivan8209

> не использовать.
Вот.
А если использовать HT, то tab-stop-list надо всего лишь
выставлять в em-ах или других единицах длины.
---
...Я работаю антинаучным аферистом...

bastii

аб это 8 пробелов в нормальном просмотрщике/редакторе текста
я все текстовые редакторы, которые использую, настраиваю на табы в 4 пробела
в общем поддерживаю точку зрения, что форматирование в текстовом файле нужно делать пробелами

Ivan8209

> в общем поддерживаю точку зрения, что форматирование
> в текстовом файле нужно делать пробелами
Тогда и к тебе относится вопрос про немоноширинные шрифты.
---
...Я работаю антинаучным аферистом...

Maurog

что такое шрифты для текстового файла?

kruzer25

что такое шрифты для текстового файла?
Тебе зачем текстовый файл нужен? Читать его, или плоожить на полку пылиться?

oleg701

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

kruzer25

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

oleg701

Если у кого-то нет моноширинных шрифтов, он не сможет насладиться выравниванием с помощью пробелов.
А если у него есть только Блокнот, который символ табуляции приравнивает к 8 пробелам, то этот же пользователь не сможет насладиться замечательным выравниванием, нарисованным в редакторе, где табуляция приравнивается к 4 пробелам.
Ибо у него все съедет хз куда.
Причем этот вариант куда вероятнее.
Вся фишка в том, что текстовый формат разрабатывался еще тогда, когда у видеокарт не было графического режима. И немоноширинных шрифтов не было.
Кто хочет наслаждаться красивыми шрифтами, воспользуется возможностями rtf, doc, html или любого другого украшателя текста.
Вот тут пожалуйста, рисуй табуляции как душе угодно.
А в старом добром тексте пробел куда удобнее.

kruzer25

нарисованным в редакторе, где табуляция приравнивается к 4 пробелам.
Что за фигня?
В конце каждой ячейки надопоставить ровно один таб. Причём тут количество пробелов?

oleg701

А то, что 1 таб можно ставить только в том случае, если ты можешь как-то задать позиции табуляции.
Иначе непонятно, по какой именно линии выравнивать.
Текстовый формат этого не позволяет, поэтому позиции расставляются то на каждом 4-м, то на каждом 8-м символе.

bastii

Тогда и к тебе относится вопрос про немоноширинные шрифты.
Для plain text немоноширинные шрифты не использую.

kruzer25

То есть, документ делается для личного использования? И другие люди читать его не должны?

Dasar

если уж выбирать между пробелами и табами, то пробелы лучше, т.к. почти любой вьювер/редактор позволяет выбрать моноширинный шрифт, но очень редкий вьювер/редактор позволяет настроить табы (особенно в режиме выравнивания на линию)
кстати проблема с табами в том, что придется еще рядом прикладывать инструкцию - какие именно табы надо настраивать, то что надо поставить моноширинный шрифт - в целом - понятно и без инструкции.

bastii

Кто другие? По умолчанию текстовые редакторы, которые мне попадались на глаза, используют "правильные" шрифты, и IE, кстати тоже. Если тебе захотелось настроить другие шрифты, это был твой выбор, не вижу проблемы.

Ivan8209

> А то, что 1 таб можно ставить только в том случае,
> если ты можешь как-то задать позиции табуляции.
В случае plain text для этого предназначено такое старое
испытанное средство, как expand(1):

/* $NetBSD: expand.c,v 1.10 2005/03/09 02:02:07 christos Exp $ */

/*
* Copyright (c) 1980, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright

Тебе не кажется, что двадцать семь лет, прошедших с 1980-го года,
для тебя прошли впустую?
> Текстовый формат этого не позволяет
Для тех, кто отстал на двадцать лет, напоминаю,
что разделитель полей по умолчанию --- HT.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

yolki

параметр -t для expand-а для каждого файла где-то хранить надо.
повторюсь, это метаинформация, которая к тексту имеет опосредованное отношение.

Ivan8209

> тут вспонимлось про Ганса
Я прекрасно всё помню.
> параметр -t для expand-а для каждого файла где-то хранить надо.
Это относится ко времени просмотра файла, когда и следует его
задавать или даже вычислять.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Имя или ник:
Комментарий: