/irc-logs / w3c / #webapps / 2009-05-13 / end

Options:

  1. # Session Start: Wed May 13 00:00:00 2009
  2. # Session Ident: #webapps
  3. # [00:11] * Quits: arve (arve@84.202.133.45) (Quit: Ex-Chat)
  4. # [00:41] * Joins: aroben (aroben@71.58.77.15)
  5. # [01:00] * Quits: heycam (cam@203.217.72.53) (Quit: bye)
  6. # [01:30] * Joins: heycam (cam@130.194.73.110)
  7. # [02:07] * Joins: gavin__ (gavin@63.245.208.169)
  8. # [02:07] * Quits: gavin_ (gavin@63.245.208.169) (Connection reset by peer)
  9. # [02:13] * gavin__ is now known as gavin_
  10. # [03:21] * Quits: aroben (aroben@71.58.77.15) (Connection reset by peer)
  11. # [04:58] * Joins: shepazu (schepers@128.30.52.30)
  12. # [05:59] * Quits: shepazu (schepers@128.30.52.30) (Quit: shepazu)
  13. # [08:38] * Quits: heycam (cam@130.194.73.110) (Quit: bye)
  14. # [08:41] * Joins: tlr (tlr@128.30.52.30)
  15. # [08:42] * Joins: heycam (cam@130.194.221.66)
  16. # [08:56] * Joins: darobin (darobin@85.169.117.248)
  17. # [09:17] * Quits: darobin (darobin@85.169.117.248) (Quit: darobin)
  18. # [09:31] * Joins: darobin (darobin@85.169.117.248)
  19. # [10:07] * Quits: heycam (cam@130.194.221.66) (Quit: bye)
  20. # [10:37] * Joins: arve (arve@213.236.208.22)
  21. # [10:41] * Quits: darobin (darobin@85.169.117.248) (Quit: darobin)
  22. # [11:00] * Quits: arve (arve@213.236.208.22) (Quit: Ex-Chat)
  23. # [11:01] * Joins: arve (arve@213.236.208.22)
  24. # [11:01] * Quits: arve (arve@213.236.208.22) (Client exited)
  25. # [11:01] * Joins: heycam (cam@124.168.80.239)
  26. # [11:01] * Joins: arve (arve@213.236.208.22)
  27. # [11:14] <arve> Did someone ever define DOMTimeStamp?
  28. # [11:14] <arve> oh, they did
  29. # [11:24] * Joins: darobin (darobin@82.233.247.234)
  30. # [11:57] * Joins: ArtB (d0309a43@128.30.52.43)
  31. # [12:16] <ArtB> Marcos, yt? Arve says you need to do some anolis magic on http://dev.w3.org/cvsweb/2006/waf/widgets-api/Overview.src.html to get a "readable" version at "http://dev.w3.org/cvsweb/2006/waf/widgets-api/Overview.html". Would you please do that? That would be help me know which sections are incomplete (and hence should be added to tomorrow's agenda).
  32. # [12:16] <Marcos> right
  33. # [12:16] <Marcos> I will do that now
  34. # [12:17] <ArtB> Thanks!
  35. # [12:17] <Marcos> ok, uploading
  36. # [12:18] <Marcos> ArtB: done
  37. # [12:19] <Marcos> I'll try to add my issues today too
  38. # [12:21] <ArtB> thanks
  39. # [12:21] <ArtB> focus on P&C :)
  40. # [12:22] <Marcos> aye aye!
  41. # [12:29] * Quits: tlr (tlr@128.30.52.30) (Quit: leopard upgrade)
  42. # [12:36] <Marcos> Hmmm... we never heard back from i18n
  43. # [12:36] <Marcos> oh well
  44. # [12:36] <Marcos> I guess we will flag them in the 2nd LC
  45. # [12:44] <ArtB> Marcos, looks like they didn't discuss widgets during their May 6 call (http://www.w3.org/2009/05/06-core-minutes.html)
  46. # [12:44] <Marcos> right "reply to 0023 to widgets saying that we intend to comment shortly and sorry for missing the 23rd"
  47. # [12:45] <Marcos> Should I tell them not to worry?
  48. # [12:45] <Marcos> and to hold off reading the 2nd LC doc
  49. # [12:45] <Marcos> s/reading/reading to
  50. # [12:46] <ArtB> I don't think it would make sense for them to review an ED knowing an LC will be published RSN
  51. # [12:46] <Marcos> yeah, that's what I mean
  52. # [12:47] <Marcos> sorry... I'm unarticulated today :)
  53. # [12:47] <ArtB> we're on the same page on this one :)
  54. # [12:47] <ArtB> Marcos, are you and JK working together on the L10n model?
  55. # [12:48] <Marcos> I'm waiting for his input, I can't really do mine till I get his as they are co-dependent
  56. # [12:48] <Marcos> well, mine section extends his
  57. # [12:48] <Marcos> I need to read the email that Jere just sent in
  58. # [12:49] <Marcos> Regardless, I've polished Step 7... almost done
  59. # [12:49] <Marcos> Just need darobin to send me <access>
  60. # [12:49] <Marcos> so REALLY close :D
  61. # [12:50] <ArtB> I'll ping JK now
  62. # [12:52] <ArtB> Arve, yt?
  63. # [12:54] <ArtB> I think we want to remove "# be notified of events relating to the widget being updated," from the Abstract, right?
  64. # [12:54] <ArtB> ... of A&E spec
  65. # [12:55] <arve> ArtB: barely, but yes
  66. # [12:55] <arve> (and that was two answers)
  67. # [12:55] <Marcos> I'll do that
  68. # [12:56] <Marcos> done
  69. # [12:57] <Marcos> checked in
  70. # [12:57] <ArtB> thankgs
  71. # [12:58] <ArtB> Marcos, Arve - what is the purpose of the huge Red Block Isssue in section 5? http://dev.w3.org/2006/waf/widgets-api/#the-widget-interface
  72. # [12:58] <Marcos> I need to fix that
  73. # [12:58] <Marcos> it's a reminder
  74. # [12:58] * Marcos goes to #wam to talk to jere
  75. # [13:02] * Joins: JereK (c0647cda@128.30.52.43)
  76. # [13:02] <Marcos> Let me recap
  77. # [13:02] <Marcos> I need to adapt the following to Step 7 making use of whatever is produced out of Step 5 "Search the configuration document in document order. If, upon applying lookup, an element matches the user agent's locale, then the value of that matching element's xml:lang attribute becomes the widget's configuration document locale. If no match is made, then the use agent will only use unlocalized content from the configuration document."
  78. # [13:03] <JereK> Wondering about 'document order'... that puts a burden on the creator of the config file.
  79. # [13:04] <Marcos> darobin: hehe re: widgets
  80. # [13:04] <Marcos> JereK: how so?
  81. # [13:05] <JereK> Sorry, disregard that last remark. Brain overload...
  82. # [13:05] <Marcos> Document order is important for elements that must not be duplicated. In which case the first one is the only one is used by the UA
  83. # [13:05] <darobin> Marcos: you mean about Teledildonics?
  84. # [13:06] <Marcos> Well, I wasn't going to use that word here, but yes
  85. # [13:06] <darobin> Marcos: sorry, I'm on a call, I'll get back to you with <access> stuff right after
  86. # [13:06] <darobin> :)
  87. # [13:06] <JereK> There's a paragraph in Step 7 that talks about localized content, should that be there?
  88. # [13:07] <JereK> The 3rd, starts with "If an author has placed...".
  89. # [13:08] <Marcos> no, that should not be there. I have not worked on the localization parts as I was waiting to see what you were going to do with step 5 :)
  90. # [13:09] <Marcos> I'm hoping I should just be able to "piggy back" whatever is defined in step 5.
  91. # [13:09] <JereK> The thing is, the HTTP server model that Francois sketched is probably going to feature in Step 5, but dunno how much ATM.
  92. # [13:09] <Marcos> that would be good.
  93. # [13:10] <JereK> The para I mentioned needs to go somewhere in Section 8, I think.
  94. # [13:11] <Marcos> Let me read your email. In the mean time, can you give me a high level overview of what you are thinking for Step 5 beyond what is already there?
  95. # [13:11] <JereK> I suggest to rename Step 5 to "Determine the Widget Locale".
  96. # [13:12] <JereK> The base folder only comes into play when the engine is doing the content negotiation.
  97. # [13:12] <Marcos> right
  98. # [13:13] <Marcos> I'm ok with that
  99. # [13:13] <JereK> Then we need to make clear whether the widget locale is a list of language tags or a single one.
  100. # [13:14] <JereK> And also how the subtags are applied in either case.
  101. # [13:14] <Marcos> right
  102. # [13:14] <Marcos> so, should we work through a scenario?
  103. # [13:15] <Marcos> Make sure we are both on the same page
  104. # [13:15] <JereK> Maybe the example is a bit too extensive, with both config document and resources. Tackle them separately?
  105. # [13:15] <JereK> Yeah, let's do that.
  106. # [13:16] <JereK> So do we still have separate 'folder locale' and 'config locale'?
  107. # [13:16] <Marcos> Ok, so we agree that the UA locale is a list of one or more language tags?
  108. # [13:16] <JereK> I think so, yes.
  109. # [13:16] <Marcos> yes, we still have separate locales for config and folders
  110. # [13:16] <JereK> I still don't get it, but that's my limitation...
  111. # [13:16] <Marcos> so, starting with folders...
  112. # [13:17] <Marcos> we will try to work out if we need two or not
  113. # [13:17] <Marcos> two separate locales that is
  114. # [13:17] <Marcos> so, assume the following widget:
  115. # [13:17] <JereK> OK. So from the UA list we derive one or two widget related locales.
  116. # [13:17] <Marcos> widget.wgt
  117. # [13:17] <Marcos> locales/zh-Hans-CN/a.gif
  118. # [13:17] <Marcos> locales/zh-Hans-CN/f.gif
  119. # [13:17] <Marcos> locales/zh-Hans/a.gif
  120. # [13:17] <Marcos> locales/zh-Hans/b.gif
  121. # [13:17] <Marcos> locales/zh/a.gif
  122. # [13:17] <Marcos> locales/zh/b.gif
  123. # [13:18] <Marcos> locales/zh/c.gif
  124. # [13:18] <Marcos> a.gif
  125. # [13:18] <Marcos> b.gif
  126. # [13:18] <Marcos> c.gif
  127. # [13:18] <Marcos> d.gif
  128. # [13:18] <Marcos> f.gif
  129. # [13:18] <Marcos> g.gif
  130. # [13:18] <Marcos> index.html
  131. # [13:18] <Marcos> config.xml
  132. # [13:18] <Marcos> hopefully that all got pasted in properly
  133. # [13:18] <Marcos> is the last file "config.xml"?
  134. # [13:18] <JereK> Yes. But let's keep the actual config file processing out for now.
  135. # [13:19] <Marcos> right. As you said. So, lets assume "zh" as UA locale.
  136. # [13:20] <JereK> OK, here the important cases are getting a.gif, c.gif or f.gif.
  137. # [13:21] <Marcos> right
  138. # [13:21] <JereK> Here the 'folder locale' would be simply zh, right? The only thing you can get from the UA locale.
  139. # [13:22] <Marcos> right, so how do we derive that?
  140. # [13:23] <JereK> Since the UA list has only one entry, that must be it. What if the UA locale list was "zh-Hans, zh"?
  141. # [13:23] <Marcos> ok, that's probably a better place to start. Should we do normalization?
  142. # [13:23] <Marcos> actually, no normalization needed there
  143. # [13:23] <JereK> Define normalization :-)
  144. # [13:24] <Marcos> never mind
  145. # [13:24] <Marcos> :)
  146. # [13:24] <JereK> y'know, I'm starting to think we could just use the UA list as is.
  147. # [13:24] <Marcos> yes
  148. # [13:25] <Marcos> so, run through the UA list and try to find matching directories.
  149. # [13:25] <JereK> Right. To continue the walkthrough, say you want a.gif.
  150. # [13:26] <JereK> Since the first one you try is locales/zh-Hans/a.gif, you're good.
  151. # [13:26] <Marcos> The thing is that in step 5, we don't want any files. You just want a list of all the possible directories that match the UA language list
  152. # [13:26] <JereK> Ahh... but do you need that list if you use the UA language list as is?
  153. # [13:27] <Marcos> well, not the whole UA language list, just the directories that match one of the items in the list (searched from left to right, because the left most item is most preferred)
  154. # [13:27] <JereK> Since like Francois sketched, locale is per resource. So if you don't find something for zh-Hans, you try zh.
  155. # [13:27] <Marcos> ah right...
  156. # [13:28] <Marcos> ah ok.. so you really don't have a "folder locale" at all
  157. # [13:28] <JereK> In essence, the UA language list is your Accept-Language header equivalent.
  158. # [13:28] <Marcos> makes sense
  159. # [13:28] <JereK> Or do I simplify this too much even?
  160. # [13:29] <Marcos> no, I think it's good... but it needs to be optimised... it can't be that we have to search the whole zip archive every time we want to find a fle
  161. # [13:29] <Marcos> file
  162. # [13:29] <JereK> That's what I was worried about in what I just wrote to the list...
  163. # [13:30] <JereK> Though it's not really the whole ZIP, since you know where you need to start looking. It's max one complete branch of the tree per resource.
  164. # [13:30] <Marcos> I wonder if we could do it "per directory" instead of per resource
  165. # [13:31] <JereK> Not really, because there is no directory as such, just resources...
  166. # [13:31] <Marcos> yes, that is true in HTTP land, but in Zip land you can get a distinction which you can leverage
  167. # [13:32] <JereK> The 'locales' branch is an artifact of that. Sure those could have subdirs, but still it's like a specialization of anything that is in the root.
  168. # [13:32] <JereK> Well, you could keep an index to the ZIP contents in memory and only access stuff when you know what to access.
  169. # [13:34] <Marcos> I think it also helps that you know basically what you want and what you have so [au-lang-list] U [locale directories]
  170. # [13:34] <Marcos> where U is "Lookup" ?
  171. # [13:34] <Marcos> s/au/ua
  172. # [13:34] <JereK> I though it was union :-) But maybe 'folder locale' is redundant after all. Everything is resolved at runtime, really.
  173. # [13:35] <Marcos> right
  174. # [13:35] <Marcos> hmmm
  175. # [13:36] <JereK> So whenever you access a resource, you start looking for it based on the UA-language-list. If and when you exhaust that, you look in the root.
  176. # [13:36] <Marcos> It does seem to simplify things
  177. # [13:36] <JereK> Hopefully not too much.
  178. # [13:37] <Marcos> It seems a bit "brutal"... but there is something nice about the simplicity of it
  179. # [13:37] <JereK> Like Francois observed, there is the chance that you end up with partially localized widgets, but that's really the dev's problem.
  180. # [13:38] <Marcos> ok, so I pass [ua-lang-list] to {blackbox + lookup} and out comes [resource] . I agree with Francois on that one
  181. # [13:39] <Marcos> {blackbox + lookup + a list of all files}
  182. # [13:39] <JereK> Me too. The analogy to HTTP is striking, but we don't need to make too much of that.
  183. # [13:40] <JereK> If we have both zh-Hans and zh on the ua-language-list, do we need to do subtag searching then?
  184. # [13:40] <JereK> Meaning if you don't find the resource for zh-Hans, do you drop Hans and look for zh, even though it is next on the list?
  185. # [13:40] * ArtB votes for simplicity :)
  186. # [13:41] <JereK> Or just rely on whatever the ua-language-list has?
  187. # [13:41] * Marcos having a look if there is anything that can guide us in HTTP spec
  188. # [13:42] <JereK> HTTP is still using RFC 3066, but it's not that much different from BCP47 in this sense, I guess.
  189. # [13:42] <Marcos> That is what I was trying to say about "normalization" before
  190. # [13:43] <JereK> Well, what does a typical web client do? Like, say, Firefox?
  191. # [13:43] <Marcos> I think they only use 1 lang, but they let the server do that magic
  192. # [13:43] <JereK> But they could have multiple tags, with q values and all...
  193. # [13:43] <Marcos> right... I don't think anyone actually uses that
  194. # [13:44] <Marcos> I would be EXTREMELY surprised if anyone actually processed that correctly
  195. # [13:44] <JereK> Firefox: Preferences, Content, Languages. I at least have both en-us and en there as defaults, in that order. Would have to look at the headers.
  196. # [13:45] <Marcos> I've got a debugging proxy
  197. # [13:45] <Marcos> I'll see what happens when I contact google
  198. # [13:45] <Marcos> one sec... firing it up
  199. # [13:45] <JereK> xhaus.com/headers will do. Mine says: Accept-Language: en-us,en;q=0.5
  200. # [13:45] <Marcos> ok
  201. # [13:46] <Marcos> Ok, so they get sent
  202. # [13:46] * Marcos has surprised look on face :)
  203. # [13:46] <JereK> Sent, if not always observed by the server. I knew that, I wasn't surprised. :-)
  204. # [13:47] <JereK> No normalization there, then.
  205. # [13:47] <Marcos> ok, so do we take them as they are, or do we combine them and dump any redundant tags?
  206. # [13:47] <JereK> I wouldn't go clomping on them, but use as is.
  207. # [13:48] <JereK> Who knows which tags are redundant anyway?
  208. # [13:48] <Marcos> yeah, clumping them together seems complicated.
  209. # [13:49] <Marcos> ok, take them as is. The side effect is that you end up searching for the same thing twice
  210. # [13:49] <Marcos> with Lookup, you are going to search for "en-us" then "en" and then "en" again
  211. # [13:49] <JereK> Except if you rely on the list to contain all meaningful tags, so you don't need to process subtags...
  212. # [13:49] <Marcos> I guess a smart implementation would keep track of what it's searched for already
  213. # [13:50] <Marcos> so, implementation detail
  214. # [13:50] <JereK> Is lookup the simplest thing in BCP47 for this? And how big is the hit? And yeah, for the same resource, the impl should know.
  215. # [13:50] <Marcos> I think Lookup is the simplest... if you can call it that :)
  216. # [13:51] * Joins: tlr (tlr@128.30.52.30)
  217. # [13:51] <Marcos> at least you are never going to get folders with "*" so at least there is no need to worry about those
  218. # [13:51] <Marcos> aside from that, it's pretty straight forward I think
  219. # [13:52] <JereK> So back to the example, if you did look for a zh-Hans resource and didn't find it, you'd go searching for the zh one, but not move to the next tag on the UA list yet.
  220. # [13:53] <Marcos> right
  221. # [13:53] <Marcos> so, looking at step 5
  222. # [13:53] <JereK> You'd exhaust the search, all the way to the root. So why would you ever need more than one tag from the UA list? That's what was nagging me.
  223. # [13:53] <JereK> s/one tag/the first tag/
  224. # [13:54] <Marcos> (me thinking that if we get this right, we don't need step 5!)
  225. # [13:54] <Marcos> and step 5 becomes a "Rule for finding localized files"
  226. # [13:55] <Marcos> or something like that
  227. # [13:55] <JereK> That's plausible. Except the step is a runtime step.
  228. # [13:55] <arve> hm, heycam around?
  229. # [13:55] <Marcos> well, we use it in the configuration document (Step 7) to verify that files exist in the package
  230. # [13:56] <JereK> You mean files referred to from the config file?
  231. # [13:57] <Marcos> right
  232. # [13:57] <Marcos> yes
  233. # [13:57] <Marcos> like <icon src="someFile" />
  234. # [13:58] <Marcos> what the UA goes searching for some file, it puts in the virtual Accept-header: [ua-lang-list]
  235. # [13:58] <Marcos> and the UA does it's magic to find the file
  236. # [13:58] <Marcos> I like that. It makes good sense
  237. # [13:59] <Marcos> So, pretend step 5 is a Rule for Finding Localized Files.
  238. # [14:00] <JereK> The concept of base folder goes away.
  239. # [14:00] <Marcos> right! which is a great thing.
  240. # [14:01] <heycam> hi arve
  241. # [14:01] <Marcos> ... I hope :)
  242. # [14:01] <JereK> Well it is, since at runtime you only need a language tag to look for a resource. Because locale is per resource, in this new model.
  243. # [14:02] <Marcos> exactly.
  244. # [14:02] <Marcos> so Lets modify Step 5 and make it into a rule
  245. # [14:02] <Marcos> starting from 1. If the ua-language list is the string 'empty', or null, or the string 'i-default', or contains a string with a single '*', or a string that is a sequence of '*' characters (e.g. '*****'),
  246. # [14:03] <Marcos> ^^ applies to the formulation of the ua-language-list
  247. # [14:03] <Marcos> So!
  248. # [14:03] <Marcos> "Within a user agent, the user agent's locale must be represented by one or more language tags, in lowercase form, and placed in the ua-language list. The first item must represent the user's preferred language range, followed by the next most preferred language range and so forth. Each language range must match the language-range production in [BCP47]. "
  249. # [14:04] <JereK> That's OK. It could be used as is by the resource lookup.
  250. # [14:06] <JereK> The base-folders production just became redundant.
  251. # [14:06] <Marcos> I think we should drop that line (1). And it gets used when the UA generates the ua-language-list. That is, the UA must deal with 'empty', or null, or the string 'i-default', etc. appropriately.
  252. # [14:07] <Marcos> so. from "2. For each range in the ua-language list:"
  253. # [14:07] <JereK> So we're making an assumption of the validity of the ua-language-list?
  254. # [14:08] <Marcos> I think the UA should "clean" the language list.
  255. # [14:08] <arve> heycam: what's the status of "Implements" in WebIDL?
  256. # [14:08] <JereK> If so, then the same holds for algorithm steps 2a, 2b and 2c.
  257. # [14:09] <arve> I see it's a comment in the spec, and for internal stuff, I'll be assuming it gets in
  258. # [14:09] <arve> I also think I'd like to see ImplementedOnAs
  259. # [14:10] <arve> [ImplementedOnAs=Foo,bar]
  260. # [14:10] <JereK> The stuff about things starting with 'locale/' could also go away.
  261. # [14:10] <Marcos> right, JereK, so when the laguage list is derived from the OS, steps 2a, 2b and 2c are used
  262. # [14:10] <arve> so that if I want to say that interface CatFeeder should be implenmented on House as "feeder", I could
  263. # [14:11] <Marcos> I think we should keep locales/ because it makes it cleaner for authors and does give us an optimization point
  264. # [14:11] <JereK> Marcos, if base-folders goes away and widget-locale is just ua-language-list, then what's it for?
  265. # [14:12] <Marcos> I guess so when you do look for localized stuff, you only ever need to look in locales/ or at the root
  266. # [14:12] <Marcos> and it was to protect authors so that the UA does not go searching in /en/ by accident
  267. # [14:13] <JereK> Exactly! And you never put any 'locales/whatever' path prefixes in your URIs.
  268. # [14:13] <Marcos> right
  269. # [14:13] <Marcos> that is automatically resolved (unless you use an absolute path)
  270. # [14:13] <JereK> Right. But does this apply to widget: URIs only then?
  271. # [14:14] <JereK> And is a relative URI always considered a widget: URI?
  272. # [14:14] <Marcos> yes. they both resolve to an absolute widget://
  273. # [14:14] <JereK> Cool, then we're close to getting this nailed down.
  274. # [14:15] <heycam> arve, yeah i haven't added the text for [Implements] yet
  275. # [14:15] <heycam> but i think it makes sense to
  276. # [14:15] <Marcos> Ok, so now I have
  277. # [14:15] <heycam> don't always want to just inherit from that interface
  278. # [14:16] <heycam> what'd [ImplementedOnAs] do?
  279. # [14:16] <arve> it most definitely does, because I don't control the DOM3 specs, and can't add "ImplementedOn=Foo" to their document because I want to use it
  280. # [14:16] <Marcos> When generating the ua-language list list, a user agent must validate all ranges. The ua-language list must be populated with only valid language subtags that are well-formed, as defined in [BCP47], which can help with canonicalization and matching obsolete and grandfathered subtags with a "preferred value". For each range in the ua-language list list:
  281. # [14:16] <arve> heycam: the use-case here is for instance one of the Widget interface
  282. # [14:16] <arve> I want to have some means of saying that the Widget interface is implemented on the Window object, as a property called "widget"
  283. # [14:16] <Marcos> 1. If this range begins with the subtag '*' (e.g. "*-US"), then skip this range and, skipping all the steps below, repeat number 2 of this algorithm.
  284. # [14:17] <heycam> arve, what in particular do you want to say [ImplementedOn] for but can't (since that'd edit the dom3 specs)?
  285. # [14:17] <Marcos> ah crap
  286. # [14:17] <heycam> arve, oh
  287. # [14:17] <arve> heycam: in the specific case of Widget's we've worked around it by saying that it's implemented as a 'widget' property on whatever is the "Global" object
  288. # [14:17] <heycam> you don't want to define, say, interface WindowWidget { readonly attribute Widget widget; } ?
  289. # [14:18] <arve> heycam: that works only by convention
  290. # [14:18] <heycam> in fact, [ImplementedOn=Window] interface WindowWidget { ... }
  291. # [14:18] <Marcos> JereK: I'm trying to write how to clean up the language list
  292. # [14:18] <arve> heycam: yes, but what is the attribute name used in that case?
  293. # [14:18] <heycam> "widget"
  294. # [14:18] <heycam> since that's the name of the attribute there
  295. # [14:19] <JereK> Marcos, I'd say that algorithm steps 2d and 2e can go away too. Or not away, but somewhere else.
  296. # [14:19] <heycam> [ImplementedOn=Window] interface WindowWidget { readonly attribute Widget widget; }
  297. # [14:19] <JereK> Sorry, I meant steps 2a, 2b and 2c. Steps 2d and 2e can go.
  298. # [14:19] <Marcos> Jerek, I've moved them.
  299. # [14:19] <Marcos> Right.
  300. # [14:19] <arve> heycam: yeah, seems to work
  301. # [14:19] <Marcos> Lets move on from there
  302. # [14:20] <JereK> Basically the whole algorithm is gone now. :-)
  303. # [14:20] <heycam> arve, can you instantiate the problem that you need [ImplementedOn] for to the concrete problem? which interface do you want implemented on which objects?
  304. # [14:20] <Marcos> ok, JereK, lets make sure... because we still need to define the negotiation.
  305. # [14:20] <Marcos> I'm at "For each file entry in the widget package whose file name field begins with the string 'locales/"
  306. # [14:21] <arve> heycam: no, on reviewing, I think you're right wrt to your solution
  307. # [14:21] <heycam> ok
  308. # [14:21] <Marcos> JereK:
  309. # [14:21] <Marcos> right
  310. # [14:21] <Marcos> the whole thing is garbage now :)
  311. # [14:21] * heycam goes to bed
  312. # [14:22] <arve> I think it's verbose, because I'd have to spec [ImplementedOn=Foo] interface WindowFoo { readonly attribute Bar bar; } instead of having a one-line pragma
  313. # [14:22] <heycam> mm
  314. # [14:22] <arve> but either works, because it's possible to autogenerate code from both
  315. # [14:22] <JereK> Marcos, how about this: "Widgets refer to resources inside the widget package using widget:// URIs. These URIs are resolved at runtime using the ua-language-list." That's sketchy, but a start.
  316. # [14:22] <Marcos> JereK: ok, that leaves us with no step 5.
  317. # [14:23] <JereK> Marcos: right, what I just wrote would go somewhere else. Maybe say: "Step 5. There is no Step 5." :-)
  318. # [14:24] <Marcos> ehehe... "take a break... grab a coffee... continue to step 6"
  319. # [14:24] * tlr is now known as tlr-bbiab
  320. # [14:24] <arve> Oh, break sounded like a good idea
  321. # [14:24] <arve> heycam: thanks
  322. # [14:25] <JereK> Marcos, continued: "The widget engine looks for a resource in a path of the form 'locales/' + language-tag. If not found, it successively removes the last subtag and tries again."
  323. # [14:25] <JereK> "If the language tag is exhausted, but a match is not found, the engine looks for the resource at the root of the widget package."
  324. # [14:26] <Marcos> JereK: going to take a quick break. BB in 3 mins
  325. # [14:26] <JereK> Right, I'll do the same. BRB.
  326. # [14:34] <Marcos> ok, back. I think this can go into the "processable file" definition
  327. # [14:35] <JereK> What I don't get is, if we exhaust the tag, when do we ever move to the next one?
  328. # [14:35] <Marcos> A processable file is a file that:
  329. # [14:35] <Marcos> *exists within the said widget package,
  330. # [14:35] <Marcos> *is a usable file entry,
  331. # [14:35] <Marcos> *is of a media type supported by the user agent, determined applying either the rules for identifying the media type of an image or the rules for identifying the media type of a file. Which rule needs to be applied is given when the term is used.
  332. # [14:35] <Marcos> to determine if the file exists
  333. # [14:36] <Marcos> :
  334. # [14:36] <Marcos> The widget engine looks for a resource in a path of the form 'locales/' + language-tag. If not found, it successively removes the last subtag and tries again.
  335. # [14:36] <JereK> Note: need a definition of language-tag there.
  336. # [14:37] <Marcos> language tag is defined else where and references BCP47
  337. # [14:37] <JereK> No I mean in this context: that it's the currently processed element on the ua-language-list. So maybe language-tag isn't good to use there.
  338. # [14:38] <Marcos> right
  339. # [14:38] * JereK quickly gets a cup of coffee
  340. # [14:41] <JereK> So, does the BCP47 lookup say that the tag must be exhausted? Or should we just move on to the next complete tag if something is not found?
  341. # [14:42] <Marcos> I think we need to exhaust the tag
  342. # [14:43] <Marcos> I guess that is the whole point of having the tags in the first place
  343. # [14:43] <Marcos> otherwise, then name of languages would just have been used
  344. # [14:43] <JereK> BCP47 says "When performing lookup, each language range in the language priority list is considered in turn, according to priority. ... The first matching tag found, according to the user's priority, is considered the closest match and is the item returned."
  345. # [14:44] <Marcos> "the closest match" I guess meaning exhaust the tag
  346. # [14:44] <JereK> And "For example, if the language range is "de-ch", a lookup operation can produce content with the tags "de" or "de-CH" but never content with the tag "de-CH-1996"."
  347. # [14:44] <JereK> But lookup only returns a single result.
  348. # [14:45] <JereK> Ahh, there it is: "In the lookup scheme, the language range is progressively truncated from the end until a matching language tag is located."
  349. # [14:45] <Marcos> the above is what we want
  350. # [14:45] <Marcos> right
  351. # [14:45] <JereK> So WDYT: when will anything but the first tag in the list be considered?
  352. # [14:46] <Marcos> only when you don't match something. Lets re-align quickly:
  353. # [14:47] <Marcos> so UA-lang-list = {"de-ch, en-us"}
  354. # [14:47] <Marcos> widget.wgt =
  355. # [14:47] <Marcos> locales/de/file
  356. # [14:47] <Marcos> locales/us/file
  357. # [14:47] <Marcos> file
  358. # [14:48] <Marcos> so, take the first language tag
  359. # [14:48] <Marcos> try to match
  360. # [14:48] <Marcos> nothing matches
  361. # [14:48] <Marcos> remove the right most range
  362. # [14:48] <Marcos> try again
  363. # [14:48] <Marcos> locales/de matches
  364. # [14:48] <JereK> Exactly.
  365. # [14:49] <JereK> How about this: if you exhaust the tag, go to the root and still don't find the resource, you move on in the ua-language-list?
  366. # [14:50] <JereK> And only if you've walked the whole UA list and still don't find the resource, it's finally an error.
  367. # [14:50] <Marcos> exactly
  368. # [14:50] * JereK finally gets it :-)
  369. # [14:51] <Marcos> great stuff! makes everything real simple.
  370. # [14:51] <JereK> Simple is good.
  371. # [14:51] * Joins: tlr_ (tlr@194.154.216.66)
  372. # [14:52] <Marcos> Artb will be proud :)
  373. # [14:52] <Marcos> Ok, so lets spec it
  374. # [14:52] <Marcos> == Rule for Finding Files Within a Widget Package ==
  375. # [14:52] <JereK> On the fly? What is this, a Google job interview? :-)
  376. # [14:53] <Marcos> lolz... is true... they made me do that when I interviewed there
  377. # [14:53] <Marcos> the guy said to me "you are going to need a pencil... are you ready?"
  378. # [14:54] <JereK> OK, I got as far as the root a while back. Need to add: "If the resource is not found, proceed to the next ua-language-list element and repeat."
  379. # [14:54] * Quits: tlr_ (tlr@194.154.216.66) (Connection reset by peer)
  380. # [14:55] * ArtB looks up; spec'in here is bettter than using a paper knapkin :)
  381. # [14:55] <JereK> s/not found/not found in the root/
  382. # [14:56] <Marcos> 1. for each lang-tag in the ua-lang-list:
  383. # [14:56] <JereK> And: "If the ua-language-list is exhausted and the resource is not found, signal an error."
  384. # [14:57] * Joins: tlr_ (tlr@194.154.216.66)
  385. # [14:57] * Quits: tlr_ (tlr@194.154.216.66) (Connection reset by peer)
  386. # [14:58] * Joins: tlr_ (tlr@194.154.216.66)
  387. # [14:58] * Quits: tlr_ (tlr@194.154.216.66) (Client exited)
  388. # [14:58] <Marcos> ok, step a. search the widget package a file entry that matches the concatenation of the string "locales/", the lang-tag, and the name of the file
  389. # [14:58] <Marcos> b. if found, return that file entry
  390. # [14:59] <Marcos> c. if not found, remove the right most range from the lang-tag
  391. # [14:59] <Marcos> d. do "a" again
  392. # [14:59] <Marcos> woops
  393. # [15:00] <JereK> Guard for step d.: lang-tag could be already empty!
  394. # [15:00] <Marcos> right
  395. # [15:00] <Marcos> so d....
  396. # [15:00] * Joins: tlr_ (tlr@194.154.216.66)
  397. # [15:00] <Marcos> d. if lang tag is empty, search at the root of the widget package for the file
  398. # [15:01] <Marcos> e. otherwise, do a again
  399. # [15:01] <Marcos> woops, again
  400. # [15:02] <Marcos> d. ... . If the file is not at the root of the widget package, the return an error.
  401. # [15:02] <JereK> Maybe not yet... what about going to the next item in ua-language-list?
  402. # [15:02] * Joins: Lachy (Lachlan@121.217.132.251)
  403. # [15:02] <Marcos> oh yeah, good point :P
  404. # [15:03] <JereK> If this were a for loop, you'd say continue at this point :-)
  405. # [15:03] <Marcos> ok, lets try d again
  406. # [15:04] * Quits: tlr_ (tlr@194.154.216.66) (Ping timeout)
  407. # [15:05] <Marcos> d. if lang tag is empty, search at the root of the widget package for the file. If the file is not at the root of the widget package, do a again with the next lang tag in the ua-lang-list. If there are no more lang tags in the ua-lang-list, then return an error
  408. # [15:06] <JereK> Yeah, I think that's how it works. Thanks for speccing that.
  409. # [15:06] <Marcos> ok cool.
  410. # [15:06] * tlr-bbiab is now known as tlr
  411. # [15:07] <Marcos> hehe, my i18n document boils down to 5 lines to pseudo code :P
  412. # [15:07] <Marcos> of*
  413. # [15:07] <JereK> Echoes of Einstein: make it as simple etc.
  414. # [15:08] <Marcos> ok, that solves it for files
  415. # [15:08] <JereK> Can we apply this as is for config documents too?
  416. # [15:08] <Marcos> That's what I was thinking
  417. # [15:09] <Marcos> I wonder if it can be defined in terms of selectors
  418. # [15:10] <JereK> Can you elaborate on selectors?
  419. # [15:10] <Marcos> CSS selectors
  420. # [15:10] <Marcos> I guess there is no need
  421. # [15:10] <JereK> Right. In theory, yes. Impl support?
  422. # [15:11] <Marcos> yeah, I was just thinking of defining it in terms of, but not actually having to have implementation support
  423. # [15:11] <Marcos> so, for config....
  424. # [15:11] * Quits: ArtB (d0309a43@128.30.52.43) (Quit: CGI:IRC)
  425. # [15:11] <Marcos> hmmm
  426. # [15:12] * Joins: ArtB (d0309a43@128.30.52.43)
  427. # [15:12] <JereK> Once again, start from the ua-language-list.
  428. # [15:12] <Marcos> 1. for each for each lang-tag in the ua-lang-list:
  429. # [15:14] <Marcos> this one is a bit trickier, because do we "see what we have" or "search for what we need"?
  430. # [15:14] <Marcos> the current approach is written to "see what we have"
  431. # [15:14] <JereK> I'd say fInd the element whose xml:lang = lang-tag. If not found, chop off subtag and continue. So this more like search.
  432. # [15:15] <Marcos> yeah, I guess that works
  433. # [15:15] <JereK> And all of this is a block that's repeated for each element that could be localized.
  434. # [15:15] <JereK> But like I wrote you, everything needs to be saved for later.
  435. # [15:16] <Marcos> right
  436. # [15:16] <Marcos> so you collect, then process?
  437. # [15:16] <Marcos> you could collect all, then process OR collect and process as you go
  438. # [15:16] <JereK> Does it make a difference either way?
  439. # [15:16] <Marcos> I don't think so
  440. # [15:17] <Marcos> does make the algorithm a bit more tricky...
  441. # [15:17] <Marcos> lets use an example
  442. # [15:17] <JereK> Collect, then process would be easier, I guess.
  443. # [15:18] <Marcos> I think so too
  444. # [15:18] <Marcos> <widget ..> <name xml-lang="en">a</name> <name xml-lang="en-us">a</name> </widget>
  445. # [15:19] <Marcos> so, starting with ua-lang-list [en-us, en]
  446. # [15:20] <Marcos> I certainly need to keep "found order"
  447. # [15:20] <JereK> Why is that?
  448. # [15:20] <Marcos> because en-us is preferred over en
  449. # [15:21] <JereK> But the xml:lang values are unique, so it's just a hashtable with those values as keys.
  450. # [15:22] <JereK> You collect them all anyway.
  451. # [15:22] * Marcos not understanding
  452. # [15:23] <JereK> You read all the name elements, put them in a hashtable with the xml:lang value as the key. So when you process the ua-lang-list, you pick stuff from there as needed.
  453. # [15:23] <JereK> Therefore, document order and ua-lang-list order are orthogonal.
  454. # [15:23] <JereK> That's what I meant earlier. I thought I was mistaken, but I must have been wrong. :-)
  455. # [15:24] <darobin> so, friends
  456. # [15:24] <darobin> regarding <access>
  457. # [15:24] <darobin> we seem to have good discussion but no resolution
  458. # [15:24] <Marcos> darobin: hold up
  459. # [15:25] <Marcos> we are like 99% close to finishing i18n!
  460. # [15:25] <darobin> is it dropped? does it stay in? do we keep it and put the security model in a separate spec?
  461. # [15:25] <darobin> man, that's a high (five * 0.99) from me!
  462. # [15:25] <Marcos> darobin: help us work through this quickly
  463. # [15:25] <darobin> I'm all yours, what do you need?
  464. # [15:25] <Marcos> darobin: we have:
  465. # [15:25] <Marcos> <widget ..> <name xml-lang="en">a</name> <name xml-lang="en-us">a</name> </widget>
  466. # [15:26] <tlr> xml-lang?!
  467. # [15:26] <Marcos> the user agent locale is ["de, en"]
  468. # [15:26] <darobin> s/xml-lang/xml:lang/ but yeah
  469. # [15:26] <Marcos> woops
  470. # [15:26] <Marcos> right
  471. # [15:26] <tlr> that must be an xml6 idiom
  472. # [15:26] <darobin> I told you you've been talking to avk too much
  473. # [15:26] <Marcos> hehe
  474. # [15:26] <Marcos> lolz
  475. # [15:26] <Marcos> ok, so...
  476. # [15:27] <Marcos> we take the first lang-tag (de).
  477. # [15:27] <darobin> please don't tell me BCP47 doesn't define which one matches....
  478. # [15:27] <Marcos> no, that's all good
  479. # [15:27] <darobin> phew, go on
  480. # [15:27] <Marcos> we are just trying to work out the process of gathering the right elements
  481. # [15:27] <JereK> and I'm saying document order doesn't matter really
  482. # [15:28] <Marcos> JereK: right
  483. # [15:28] <darobin> I agree
  484. # [15:28] <Marcos> so, UA attempt to match all elements whose xml":"lang match "de"
  485. # [15:28] <darobin> it should only matter in the case where we have two elements with the same label
  486. # [15:28] <Marcos> as there are none, nothing happens.,
  487. # [15:28] <Marcos> so..
  488. # [15:28] <Marcos> we move onto the next lang-tag
  489. # [15:28] <Marcos> which is "en"
  490. # [15:29] <Marcos> crap. I screwed up
  491. # [15:29] <darobin> hahaha
  492. # [15:29] <darobin> en would match en, not en-us — I think
  493. # [15:29] <Marcos> make the next lang tag "en-us"
  494. # [15:29] <darobin> that matches en-us
  495. # [15:29] <Marcos> and matches en too
  496. # [15:30] <darobin> yeah but it matches en-us more
  497. # [15:30] <JereK> would match if the element for en-us wasn't found already
  498. # [15:30] <Marcos> right, so that is the "order" problem
  499. # [15:30] <darobin> if all you want is one result (ie the BCP47 "lookup") then you match the most specific
  500. # [15:30] <Marcos> ah, ok
  501. # [15:30] <Marcos> right
  502. # [15:30] <JereK> it was found because it was more specific, not because it came first in the document
  503. # [15:30] <darobin> and document order doesn't come into play
  504. # [15:30] <Marcos> hang, JereK, I searched the whole document. I didn't search specifically for <name>
  505. # [15:31] <JereK> still, it's per element
  506. # [15:31] <Marcos> ok.
  507. # [15:31] <darobin> if however your UA language tag had been "en", it would match "en" over "en-us" but not because of document order, simply because if the user asked for generic English, they shouldn't get some badly spelt jargon instead
  508. # [15:32] <Marcos> right
  509. # [15:32] <JereK> right, even if your UA list was "en,en-us"
  510. # [15:32] <Marcos> en will never return en-us, etc
  511. # [15:32] <darobin> right
  512. # [15:32] <JereK> right
  513. # [15:32] <JereK> two rights don't make a wrong
  514. # [15:32] <darobin> wait, en should return en-us if there is only en-us in the document, no?
  515. # [15:33] <JereK> I don't think so
  516. # [15:33] <Marcos> no
  517. # [15:33] <Marcos> it should not
  518. # [15:33] <darobin> mmm, no you're right, that would lead to madness
  519. # [15:33] <Marcos> it's the "sparta" rule
  520. # [15:33] * JereK wonders what that is
  521. # [15:34] * Marcos notes no one laughs at his 300 (the movie) reference
  522. # [15:34] * darobin changes topic to 'under sparta rule'
  523. # [15:34] * darobin laughed
  524. # [15:34] * JereK thought of Animal House
  525. # [15:34] * darobin throws Marcos into a bottomless pit
  526. # [15:35] <Marcos> ok, so I've searched for *[xml:lang=en-us]
  527. # [15:35] <Marcos> I get back a nodelist
  528. # [15:35] <darobin> anyway, so to return to the subject, what about <widget ...> <name xml:lang="en">a</name> <name xml:lang="en">b</name> </widget>
  529. # [15:35] <JereK> can't happen because xml:lang values are unique; how to enforce it, well...
  530. # [15:36] <darobin> JereK: it can happen, I just made it happen :)
  531. # [15:36] <JereK> that's document order at play, then
  532. # [15:36] <darobin> exactly
  533. # [15:36] <darobin> we just need to say first or last in document order
  534. # [15:36] <Marcos> right, the spec says you ignore the second
  535. # [15:36] <darobin> right
  536. # [15:36] <darobin> all good
  537. # [15:36] <darobin> does this close the remaining 1%?
  538. # [15:37] <JereK> so in case you have more than one instance of the same elem with the same xml:lang value, you ignore all but the first
  539. # [15:37] <darobin> yup
  540. # [15:37] <Marcos> Ok, I've searched for *[xml:lang=en-us] and I have a NodeList. I now search for *[xml:lang=en] and get a second node list,
  541. # [15:37] <Marcos> and I search for * but not with [xml:lang] (unlocalized)
  542. # [15:38] <Marcos> so I have n NodeLists + 1
  543. # [15:38] <Marcos> the first is the most preferred, the last is the least preferred
  544. # [15:39] <Marcos> so I start trolling
  545. # [15:39] * darobin notes that those selectors wouldn't exactly look like that, but gets the idea
  546. # [15:39] <Marcos> I know, but I could not be bothered looking them up
  547. # [15:39] <Marcos> anyway, you get the idea, so all is good
  548. # [15:39] <Marcos> is the above a good way of doing things?
  549. # [15:40] <Marcos> for each nodelist in the collected nodelists:
  550. # [15:40] <Marcos> if the element is <name> then use it, and mark "name" as used.
  551. # [15:40] <darobin> implementation-wise I wouldn't do it that way, and I don't think it should be specified based on selectors and DOM manipulation because then you have to actually get it right :) — but the idea is sound
  552. # [15:41] <JereK> present though it may be)
  553. # [15:41] <JereK> damn, this Web IRC client clears the line on a parenthesis, sorry
  554. # [15:41] <Marcos> I'm just trying to implement in my head.
  555. # [15:41] <darobin> heh
  556. # [15:41] <JereK> I was saying that I would do it per element, as all of them don't have a meaningful xml:lang, present though it may be
  557. # [15:41] <Marcos> NO ONE PUT IN ANY INFINITE LOOPS OR I WILL CRASH!
  558. # [15:42] * JereK makes a mental note not to use parentheses
  559. # [15:43] <Marcos> I guess it could be done per element
  560. # [15:43] <JereK> so for each localizable element you have a dictionary where keys are xml:lang values
  561. # [15:43] <darobin> Marcos: so, plugging my keyboard into your head
  562. # [15:43] <darobin> say you want a name
  563. # [15:43] <darobin> first, get /w:widget/w:name
  564. # [15:43] * Marcos dares darobin to do this with xpath
  565. # [15:44] <darobin> then for each UA lang, search for a w:name that matches, and return that when done
  566. # [15:44] <darobin> rince, etc. repeat with next element
  567. # [15:44] <Marcos> right
  568. # [15:44] <darobin> doing what with XPath? selecting elements? that's.... trivial :)
  569. # [15:44] <Marcos> I guess the other way, you don't need to run through ever possible element. Just the ones you have gathered
  570. # [15:45] <darobin> that's really an implementation detail
  571. # [15:45] <JereK> you only need to do it for name, icon, and what have you
  572. # [15:45] <Marcos> right, but it's also a "specification detail" because it depends on how it is written
  573. # [15:46] <Marcos> yes, only for the localizable elements
  574. # [15:46] <Marcos> Ok, so lets gather what we have thus far then
  575. # [15:46] <darobin> if two X elements have the same language tag, discard them all except for the first one; in the resulting list pick the one that matches the UA language list according to the BCP47 lookup algorithm
  576. # [15:46] <darobin> there, done
  577. # [15:46] <JereK> so when you've saved those elements in the dict, start going through the ua-lang-list like we defined for resources, and look for elements with those keys
  578. # [15:47] <Marcos> right
  579. # [15:47] <darobin> replace X with name, icon, description....
  580. # [15:49] <darobin> Marcos: do you have notes on the string to zip rel path thing?
  581. # [15:49] <Marcos> no
  582. # [15:49] <darobin> ok, from scratch it is then!
  583. # [15:50] * Marcos knocks on the hollow thing on top of his shoulders "It's all up here, baby"
  584. # [15:50] <darobin> heh, well if you braindump on me I'll turn it into proper prose
  585. # [15:50] <Marcos> JereK: I think we are good to go
  586. # [15:50] <Marcos> I'll spec all this up
  587. # [15:50] <darobin> I'm worried about <access> though, not sure whether we want to nuke it or if I should finish those changes
  588. # [15:50] <JereK> Marcos: glad to hear that
  589. # [15:50] <Marcos> darobin: initiating braindump
  590. # [15:51] * Marcos prepares darobin, some scary shit from my childhood may leak out!
  591. # [15:51] <JereK> I'm happy to review, although I was supposed to write parts, but I made them go away instead. Wow.
  592. # [15:51] <Marcos> JereK: thanks for your time and help!
  593. # [15:52] <JereK> Marcos: anytime. Got to go now, actually, anyway. TTYL.
  594. # [15:52] <Marcos> cya!
  595. # [15:52] <Marcos> darobin: ...so it begins...
  596. # [15:52] * Parts: JereK (c0647cda@128.30.52.43)
  597. # [15:52] <Marcos> so, you have a zip relative path.. it always looks like "path/to/file"
  598. # [15:53] <Marcos> it should never contain a "/" at the front
  599. # [15:53] <Marcos> if it does, then it's evil and something must be done.
  600. # [15:53] <darobin> yeah, sure
  601. # [15:53] <Marcos> darobin: that could mean, ignore the file entry
  602. # [15:53] <Marcos> or drop the "/"
  603. # [15:53] <darobin> I think it should mean ignore the file entry
  604. # [15:54] <darobin> because we might want / later
  605. # [15:54] <Marcos> the "/" is implied
  606. # [15:54] <Marcos> zip relative paths are composed of any characters, but the spec puts a restriction on them. However, the spec does not define error handling. I think it just saysi
  607. # [15:55] <Marcos> woops
  608. # [15:55] <Marcos> it just says "die" if you find an invalid path
  609. # [15:55] <darobin> I was wondering if we need to talk about encodings — though I think not since XML should just give us a string
  610. # [15:56] <Marcos> darobin: see "Rules for Verifying a File Entry"
  611. # [15:56] <darobin> same thing I think, characters not allowed should lead to the entry being ignored
  612. # [15:56] <Marcos> darobin: the encoding comes in any flavor! HOWEVER, we pretend that it only comes in 2
  613. # [15:56] <Marcos> CP-47 or UTF-8
  614. # [15:56] <darobin> ah, but you're talking about converting a zip-rel-path to a string
  615. # [15:57] <Marcos> as indicated by general purpose bit 11 of the local file header of a file entry
  616. # [15:57] <darobin> I'm talking about the reverse
  617. # [15:57] <darobin> yeah yeah, that I know
  618. # [15:57] <Marcos> oh...
  619. # [15:57] <Marcos> ok
  620. # [15:57] <Marcos> sorry
  621. # [15:57] <darobin> heh
  622. # [15:57] <darobin> didn't we agree that zip-rel-path2string wasn't needed? maybe I wrote it down wrong
  623. # [15:57] <Marcos> ok, a string to zip file entry is one that conforms to a zip relative path
  624. # [15:58] <Marcos> ok... lets use an example
  625. # [15:58] <darobin> right, that's what I thought, hence my puzzlement at the need for a section defining the conversion :)
  626. # [15:58] <Marcos> <content src="f/u/nººb.wgt"
  627. # [15:59] <darobin> make that content src="f/u/nººb.html"/>
  628. # [15:59] <darobin> gah
  629. # [15:59] <darobin> make that <content src="f/u/nººb.html"/>
  630. # [15:59] <Marcos> hehe, use SGML, you bum :)
  631. # [15:59] <darobin> I'm too young for SGML
  632. # [16:00] <Marcos> hhehe. Ok, we will use your so called "XML"
  633. # [16:00] <Marcos> right, so what is the value of src?
  634. # [16:00] <Marcos> is it a)
  635. # [16:00] <Marcos> a string?
  636. # [16:00] <Marcos> b. a zip relative path?
  637. # [16:00] <Marcos> c. a URI reference ?
  638. # [16:00] <darobin> I think we agreed that it's not (c)
  639. # [16:01] <darobin> conversion to URI references is a matter for another specification — this only points to content
  640. # [16:01] <Marcos> right.
  641. # [16:01] <darobin> but wait! now the L10N issue comes into play — we need it to be a URI ref so that it can point to different files depending on locale
  642. # [16:01] <Marcos> right
  643. # [16:01] <Marcos> kinda
  644. # [16:02] <Marcos> ok
  645. # [16:02] <darobin> is it okay if I just put "kinda" into the spec?
  646. # [16:02] <Marcos> ok, wait!!!
  647. # [16:02] <Marcos> Jere and I worked out the following algorithm for finding files:
  648. # [16:03] <Marcos> So, pretend the widget engine does i10n like a HTTP server
  649. # [16:03] <Marcos> 1. for each lang-tag in the ua-lang-list:
  650. # [16:03] <Marcos> a. search the widget package a file entry that matches the concatenation of the string "locales/", the lang-tag, and the name of the file.
  651. # [16:03] <Marcos> b. if found, return that file entry
  652. # [16:03] <Marcos> d. if lang tag is empty, search at the root of the widget package for the file. If the file is not at the root of the widget package, do a again with the next lang tag in the ua-lang-list. If there are no more lang tags in the ua-lang-list, then return an error
  653. # [16:03] <Marcos> e. otherwise, do a again.
  654. # [16:04] <darobin> shouldn't it apply BCP47 lookup in step (a) so that en-us matches en?
  655. # [16:04] <Marcos> so, there is no notion of "base folder" or any of that shit
  656. # [16:04] <darobin> that is lovely
  657. # [16:04] <darobin> so basically what that algo needs as input is a damn string
  658. # [16:04] <Marcos> no, bpc47 is done when we generate the ua-lang-list
  659. # [16:04] <Marcos> right
  660. # [16:04] <darobin> ah, so if ua-lang-list contains en-us you append en after it?
  661. # [16:05] <Marcos> yeah... and all the shit is all cleaned up, so you don't get any "en-*-us" nonesense
  662. # [16:05] <darobin> ie, [de, en-us, fr] —> [de, en-us, en, fr]
  663. # [16:05] <darobin> wonderful
  664. # [16:05] <Marcos> right
  665. # [16:05] <darobin> smart
  666. # [16:05] <Marcos> that's what they pay me for :P
  667. # [16:05] <darobin> so, to return to our sheep as say in French
  668. # [16:06] <darobin> I meant that for Jere, but nevermind
  669. # [16:06] * darobin ducks
  670. # [16:06] <Marcos> hehe
  671. # [16:06] <Marcos> ok, so f/u/nººb.wgt
  672. # [16:06] <darobin> so the steps for converting a string to a ZRP is 1. let zrp be the value of @src
  673. # [16:07] <darobin> and that's it :)
  674. # [16:07] <Marcos> right, now, zip-rel-path to URI
  675. # [16:07] <Marcos> wait
  676. # [16:08] <Marcos> um..
  677. # [16:08] <Marcos> brain is throwing unknown error
  678. # [16:08] <darobin> I think you now see what I'm struggling with :)
  679. # [16:09] <darobin> it seems that the "Rules for converting a string to a zip relative path" is actually useless, but something tells me it needs to be done
  680. # [16:09] <Marcos> yeah
  681. # [16:09] <Marcos> ...but why
  682. # [16:09] <Marcos> what are we trying to solve?
  683. # [16:11] <Marcos> ok, so, string to zip rel path
  684. # [16:11] <Marcos> take the string, which is UTF8
  685. # [16:11] <Marcos> ok, here we go. The zip contains both UTF8 and CP437 file names
  686. # [16:12] <Marcos> now you are fracked.
  687. # [16:12] <Marcos> better example
  688. # [16:12] * Quits: arve (arve@213.236.208.22) (Quit: Ex-Chat)
  689. # [16:12] <Marcos> <content src="mañana.html"/>
  690. # [16:13] <Marcos> ok, so
  691. # [16:14] <Marcos> you still with me?
  692. # [16:14] <Marcos> ñ in CP437 =
  693. # [16:14] <Marcos> F1
  694. # [16:14] <Marcos> ñ in UTF-8 =
  695. # [16:15] <darobin> yes I'm here
  696. # [16:15] <darobin> I see what you mean, but I think that's moot
  697. # [16:16] <darobin> the encoding of ZRPs is known, so they can readily be converted into strings
  698. # [16:16] <darobin> then strings can be compared together — you don't need to convert your string into whatever encoding the Zip used and use that to look things up in its table
  699. # [16:16] <Marcos> no, how do I find mañana.html?
  700. # [16:16] <darobin> the zip file is opened
  701. # [16:17] <darobin> the encoding of its paths is known
  702. # [16:17] <Marcos> so what, I have mañana.html (CP47) and mañana.html (UTF8)
  703. # [16:17] <Marcos> right
  704. # [16:17] <darobin> you say you can have two files called mañana.html in the same zip?
  705. # [16:17] <Marcos> sure, because of i18n
  706. # [16:18] <darobin> no, I mean with the same *zip path*
  707. # [16:18] <Marcos> theoretically you could, because the bytes don't match
  708. # [16:18] <Marcos> mañana.html (cp47) is not the same as mañana.html UTF8
  709. # [16:18] <darobin> isn't the path encoding for the entire archive rather than for each entry?
  710. # [16:18] <Marcos> no, it's per file entry!!!
  711. # [16:18] <Marcos> AHHHHHH!!!!
  712. # [16:18] <darobin> ah, well, that's easy we can handle that
  713. # [16:19] * Marcos likes darobin nonchalant attitude
  714. # [16:19] <darobin> so, for each entry you decode it according to its encoding
  715. # [16:19] * Joins: aroben (aroben@71.58.77.15)
  716. # [16:19] <darobin> if you already have that entry in your table, discard it
  717. # [16:19] <darobin> there, done
  718. # [16:19] <darobin> easy
  719. # [16:20] <Marcos> right, so this assumes a table
  720. # [16:20] <darobin> you create one :)
  721. # [16:20] <Marcos> ok, but, I wanted mañana.html (cp47), but the string from the UTF-8 config.xml is in UTF-8
  722. # [16:21] <Marcos> does that matter?
  723. # [16:21] * Quits: tlr (tlr@128.30.52.30) (Quit: tlr)
  724. # [16:21] <Marcos> you see what I'm getting at? you need to convert your strings, no?
  725. # [16:21] <darobin> the original encoding of the strings doesn't matter — you compare internal representations
  726. # [16:22] <Marcos> I think it does matter. It needs to be made explicit because this is the biggest interop problem in zip.
  727. # [16:23] <darobin> all that needs to be made explicit is what you do if you have two entries in a zip archive that resolve to the same name
  728. # [16:24] <Marcos> no, forget that. Just take the simple case I presented. I have /mañana.html (CP437) and in the config I have mañana.html (UTF8)
  729. # [16:24] <darobin> I would very much like to meet the morons who made this possible
  730. # [16:24] <darobin> the encoding DOES. NOT. MATTER.
  731. # [16:24] <darobin> say your internal representation for strings is UTF-16
  732. # [16:25] <darobin> you read the zip, build an internal table by converting CP437 to utf16
  733. # [16:25] <Marcos> yes, then you are cool
  734. # [16:25] <darobin> you read the config.xml, build and internal representation by converting utf8 to utf16
  735. # [16:25] <darobin> now you can compare the two
  736. # [16:25] <Marcos> right, that is what needs to be made clear in the spec
  737. # [16:25] <darobin> so long as we say in what encodings things are, we don't need to tell developers that they should compare strings
  738. # [16:26] <Marcos> right, but all implementations I've tested on don't do what you said
  739. # [16:26] <darobin> you want to put "strings should be compared based on character values, not on the byte values of their original encodings"?
  740. # [16:26] <darobin> implementations of what? zip?
  741. # [16:26] <Marcos> no, I want to do what you said:
  742. # [16:26] * Joins: tlr (tlr@128.30.52.30)
  743. # [16:27] <Marcos> implementations of widgets engines and of zip
  744. # [16:27] <Marcos> http://datadriven.com.au/2008/12/08/zip-files-and-encoding-i-hate-you/
  745. # [16:27] <darobin> gee, you'll use any excuse to get some extra hits on your blog
  746. # [16:27] <darobin> :-D
  747. # [16:27] <Marcos> hehe
  748. # [16:28] <Marcos> anyway, everyone fucks this up
  749. # [16:28] <Marcos> so, we need to be clear. I know it seems simple, and it is simple to fix, but the spec needs to make this clear
  750. # [16:29] <darobin> I think this is a different issue, but I agree that it should be clarified
  751. # [16:29] <Marcos> ok
  752. # [16:29] <darobin> I'm not sure how to phrase it other than "implementation MUST follow the Zip spec, dammit you morons!"
  753. # [16:29] <Marcos> darobin: agreed, it's slightly different... kinda related.
  754. # [16:30] <Marcos> We just need to say that all file names MUST be converted to some default encoding (UTF-16)
  755. # [16:30] <darobin> the problem you describe in that post is that implementations do all sorts of crap in the file field — if they didn't, or if that crap were clearly marked with the right encoding, then we'd be safe
  756. # [16:30] <darobin> that won't solve your problem
  757. # [16:31] <Marcos> right
  758. # [16:31] <darobin> and we shouldn't say anything like that — some languages may implement strings using a variety of encodings and only convert when needed
  759. # [16:32] <darobin> the problem you describe is that zip implementations put crap into the fields — no amount of converting to an internal representation is going to help if you don't know what encoding you're getting in
  760. # [16:32] <darobin> Crap In Crap Out
  761. # [16:32] <Marcos> right
  762. # [16:32] <Marcos> having acquired darobin hit on my blog, we can now forget about my blog entry...
  763. # [16:33] <Marcos> ok, we can't solve the problem on my blog till everyone implements zip correctly. I have come to accept that...
  764. # [16:34] <Marcos> ok, so what you said before about UTF-16 made sense
  765. # [16:34] <tlr> +1 to Brian
  766. # [16:34] <darobin> so, now that that's clear, I'm not sure what we're supposed to put in the spec :)
  767. # [16:34] <Marcos> tell 'em to make that mapping that you said before
  768. # [16:35] <Marcos> all the file names in the package (cp437|utf8) - > UTF16 or whatever
  769. # [16:35] <darobin> so, to sum up: Rules for converting a string to a zip relative path is dropped
  770. # [16:35] <Marcos> right
  771. # [16:36] <Marcos> but we need "A user agent MUST represent zip-rel-paths as UTF-16"
  772. # [16:36] <Marcos> or something
  773. # [16:37] <darobin> and I find somewhere in the spec to add "The name of the files as described by the Zip archive must be decoded and compared as strings, not using the bytes from the Zip"
  774. # [16:37] <Marcos> right, make it more clear than that. e.g. "as a DOMString" or something
  775. # [16:37] <darobin> where should I put that? in "Zip Archive"
  776. # [16:38] <darobin> I would be really cautious about that
  777. # [16:38] <Marcos> ok
  778. # [16:38] <darobin> I think that stating that they should be converted to strings is enough, after that implementations may do smart things to compare strings faster
  779. # [16:38] <Marcos> but "compared as strings" does not mean much.
  780. # [16:38] <Marcos> ok, true
  781. # [16:39] <Marcos> no need for all the dom baggage
  782. # [16:39] <darobin> "the name of the file entry is that which is present in the Zip archive decoded using the correct encoding"
  783. # [16:39] <darobin> can I use CVS for those edits or does that scare you :)
  784. # [16:40] <Marcos> which version do you have?
  785. # [16:40] <darobin> of CVS?
  786. # [16:40] <Marcos> (of the doc) yeah, screw it. lets do this merge business
  787. # [16:41] <Marcos> darobin: have you done any work on the spec today?
  788. # [16:41] <darobin> fuck, there are conflicts!
  789. # [16:41] <darobin> I haven't touched the document yet
  790. # [16:41] <Marcos> ok
  791. # [16:41] <Marcos> let me check in
  792. # [16:42] <Marcos> ok
  793. # [16:42] <Marcos> latest is up
  794. # [16:42] <Marcos> merging should be easier now
  795. # [16:43] <Marcos> should we do a test merge?
  796. # [16:44] <Marcos> I added
  797. # [16:44] <Marcos> <h3>Step 5 Take a deep breath</h3>
  798. # [16:44] <Marcos> <p>Grab a kit kat.</p>
  799. # [16:44] <Marcos> you add something
  800. # [16:45] <darobin> I've committed a change
  801. # [16:45] <Marcos> ok
  802. # [16:45] <darobin> but not on your version with a kit kat :)
  803. # [16:45] <darobin> which I assume is local
  804. # [16:46] <darobin> conflicts normally only happen when you make overlapping changes
  805. # [16:46] <darobin> so committing/updating often tends to help
  806. # [16:46] <darobin> that, and communicating
  807. # [16:47] <Marcos> ok, I just merged
  808. # [16:47] <Marcos> what did you add?
  809. # [16:50] <Marcos> oh no! the document is all screwed up! and the server is refusing to fix it! all versions seem to be corrupt!
  810. # [16:50] <Marcos> jokes
  811. # [16:54] <darobin> hehe
  812. # [16:54] <darobin> I got your kit kat version, and it merged fine
  813. # [16:54] <darobin> now I've added the encoding of file fields stuff
  814. # [16:54] <darobin> (and removed the kit kat)
  815. # [16:55] <darobin> "Note that throughout this specification, manipulations on Zip relative paths must be performed on the string obtained by decoding the file name field using the appropriate encoding, and not on the bytes initially stored in the archive. "
  816. # [16:55] <darobin> which led me to note that we skip from Step 4 to Step 6 :)
  817. # [17:01] <darobin> Marcos: so you can close items #3 and #4
  818. # [17:02] <darobin> all I have left now is <access>
  819. # [17:02] <darobin> what I'll do is that I'll make the small fixes that are agreed to
  820. # [17:02] <darobin> then we can see about killing it
  821. # [17:14] <darobin> Marcos?
  822. # [17:15] <Marcos> darobin: went to get food
  823. # [17:15] <darobin> np
  824. # [17:15] * Marcos catches up
  825. # [17:15] <darobin> in the processing section, there's a lot of stuff and access's @network attribute
  826. # [17:15] <darobin> I'm guessing that old stuff?
  827. # [17:16] <Marcos> yes, that's old
  828. # [17:16] <Marcos> I'm working on that section ATM
  829. # [17:16] <darobin> ah ok
  830. # [17:16] <darobin> I let you fix then?
  831. # [17:16] <Marcos> yes please
  832. # [17:16] <darobin> ok, good for me
  833. # [17:17] <darobin> so you're handling http://www.w3.org/mid/4A060771.5030008@gmail.com I guess
  834. # [17:20] * Marcos takes a looksy
  835. # [17:20] <Marcos> yes
  836. # [17:20] <Marcos> Will take care of that too
  837. # [17:21] <Marcos> Awesome, that only leaves 5, 8 and 16
  838. # [17:22] * Marcos writes into IRC about playing his air guitar, while in reality he does no such thing...
  839. # [17:23] * Marcos notes that authoring requirements are intermixed with element definitions
  840. # [17:23] <Marcos> darobin: should we fix that?
  841. # [17:23] <Marcos> Attributes
  842. # [17:23] <Marcos> id
  843. # [17:23] <Marcos> Optional. A valid URI that denotes an identifier for the widget.
  844. # [17:24] <Marcos> "Optional." here means that it is optional for authors to use that element
  845. # [17:24] <Marcos> not that it is optional to implement
  846. # [17:24] <Marcos> I think we should remove all those "OPTIONAL" and "REQUIRED" from there
  847. # [17:25] <Marcos> and make a little "Authoring Guidelines:" section under each element defintion
  848. # [17:26] <darobin> I thought it was clear
  849. # [17:26] <darobin> if the attribute is present, then the UA must do something about it
  850. # [17:26] <Marcos> and then say, "it is optional for authors to use the following attributes: x, y, z. It is required that authors use the following attributes..."
  851. # [17:26] <darobin> (in A+E at least)
  852. # [17:26] <darobin> I think that's extra work with little actual return
  853. # [17:27] <Marcos> right
  854. # [17:27] <Marcos> leave it for second LC
  855. # [17:27] <Marcos> it's only like 20 mins of work...
  856. # [17:28] <Marcos> as I'm obsessive about such things, I won't sleep till it's done. But will refrain from doing it till we publish
  857. # [17:29] <Marcos> ok, ping me if you need anything
  858. # [17:30] <darobin> will do
  859. # [17:31] <Marcos> darobin: about access processing rules, you want me to write those ?
  860. # [17:32] <Marcos> I.e., if there is more than one access element, ignore it.. etc
  861. # [17:32] <Marcos> and how to derive the values?
  862. # [17:32] <Marcos> or are you going to do that?
  863. # [17:32] <darobin> there can be more than one access element
  864. # [17:32] <Marcos> right, of course
  865. # [17:32] <darobin> well as you like, that's why I was asking about the processing section
  866. # [17:32] <Marcos> bad example :P
  867. # [17:32] <Marcos> sorry, I missunderstood
  868. # [17:33] <darobin> there's oooooold stuff in there
  869. # [17:33] <Marcos> I just trashed it
  870. # [17:34] <Marcos> ok, I can write that part
  871. # [17:34] <Marcos> Seems easy enough
  872. # [17:34] <Marcos> we are getting rid of required, right?
  873. # [17:34] <Marcos> darobin:
  874. # [17:35] <Marcos> ^^
  875. # [17:35] <darobin> I've already dumped it my friend
  876. # [17:36] <darobin> update your copy, there's a whole new <access>
  877. # [17:36] <darobin> it just needs processing rules in the processing section
  878. # [17:38] <Marcos> awesomeness
  879. # [17:46] * Quits: smaug (chatzilla@82.181.149.131) (Quit: gecko update)
  880. # [17:52] * Joins: wellington (chatzilla@201.43.142.174)
  881. # [17:55] <Marcos> darobin, i think you were right in saying that access@uri should really be @pattern
  882. # [17:55] * Quits: wellington (chatzilla@201.43.142.174) (Quit: ChatZilla 0.9.84 [Firefox 3.0.10/2009042513])
  883. # [17:55] <darobin> no I wasn't, I changed my mind :)
  884. # [17:56] <darobin> it contains URI or *, so it's not really a pattern
  885. # [17:56] <darobin> it used to be — but not since we have @subdomain
  886. # [17:58] * Joins: arve (arve@84.202.133.45)
  887. # [18:00] <darobin> Marcos: as far as I can tell, my P+C actions are done
  888. # [18:00] <Marcos> darobin: nice one
  889. # [18:00] <darobin> that is, unless we actually come to a resolution on <access>
  890. # [18:04] * darobin dumps extra work onto an unsuspecting Arun
  891. # [18:05] <darobin> Marcos: do you want me to do a quick editorial pass through the spec, or is it too early for that?
  892. # [18:05] <Marcos> you can check anything in green
  893. # [18:05] <Marcos> basically
  894. # [18:05] <darobin> ok
  895. # [18:29] * Joins: smaug (chatzilla@82.181.149.131)
  896. # [18:33] <darobin> Marcos: in Zip Relative Paths the authoring guideline says "Try to keep path lengths below 255 bytes." but the rest of the section talks of a 250 bytes limitation
  897. # [18:33] <Marcos> argh
  898. # [18:33] <Marcos> will change to 250
  899. # [18:33] <Marcos> darobin: are you making editorial changes as you go?
  900. # [18:33] <Marcos> or just reading?
  901. # [18:34] <darobin> making
  902. # [18:34] <Marcos> oh ok
  903. # [18:34] <darobin> I'm changing it
  904. # [18:34] <Marcos> ok, change away
  905. # [18:35] <darobin> fuck, it's raining like mad here
  906. # [18:35] <Marcos> but please keep some kind of high level record of what you are changing... the gods are angry you are changing my words!
  907. # [18:36] <tlr> darobin doesn't fear devil nor deity, but rain
  908. # [18:36] <darobin> now it's hailing big chunks of ice — that you can surely fear
  909. # [18:36] <darobin> Marcos: the changes I've been making are really basic
  910. # [18:36] <tlr> dices of ice
  911. # [18:36] <darobin> like plurals in the wrong place, repeated words, etc
  912. # [18:37] <darobin> so I'm being faithful to what you wanted to say — I'm just fixing the bugs :)
  913. # [18:37] <Marcos> no probs, that's great... I'm totally dyslexic, should have never been allowed near a spec :)
  914. # [18:37] <darobin> "One or more start files, located at the root of the widget package and/or at the root of locale folders."
  915. # [18:38] <darobin> can't they actually be anywhere using content@src
  916. # [18:38] <darobin> pretty damn fine job for a dyslexic :)
  917. # [18:38] <Marcos> right, that needs to change
  918. # [18:38] <Marcos> thanks!
  919. # [18:39] <darobin> I think in that section we can just remove ", located at the root of the widget package and/or at the root of locale folders."
  920. # [18:39] <darobin> except for signatures and the configuration doc
  921. # [18:39] <Marcos> ok
  922. # [18:45] <darobin> "If using [SVG] as an icon format, create icons that use declarative animation."
  923. # [18:46] <darobin> I'm guessing there's a missing "and you intend it to be animated"
  924. # [18:46] <Marcos> right
  925. # [18:46] <Marcos> darobin, it was meant to say that authors should not use scripted animations, etc.
  926. # [18:47] <darobin> yes, gotcha, it's just that as is it seems to say that you should do animated rather than static :)
  927. # [18:47] <Marcos> i see. certainly not what I meant
  928. # [18:47] <Marcos> ...though a hundred spinning 3d icons on my phone would look awesome and would surely impress girls at the bar
  929. # [18:48] <darobin> rofl
  930. # [18:50] <darobin> User agents must treat files in an arbitrary folder or locale folders that use the file name config.xml as an arbitrary file.
  931. # [18:50] <darobin> Note: The user agent will teat any configuration document not at the root of the widget package, or not at the root of a locale folder, as an arbitrary file.
  932. # [18:50] <darobin> dropping the Note :)
  933. # [18:50] <Marcos> right
  934. # [18:51] <darobin> "Only place configuration documents in localized folders if the content of the configuration document has been localized."
  935. # [18:51] <darobin> we killed that, right?
  936. # [18:51] <Marcos> right
  937. # [18:51] <Marcos> kill it
  938. # [18:51] <Marcos> only on cofig doc in this version
  939. # [18:57] <darobin> "A path can be either absolute, meaning that it is already resolved to the root of the widget package (e.g. "/images/bg.png") or relative, meaning that it is resolved relative to the base folder."
  940. # [18:57] <darobin> kill, right?
  941. # [18:58] <Marcos> darobin: crush, kill, destroy (in that order)
  942. # [18:59] <darobin> general consistency note: on some elements we say that xml:lang may be present, on others we say nothing
  943. # [19:00] <darobin> in truth, it can be present anywhere but may have no effect as per this spec
  944. # [19:00] <Marcos> right
  945. # [19:01] <darobin> not sure if that warrants an edit or not
  946. # [19:01] <darobin> "Localizable via xml:lang: Yes, but the value of the xml:lang attribute must be unique for any subsequent element of this type."
  947. # [19:01] <darobin> that's a CC claim, not sure about it
  948. # [19:01] <darobin> but minor issue
  949. # [19:01] <Marcos> agreed
  950. # [19:02] <Marcos> it's both a cc and authoring guideline
  951. # [19:02] <darobin> anyway, I have to leave now — I've made editorial fixes up to <name>
  952. # [19:02] <darobin> nothing huge, apart from the things discussed here it's all about typos
  953. # [19:03] <Marcos> darobin: great, thanks
  954. # [19:03] <Marcos> you checking in?
  955. # [19:03] <darobin> done
  956. # [19:03] <Marcos> ok, cool. I'll merge now
  957. # [19:03] <darobin> I'll finish my pass tomorrow morning
  958. # [19:03] <Marcos> np
  959. # [19:07] <Marcos> darobin: fuck, now it's complaining that it can't merge
  960. # [19:09] <Marcos> darobin: yt?
  961. # [19:09] <darobin> mmmm, you getting a confluct?
  962. # [19:09] <Marcos> yah
  963. # [19:09] <darobin> grep for <<<<<
  964. # [19:10] <darobin> or >>>>>
  965. # [19:10] <darobin> that'll give you the conflict boundaries
  966. # [19:10] <darobin> I only touched green sections, and at the beginning of the document
  967. # [19:10] * Quits: trackbot (trackbot@128.30.52.30) (Connection reset by peer)
  968. # [19:10] <Marcos> ah, I see
  969. # [19:14] <darobin> sorry, gotta go
  970. # [19:14] <darobin> is it a big conflict?
  971. # [19:14] <darobin> did you edit anything above <name> in the past hour or so?
  972. # [19:14] <darobin> normally there will be <<<<< ... ===== .... >>>>>
  973. # [19:14] <darobin> and what's on either side of the ==== are the two versions that can't be merged
  974. # [19:14] <Marcos> yeah, I found those
  975. # [19:15] <darobin> (there can be several of those in the document)
  976. # [19:15] <darobin> which are they?
  977. # [19:15] <Marcos> A keyword is a string that is reserved for the purpose of this specification. The value of a keyword attribute is a keyword that is one of a finite set specified in the attribute's definition (e.g. the its:dir attribute defines ltr, rtl, lro, or rlo as its only possible values). Authors must use keywords in the case given in this specification. Implementations must only perform literal comparisons on the resulting value, and must not use case =======
  978. # [19:15] <Marcos> A keyword is a string that is reserved for the purpose of this specification. The value of a keyword attribute is a keyword that is one of a finite set specified in the attribute's definition (e.g. the its:dir attribute defines ltr, rtl, lro, or rlo as its only possible values). Authors must use keywords in the case given in this specification. Implementations must only perform literal comparisons on the resulting value, and must not use case >>>>>>> 1.242 i
  979. # [19:15] <darobin> you edited that?
  980. # [19:15] <Marcos> An attribute defined as containing a valid path. A valid path is one that <<<<<<< Overview.src.html matches the path token as defined in the [URI] specification. A path can be either absolute, meaning that it is already resolved to the root of the widget package (e.g. "/images/bg.png") or relative, meaning that it is resolved relative to some base.
  981. # [19:15] <Marcos> ======= matches the path token as defined in the [URI] specification. >>>>>>> 1.242
  982. # [19:16] <Marcos> don't think so
  983. # [19:16] * Joins: trackbot (trackbot@128.30.52.30)
  984. # [19:16] <darobin> okay, for the first one my change was to move <code>defines ltr to defines <code>lrt
  985. # [19:17] <darobin> in the second one, I just killed "A path can be either..."
  986. # [19:17] <darobin> that's weird, it really shouldn't conflict unless you made a change too
  987. # [19:17] <Marcos> dunno, I told you all this merge stuff was just voodoo
  988. # [19:17] <Marcos> :)
  989. # [19:17] <darobin> so what you do now is fix those by removing the <<< >>> etc and putting in the right thing
  990. # [19:17] <Marcos> evil, evil voodoo
  991. # [19:18] <Marcos> ok, will do
  992. # [19:18] <darobin> then there's going to be a file called ".#Overview...." which you'll want to remove
  993. # [19:18] <darobin> then commit that and all should be fine
  994. # [19:18] <darobin> CVS is fucked up, I wish we used git or svn
  995. # [19:18] <Marcos> ok, is all good then :D
  996. # [19:18] <darobin> anyway, off I go!
  997. # [19:18] * Quits: darobin (darobin@82.233.247.234) (Quit: darobin)
  998. # [19:38] * Quits: sicking (chatzilla@63.245.220.241) (Quit: ChatZilla 0.9.84 [Firefox 3.5b4pre/20090422042031])
  999. # [22:08] * Quits: ArtB (d0309a43@128.30.52.43) (Quit: CGI:IRC)
  1000. # [23:03] * tlr tries to contain laughter at Arun's latest.
  1001. # [23:30] <Hixie> which list?
  1002. # [23:35] <tlr> https://twitter.com/arun/status/1787778325
  1003. # [23:36] * Quits: arve (arve@84.202.133.45) (Ping timeout)
  1004. # [23:40] <Hixie> aah
  1005. # [23:41] <Hixie> the one place i didn't think to check!
  1006. # [23:42] * Quits: tlr (tlr@128.30.52.30) (Quit: </today>)
  1007. # [23:48] * Joins: darobin (darobin@85.169.117.248)
  1008. # Session Close: Thu May 14 00:00:00 2009

The end :)