Похоже, что компилятор использует неверную версию стандартной библиотеки для запуска самого себя.
Запустите задачу Gradle dependencies
с аргументом --configuration kotlinCompilerClasspath
в подпроекте, где сборка не может определить причину попадания неверной версии в путь к классам компилятора:
./gradlew dependencies --configuration kotlinCompilerClasspath
Правильный вывод должен выглядеть как:
------------------------------------------------------------
Project :examples/kotlin
------------------------------------------------------------
kotlinCompilerClasspath
\--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.11
+--- org.jetbrains.kotlin:kotlin-stdlib:1.3.11
| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.11
| \--- org.jetbrains:annotations:13.0
+--- org.jetbrains.kotlin:kotlin-script-runtime:1.3.11
\--- org.jetbrains.kotlin:kotlin-reflect:1.3.11
\--- org.jetbrains.kotlin:kotlin-stdlib:1.3.11 (*)
(*) - dependencies omitted (listed previously)
- Пишите/находите интеллектуальную функцию усечения HTML
Следование из http://mikeburnscoder.wordpress.com/2006/11/11/truncating-html-in-ruby/, с некоторыми модификациями правильно усечет HTML и легко позволит добавлять строку перед закрывающими тэгами.
>> puts "<p><b><a href=\"hi\">Something</a></p>".truncate_html(5, at_end = "...")
=> <p><b><a href="hi">Someth...</a></b></p>
Измененный код:
require 'rexml/parsers/pullparser'
class String
def truncate_html(len = 30, at_end = nil)
p = REXML::Parsers::PullParser.new(self)
tags = []
new_len = len
results = ''
while p.has_next? && new_len > 0
p_e = p.pull
case p_e.event_type
when :start_element
tags.push p_e[0]
results << "<#{tags.last}#{attrs_to_s(p_e[1])}>"
when :end_element
results << "</#{tags.pop}>"
when :text
results << p_e[0][0..new_len]
new_len -= p_e[0].length
else
results << "<!-- #{p_e.inspect} -->"
end
end
if at_end
results << "..."
end
tags.reverse.each do |tag|
results << "</#{tag}>"
end
results
end
private
def attrs_to_s(attrs)
if attrs.empty?
''
else
' ' + attrs.to_a.map { |attr| %{#{attr[0]}="#{attr[1]}"} }.join(' ')
end
end
end
Вот решение, которое работает на меня с Тканью.
Удалите любые HTML-тэги, которые получили включенную половину с
html_string.gsub(/<[^>]*$/, "")
Затем использует Hpricot для чистки его и близко открытые теги
html_string = Hpricot( html_string ).to_s
Я делаю это в помощнике, и с кэшированием нет никакой проблемы производительности.
Вместо того, чтобы пытаться усечь текст, почему бы не 2 поля ввода, один для "вводной аннотации" и один для основных "кишок". Тем путем Ваши авторы будут знать точно, что является шоу когда, не имея необходимость полагаться на своего рода фанковое маркер EOF.
Вы могли использовать регулярное выражение для нахождения строки, состоящей из только "^" символы:
markdown_string = <<-eos
This article is an example of something or other.
This segment will be used as the snippet on the index page.
^^^^^^^^^^^^^^^
This text will be visible once clicking the "Read more.." link
eos
preview = markdown_string[0...(markdown_string =~ /^\^+$/)]
puts preview
Я должен согласиться с подходом «два входа», и автору контента не нужно будет беспокоиться, поскольку вы можете изменить фоновую логику, чтобы смешать два входа в один при отображении полное содержание.
full_content = input1 + input2 // perhaps with some complementary html, for a better formatting