Compare commits
6 Commits
master
...
bugfixes/a
| Author | SHA1 | Date | |
|---|---|---|---|
| ee8ad050ff | |||
| 7b9b716b63 | |||
| 4c5bdfb6cf | |||
| 5d78fd6c42 | |||
| 7141f3fa53 | |||
| 8ffc31c64c |
@ -655,7 +655,7 @@ class TxtConverter:
|
||||
def get_output_filename(self, path):
|
||||
return ""
|
||||
|
||||
def create_converter(self, args):
|
||||
def create_converter(self, args, filename='default.txt'):
|
||||
return None
|
||||
|
||||
def run(self, args=sys.argv[1:], out=sys.stdout, err=sys.stderr):
|
||||
@ -704,7 +704,7 @@ class Txt2HtmlConverter(TxtConverter):
|
||||
parser.add_argument('files', metavar='file', nargs='+', help='one or more files to convert')
|
||||
return parser
|
||||
|
||||
def create_converter(self, args):
|
||||
def create_converter(self, args, filename='default.txt'):
|
||||
converter = Txt2Html()
|
||||
converter.append_page_break = args.breakflag
|
||||
converter.create_title = args.create_title
|
||||
|
||||
@ -23,11 +23,25 @@ import re
|
||||
import argparse
|
||||
from lammpsdoc import lammps_filters
|
||||
from lammpsdoc.txt2html import Markup, Formatting, TxtParser, TxtConverter
|
||||
from collections import OrderedDict
|
||||
|
||||
|
||||
def simplify_anchor(anchor_url):
|
||||
""" Remove repeating words, but leave repeating numbers """
|
||||
def unique_words(s):
|
||||
parts = s.split('_')
|
||||
last_word = ""
|
||||
for word in parts:
|
||||
if word.isdecimal() or word != last_word:
|
||||
yield word
|
||||
last_word = word
|
||||
return '_'.join(unique_words(anchor_url))
|
||||
|
||||
|
||||
class RSTMarkup(Markup):
|
||||
def __init__(self):
|
||||
def __init__(self, filename='default.rst'):
|
||||
super().__init__()
|
||||
self.filename = os.path.basename(filename)
|
||||
|
||||
def bold_start(self):
|
||||
return "**"
|
||||
@ -104,11 +118,20 @@ class RSTMarkup(Markup):
|
||||
|
||||
anchor_pos = href.find('#')
|
||||
|
||||
if anchor_pos >= 0 and not href.startswith('http'):
|
||||
href = href[anchor_pos+1:]
|
||||
if anchor_pos > 0 and not href.startswith('http'):
|
||||
filename = os.path.splitext(href[0:anchor_pos])[0]
|
||||
href = href[anchor_pos + 1:]
|
||||
href = simplify_anchor(filename + "_" + href)
|
||||
return ":ref:`%s <%s>`" % (content, href)
|
||||
elif anchor_pos == 0 and not href.startswith('http'):
|
||||
filename = os.path.splitext(self.filename)[0]
|
||||
href = href[anchor_pos + 1:]
|
||||
href = simplify_anchor(filename + "_" + href)
|
||||
return ":ref:`%s <%s>`" % (content, href)
|
||||
|
||||
if href in self.references:
|
||||
filename = os.path.splitext(self.filename)[0]
|
||||
href = simplify_anchor(filename + "_" + href)
|
||||
return ":ref:`%s <%s>`" % (content, href)
|
||||
elif href in self.aliases:
|
||||
href = "%s_" % href
|
||||
@ -122,8 +145,9 @@ class RSTMarkup(Markup):
|
||||
class RSTFormatting(Formatting):
|
||||
RST_HEADER_TYPES = '#*=-^"'
|
||||
|
||||
def __init__(self, markup):
|
||||
def __init__(self, markup, filename = 'default.rst'):
|
||||
super().__init__(markup)
|
||||
self.filename = os.path.basename(filename)
|
||||
self.indent_level = 0
|
||||
|
||||
def paragraph(self, content):
|
||||
@ -165,7 +189,9 @@ class RSTFormatting(Formatting):
|
||||
|
||||
def named_link(self, paragraph, name):
|
||||
self.markup.add_internal_reference(name)
|
||||
return (".. _%s:\n\n" % name) + paragraph
|
||||
filename = os.path.splitext(self.filename)[0]
|
||||
name = simplify_anchor(filename + "_" + name)
|
||||
return (".. _%s:\n\n" % self.markup.unescape_rst_chars(name)) + paragraph
|
||||
|
||||
def define_link_alias(self, paragraph, alias, value):
|
||||
self.markup.add_link_alias(alias, value)
|
||||
@ -347,10 +373,10 @@ class RSTFormatting(Formatting):
|
||||
|
||||
|
||||
class Txt2Rst(TxtParser):
|
||||
def __init__(self):
|
||||
def __init__(self, filename='default.rst'):
|
||||
super().__init__()
|
||||
self.markup = RSTMarkup()
|
||||
self.format = RSTFormatting(self.markup)
|
||||
self.markup = RSTMarkup(filename=filename)
|
||||
self.format = RSTFormatting(self.markup,filename=filename)
|
||||
self.register_filters()
|
||||
|
||||
def register_filters(self):
|
||||
@ -394,8 +420,8 @@ class Txt2RstConverter(TxtConverter):
|
||||
parser.add_argument('files', metavar='file', nargs='+', help='one or more files to convert')
|
||||
return parser
|
||||
|
||||
def create_converter(self, args):
|
||||
return Txt2Rst()
|
||||
def create_converter(self, args, filename='default.txt'):
|
||||
return Txt2Rst(filename=self.get_output_filename(filename))
|
||||
|
||||
def get_output_filename(self, path):
|
||||
filename, ext = os.path.splitext(path)
|
||||
|
||||
@ -411,18 +411,26 @@ class TestSpecialCommands(unittest.TestCase):
|
||||
def test_internal_reference_link(self):
|
||||
s = self.txt2rst.convert("one :link(name)\n"
|
||||
"a \"link\"_name to above\n")
|
||||
self.assertEqual(".. _name:\n"
|
||||
self.assertEqual(".. _default_name:\n"
|
||||
"\n"
|
||||
"one \n\n"
|
||||
"a :ref:`link <name>` to above\n\n", s)
|
||||
"a :ref:`link <default_name>` to above\n\n", s)
|
||||
|
||||
def test_local_anchor_link(self):
|
||||
s = self.txt2rst.convert("one :link(name)\n"
|
||||
"a \"link\"_#name to above\n")
|
||||
self.assertEqual(".. _name:\n"
|
||||
self.assertEqual(".. _default_name:\n"
|
||||
"\n"
|
||||
"one \n\n"
|
||||
"a :ref:`link <name>` to above\n\n", s)
|
||||
"a :ref:`link <default_name>` to above\n\n", s)
|
||||
|
||||
def test_repeating_words_in_anchor_link(self):
|
||||
s = self.txt2rst.convert("one :link(name_name_2_2)\n"
|
||||
"a \"link\"_#name_name_2_2 to above\n")
|
||||
self.assertEqual(".. _default_name_2_2:\n"
|
||||
"\n"
|
||||
"one \n\n"
|
||||
"a :ref:`link <default_name_2_2>` to above\n\n", s)
|
||||
|
||||
def test_external_anchor_link(self):
|
||||
s = self.txt2rst.convert('some text "containing a\n'
|
||||
|
||||
Reference in New Issue
Block a user