Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: chrome/common/extensions/docs/server2/reference_resolver.py

Issue 80183002: Correct $ref links in extensions documentation server relative location. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Feedback Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from copy import deepcopy 5 from copy import deepcopy
6 import logging 6 import logging
7 import re 7 import re
8 import string 8 import string
9 9
10 from file_system import FileNotFoundError 10 from file_system import FileNotFoundError
(...skipping 26 matching lines...) Expand all
37 key = '%s/%s' % (namespace, ref) 37 key = '%s/%s' % (namespace, ref)
38 # AppEngine doesn't like keys > 500, but there will be some other stuff 38 # AppEngine doesn't like keys > 500, but there will be some other stuff
39 # that goes into this key, so truncate it earlier. This shoudn't be 39 # that goes into this key, so truncate it earlier. This shoudn't be
40 # happening anyway unless there's a bug, such as http://crbug.com/314102. 40 # happening anyway unless there's a bug, such as http://crbug.com/314102.
41 max_size = 256 41 max_size = 256
42 if len(key) > max_size: 42 if len(key) > max_size:
43 logging.error('Key was >%s characters: %s' % (max_size, key)) 43 logging.error('Key was >%s characters: %s' % (max_size, key))
44 key = key[:max_size] 44 key = key[:max_size]
45 return key 45 return key
46 46
47
not at google - send to devlin 2013/11/22 20:16:10 python style is actually to have 2 blank lines bet
benwells 2013/11/27 07:28:31 Done.
48 class ReferenceResolver(object): 47 class ReferenceResolver(object):
49 """Resolves references to $ref's by searching through the APIs to find the 48 """Resolves references to $ref's by searching through the APIs to find the
50 correct node. 49 correct node.
51 50
52 $ref's have two forms: 51 $ref's have two forms:
53 52
54 $ref:api.node - Replaces the $ref with a link to node on the API page. The 53 $ref:api.node - Replaces the $ref with a link to node on the API page. The
55 title is set to the name of the node. 54 title is set to the name of the node.
56 55
57 $ref:[api.node The Title] - Same as the previous form but title is set to 56 $ref:[api.node The Title] - Same as the previous form but title is set to
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 return ref_data 162 return ref_data
164 logging.error('$ref %s could not be resolved in namespace %s.' % 163 logging.error('$ref %s could not be resolved in namespace %s.' %
165 (ref, namespace)) 164 (ref, namespace))
166 type_name = ref.rsplit('.', 1)[-1] 165 type_name = ref.rsplit('.', 1)[-1]
167 return { 166 return {
168 'href': '#type-%s' % type_name, 167 'href': '#type-%s' % type_name,
169 'text': title or ref, 168 'text': title or ref,
170 'name': ref 169 'name': ref
171 } 170 }
172 171
173 def ResolveAllLinks(self, text, namespace=None): 172 def ResolveAllLinks(self, text, requestPath='', namespace=None):
not at google - send to devlin 2013/11/22 20:16:10 requestPath -> request_path
benwells 2013/11/27 07:28:31 Done.
174 """This method will resolve all $ref links in |text| using namespace 173 """This method will resolve all $ref links in |text| using namespace
175 |namespace| if not None. Any links that cannot be resolved will be replaced 174 |namespace| if not None. Any links that cannot be resolved will be replaced
176 using the default link format that |SafeGetLink| uses. 175 using the default link format that |SafeGetLink| uses.
176 The links are relative, with the prefix for the path determined by
177 inspecting request.path.
not at google - send to devlin 2013/11/22 20:16:10 Perhaps just "Links will be generated relative to
benwells 2013/11/27 07:28:31 Done.
177 """ 178 """
178 if text is None or '$ref:' not in text: 179 if text is None or '$ref:' not in text:
179 return text 180 return text
181
182 link_prefix = ''
183 # requestPath should be of the form (apps|extensions)/...../page.html.
184 # link_prefix should that the target will point to
185 # (apps|extensions)/target.html.
186 if requestPath is not '':
187 link_prefix = '../' * (requestPath.count('/') - 1)
180 split_text = text.split('$ref:') 188 split_text = text.split('$ref:')
181 # |split_text| is an array of text chunks that all start with the 189 # |split_text| is an array of text chunks that all start with the
182 # argument to '$ref:'. 190 # argument to '$ref:'.
183 formatted_text = [split_text[0]] 191 formatted_text = [split_text[0]]
184 for ref_and_rest in split_text[1:]: 192 for ref_and_rest in split_text[1:]:
185 title = None 193 title = None
186 if ref_and_rest.startswith('[') and ']' in ref_and_rest: 194 if ref_and_rest.startswith('[') and ']' in ref_and_rest:
187 # Text was '$ref:[foo.bar maybe title] other stuff'. 195 # Text was '$ref:[foo.bar maybe title] other stuff'.
188 ref_with_title, rest = ref_and_rest[1:].split(']', 1) 196 ref_with_title, rest = ref_and_rest[1:].split(']', 1)
189 ref_with_title = ref_with_title.split(None, 1) 197 ref_with_title = ref_with_title.split(None, 1)
190 if len(ref_with_title) == 1: 198 if len(ref_with_title) == 1:
191 # Text was '$ref:[foo.bar] other stuff'. 199 # Text was '$ref:[foo.bar] other stuff'.
192 ref = ref_with_title[0] 200 ref = ref_with_title[0]
193 else: 201 else:
194 # Text was '$ref:[foo.bar title] other stuff'. 202 # Text was '$ref:[foo.bar title] other stuff'.
195 ref, title = ref_with_title 203 ref, title = ref_with_title
196 else: 204 else:
197 # Text was '$ref:foo.bar other stuff'. 205 # Text was '$ref:foo.bar other stuff'.
198 match = self._bare_ref.match(ref_and_rest) 206 match = self._bare_ref.match(ref_and_rest)
199 if match is None: 207 if match is None:
200 ref = '' 208 ref = ''
201 rest = ref_and_rest 209 rest = ref_and_rest
202 else: 210 else:
203 ref = match.group() 211 ref = match.group()
204 rest = ref_and_rest[match.end():] 212 rest = ref_and_rest[match.end():]
205 213
206 ref_dict = self.SafeGetLink(ref, namespace=namespace, title=title) 214 ref_dict = self.SafeGetLink(ref, namespace=namespace, title=title)
207 formatted_text.append('<a href="%(href)s">%(text)s</a>%(rest)s' % 215 formatted_text.append('<a href="%s%s">%s</a>%s' %
208 { 'href': ref_dict['href'], 'text': ref_dict['text'], 'rest': rest }) 216 (link_prefix, ref_dict['href'], ref_dict['text'], rest))
209 return ''.join(formatted_text) 217 return ''.join(formatted_text)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698