Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#!/usr/bin/env lua51
-- texpage.lua:
-- Find the page corresponding to a line in a .tex file.
--
-- Here's how this works. Most of my .tex files have "anchors", like:
--   (find-LATEX     "2010unilog-current.tex" "comparison-theorem")
--   (find-LATEXfile "2010unilog-current.aux" "comparison-theorem")
--
--   % --------------------
--   % «comparison-theorem»  (to ".comparison-theorem")
--   % (s "The comparison theorem" "comparison-theorem")
--   \myslide {The comparison theorem} {comparison-theorem}
--
-- The "\myslide" generates a block like
--
--   \newlabel{comparison-theorem}{{}{33}}
--   \@writefile{mylos}{\tocline {The comparison theorem} {33}}
--
-- in the corresponding ".aux" file, where the "33" is the page
-- number; the functions in this file do things with all that.

-- «.getauxtable»	(to "getauxtable")
-- «.gettextable»	(to "gettextable")
-- «.gettextag»		(to "gettextag")
-- «.setvars»		(to "setvars")
-- «.command-line»	(to "command-line")



-- «getauxtable»  (to ".getauxtable")
-- Process the contents of a ".aux" file (auxstuff) and return a table
-- of (tag, page) pairs.
--
auxclean1 = function (li) return (string.gsub(li, "[{}]", "")) end
auxclean2 = function (li) return string.match(li, "[^0-9]*([0-9]+)") end
getauxtable = function (auxstuff)
    local pat = "\n.newlabel(%b{})(%b{})"
    local T = {}
    for a,b in string.gmatch(auxstuff, pat) do
      local tag, page = auxclean1(a), auxclean2(b)+0
      T[tag] = page
    end
    return T
  end

-- «gettextable»  (to ".gettextable")
-- This function receives an "auxtable" (produced by the function
-- above) and the contents of a ".tex" file split into lines
-- (the "texlines") and returns a table of (linenum, tag) pairs.
--
gettextable = function (auxtable, texlines)
    local T = {}
    local pat = "^%%%s*(%b\171\187)"
    local clean = function (str) return (string.gsub(str, "[\171\187]", "")) end
    for i=1,#texlines do
      local line = texlines[i]
      local tag = string.match(line, pat) -- %<spaces>«tag»<rest>
      if tag then                         -- if this line has a «tag»
        tag = clean(tag)                  -- then remove its "«»"s;
        if auxtable[tag] then             -- if this tag has an associated page
          T[i] = tag                      -- then store its line in the table T
        end
        -- PP(i, tag, auxtable[tag])
      end
    end
    return T
  end

-- «gettextag»  (to ".gettextag")
-- Try to find the closest "anchor with an associated page"
-- on or above a given line in a ".tex" file.
--
gettextag = function (auxtable, textable, linenum)
    for i=linenum,1,-1 do
      local tag = textable[i]
      if tag then return tag, i, auxtable[tag] end
    end
  end

-- «setvars»  (to ".setvars")
-- From a texfname and a linenum set lots of global vars.
--
setvars = function (texfname_, linenum_)
    texfname, linenum = texfname_, linenum_
    dvifname = string.gsub(texfname, "%.tex$", ".dvi")
    auxfname = string.gsub(texfname, "%.tex$", ".aux")
    auxstuff = readfile(auxfname)
    auxtable = getauxtable(auxstuff)
    texlines = splitlines(readfile(texfname))
    textable = gettextable(auxtable, texlines)
    tag      = gettextag(auxtable, textable, linenum)
    page     = auxtable[tag] or 1
    PP(texfname, dvifname)
    dvicmd   = format("xdvi %s +%d", dvifname, page)
    texlink  = format("(find-fline   \"%s\" %d)", texfname, linenum)
    dvilink  = format("(find-dvipage \"%s\" %d)", dvifname, page)
  end


-- «command-line»  (to ".command-line")
-- (find-luamanualw3m "#6" "Lua Stand-alone")
-- (find-luamanualw3m "#6" "arg =")
-- (find-angg "LUA/lua50init.lua" "PP")
-- (find-sh "~/LUA/texpage.lua foo bar")
-- (find-sh "~/LUA/texpage.lua -links ~/LATEX/2010unilog-current.tex 1000")
-- (find-bgprocess "~/LUA/texpage.lua -xdvi ~/LATEX/2010unilog-current.tex 1000")
--
arg = arg or {}
if arg[1] == "-links" then
  setvars(arg[2], tonumber(arg[3]))
  print(dvilink)
  print(texlink)
elseif arg[1] == "-xdvi" then
  setvars(arg[2], tonumber(arg[3]))
  os.execute(dvicmd)
else
  print('See: (find-angg "LUA/texpage.lua" "command-line")')
  PP("arg =", arg)
end


--[[
-- (find-LATEX "2010unilog-current.tex" "equality-hofmann95")

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
ee_dofile "~/LUA/texpage.lua"
texfname = ee_expand "~/LATEX/2010unilog-current.tex"
linenum = 1000
linenum = 6700
-- setvars(texfname, linenum)

s = "{{}{5}{\\relax }{}{}}"
= string.match(s, "[^0-9]*([0-9]*)")
= auxclean2(s)


    dvifname = string.gsub(texfname, "%.tex$", ".dvi")
    auxfname = string.gsub(texfname, "%.tex$", ".aux")
    auxstuff = readfile(auxfname)
    auxtable = getauxtable(auxstuff)
    texlines = splitlines(readfile(texfname))
    textable = gettextable(auxtable, texlines)
    tag      = gettextag(auxtable, textable, linenum)
    page     = auxtable[tag] or 1
    PP(texfname, dvifname)
    dvicmd   = format("xdvi %s +%d", dvifname, page)
    texlink  = format("(find-fline   \"%s\" %d)", texfname, linenum)
    dvilink  = format("(find-dvipage \"%s\" %d)", dvifname, page)

print(tag)
print(texlink)
print(dvilink)
print(dvicmd)
os.execute(dvicmd)

--]]




-- Local Variables:
-- coding:               raw-text-unix
-- ee-anchor-format:     "«%s»"
-- End: